From 5a6bcecf8ec8af6e239cebec7c2ebb02d9c60714 Mon Sep 17 00:00:00 2001 From: Yi Su Date: Fri, 15 Jul 2022 10:18:48 -0700 Subject: [PATCH] Release of 0.4.0 (#78) Release of 0.4.0 --- AUTHORS.rst | 4 +- HISTORY.rst | 32 + docs/conf.py | 4 + docs/figures/multistage_forecast.png | Bin 0 -> 113292 bytes docs/index.rst | 1 + .../quickstart/0100_simple_forecast.py | 23 +- .../0100_changepoint_detection.py | 355 + .../0200_auto_configuration_tools.py | 285 + .../01_exploration/0300_seasonality_plots.py | 836 + .../quickstart/01_exploration/README.rst | 6 + .../02_interpretability/0100_model_summary.py | 230 + .../0200_interpretability.py | 346 + .../quickstart/02_interpretability/README.rst | 4 + .../03_benchmark/0100_grid_search.py | 312 + .../quickstart/03_benchmark/0200_benchmark.py | 459 + .../quickstart/03_benchmark/README.rst | 4 + .../0100_reconcile_forecasts.py | 664 + .../quickstart/04_postprocessing/README.rst | 4 + docs/nbpages/quickstart/README.rst | 5 +- .../templates/0100_template_overview.py | 696 + .../templates/0200_multistage_forecast.py | 480 + docs/nbpages/templates/0300_lag_forecast.py | 244 + .../templates/0400_forecast_one_by_one.py | 155 + docs/nbpages/templates/README.rst | 4 + .../tutorials/0100_forecast_tutorial.py | 28 +- docs/nbpages/tutorials/0200_monthly_data.py | 386 + docs/nbpages/tutorials/0300_weekly_data.py | 426 + docs/nbpages/tutorials/README.rst | 2 +- docs/pages/autodoc/doc.rst | 26 + docs/pages/benchmarking/benchmarking.rst | 6 +- docs/pages/changelog/changelog.rst | 75 +- docs/pages/greykite/overview.rst | 24 +- .../miscellaneous/reconcile_forecasts.rst | 4 +- .../model_components/0100_introduction.rst | 9 +- .../model_components/0300_seasonality.rst | 13 + docs/pages/model_components/0400_events.rst | 81 +- .../model_components/0500_changepoints.rst | 23 +- docs/pages/model_components/0600_custom.rst | 80 +- .../model_components/0700_regressors.rst | 31 +- docs/pages/stepbystep/0100_choose_model.rst | 88 +- .../pages/stepbystep/0200_choose_template.rst | 78 +- docs/pages/stepbystep/0300_input.rst | 10 +- docs/pages/stepbystep/0400_configuration.rst | 6 +- docs/pages/stepbystep/0500_output.rst | 2 +- .../adalasso/auto_changepoint_params.py | 369 + .../adalasso/changepoint_detector.py | 88 +- .../adalasso/changepoints_utils.py | 10 +- greykite/algo/common/col_name_utils.py | 104 +- greykite/algo/common/holiday_inferrer.py | 904 + .../algo/common/l1_quantile_regression.py | 368 + greykite/algo/common/ml_models.py | 173 +- greykite/algo/common/model_summary.py | 5 +- greykite/algo/common/seasonality_inferrer.py | 1046 + .../algo/forecast/silverkite/auto_config.py | 322 + .../constants/silverkite_component.py | 12 +- .../constants/silverkite_seasonality.py | 11 +- .../silverkite/forecast_silverkite.py | 412 +- .../silverkite/forecast_silverkite_helper.py | 48 +- .../silverkite/forecast_simple_silverkite.py | 255 +- .../uncertainty/conditional/conf_interval.py | 270 +- .../conditional/estimate_distribution.py | 88 +- .../conditional/normal_quantiles.py | 38 +- greykite/common/aggregation_function_enum.py | 41 + greykite/common/compare_two_dfs_on_index.py | 104 + greykite/common/constants.py | 112 +- greykite/common/data_loader.py | 254 +- greykite/common/evaluation.py | 4 +- .../common/features/adjust_anomalous_data.py | 47 +- greykite/common/features/normalize.py | 22 +- .../common/features/timeseries_features.py | 106 +- greykite/common/features/timeseries_impute.py | 14 +- greykite/common/features/timeseries_lags.py | 44 +- greykite/common/sphinx_plotly.py | 34 +- greykite/common/testing_utils.py | 58 +- greykite/common/time_properties.py | 4 +- greykite/common/viz/timeseries_annotate.py | 346 + .../data/daily/daily_bitcoin_transactions.csv | 4573 +++ greykite/data/hourly/hourly_electricity.csv | 26305 ++++++++++++++++ greykite/data/hourly/hourly_sf_traffic.csv | 17545 +++++++++++ greykite/data/hourly/hourly_solarpower.csv | 8221 +++++ greykite/data/hourly/hourly_windpower.csv | 8221 +++++ .../data/monthly/monthly_fred_housing.csv | 708 + .../data/monthly/monthly_sunspot_monash.csv | 2430 ++ .../framework/benchmark/benchmark_class.py | 20 +- .../framework/benchmark/data_loader_ts.py | 2 +- .../framework/input/univariate_time_series.py | 4 +- greykite/framework/pipeline/pipeline.py | 4 +- greykite/framework/pipeline/utils.py | 2 +- .../templates/auto_arima_template.py | 2 +- .../templates/auto_model_template.py | 190 + .../templates/forecast_config_defaults.py | 4 +- greykite/framework/templates/forecaster.py | 58 +- .../framework/templates/lag_based_template.py | 232 + .../framework/templates/model_templates.py | 76 +- .../templates/multistage_forecast_template.py | 571 + .../multistage_forecast_template_config.py | 396 + .../framework/templates/prophet_template.py | 10 +- .../templates/silverkite_template.py | 16 +- .../templates/simple_silverkite_template.py | 309 +- .../simple_silverkite_template_config.py | 247 +- .../utils/exploratory_data_analysis.py | 445 + .../sklearn/estimator/auto_arima_estimator.py | 10 +- .../estimator/base_forecast_estimator.py | 33 +- .../estimator/base_silverkite_estimator.py | 137 +- .../sklearn/estimator/lag_based_estimator.py | 494 + .../multistage_forecast_estimator.py | 1078 + .../sklearn/estimator/prophet_estimator.py | 22 +- .../estimator/silverkite_diagnostics.py | 432 + .../sklearn/estimator/silverkite_estimator.py | 17 +- .../estimator/simple_silverkite_estimator.py | 61 +- greykite/sklearn/estimator/testing_utils.py | 22 +- .../uncertainty/base_uncertainty_model.py | 37 +- .../quantile_regression_uncertainty_model.py | 413 + .../simple_conditional_residuals_model.py | 152 +- .../uncertainty/uncertainty_methods.py | 7 + .../adalasso/test_auto_changepoint_params.py | 336 + .../adalasso/test_changepoint_detector.py | 56 +- .../tests/algo/common/test_col_name_utils.py | 38 +- .../algo/common/test_holiday_inferrer.py | 434 + .../common/test_l1_quantile_regression.py | 157 + greykite/tests/algo/common/test_ml_models.py | 160 +- .../tests/algo/common/test_model_summary.py | 4 +- .../algo/common/test_seasonality_inferrer.py | 389 + .../forecast/silverkite/test_auto_config.py | 184 + .../silverkite/test_forecast_silverkite.py | 486 +- .../test_forecast_silverkite_helper.py | 34 + .../test_forecast_simple_silverkite.py | 159 +- .../conditional/test_conf_interval.py | 137 +- .../conditional/test_estimate_distribution.py | 111 +- .../conditional/test_normal_quantiles.py | 13 +- .../features/test_adjust_anomalous_data.py | 74 +- .../tests/common/features/test_normalize.py | 40 +- .../features/test_timeseries_features.py | 19 +- .../common/features/test_timeseries_impute.py | 26 +- .../common/features/test_timeseries_lags.py | 10 + .../common/test_aggregation_function_enum.py | 14 + .../common/test_compare_two_dfs_on_index.py | 77 + greykite/tests/common/test_data_loader.py | 113 +- greykite/tests/common/test_evaluation.py | 2 +- greykite/tests/common/test_testing_utils.py | 2 +- greykite/tests/common/test_time_properties.py | 28 +- .../common/viz/test_timeseries_annotate.py | 171 + .../benchmark/test_benchmark_class.py | 58 +- .../benchmark/test_benchmark_class_helper.py | 6 +- .../input/test_univariate_time_series.py | 36 +- .../output/test_univariate_forecast.py | 6 +- .../tests/framework/pipeline/test_pipeline.py | 47 +- .../tests/framework/pipeline/test_utils.py | 16 +- .../templates/test_auto_arima_template.py | 48 +- .../templates/test_auto_model_template.py | 244 + .../templates/test_forecast_config.py | 2 +- .../test_forecast_config_defaults.py | 4 +- .../framework/templates/test_forecaster.py | 121 +- .../templates/test_lag_based_template.py | 388 + .../templates/test_model_templates.py | 38 +- .../test_multistage_forecast_template.py | 956 + ...est_multistage_forecast_template_config.py | 255 + .../framework/templates/test_pickle_utils.py | 30 +- .../templates/test_prophet_template.py | 94 +- .../templates/test_silverkite_template.py | 108 +- .../test_simple_silverkite_template.py | 526 +- .../test_simple_silverkite_template_config.py | 4 +- .../estimator/test_auto_arima_estimator.py | 105 +- .../estimator/test_base_forecast_estimator.py | 32 +- .../test_base_silverkite_estimator.py | 313 +- .../estimator/test_lag_based_estimator.py | 764 + .../test_multistage_forecast_estimator.py | 722 + .../estimator/test_one_by_one_estimator.py | 6 +- .../estimator/test_prophet_estimator.py | 132 +- .../estimator/test_silverkite_diagnostics.py | 252 + .../estimator/test_silverkite_estimator.py | 21 +- .../test_simple_silverkite_estimator.py | 113 +- ...t_quantile_regression_uncertainty_model.py | 228 + ...test_simple_conditional_residuals_model.py | 70 +- requirements-dev.txt | 16 +- setup.py | 4 +- 176 files changed, 92696 insertions(+), 2113 deletions(-) create mode 100644 docs/figures/multistage_forecast.png create mode 100644 docs/nbpages/quickstart/01_exploration/0100_changepoint_detection.py create mode 100644 docs/nbpages/quickstart/01_exploration/0200_auto_configuration_tools.py create mode 100644 docs/nbpages/quickstart/01_exploration/0300_seasonality_plots.py create mode 100644 docs/nbpages/quickstart/01_exploration/README.rst create mode 100644 docs/nbpages/quickstart/02_interpretability/0100_model_summary.py create mode 100644 docs/nbpages/quickstart/02_interpretability/0200_interpretability.py create mode 100644 docs/nbpages/quickstart/02_interpretability/README.rst create mode 100644 docs/nbpages/quickstart/03_benchmark/0100_grid_search.py create mode 100644 docs/nbpages/quickstart/03_benchmark/0200_benchmark.py create mode 100644 docs/nbpages/quickstart/03_benchmark/README.rst create mode 100644 docs/nbpages/quickstart/04_postprocessing/0100_reconcile_forecasts.py create mode 100644 docs/nbpages/quickstart/04_postprocessing/README.rst create mode 100644 docs/nbpages/templates/0100_template_overview.py create mode 100644 docs/nbpages/templates/0200_multistage_forecast.py create mode 100644 docs/nbpages/templates/0300_lag_forecast.py create mode 100644 docs/nbpages/templates/0400_forecast_one_by_one.py create mode 100644 docs/nbpages/templates/README.rst create mode 100644 docs/nbpages/tutorials/0200_monthly_data.py create mode 100644 docs/nbpages/tutorials/0300_weekly_data.py create mode 100644 greykite/algo/changepoint/adalasso/auto_changepoint_params.py create mode 100644 greykite/algo/common/holiday_inferrer.py create mode 100644 greykite/algo/common/l1_quantile_regression.py create mode 100644 greykite/algo/common/seasonality_inferrer.py create mode 100644 greykite/algo/forecast/silverkite/auto_config.py create mode 100644 greykite/common/aggregation_function_enum.py create mode 100644 greykite/common/compare_two_dfs_on_index.py create mode 100644 greykite/common/viz/timeseries_annotate.py create mode 100644 greykite/data/daily/daily_bitcoin_transactions.csv create mode 100644 greykite/data/hourly/hourly_electricity.csv create mode 100644 greykite/data/hourly/hourly_sf_traffic.csv create mode 100644 greykite/data/hourly/hourly_solarpower.csv create mode 100644 greykite/data/hourly/hourly_windpower.csv create mode 100644 greykite/data/monthly/monthly_fred_housing.csv create mode 100644 greykite/data/monthly/monthly_sunspot_monash.csv create mode 100644 greykite/framework/templates/auto_model_template.py create mode 100644 greykite/framework/templates/lag_based_template.py create mode 100644 greykite/framework/templates/multistage_forecast_template.py create mode 100644 greykite/framework/templates/multistage_forecast_template_config.py create mode 100644 greykite/framework/utils/exploratory_data_analysis.py create mode 100644 greykite/sklearn/estimator/lag_based_estimator.py create mode 100644 greykite/sklearn/estimator/multistage_forecast_estimator.py create mode 100644 greykite/sklearn/estimator/silverkite_diagnostics.py create mode 100644 greykite/sklearn/uncertainty/quantile_regression_uncertainty_model.py create mode 100644 greykite/tests/algo/changepoint/adalasso/test_auto_changepoint_params.py create mode 100644 greykite/tests/algo/common/test_holiday_inferrer.py create mode 100644 greykite/tests/algo/common/test_l1_quantile_regression.py create mode 100644 greykite/tests/algo/common/test_seasonality_inferrer.py create mode 100644 greykite/tests/algo/forecast/silverkite/test_auto_config.py create mode 100644 greykite/tests/common/test_aggregation_function_enum.py create mode 100644 greykite/tests/common/test_compare_two_dfs_on_index.py create mode 100644 greykite/tests/common/viz/test_timeseries_annotate.py create mode 100644 greykite/tests/framework/templates/test_auto_model_template.py create mode 100644 greykite/tests/framework/templates/test_lag_based_template.py create mode 100644 greykite/tests/framework/templates/test_multistage_forecast_template.py create mode 100644 greykite/tests/framework/templates/test_multistage_forecast_template_config.py create mode 100644 greykite/tests/sklearn/estimator/test_lag_based_estimator.py create mode 100644 greykite/tests/sklearn/estimator/test_multistage_forecast_estimator.py create mode 100644 greykite/tests/sklearn/estimator/test_silverkite_diagnostics.py create mode 100644 greykite/tests/sklearn/uncertainty/test_quantile_regression_uncertainty_model.py diff --git a/AUTHORS.rst b/AUTHORS.rst index b3922fe..e0000ac 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -6,7 +6,7 @@ Development Leads ----------------- * Reza Hosseini (Core Algorithms and Models) -* Albert Chen (Modeling Framework, Templates, Auto-tuning) +* Albert Chen (Modeling Framework, Templates, Auto-Tuning) Authors ------- @@ -14,10 +14,10 @@ Authors * Albert Chen * Kaixu Yang * Sayan Patra +* Yi Su * Rachit Arora Other Contributors ------------------ * Saad Eddin Al Orjany * Rachit Kumar -* Yi Su diff --git a/HISTORY.rst b/HISTORY.rst index f86fb13..202287f 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -2,6 +2,38 @@ History ======= +0.4.0 (2022-07-15) +------------------ + +* New features and methods + * @Reza Hosseini: Forecast interpretability. Forecasts can now be broken down to grouped components: trend, seasonality, events, autoregression, regressors, intercept, etc. + * @Sayan Patra: Enhanced components plot. Now supports autoregression, lagged regressors, residuals; adds support for centering. + * @Kaixu Yang: Auto model components. (1) seasonality inferrer (2) holiday inferrer (3) automatic growth. + * @Kaixu Yang: Lag-based estimator. Supports lag-based forecasts such as week-over-week. + * @Reza Hosseini: Fast simulation option. Provides a better accuracy and speed for mean prediction when simulation is used in autoregression. + * @Kaixu Yang: Quantile regression option for Silverkite `fit_algorithm`. + +* New model templates + * @Kaixu Yang: AUTO. Automatically chooses templates based on the data frequency, forecast horizon and evaluation configs. + * @Reza Hosseini, @Kaixu Yang: SILVERKITE_MONTHLY - a SimpleSilverkite template designed for monthly time series. + * @Kaixu Yang: SILVERKITE_WOW. Uses Silverkite to model seasonality, growth and holiday effects, and then uses week-over-week to fit the residuals. The final prediction is the total of the two models. + +* New datasets + * 4 hourly datasets: Solar Power, Wind Power, Electricity, San Francisco Bay Area Traffic. + * 1 daily dataset: Bitcoin Transactions. + * 2 monthly datasets: Sunspot, FRED House Supply. + +* Library enhancements and bug fixes + * The SILVERKITE template has been updated to include automatic autoregression and changepoint detection. + * Renamed `SilverkiteMultistageEstimator` to `MultistageForecastEstimator`. + * Renamed the normalization method "min_max" to "zero_to_one". + * @Reza Hosseini: Added normalization methods: "minus_half_to_half", "zero_at_origin". + * @Albert Chen: Updated tutorials. + * @Yi Su: Upgraded fbprophet 0.5 to prophet 1.0. + * @Yi Su: Upgraded holidays to 0.13. + * @Albert Chen @Kaixu Yang @Yi Su: Speed optimization for Silverkite algorithms. + * @Albert Chen @Reza Hosseini @Kaixu Yang @Sayan Patra @Yi Su: Other library enhancements and bug fixes. + 0.3.0 (2021-12-14) ------------------ diff --git a/docs/conf.py b/docs/conf.py index 83aed4d..056d9e0 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -13,6 +13,7 @@ sys.path.insert(0, os.path.abspath(os.path.join(".."))) # adds path to find greykite folder during doc build. from sphinx_gallery.sorting import FileNameSortKey + from greykite.common.sphinx_plotly import plotly_sg_scraper # -- Path setup -------------------------------------------------------------- @@ -224,11 +225,13 @@ 'examples_dirs': [ 'nbpages/quickstart', 'nbpages/tutorials', + 'nbpages/templates' ], # where to save gallery generated output (added to gitignore) 'gallery_dirs': [ 'gallery/quickstart', 'gallery/tutorials', + 'gallery/templates' ], 'within_subsection_order': FileNameSortKey, # alphanumeric order within a gallery 'line_numbers': True, @@ -243,6 +246,7 @@ }, 'image_scrapers': image_scrapers, # 'default_thumb_file': default_thumb_file, + 'capture_repr': ('_repr_html_', '__repr__'), } # Napoleon settings diff --git a/docs/figures/multistage_forecast.png b/docs/figures/multistage_forecast.png new file mode 100644 index 0000000000000000000000000000000000000000..de3629222dbc435fa39afa1c6e915e82787ec5d6 GIT binary patch literal 113292 zcmeFZXIPWl);5YL3Zf{Yf>b+#1Vn<=fWi`%L_jG@N6bP>=pmGZWaZu zlt2Jmq9TMEFc69eAq0pJAV4VJ6W8nBy7qq0`F*bQ@x$v%9(d-QV~%mpagT9N?_RJl z-M&?NtAK#O_H%#!VI?526(b<9NkDir@QuNP8(;x}7=d$toUsX`P0}fpBVX(l!}hvV zPJ)VN6i%;ie4AUffBx!&wg=mAN-s}}A3_&-mBl&)rMT`rVRv)VyIHlc>5=0T5%3|$ zsgB+5lD2lBy>=j*zc8Tfvx0}5R8jigmf@p9R;|3lVvP?iGbI8o{^&=KG;lc&iga>cttDMG_+Fn<+4%|NHZQE%3itp!d^F|HirLE$fRDjZxpJ@M`%89=^`3K*Dxq z8;SC@oALr8@vpy43;)iIUK`lrPYhXqUF{nEEQx0So-)==$%pLu*Dn>WKrdf>t&eNn zua9b$7ybEt%vt&R`Q^elVP+ZD0dw=0r)qyb5g32|Hs4A&LGb4n0dFCTJj3YH?-^De zPL~beF8uZLiNI$RFh{NsJ4u)2m&2X<_^$^~=Z5;!h>qhH1!))5h<)yc&N~H5GzsmLwl(wI{qu8-=zj3aq_$%}KMP2n_OwyTzWA@t zsxfW(Rz^Ah`s^f-eGzxdWW&!dY6OgO%tSE%w#&%;_ z4YOb3=2!irmR>Z^j$L+%IDBGxOCxvkT(TmST;|s>Ph!OW+ko0?MmgU3(QD+!u){C* zMOV3$uyAO~Y5@I@0GnU-sp25`zqt@l(~t|ijMC_fzdYsepDquTMhwMee;9x1 zm65a&&zpLq{L98~%D%W~9@DtiX=?P)KWg+W3%4tOwZ+4*vU7Czzy0OP8*@=i6kA5k zFkLqyAEawUf}7-@B$%6=eHL`TCxJm`y<=@Jh19Qc8<$4Sd!Y4}^$XPlixGieV7klr z&e9#Ms1^IG#0-=&7vJ}XSl8M|g~;>2PPD?-6P&A|u!V)n)uLQ~?~vTQQX{-kEW0VJ zF;MG6;Cl{sljI>4Dd!{5(tUf_lI%X2@A2+;huo%+0#Txc@>35xac=NgS9+sA2)H$sVyW}Oj>-rnc zFYfFED{S)=JGyY*Kl5e~{)DU2;?uXW)_W3tr_Sr_*$c9T*Qmw88Olb9px5p7@>j#Z zhU41)im0*+g*0DuxJ_eGA~Uf9{$kzKhB{+k3CLh)SqW#bbh`_gFu}U_tNCvg8|CQe z_tL&-gnlTBothmvxY#Sx&QaN=-#tz`0*&3zflX$08N*DIg`;u+h(Q%O_d0 zVj*+5bqmGZ%P{!V)YPuD#{0rkspeXb}F$44>|S9)T;<>f?g**wQ9(-_P(_T28mBD0AtV;!pH0`TGu#K zH(E6%in#j{X1rnQAQeMjv1hZpA4-nid{1sZl+%G7IVfL zJ=Ce`=_r1MyXr8H^`hpzJaRh45Juq@F?ZF4=y`2V#@%Qh8s_aioq(*qMi>1z{o)a!1X`=Eq+c>=?~@*)hj-w3+_ufXbp4Fq6+W8f?;Ye4C9&F$WOuds+ugr|Jy8 zox0d(03Yrsn6AZBY7am7HAL&&bSPM_8uEk?@7GDc^b6>Tz>RWnB^dkz zS7=!2?)2sZ^#u~mQ| zHJ9TzUd<54*yWWO??xO3a&{j!m^-E3)xkG!ExTym!{nEdY^k?Qpsy(oQUR)EcB1Uj zgbW1zL>}Q1e^SXq(MkupNwmIp-DxtTVV~^$$F`{`=)l??;L$lVJ#Vo-yW!B}FNt+jmV6eGYTxr>r zdk31cTWKQ>gi9tn1Ew|RZkgl>rY<3?Qx~HAQWvOgev~;DjyZa0r3RetAbMrYFBdRB zD(zUT9(v$V=q0(T0@-_XgFjV%IrnaXjB|<))bvjUz8twKCR-J9O+`o!$bPG`7HUDkiAe?H!eD$n_p711sOR3`xp#6df};Q85}Ao|Z3UnCvHkv#5c{ zo#F7d_1O$eqX}=e{@XLlXyt(Oq7pEQ~8veDCvsvO-( zX4kJSdbDaA#^h{%siKe0o&gr~wobJV{>1pBomZKNWWnrWxl_>V?bsN%%v{J?Js7Mz z->+Ycf`(E$7*9npRh#Z6mYXLD77-0)mX<~gO`io%F#h;uD{k5W`zy5Q?e=DoXVvqu z;QPQM)o1wAqc$Go#p)FUe95!$lw6m(-KrT|9Z6^awUC##T4Hm({6%oU2^f}DKxR-b zI+h3CoGvoOc6-Yq}ayV%I7xYU1%ZaOcUmy?F!^Y^KEZcVR?f zKa=;oEjv7l&3io>ZghO0)~s z+D~GMLt;o%p(~*!)}BS=4(`6@fTvCQzf4YpdfNmc5d8As2}!rQm2`(NwJl0$U9g|} z=!#Q|kV#y?wc@uEPUgsJl~@CGo_?v2ZO&J{PtF(62IMgMc}QuM+$h&@0oco9eHzY@ zMWr2_u`1(Vuu|-ruVEYbU8J<{GUk2CvO@p(@YDYDTektE@pVp#_)&nmEr_I{O( zUKp-ONY>FsCm32XR}+cm?>sQ0(p5Ky(cbnwGySsC&IJ0eN%UPH8!{_keadi03zqzH zD#-%bwN)P#$S7A1U2h*(mdP;vHB|2uq+46ctQTUPq~ zvN|o221TFqFfS`=IXNrr>)mL4H+(Bbx%;yC*42sQS&??)yD%uuakb17D!)X0z({{B zf>E5EGu*x2SbH|c23Ts^uar!Sl%W^8RscS-kSb8{J6oGP4+0a8o>u;y6+m~q&;j_t@iX9k-pFF!MbNg^hCZlLO#s#vzE~6VSR;u)4eobF?ye#_3 zT(3|P_5e_H_UCB4Gf(h8Ip^e;1I9UsGwtesQ_PxSJKpa=%b72rcPNxzNvrfuBNsXNWmaCJ`2 zaOR!Fy7&E2fJnoY1)tZlrV5PycDz@zd}0MG7rM{J{@=?5iD2Y!wB-rt<$>h1=Gm`SNomX1+7utv{QS`Bc?M0JlLpWTNkZjiUeS`GdGpt zKPx7^8rkiUw$od6yO9+(##c^e_DD>pJC^tpXO_r>dsUZM!84F74Q1U_5@&YMGWH63 zFh@}!wXrTR*$(h5(ce5v1T$S2bOIs!NBo1oHi;kFse68h>qOJO?2p69uZ`ki@nrHK zIU3s8Z7Bpgbi!e4s#s^+4hn`j4*O!}e32oTggfDJ9;rar8_|sGNgP!u&FSzcK%N7E zF0VMN^p&~fc++j-9(c1twN$Fxjx`Bw|1~^snQ*PeeTtBRn4xR%-XLL9QuHBDdsLQe zK#}<&L$PPr+}muC>(mUJT z4de*=oLX0IlHAoy$Htmm7nT1t1OY?knGKVKL9LL|-2nNJ%0QJ`d4jiSNi2p%0Y1hDDpk4HvxQZ0WD!8*fQ?&zcWqvQu=GOkzG7s* zkI307Ad4Tbpej|)L(HtnjD$Sv&JHzuSMh_+dcF~2tyRH?r$lo3i~UCsjYlaHd=^6X zVIGV=y6~6SEv!+(60(ttNv<=nR4PkRcw86Liu^N!^;x$EQ;Bp~E||Z7I=?21aB~Ix zK}Pp?_@G;k23&>qwDcEL9PxCRh))?j9(n?E8qQ`Y2{}|pB(8kna1O;dOuUh1_gN#d z+l84WQ`h)QGyX@^^75^;%WZFJHG|L&AEpIO`hv5JbcQH$tO*WJ?sBN^682lL zaE;DqtLioZ8|^gyJGRcv*-j9?%+}*NpI2|P=>f9Ke2vgEz$;p^h+y9pbznY-2mrAH zhOb}DzBu&eAI_FnS{vhD{56nhO=HA(gT6hjd%6I;;|iyxv|f8@8Is*@CE01UAKXZ0 zxrRk?*s2CSPGPqH1(5Sfg*8-xMQl-Yypf^vOj=IQ@y!Fs^=2zZ*G$(Oz<|r6W)Y1* zl~PM|MC^5!ofhIuf4xfF_zyoZ`3IDB_B`_HO15BUZhVR7F0W}duGpD&$gUI#nT(Vp z*cTnvux)Uq6ViK{`)1{FNW?fcQ#KMZa_-wjpBlbqY%ohg&vFf%J@HW4Hn!NIf z9txWqJJ>((2qo=R=D$ms_O(k!#K^rBAn`NXPG%&)7 zucfCZM3snogY=~jvE}=gEAOntX^r+R7&jlK*(EEo9H@ zX5j#n(tP5GNutecIq-aN7yfQGKFTZ1Vz7^13xRUd~e%Z$E z^pD^Y%?cvB{8vU@8=772LTCGaFMds(LFBLXKvE}89f+!!DWWTX825yOwe zrh3MDv!3DV%3uTMA*Ft)wJCqyPs20(q(Ww%3y>6Rt@QcZ)g%Bw~8BRgj|}q7GGQ%C0TWO<9;Cj;x{vV zek5fRU&TVtT*S3betnZRh}OF?uy7^4Zv457o2OxqS;pn}LVnI=8-^BP4DHP__m3gp zPE3Seg~0_#Kz__m&t>?>Wz4H_yYX*DRt$Q|n^>V%+hCi!0+m_rxYp{8RZPtdL)vSj zw+GpDt+fjiV*|29tYZQjfut5_$Ta;3w4uOuT-!N&oS#WRmpld`AxRW6c|zDHSxv7O z5Qy7Dc7S={RCD^1giiC@I{%uv{QPU)`kcI^Y!cy2ww!f0;+g?xOs{nLi|xeN`8==E z%>r9w^<3rP7@Z_S5{hAqh6wyNY16YFMv87v2=*BR2ebGgr@&*^D(HSwepUw(t@5v~6(jhJ);F)9GXq9Zg z5G9ao4$uOCdz7{F5wd1)r=8x?%dYK{r%>w|=!JkuI%0ikN`b?9nIzgLa9Reo4X0Z1 zHPi!rI;Qyukk zWKz&vyh#7zvU4a%1f$GvU7eEVrv^ReeRI27igygG=W%|BA$bmb;gMcMRM7&D{iOe-GT`4s@;l?KUMkGyHd? z-}{?Ho|gH0;F|NlMWLpm3(#SVwf=j~0-lHd9ys~jZ+klSt`G=<0Oh~uEa3b1z(Xg0 z--GlpelybI?B8>KhWUG7r=$O2;{SgdYw9R?nd%zxN3TVJ%!SK_%?m|M@5T72^1p3* zr=L;I`aEk!DzA88zQWZGH%^U(3l{?_)avEzWe2 z?Di*;VxEa+3K$~hA!*ss%8Af>(I_yCKwzB2OQuv=j*m&8s=%BY&~3SO-a=4 zDckG!e;k-S3sP%(c|)WAjf=B4hb0&C2UjafwNoO$iEbO2S2zMz27g-Wwe}2-cs=X1 za7ZC~l`a2eeRaY=@^b_G!~FGVE-Nu&%Q`Q4+7XzIK)_D47$$+-!8m#8ZeU-SEElf8 zOH%KDcsz@8chJ9x-`SO~&TI1w`%Yz*ZXHxYCR}gtamAYoss1Q7IO(~^wF*0t&MnE- zNCDhY->+0L0k)JeG(b6<+3Ujp`&Keg761x6t7=j6!v^{{uy|P8`by*4#LXSivxfTp zJ(KExN^2>{Cv$t&zpt0E^=3nos`tr}0V51uSlA^kmx#-2WxTV~CFP;zpp3Mb5eg|F zk0@f72PB6ApF$+1SL>3aYy>O|G>QtdoY6KzU-=1R6W%&~cf$S6`1@O}_ejbvP(OBx zOh-C@yBm-^e-JQ{c8Dif^%6PoaDpN_(~|lBd^FrGx)w!WSV`^uM8Gz0td>opFa2Ye1l!s zv@I{U#BhGiOV+Pz^wofU$O^IgmN!|FG_qa{{JKEzed|~g|F3oguqI)qZ_bWz#70jZ zO4fm}fL48s@1!PJckxV5yW@_ART_QEVAQJb83@k8!QXJjK0fOl{p<#Lg&&cc5O`HX zb#s!cYNgBJJECH^``h!x5Z?;g8HB4YSKkBWfoz)WJG!x{J#aRp!)}?t46O(s=(^nz z`qA}jGJ|sgpR(8yKA4dgs{?cDxY0L@i!-2%b58&h$u=t)<>1SM;~zVaJHn+GA@Ml+ zrv9GtMt7AAfA3BmKyVN75e z3VfX%N-M3AQlGXfi@V^q=0vz^;d;VTq&uO<%SVx#({@a&58yO`XX=6aJ+0J4Ab&bASj$$n+>zHA2Mjt03|b2vPc1Rg z>5clNB+0>u0y7J}>I=+FEk5lzUsbU%wmZ9Bf6S?qZjgwx+}9N>5#XvwtsO+qF6nA* z0P138pfd(OaDlS+>#ab75;FccRY$mH;jf5WSD)t+qR)nDs2ao!$EJujcgQ9*_Ev^d{F%aS#@6H?XoilUXkBU{qe7 z{+7_}HXOD(Lx`L%ZCEP1ZOGsz7$z!Y)jfzGgohCwOdr##c4jFV^ev+ArS_4q5trXG zKC;xK6F_gtMmdvoV4;rmnw@)iDPe28d6rR*r$2i*bds+}Qql+T6v zXoafghe&+yw?lngN~bMO?u0S*FS+VsTVb>M*o0BJEHn!MGxhOD<#PekQ%_;cdXRjO z3JAQl>FIujDougj@zWk40VlnXyi!mWr2H#fhGRtKNB! z#z(Eq#NJx*hpHNhV1h~##HH!8M%)gr4_%GiaKNxS1n~zmu$VVTO;fts=s>V{o6v68 zXz?sc&g{uTPxae|_{k-aj#+2j*E1BhrXXz|(K;%X{tzz=6Fees4R*iL_&Id@t zo2nAzq(K;+9dtP`2@Lf>ddWe1`~(xquQjvhATTDC1A>w}Af<*}8i?^HiM2mVGEMKY zrsk7K-;6Q#p{m4uSu0R?K&BrHFseOA7bqeQUD&i#284pi7G2X1kC zxmgF{!&yTKhTKiA4yxeF^i8ga>}Zpi7V{<|j2U6g z!orx?3*PW1JOht*@gFAjg9s)bi2IXEETZsizZ)AaZYYwMRvh~b(6N~-gMwpjVgI@<7 z)PfQd;pKz(?=i@{Bp39=SgdS<96OOrzE7L+^(H1|UQU%qJZ%kHL@*(+zO=`a>_O zdqD&r>8RhhP-`Zq3eR{x8}u2Oq&y`GC*SQb7o6#*l~+*DdU=P>hMoxB210(yM6Gs& zWsmk^lMCkLaqb1NI&kt_0c_ePuBTYwFbm@Yt$T|l)j48t&}J)9 z1QmF~*a>CKiy@|C+PA??lvPze;fpUnGMbF5|*d}E1Gr?_o^V0mn+&wF^iR%Y8QIw>Is#LMjv z>WWA|Cg%aGW%wObLVn03JniGj&4q|~PaSn+oiqqNbe4H7jVj6ny}m~iS}gW=+6jP& zRewVy&rcT026~F?6YGPa`2tKJC$P?t8evz0YwlRb#MC%X* z)5(#l1rPYyPj`fBYhtHY#b!|{bsx2(sRL;-jMmypzzJdV*z({hlOf~QYe2Uu<`*<) zD61Oiug-NE&VPGs+2B#wqfd>!-68V5qp~{iRk%6%UdOpPDx)f-P9+jcwFm+=CtEsk zgO5w)wkkV=k2%+mGh>o1<9k$P=R#7BA-_IliKVH@C#gy&8ThmAuB^x4Z=}HZJtVtE~%~MVB}SQ(Ds|j3rfYjS?vAy#m$#ft%&n@*x+7D zY3ylELxV>xC&*k*2Hkjbp!G#~{RKTNR&XzfuJ1_NT0US#cXp(DDA}~5I&T7Au$$7| z-$L#--t?!XxO7IHc$j_$k5)d{k(Nvy*i?UQ+mqzdU=1r)Sg3YZr!F=j(4C@9oOimw z4sGj80VfjSjEiQSE!FWjC}R>x!=Tlj#{K_+eT<3L483))V53>JD&Yt693$iO)1ZvG zj8s|y_XS)ms4{a7gglg=G2W_J!_a-y;{4%*6Jna~zd0iGMs#bUtb( zd1UOyTLi1Dsw6qY7ZgdYC(ad7ti}sH^ma*)?gsj_k?>&g6}Y3*Cc{gfmDJ*(m$zHb z!51DQoKup6>r{lcq7$AV&MbF$^j@XSb_8(;4!;81=v5E0r_QG;xaygx5uf(&lJ;dv z_w_|qBOQSJkQP2$AnyD~2Bjpvy{+0TAR{+kBsAoN zYa3q_e8+-re34hvyHoKNyff{Ivc<9L%?D;bGBO`?iWLbQbY)1g&(z_|ETb>z*Y49V zLMTDpTPEnb^K&jq$B>)7GNP)Ha#cR2;gJh2!n*Hb4`*K#^OBV|CqH|?p#yf?gv?9N z{62mncJ+~rB#v?c_#A2-t+=O!s5(ZxeV=pDw zmJdEkBRI6?d<&R(1OyhT1LW4yVMmzfK3tJYCe=D7;&uf72N0zfI(P<~$IK;3$~-@A zv`NFU&bBgrzst!z;q1H9nsi|Y!AE$nq!IR4jtX;ARW8qYO4D1hn{S1Xqb-u^-jYzN z)263=31+Xm2mH$5Rkqm|EwcAYJ4@_`oCWCg8Lb7y^3tcNeia_HPnwbl$2#YQkoQhO zMTK(7Bij9aa+M1WP+iYz6*PP?#5>wx9+Iq^QWc`@?Hn4unr!fvCL`%EU<~BkspO9> z+3iL#bC+04X^>kcWZ3g!atEBG2xLO==tMP)DO~HE>C?c%^0`N8_Z&%OIsrObB>ge- zrea2!Lsbr5Yi5kSxbsJPe&XndIN$98r*zxwMVo59MKBAS|KtX}b`xg*vEO~-#@jBD z)sBx7R54t!B7e{7M7}k_C`nhAUWC?PV$EH~Nle2Ft0swqXZ$@nBE)m3<%b&5jwsGR z`;0P!{HAQK{cQ!@5im_=Kg8X$vP)BGK{0%=9WjhDH)X6egg08F6EkH5%rX+qc$s1S zUFF(XJmcu?jws}P<*87#F}_xV*&hgDH^Q}aD}%MY>3e5GD&J#7mw1qO7*T*CJGE&q zP16Efx_g(pYdKoztr#rHW~OeX%MLXix~i#lsVew}8qt&ju*uEGA&nu2zK7NCgH=luG&e* zUouDS%f#$G9?bIK3M=WZns;9av){<{T6e|t`TRSGvPqdDo4?cZgbl1`!;l(^p ze{LP-s&ZsEdoQIUB$XUCHUTvrGk?#@-TNcQ zQaqxruA~BM8jD=DiF-!9|Dl+dVa5GK6B^g-^jZiOyvMya((J^@$4=)g^@e{CrH6;Z zhx>5A03-0>xQHTeVqo^@BK|#Q3qs2jC^-aJWTGYtxGosYETV31*78qe?&ZU1X+H0DM2- z2P94qh4nEUrJl!Fqew=tF&ZPdBZgcYn(H6Al&EkF*ILvN%L4N60n7`I_YS}phCPY#` zqptTtns=D_6N_nXNQzz1Dm{tDCteSnlRp zR!zQw{35Y4Hvo9M9EN0>0UuwLKTa*l@di&M6E`dP?uFE?NXArK-Bh|6My%zfo9a+nXS*zuc zF`2&rY2=2c&3xvgJ$G((ql?O-rA!0W@T@0e=Yi|R$G3pJ-BKfFYZ-#4S>R%#;=AgI zsPtP25~J46#v{+qGXFvrqB2-iCOL0g?su#KD)h;5$!QPeX4#;$LX(Q8Ev2pJHHI0nj`%e_1cNaN=3K5Zo=hE zEj5vs{Et-u5Civk5OE+Esa#>TKYwl?Ac=G|{=|@yM&7Eetr`cT=B2qLYu{;Nr>8IB zdk4j*;b|XY<^)^9n_ODY_JXwfB1eoH?q=_n2SrX(0i8>tV<1! z8c7NF;cCGQ*k5dQ;HF57T;|Bqy8x&Amtr3GenJ5O;t8%YE|8nRgwrB9FO1eMESr1!67mmnRU!i9A0vQFaJQUhi<8dt+ zD=?F4e-Cv{d6zWti(ll@03=%%=NC2QML_*h>rqt!FS{Zx1W&e|Ndo}~nZ;6?f`npf zvPH@z-FCW!sxQ&*RR}$aV3TAKrf?ig;~9k0DY1G0FgjfEZh4=MO}J4kiL1(dH^spH$8<=NMJzXOm1Y>W+-0w{^nUe5drHt7EP8 zT)z#6NFJq5L*c5E)%^mG6AwY?$!4&W+WEskjY0mswgxH9P}qL$+gcPtZ@!aCF9XDs-_!Cr48&dLbllGR0mou_frv?1cmGu>~VN!ADyX zONDM$1E{t#Kt=fZO@*HUPG8C4a^Z&}ol3}aNPkJ5>o1<=clC!bv130 zb&7(6qP(PXcMlb2oKQs`_JxGYxn)JD=j;vZzdG@)z7-IEZ=Zbks#U1eL9eV>By{Y) z6z+;Gd$*T$pZ}CmTSvl;a-Ss)ALIcG&m`lttr!=%n+=_)a`fcR>~?BN20Q_di?sB= z68N(20(`uJA?RTsRvF^&uq&eF40%NdkP5s#yNoUW!=IZ61WIutg||fYEeqzHW!BVO zLoN45dfg991)NS%I<3J!LSJv@RX@ar9~#;1nPQ7@qlY+k+N1q0Ug-lseS%`%8Yc^7 z%-FjymJkaAG4;VJbTq#bNSMzZ#%XCkiIPp4tkPcuyRaYd^SJ5G_3xkPT+ucq zWca*B>FRJIdpI>0!RC|fn|zYppVT(qo#pDfYqy-f?Exbccy3NyRsDqT&$AYqPq_u{$~EW-_0BEt@R=EPkrk+2;eR z!ks>s?xPm#<)FHGK3L%6>mi!Qhe40#^Vc zqi!Y@(+lCRhdN$WZZ>pm%%hU=MU)QANk`;Ipo2ZMiGdt2sAwDSgOgjyz)*>yUnx-k z6FPHtx`X+hXo&z8|CoHWh=|9d$Q?LjQcq~}q#g*yv@4;O2RBQVhnl2eEpkDu9LDW> zkbel}^|0|EKqLv4?SU6!EDD+nv(`CvhQv5{YAX@uxG`osP{;al3iMU`58i(^-U-NA ztt}0fzM-qaT8z^_sKo9<-OQQkb?CX%!J4z^lTmyQrB~$=q`FksJ|iK(C5xaF_^#ns zN50t*E?8|npgJXGMJTg!ELo8UNt&TlBfibsiC)43YgI*cRb^wDPdQwhz5y{!e0tll zE!vyu(gX*?`7Y};AICUh3|4iosz?Hfl@#R%mo(146=jU1HA|B(JM}j@fv~D zM2YY(W|AHZ)vlg}G`#5N@O@tq3n68heID|d%xEyK;6ao`foPlNGDr*0A??`|`8(jQvk* zYzg^#I5hJT1nV1duojt0wK@&6BQ5$f-|=eTef=L-trj)b^t%h(#{X(3B$!Fs0(CbS zaIf+SP-49C>5*S4L~(*66hk}vXh5kW7n>K7ok#6H?7yYl;;Y7X$tIMbr%{g68})Gj z2MQj9Oe%b35GwueHQvu6_j)9$22h;SL4a_xQAWY~>-xwlnVh)df)}k_3LJ^NFgb{b zQ6D(&QW(6UVRwj%^Pd!QTL-IpnhcdJhBu#_)MKc&l}=rFVu)C&T?pr>mxLUMWCkY_ zJ2SBjrS)>}PRX&Zg!y=(^}hY!IkK<_>EU+ccx&{Fw(;CE?d3qj3OJy8S{dgtEoNFp zq!Est?wX&siZf5HA;iE#s!{%`iX7uwE~x`IsDScwDyHAs!>)U8hf-Z6TvMUz*1Z7| z@sdc_@JKPBsL41$^>E1pfCm5*isdSqvi9_QIv_Ink(6@-%sXpC`E8un{5H;{Xo=j! zUt>0k6r5)08$$4#NM%{+=<484oG?EFrkrBp$U8*3XNgcku0@z7C|Y05B8&_>xck+& zgXatM-Y;_A1@#d8D}!Gh6N1ONC-$fzuN*7RTdZ@_$+ej1F@XCk_GT(!9UDs*x8Yi& za3%X7a$&J1wO(RCk%(nbS&5zA7?-u)f!Q#Vjs@BQ^h&sM;#a$idTXQ+xV0Mg#`=H>4qw@4 zc3`CA6b%&*sMcc$!go!y)*P$-R>uzvGNiKG-6nOAenUVPri1;-nt`}oZZ5yxEm(|z zF=v4O4A5M@T%7&k2#i^av~esMo(D<}2!^~F1;f}58^KPe;rV5)7=~_)1!%oX=UoB2 zFxVjP6xQI|k8G3k1F}UaO2}IL?o*c6tUB5yW~}G$z!=M@n|F8PbDU|a*QHsQ<%6ZJr6o)wZOv&~Ib-wNI_2|b}xucIekNZJP ze)P5Ej)PGzfy8_17HxYb)L$@DPoX?mg%})(j}L`vrQ>b9F5MX5T!fN3M&_STwo^$T zAg?L4X_Hm5&>b1UiQzznW_<03zy>w(8}{<8V&|+(vew04+N6ehv-d5!#o6;tw1R~T zgl1LeIOOSOUsQb$q%|X=H;7v5?GdL>mf=yUqVExIH)#fu%AUI2 zUka$%2rq6nPBME0ok6Q24@N2p2YkrV<2Svjz^%8py#WBGGW7psEj^j(t(ZSLRG^v+ z8tEYN%kMq2%QG~f6Xb9VPu*9ERLO{T^&*Odspi*>0VTikxpIC(g0ApGYh)Su9}&yD z@iyS3mW2~pq(}Pzq(s|ZX1(exqcAKhEHV4*Um;QS?7r~}c&;2_>$WFq5$`x(->rU6 zxm`duOPnHVOGui}qFzR34gm7@`=jy$ht}%e!^s?&+#l~*l;SwI)oz2nvZ9ff#MVXi zVo52gL3L$Dk^#Fz47ilkZv#lv$Fe$m$?qtxvIsL?&k@6Q9Cu#=@}hAbxg#pfudy?z zNO}PNbS(0I-VvY4?vi zNkdDShjohb5Hf%&1GX=2{zRw&<0w#jZ`AvCdJ3p$01WUDn2>`SoxZs~BMRJY@$2`9 zSbA@2I0((+5JfRtXWf820L0G&_`cZ17YHUPn~Tl-rCfMMoCx9AN z`pp9;Q0F8yxq!HE!iv@VBV|i$0|e_vNlPBHxsjxG=13#w1LM9SZ#vc_15M`FXJvu< zY*PauA8IrMm1c@Xg)3J8|B=ANR!mSUAOh2ERnG^zd$5CXzyOoyf+hC=3N$&Gikvfy ze-K!B&b{h?+BV*-W)L=u$cm6MT6sUX_Wh=Z!JNNBUjtCZ9E=_w$P4{4Jp0jbW${q6 zOx8%Q(C+A&w~Y%QJmT5s1FSu}e#d;Bi$yl%bIXmZ(>wB_?yr8>vPLh}GQWJ8(6rMU zxI7vjYw`tfWZbfHt_7yRFs>vUBv&|cBW(JlG`ZARtq{n6nOIz-+0u>2*qU;d(M4 z#u;Br2edf3PqSG2rJeO)1a5wT5-VCtmWcX1KnR#F5S_T>?541kX|Mv%qbC?3kxi`bvY!MO9+rxd=WnTZ2EYpLjRiUK=dj-dit?Z zj$-|9#CAcbCmnogLi=@l%?WY(pNX~UfYKrZFaQ}yR@GUd>yyV#oh<<16Px;|m=!_! zkwni7LKo|SUCHoMk&|1uB=iHX4YdHg0f{BtGZ_lnZ;M84KkjDO+~m3=@}`ZKcNPITfk3;ng;=40Sb z1Au%IUw@VM`Dtp@v|woPANNYk$Swx_=_tKkt>Lb>iLa@Mr0tAMzI zV93}7T-*NY)K~Cow-Lk^pq^*uUpQ;;unBk0I+?%pIc{wVGd%&waR7d=`kl}3`DQqF z$vdqzM||LJ!1#s04F}iOk^uGX-&1G-r?r1XMQpp5CY?a1I{-j-XnlI73NX_|ZUUg= z<1$o?a=eshK*mo-zF(;~?PR%tEQ4Rhx27~M4!fd@j6Lf~YW=)mSIO2n-C}3$k;u&D z)j`xZ#JhEJkp8x&Qy~@@asrFmtX2i$b&trS{g{Djk<;aEo~+QuZh|~kZA7~c5ZLv026{rf~CXah-js|9klW%xDKFO}%5eW>zjojZ2IZRdiu zLYmlh)$PH1bHfvNy8DJZ%2$UuyAlVwbdMunX1w$^?JY!psW{&wW*jOXGATJZeJ`&*qY~C#soeX-MiRg9G&c)a7;{8W|7XyD{@`YcZ>1Qo44}K75|2 z2k3hvrUHJ+Nfk56&W@8_Q5qbXENe;0fPf4 z>&jW0ulELXFAqisN-q~S%20W4z1RRGPP}5*j*QEfc4KL((aA<(i9*X3 zJDnn>!0}3hGRDsyANZJ{nvN@IKlF$FwigX6R|8R8t1xv#KW}>kKE$?V5H=NvqiFBB z3NqI-{PKQof@4@^aa53qZwi=)l(-azqQ#~6{OByE{p;l73twr~LBETaM}rq+f!4g5 z;>IY`ttG8Uv8kyC%XX5j!Z%LcI^?mjGS-U?rG%?Ibxiq6bWic#K&7(F@rZGowqS2( zvIlx{K2Nt`FQKYxQ!S9t(KMq1O&%dV=H@%?$p6itN(ObKGH_b_^wMa+-Mm&3G-c3r=+|qS& zj1ZWw1#Apq>1GMb>T*w^JA8Zpf@^c;ZKS(Jqp&Na5Z1TjA_I`01xc9?HK3 z-2fmAFdFO&(i0rJ;E*e1Sgl%6E9wz32D|N%!x``JD=FUaIrG`rb0odJTa%D{3MmG< z6^k#@tb%HH-BZrUYpMNOVgLDC%aMk&~s81Hpjn7J*xGYvr z6}(yDtS$O~7<=o0sJAt2bTBbd5RecA1Z5}%1d&p@dl(o>31L7$8irIsr5QF2(m9j^ z3`kqF)X=TcEklg-U4!oPowLvR?!A92zqQue@B2J!&G!bLfzL}Dn^e@-)D5Jfw;gKR z4x6hEMsG5k3>2mfgX8sj;I?XI2Ayr6y|*0uEzhdIll~DMf7w9f54ZnO=uyv><)!;O z09;G!4nvMh9*BmYyl#-+&+bxm&N5lTN6{UNC?55GD#8|3xl!2wc{1++_jPM_G1@)v zLBE^lLic@)eN`MVa5vXi{%z(%sxtnu;GfF`j`yW9*2h@aqh^#B`jt~`5_rXZ8~c$f zv98KSRbd(VR>}~8difI%b3Ubmi5O2xnx&B)mN7g)AE;A&b>-g%!lZ;jBJ=mwMgQYw zKu#$@;F9m}52kg`ofn}#7Si=tN9DCdGH>lh&CEPro3>+gjewnBgr73?toA#2HfHEO z69akT6FyAnELzOBP4h5I>cnxgski1l}h@Y4*XLh0$V*ysjb+? zPTpS^wEReoyF2iM`2&n^TGbAjD*W;krlgfICtlcs{L0B-^BqS>pha{y)BBJujgmBq z=Gz5Gbe7!(!+t5IHlIpd6`2)Z z^JYsv{p%sCha_u9sOOJS0F35HzTytG&ck+3*IHEmiir5NhGT1MEdJ8@fpR_XY#!G( z)|9$KC`)sH7&|?zO|4~t+*V4@?(Qcr+Qan6`adcav=K$L(1IHti12Haf7Fh1XFq|As-xaHhK#zD3EqwKgI@VG7sYGM8cO*>@a+B_bEM7*Y4wJV zB`;2>Qo%wN>jOkINB-I9v{@A9*$j7Haw6Nvyq9f0zm>uVF~U9eg@w+0Hp~|)1vU(g z`dn~4bSdBU0yHx<ZB5sQNRYs(pj7T%uq`e6gcMh^R}RzQjFyIfvVJsD z+b5+R{ZLvfi{|dMN8Wz0E~K!#AK|PDgJt2ZD%MxN)*f#HkMcb@e)B$p3^I2v`O_CJ zu;NBx7p+2u|8>$EFglOT%q9n)3W-*fmaexD>i@bod;O0DoRKG9V*(?bBV=nepdl;32`(=Tz4UA&`xe>W_a!12ydE&YjED zl!_odGxy>2k$Ae8rDNq}KlHFZQTlbRHjIXhofR&`${!SAT~k+a)>1*GuTM~X#FVGO zPBDBaS}xRL#EdoHPCj1=!=6@!X`m>36=B` z-eC$bpDPr^e#&boL??aui8;9K)lFk15DyV(wx;vNGhNES*l{7DSU;L$#1=Yf0Kxi zI|EGRK<_lN7lY6@CK&oZxV)43DO)B}db_&IDVaN(DPp@o=`HK6B6Bbqn{t>YUV5y- z)W&xabE1^Ngk71AJ6RQ zUgfu+@O2MZh5j~j*x>lM#NEX94qIE>w@IH4fTQt0Mmleg#2eR}^vlv4!5q$WD<(5^ z61FN=aR{M<45I4yUX%&gFQLu=cK2MMfDV};>{?GGuNf!iNfpKuO6S}s(UJAd$hOwY z+uq>ymywbaHs$p!Wicb*HmULz7dVG3y*K}A$EfJD0Sl`H!Fs@Ue7e$a_dw~;qfM3Jyn|&z`Wk^@^!Jmwo>yw>4~$_v&*%wO(v_A$oq%9hIUPt(Y@H3T}+A1NzQU>gWxwPnG<1UCb=<4aQH`jew$Mk5Ok&%38cWu2AMs|u;3 zMpggxUJbvwT}R2^;YI8(G}~~5K)Qa|hri5I%!p;$YZC~$L;n30_uOljzvRxfXv9E? zL9Ymd5m(|U?`p$tPvgSLQ-sF_WIvlKdKj??=mxAeM-uE0x^VT1XZo-OwVSA_`+4k^ zh!OoI&jkV7s=`e(>87t}_SwyHkzu29v&}l}fE4{*aBI}_GzfZnHZ&DNVLU5ei?1Ut zOEte?6(-}}CAu(fI6mhso6nxiP)f_oJU{YJ2aX(kgZgVhORtl%e z>eKI&GQCApygjwaKh=XnE>3$gqL!0{1j^M9MhCI4e&>S42J16BwcBJbs9F3&?yM&+ z-kY0V+Pj)}tU>m)RIb#+iL>5oTl=r!zd9)Sixk*BQNkcjBnnt|h_MlJ_uQbn+`^~% z`>&gudi?z9g4#RK_XLRqWDb&7c>kQ++NL7U@V~@Q@N!)na$(qTe8p?zoH~4qMTaiS zJ|HXEWv=S2IlZ$*uOtA1>oXx%`4hLF--cU>`(|0vMB)8)1k^JRP-bxA7wFVa`DCB9oqvaEZ<8MLm239^09vRw z8gKG2oz)+#lXej$qCHYmOZ;iWO{LOIKlAbPz^-u#u+#-Yf30M4ly#+7&KdoB_W8Wq z;H_7qlFG{M=%J@u3k2cj=X-8Jwm;whxTV}j#oq{Og^D}k`|lpmgS=g~`nOl~ziKE9 zH6z#Y2co|}^^nhU@%E9Kv!=4FTq-%$C(A5WBM~*-I%kk}M#jg-&?V~JH~)f{+&e3h z;-i_f#~^-1z@G<#&LwCcUSpj#ZS3$5F?-5WAFx};a`owN`FoDPJ<1b)xW^7|ZdA{M zE`bE~T5N9m>9QI7>gevIVkP;*eo4oro{Njj`a#d$P>+G-E=)1rfW6yZak|L*`HdHI zp4SObca(x8dj@~Y%(Ah^AA8sNcLCttSuHSglH@K7G@k3nPe7%}<268ZGN}OPv58xt zkU)^#tAqGSkY1YqI_e$a!Eq|ZYNa%Yadp$CH6oo--| z6pSWi#~@w5AFRF|bLuM9QTE>wzxaq705}7;4faj=i0|)>AxyW^O5CeKKA;xtbGF*@*2}l#| z?@c{`KYjX?ab$e_U?E<>GCA$8A65`j2IK@1$G?_5&!nGxl_YzPnCj}p-@AO~MF#N( za)mfQZ%%JG*=}*s>hdG*3lQ5Eq?~OvF$rlrMsl2&me_jFi@*Q4lUJhcAIr;62EB|F zY`uE?s`Bv%`A2DXn0U_*3n68VZ~A+#K1WK=E)(4M;>j1e{p}<#KjdF)7u+lzT4KcC z0)q7``eU9B5Hm7RS@=CHeUEcE|9j#6Z5RhomEPT!`10E4(H80<-#ES<{g9}zgc($MpdQ$xVt_}%&ES)Vvq`kZ_o6ydtQYfv3b zz$;S@2W-U4S9GR4N~iWSWA>Xo2bp6#(kwV{$mRc9a(~E-umlTH88fS&;Ud#N)z7MX? zch-B)3B;QDxw6zwckG>|DugiZLKsaT512_W4H=bSu?|a1L!~*flfeTO6&3YL!T(b- z+`-kf>fr0ldHnh`r+7^CS-c)r%gh+9{>k{y zrT7!ujd?oJc-9Yk^pIf?RWiK1Y#nBD;IyUduZsihR_per?)dIgNQ!RQQx11@pk1rh zn3n&9`1aDl6cgFh1qsxGCW^DgdaW@IAj@|n`n?39DOk(Wc| z6Js^bRwKsMd!HT+2SO{Tz8Wo-BLhJ!m5RpAP55$dRd{pA z^vCh6*gDy2!Aof7wq;5F zK^r$&AE8IHR@#dB+Hw~MV(ViUatXr(lWnIC{6d3`|2P{>?cq)(VfM#_OdU^!4Yp7= z!T6%_xWTZ@jYr$(Wl!)7-`b4#%=c^+qP6AYtPl5E89$3tE!Wl_kwJYe+${R>!H@QR zGvq(r==w>#m7AlPS;>t2s%3EQNHrfb#<{9vc{t`xu;B2--%;uM!{mjVsCTqfjF;V7s9R0do@ze7b#8j`9|pY9GBYy+w>o(gVqXdl z8@HxsPXQ|)X(cS>H3jPoHM(v@GOS*!oN4{L$_iy`qat}J4>CLE^gv0Pm$t{iHsZhhFc%I26~Q!Zm)`qXC4UN+&9oHV~J zR;+rQX4|kVj_Z&K6|Uz3AG*2i7P#rrwuty-Ip%6@mZ%WEz4W8>pMrhJ65^;yMcOg# z^-v*$liC=RQb!Gu%872%@nTD2)@;$i@}$jcneHE}VA4UbvD+V;VDcF!xCAYvQ|3Vv zM#Bi6CuLyhyPbO*3rY`omH-hs<^kda3HMqmH zChN!DT-p7XvOnAU2rH2T%{^)PKa{}X&9?+(DQiUfjCWXpie3X(#I{itm;}fN& zGK@NcG7XpH3Hzw)-_&L1R3Rx`rD|cIMJ*^TRkRdap{h;DcM18zlro~GYcbL*r2m6| zV*k0huTS(pOsj5iaPXcGXkC|=mb^;#RyqDvdnGD|<$74fyW4Q?Y6Ykkzt>lYLY*P% z$>?r!A77=>)rKi6f666Kt9()Dqo!ZP{>RqHf2Z|@n+W_BPCogA4Q`?>%(E=njOTDA zPl68f0NLV?GBAayYg11$2ss0 zE5>5&|05K}9aG4-FbxbR#&*DQQrIM(S%0|Juv>t`F-Wiq)xqVY-ODXMrF2;$Sd!VJ zX858$rSWR8&V^9L>@-_WV@b|1IsfjyNMec3z9U0x9~@3CAG=HQmkp@Qjui0e2T0(@ zU_|WH=eX3oSjuo%UIFWAMEH7*Pp);=rXi0HD)aLw`>cyan;tkrcb}Mcw2+zY)MYi< zndnXq_S3J&KO2wWx6iSTzkqoLFl^#UymK}(NkHpunC65@TWyMpYYC?;(;P8WMwJf?g18}&_T<=zS&)`7y& zVek;JT5NWG=l>G%S&(g}8a?GL+M6d`EYvTvw>Q;pOUD}0V;&`pUfkR%VxNsY)TI$k zQONEfUb-v@8=|ResTD`Ac-Ka2)tcH?Li4@U5L4}{bEQRiHCvDu?+GVM zg7)RZ&mqvRU{t~o`aG6Yzl1TR5N|F>uPn4mN91(Nx|KM{NX@^N9sC5(YSXJXHR34| z7r$}tG``?Cp_SP^lW|fW&0eeATpVLV6=>osSOuy>9^ljUP_g)#XHu8NAq zck=G)wnu?MEvZbiIO+~DD`q@>Oa^v!N&!lNZ&H%kzi*Z-!pz%x*B80li(<7X0$<}_ zxx|DQb2SRBd2N5)ILKx-eP=f@cqe*9&FCrBJpX#48EEu{USl1%mWFy@C%h3C=M2bF zc}rBDMmuTrD4zy>=7;xb_*)^=bhPlR>h)@EWd5C(Rmn4fxy-&9b)OVJq$E7gTFSya zv18Y;x6m>oD+`KqLdu zLlfe{<)AHgzRIO_C+gh!2NP!@-dK?I)kS8nS3Z)@2TjBSUdPh2)NPMJQ~8uJ|Jm_= zI8wwfCo@xX-&1EscG~mCM17YHup-8MRx7!a?HU2R}apId2PWDd{Taf$u(9 z#phxq?|cgYXDMChq`m4_M-AC|B$W8JP2{v<04)Lx%OQ|&E$%y#(;+!#=?oua>ZKE5 zx*vXNvF>BpNluYyD5Ay3!bdGDjyJd7{>3(e^cI0Zqmi@^+Mcq4EP{qY%<{rBb=KRFLEWkPq7Y`8N*Y zXpZL|TqB$%*^eB2`HDV2NS7ZFIyq58Y#YA-M;~C$}X2=4-LA~w)SUA z7y3f1&qQW#gO|csUiXS(r?w^@b0fY~(gNERiQqx@YV-6V#>L7G`^{>p^+#gl3YGG; z0tEWxNRTzHM_RiJQwMpHNzfN&$cAh+yYJbu%dyQAK z6Td;)FXVMg<(XiHcaN0HSe8Y6D!I#p+Wj~^T-RV-)0W9rp|xy(d6uS4ysOcew!N=fmd@g) zbd!#nXkXr?#8Op|P{+m?CsSif@2h-k8aw=q-#GGtZ$|0KS@Xd9Q_nhPWQMTCOa>lr zq`EEV>gswB&F~I#agtg;Ay=?!&&M0eB@+0Br&uwo+x28k9OJxEtFiHC_E_D~uqr7_ zC~6mupKTi0D^8ml?pqh>m(xaGd1N(zHvMajVe*5I zktmWyl`HUQs$1LuyU)GT@eAyrF{I$^=L>p}*GOsl(7<#HQ2Dl@Thofamc~RJ?z~=2 z2p`$0u6Jq4QZF~#zW;iscPw^2#>f7>5oiMbLaefknD`VaWHQ==`qB2S4cVg?+;+B% z(y0r4Ri;_ZXpwZ&p0+##lm*& zYDV!s6(_cmoP#CqK-loZ%&`bD&Rx6Ox=lL0;^Gk#Um9#sS>L=-_`Nw#`?4{hD;G$GIN^++! z>fz_8cWLb-=IsbvF^3lSUK=>P@<-EhI~DY_E!mYBFY^Gusaq879+BcHgwbq zwQ6BoMq3Y!C#;#b-S*wmY|#T)W0NfdQ=GQuSl=+wwAyi45l*RU`W2a`C6a{q(@st|+I2uCY}o)4mQ`Ad*l?bh5ZaGDM#zmxoB08gmD#1eZkzcuA_)vr zO*+yc2^Z1Wj7_rmhIhfsLcv`W<(Nkx3A7+HzLYzXDRa$+#!y(M1-+JI#{41;5|Cxsjy{gVk zuU5{IypjqIntv)ki?@QPfa~&ah8CNh0q<0efKjF2s1pxFC8FVAPl8mxV#HpZkg^eR zUL}n8JO0#V*Dz`+s;(-(*a)PsmdC!8EjsnNedLv2qnM8rSmb^u5Ys z;uuC=$Mqsx;<4p8OzBLyc85?jk;gJoVNtnff_XhPRzOrGpo?zNk{Z1Z~5P>C`(Y#kF7 zf-42;`DcLZxy7AL18QufI8vk3-+5K=xq{1HdB7br*oq|*6$kYW;s&Wz=0vl!)A4FP zOCAems)w6q!R%AAf;fK-<+-S3bUm#{4~nmL-{QN@xV*oHhdNJeRcsjr_g#~kx-Tf( zeYch)%RDYNaO{KM@3KDV%4N;lmfLPp%?UHWEgJ#iv2;=UBZ8D@NHMxf%4F^d5(RXS z+ZHRF&FCdkcP~};(UBsJr%@yI&R;r^mG0a7{8jaj8%#q!rSAv9_IkhE2b=PE!O1XXg2$ zyFVE5QwbD&ue^#*`jM3mCNf{wK%2(9i{FlBZ$mOjHO6eWV}Ea>>(j+HA{nUvodb;j z&cgE(?@1fTgCZpQJCnsd6Lg>F0f_3w^n7tWj#4)G%NG^2Tw8c3k7}`Omua9onsd5R zGtjZ}LPN=F1OLx)V&p*dKrHdES(;)Ng0|a9rh$9oV0Zm1 zz)Fu#cQ3EsjL1KQ9% zL>5HGr?SENdG$|}$vOBAnyKGW#!}>!1aVq#=YAm>)uB<~5w+#y)p?RaTTNF9E+?Q` zQ;nj0*COS7*FUx$?X}Q>vxmIHDk#+UevLENwYnucU82*S^5mRQ zM{z;`^9DUzS73f{zmJwqRGp=`mPp|%Eqc2=`Tn2dtR;iv_;CZkjzt5_%KD~m_a!Yw zfGdl+KWSR1eHEa+6m0y%qA8MlQ*S%#^)5-BN;&O_242|sDeLqh;j1VGQ(cE!V#H?i z2$9*CZdmm^n1%a1DIKbGeEc%6{AJS1X~VB^{t;;NZ38_Ys-Cvjvu^=%NJ>VNB$tQ$ zC(1?H_KN@81(T=lHizGXRq&K0VIIE}CunH^uF0$QczU_B{@%A;mF9%NjJDNf1B!!Z zLB?Rg`+Lg{w_T7r9kn5E&(O^dB6Pjeb1MFGp$~ea!}nf2kR@lKYCG6l&;fjlc?vM7 z*WosIjJcF~4KRR?LvLIzIY1|d&$WYc_FOp_RYYfYzsy^f6yBrc4-Gol*pmORj{ zHy-K6mz>-R^2PpRy|ZxE%&gI(O<

~&Cv{LFs{2kaRj+9VVXdE{x?{BzSPohMIA$t9kqFv+nGaQTjZ z>Fe>z;_ewb7}JK!I;nvkL_2YtSxRNQn7!M3l1=oyzv}oJ3(arrdLcwG_E2>Q1)(i5SpV^Yv;dkmrdVduaMx%rO@xd=7 zddTHmau#z_QufFK*<-g!!y+mIZLIVD@aI`?u7cxUCTHj@ahfD5gWt^eY!j($I#hkm zy4oKrbRb#b18y)(4E?PjK$THNcC`&1+*v*7`K-zT{@jeoM~cLWDfILeYjKN?aCpVO zKn6)w6%rP%FWCccLhhX+0qWWBI!k2knw^*8K(zP*icd20Z+67(8Bj8ue*;Pe=x=p_ zaf-z6y}skV&7zYIhz#Q$4}qgKx#FZYO6}o}QgV zUklkLML$!lu;c@hb~r73oUC6OcWi|}MhZw>as}2};nYRqa1>E~3a|x-Hq5>iTB3EH zg^EP*=~-tBr6h698c8Ak`4MNMSsQRRuuH4SiNnB#4$S^V6MSJk@P{y$RwGus=XQ2C zL{O>OnXUfq{5JZxBbiA6M|z+Kf`-fyVr#LA&&vafos@hP2nXxT8>I0aq4lKS3SvHj z;MJ}H^cAqnKDc+{Ah$2kc*Yj9X#kY`i=)ltU@!2EHRjL%McMPCID%|*F8+zsHKa&Q zezbEO2!A()=fC(7IaO)^k5LJ*Sbp=@z>>d?z-i|N0B|3j+LM&nu9NVYqZQrU9BG~D zeo6%V*Jg8DNw7SLm4n<~y|P7nL?Ow0`Ny1BN#^{))R*|j0aJ{;T!VlXcEbOg(}%g8 z*e(t`rGsr|keuSTdx~dY4{P8L0r>DT z57hOG|3mz_zeXlWOc;=nYel>>HSy+k+pS)jOzJ>3nVR1Wg9Xpt)+ce7aO~`XS7A)f z`*S#28s9nrdDg^78`z&K6vmlG{Wl2u(UR2<$-`}E(3vhKgS)QFoyBUP8H_)?^IzhB zK%ILeu(vZw68Kw4{%NfLRPo_=%d&Hz*6F|*&XUD(kYE8DX@#n_4&~RU44G>jm>yqQ zyR`P~g42AK{k5H?TpGiA$tX!;oe?R@EdUEW{67}@FCr`EDTrxTJai631NLP}bQzM$ zBRSY!FbDtqga z#$q}aZf_+k2t@rUld#!6t2NzW+$FwU2_dd@2RqC@a{uRKsx*M|r%JBiyR+$qd+Op5vANC1dp!iLC>I=KmKO)TOcvRB zkB@}Y1FH`UAFo&hc_8Qia=g^DfUD9+5F7coMenb9Z5${q?SU}_ZwG)6p@hRk;qf-# z!fB^6!TV+VM$3zv70FAB*1oa6<9ojlY|FQzVQs~=kxya|8%a2Cl1*jD@!JoxBovZPUo?ua^O#r0llC zXX@CO1h#NW?Ajh*g^PTA`YpjF#E&_kDBN-HZ*3Ie1)5aaq^l4jXfQV({< z+JSpgYdHwQ30E$wV%FxZvk-NE5f`K|k;|39cRwzp7lNyPq>C9(y<_zbESk2Bh$1Rt z>SIm{4M`5!4bdvUimva0QMRSLu2{$%=g7B}Y37p5=I*C%dR>I#9N~LWLVO=FaI0Qk ztxu(v!ooxAp#GPq4MSU}@|nI8)hew#AMx$4j??WJLb;ExeaiKbtGjC~yK%#(k-?55 zEjGHBB{wZ;MU988e8<8!cso`=I@?K&z5L;S1PdsMErK{WxEC>Toi#%3aSBLg59!~6 z!u0bS8VXrRd!e(3%&#ko-R?=`A)GCmZ8`bYN%45hn}q(!vYL70PvaQ#goxV~431l{ zDI<7v-}LTG`6LyZ#^DOdV~&0Jr4JI~({#!-nsmqfxvVMvYnKm)uV7^8*X@+C#k#VM z66Uur4;4UTS=O}Mo>@5P7;|x~p<=lPMy^;hAi+Z(CF0|gpPdZnX5FX7ZJ1ka+4+lz zah$<5JK|-}5_W2aY2-J30?KQ-ty=HImQr9lADo+q)xmdup@qs%%$E)} zPg2A9^rFi&8_!OFe?i2v1h%+n?W`Y1R#xkm>DitOqrWD|y_$er)3 zsn`4F+HO#e6U4&H7N}!*umhe23*HgsoQIwT{8{pL(UUjbOvLdPV^-h!Ic8AolZxFj~-2mD1=*+u7Q`JhsI_3Ub_938r-vm4ccJJSL74kd$7>Sx1s0F9ev1s$hXQh!ZM=4 zZIFzKp*OHLVp_C?*HWMYJ&@`i-uXXr_q;{$by(}<>HTP5uH>5&ff43ox(%B9J}i|2 zH#n55shbQhFFFMWHo@{gBlwHixjjcrC@J&ImhHW7?iTW+JP3cO08;gT-<9}Nc*Xa~ z(_fP+Q>ny!(04$3DzB6oOR{GNk;=GOMpX3(N{nD$+LV#0;zT5$#24IkYx8lEgA-DsU_#l`IU zrS!RxX7JtlUr9mi%d%e7EzY4CTq+F`fO0|TjKx5R=0oN*`Hpg!JaPQ(TCae+u47%XCnVOMWk zE963>h9x`tenbXoXtUv~nz_6UC*3@;6a-+|>2zZ8Een z;kk2H2i<$$PAlC`Df_Fp50uq1+g!D_zLK(H{Pdy#kx3f6P`Tq$ZG9-TlaClmF_}L9 zW>6=)y*1R({JK$&;k*zGt9q`3_2+M=666d;^gU@rd_s^)yb^j@M;9p_-fDmiQtlVRutnbWHx)CSU}~%sO#pHU?g8hG|v`N=CMl_8(LnYh&gW!`>SxcD9yV) zPr=$&-R`7P_%r>RRn`~@UT(!9ZQFZp%w<0r49<>Q8|3dGsg{eg5H=&VO=^~vo`7KS z;7c~YYAY)3+Zdk6z$UbJD;_Ue64SlGUh0bKu0h zx4~;4w*hAi0(lk}8X9V53FfKdq^YGqpp#l6J{M|x9Gh*>MDa;}sY`)Xt=fxE`Ctqy;$8u%LPdcoE}O;&3^p+sC{;&>oUMPiJcHh)nJ zhwMiC*y;UB|E-U^Z(}=+&o%eovGj(6s%;h913RKa30ybTj?d=c%Sy1?*7N;7^15M3 zr-4T*p(sSk;$f!dRS8wa43vkI_eCWm=Np*-FrA)US;#qDof-lC3K((e4@b&vV(y^0 zdCY7ZJu{cFg6aJDT(|KvNayRCZ50N6g5dRgcr~f^Z#3D>AciX>R-Um9H@+`%Ak!m@_0O<(6O+Ds&sV9jCjaHyGR{j=EOJZ7tBA?7Dnmv&pkpkCw=%d@|N+ zv@#TV5s(m6s=gMM59(+sJ9+}(-9o8&DTk{K0eb*$EsFOsNjJT;V?b|Xbo(v@7K^~x zH@5^Y@6+im(+ANQ7OuK0k=vOuOQk%V6U9ir>{=U@-8ER9L@yc`CLBmu*5|x5Mtr}c zs$v*)RTJC*lL|0)jSfB!Zgb)58rC?dPa^?31%#uJf#~Pz5HT~^Nj%SW_&t{5;x#Aj zT-T!<*2QD1kiq|?+YBjQ6#of7kvU=I5TED=P$JSi>~o-e-3E6blc!goKQv`wK-fYf zgFX+&BY2~R2`$p6^^?`1oHewu+@?~!gaToOGdIXLC4m;eT5j``dQoGz1U@|tKH8i9 zm@2P&w3NMMMr;C+UQNOB7302enNM8#DV&w|9%}pQNf^x6Kx#pk6r<%KLr+htk_YObM z{hUvY)pb|t>4TWZqim3Q*}VL3LZE0O&r~l*zDJ8|n~l<@jt9kd@m^&i^mNH`gM^q%x2BiPRyUS4>9m;+QO9$2NJ#iblRf z@;T)fm&Z&?wA5K|6I*7ZSiG zSa$(yF6xVPzBMv;I5X#LF8ehEwQwypGp>u?8lI1`m=njGt*b=a#x8Hl_^#}Drb$xS z_)f15-><{@73^MI)SIi`-*gy=)i5sWtf<4S2Md`Gxm?J2-Xy3$rl}P(yg_N{GA_>% zy16*7I88W#i_xF%%sXRm^jO+N3_Wm5{b$g1hG8NrDsak_V8D@8NDMX#i5S3BMuqKp zMxU|wP#du|d~+A^vut>n&AU;8?^>-bN>ZFZd&zT2AR^ehMAh+Q2FBTFT+QQcmqaV} zCaEb~R5L>A_%gRmu#643*9oK@z>VQ1_XZ|f93@%3tvf=gU>#07ds;dHL2q+{G2$ia zgkMQ@xBG8Kn@HwRER}=?&+6^k;#?M96xF@IrtBcCIybnHBx&Ip)Oo#ZpCI9A=*}l+ zqnTOrmSA76*C}6&ntQb(Z* z2`gs+Vu!t5%Zx+@v^)$tuB%xaz)lR&E&fSfK zq^O_PweY35K%-0Doc4+AqB$~eqvou=W0Ii^J1+vB=6ErUmn#K=5P#cwK_O#D%B<2C z11%p|t`3sma{l~aOya%ae#?TS7WM5c`=I5&`cib}>zy#ir|Wzi%w*IU4AQf63e9L! zH@C+`UEi6{Ms;zIpam{QtiF(sEFZo-n{;#cvgiOH%R?Tt)r(&QgdKysa(rjT!4KQH z@n&3|ohO#tg<<$ps1iHhHLC64EL3P2s$ZEmjAEVD3}z2va`BC@85u3J`J{oKk?h$Q zT27%Tlf@3%0ON`Xi(27(Z4PK{k1NQHc~ZIZjIc>DA?|G0Rx+Cg&BzN%laG=2wJ_Fq zkFrirw$A24_qit-SB)8*=|vIvAe3W0p)TcUs8kW)Vqy4`Xm|@d4ch!fsJUFg(5s%K;gK@$d7#W_ z5h}9JnWTKxMRlg;hS%8csrJ%?yB1nPGmPYl!S&F1NMH{PWF2G59^=P z+DVsHGl;sm2i_LTSGyUmic?>j(59s?XyvU;aawvoiNAIJEe4;vLAFz!vs(l0b8Kt0t%43;#Jan0#8a1CcO2zGb8a=mP`NIkmTIkzmYvxfPLF+kwvoCzs zaBpD0Y&QF^^nLB7M@y%IqMoHTAqlgFc`RGCQXud738mq!YGGztF#gTeC*D*l3{DpU zdgp5&!orD*UoGA3k6jGqD!ijPVm8k^Jm~Zi9*uSGQ2j9NPM~@T~1L)rU)KT}&C}vy|UF1D8e6AzGrdKp*)KC%7;iGws?8DDlcX zv0LS0wOEQOt%d9Ux&X~?0eqlTHX1P0x08B6X!c9a8r{XT(ovnYV91xKP~R>NszJCY zdh&eMPpO9m^s$Y<`l8;sHdW}pK>c#lfl0IukL6jqjDE^xshRsSq?RodtK60MzljSP4W0zKBkMA|l-)K%Czk;w5KfTV#SK_<3J^f({soR}vA z(F*xtSr#F5472)^hBjhU49ac4*e$u2YtOvjvlNf%pG@nz@Il0EKCaAaOorBGl2GnB z@;(sjY^9cY_2%L>okty$@?t06$q=#3=372|)AjSS0!*DmW1AU~F#5Kvu*S!V`x-+r zTj=mn$=S+MNmwAN&X*WI@6{%A-b|vHC^Wn#aN|BIKSdWU=d#%~ShCfBP!;?9&@n|e zBvhAde{Mhe#-eqTR@pD5Eb!I{DGacgW8Jn<4E#}W`o2ihuvE_U*yhKo!P&-ZUE1Kr z19F!`8|Roc?q=Vhr*5H9tID#b!FMgC=M}>Ef~{|K>w7KDUivA|lRtVLFtNU!c~YFk zJdxH0FxyR{4&O;;>%*kgY%$%i`XuYmh_ARXfnw(Z$${*V`h4r`6@ctF(p}Y9HTWpkBz#XL1BxKIGiPGfJZvYONr zon7%7QA4qo(olSaA2{dtB82_Qt+&FPLQCrx0}=infhHd zd+HYGzN^Aq+0LWRt?8|gX-dKk{8J*f+#?M6k9bCkD)?N-?W;qj9qV9p;w~#;wz1>c zI=JgR@voTd$8JPmuGW1Z}Bd4jXxwZfzRb^r+?RmCwJnVL39wDb(qd%WtQ>spg> z5%=b=DOcP{xtwsw8N)&>`l|gjrB0CxMlB!|W>XznnD|pmxbRhD5H>O1sR_TcmX_F4 z*f}f^)1Tt;6ub~iCn`~}rP%(MC6wtcX;!A&iqCG2LA=?}?H1EQZYY!8rQvzbVWGhu z_sU;s)sZ+IlwTz^YdsOWIy+`!L+2TO!&Alz=v#V(Z-jkhcKbZ{TC^GC?-4sWQt1Ky zQzCq?L`Jz&Yl?8y$l_gIRxe@I}E{u zS>7tKttnBWQM$WDc zogZTSMC;589sNdb%OAK_*;C3v>!8|9c&8dDn0)ShnssDD$@+NKv>EMLDcdAUgmmYH zGorAOdpGXCn$qE^bsrvz^fINTTi`uoFJ9N`+61kbZdT9h{8$AE0CkxXHBtvWb;2_? zXXJXP&&`v|!XPr+1v{|tQu~wn+}@=HP+bf5n+Q9El_lGV7h41Gw|~W(YcTs%U3Afm z+m!{L!l$*IFX_36D_q`UtWNuX7<=zabwVA*B?} zz3I{0k}iV8GxQu>KX|@4apAe#1k<%4MlCZSE;ZJK|2gO^meqUc&70NxBwOHCh&eJ_ z%{g1s0!YW-)ttp^sf_a6s%roWv=N3jN4ukx z8iUU>XQyA970nD7aO+z`_TxAIsyTgZwxdsjYJoNk8PGPelxt7F#nY*UqTuOxV=ezy z8})h`Pfa#zzAmb(*2|H#I@P@cGWDe9u_2{3q;~W5bztp$Ab^^BqP;z^ObshQzp4;` zqePunJih@|8yTJgxRbKM-~p?Qkbt+0`%=67{AxtiREb}s4A`M?TNnOJdbzkta9i4B z$|o~zVcbG!SSfOhoMOUuM0rY8bH1EsPA+Crdf-9x4y#F_&a z|5+Ox)<5u47G44t?899)J8D?5Dh#c#T5IXxBg}>MEE%$>nK`KUvs5G=|17S5 zxD9sxc^*{`OXE-qrUdlTbh;FjpA!g3&@O0`(Pa8dCGPWzu?+rmZ)2#Qn_6l$$5FgQ z3w98nybm=6e^h0XBX;!26a*q{cMQqHG(K{ObWC=_X!yvZg2a$eShM9(*xp6rZU*@&dfk$mI*rHeICDtd$sdA)4scYH1e?CuK=A?x4kGG zWDhEC^c9XW+p3%~xb>Hh*97!gn44kkAGoXMkLIbT1I?qZ7>-TaP9w9|&$OM;Ts{4w z6F&YSP^wbx2`x)~o6lw1c5=L%@(A;|asf~MSayBf401a!?#i`b50^WlJBvpVfan_{+(N>Uz$lB1T(1PP37k3<>u+x_~@Mh+!Qk2 zlpFDr`K}O}*?j5E5^T++L%vM}vit@ega1r^Qy3hcA~dRSpJOlrS_fJHxOkT03cIV& z?HL29A4t-ktb(WQV*7hOq<0O-u>4Cwsm|bJZJil2>V9eJu|d^K<8y#((Kn#0)S4jA zqo0`$t9|)meD=5?6pUQe&yxW#7Yg{Lv3cBPbE*1zlXe6S^bUumx_v*~Yb81? z)wZ(`7zw6}_*{ID!<;^_c-}q9v$w@P#x4Esj&Hn-f-&5;JB)J>X1uJw)j~&L4kP*k z@Dk#{+^qNfR_yTYq~KX~~*J z;1(=!*l{oXIoxM5<0`8a-!ySVrJu5iw{53zvGt;3(L+q1J(RS(? z{j{Rid|F|qOckI&hbX;NYFz5DV`67dCw6U78VSlzuiW4=jWqxV6jC_{8UHI4`HVQX zD}4bX#^vbE@$@l@>2WNe4QA(*DXV*;^$$>7@%-(kv2>~v8+CCAyZ~cAKg*)Thu}1% zgif#rVw3)Ew<`dqC_mlrR@f0ckprrm3}@IPxm)VuM?_N! zY+5P2XQ8_KTg{jFzEv@&uT&&KyC94Tfj;Gf!W z$O8Tx@Vp$ryYE8Iuvn!g1#CHg0$D>af9Qc*v4g9EtI0q()<@LnuV!0db6e&1v0ZJB z-c7xn;M;L0tfn0D2JQXja3AU2_}id}AzY+6)o~{jLurr=ucK8|75Jk<>xDl8_xd)V zz|Z<3^iFFJdQesk@% z(P06nP^Sof&sQ}-ApDM?at>G5Frihx(LC5xK3^j65#i37z)feeN@Uw~{?eN*`E_Y9 zGy=3NJee|lFzd@J_;pmDZ#V_O8|eOrWxrT^gzx9_Y!%@*e_yP3Wb zxpP>E-*K>9aF#uI71 zSuD5qB~W+~!bVc1&vm_*jc0pJi-9oVw4nX2c_Le1C&ac!$!5T|OjUxK zPseDq&o!YgZAW}|Yerht^`d}xow|3BIuDNLMA+ZR^4OI8b*bh%_o{ZzdfGKZ^N+2u zX?V!A(w_pn=$CbNNt+T`sJ50-F~f^!fqB|hNboxjZG`QYbpmWgV^5#}NDqrX?|qhz zN?G42TdvkBF^W>l_v3M;Xx>i0Zt0dE+EOX(d85`I@XBr0hFw{WbK&7L08mWwId(NL zS$D0kUbn0MptW02_eZW6{p?;?Z&S^1v>9CB<&%uyj|%xhqsIO@>&Ncf{2sp)b?0)0 ze6tbty5OxmA4-B&Al;ZW4s>|w&m?U(OUBx$*n|SjxHCg zbx)V-zid?P@)h;kRI=s|oRhUyKiWyHO=EuU)tIJQjb_2ti1?%SyWGY@$QL%j&FQVD zQk#?qbi?aBNz2#FoEXrPZLGGozH}sC4P?XPpFfrVuCIz^Du>O56(nUQvS?L}x76HB z1U7J3w8*2ESrW>FOVP(SZO1>X)c5A2(4k^JUc`*`({_`o)FTh0m$dh2G=LVA)6q5i zgyxjJSe|B4%3Rsb2qP1wT6LVOc?#O{X5`E0%J4hV@-r3r9sbQ5p#|2sq7C`Y(&eB) zAyGC1$K-v3Ub=Z989Je|8}AhS5F9 z$^3lz&x>K?gVMDN@^wH0+UmzZ8a%cM!O=w-T?idYOR?MA=Mj2oCfVcVY~F(}HvY?% zrG@k-o=4t6gdZJ0KbXq{ToeMZ6&}#RPH%XC-R9MQu8MA_msTAwZQ>DkFwu7ql}@DF zMGrHZhmwJ7h5u(;vgtD*9XyGi$>Lw1H8_9s&GS5e=A!(u`&SkuXJ?n{V_&BL<2d-G z%Y3eJan2m+8W1gtj%t#h$V-nrP0Ytx*wZBYi+S9VuUbuEg34m^V#OHw?ZJx|2pj=BN;)?o^u%1iM==om0X03p9R1v)!N8xu zUe*)a6n%o_eC7VnG21@n*sPj7kMWl`-U-bhoTqMe-&^;dcZ>9F$ASjT_0ue<2a4n* z)n^PH!z%m>YG{c$cExgFB2#qR!N-@LDb09*-mTS}FSsOZ??a9gX=RI#PL}Lo#oUKP zr|FzlYGv4_|Q31Psx625EbyN-b_KP zG$s0`EB`gGxOMFEoCyl$ARbx+Rs+ruc?eof@e$U#b=BfRM}1_b@NE-%;lxO_d;x_e zi;f=-xZxmLps*#w2SJC;VwK_fTSx0cBR2s_JP^*mwk_b!81o>1TUkdCVpT=u)(7a| zuvz9`$eaa}GIWPD&h1=HF!^}uRjvINMDh*#m$;VhnA2{Bu4w+S%2IQmZetlc0Z7-y zc^B95SnEw+wRs>g6rERQ)RG);NiRjCgMsYFP5!y?Y&pq4Bt;N|ja9Oe=kPynG-o}| zdUOJ$GS6m5l7Y0ceH0OC(ftv$e8D!hHd0k}`$r)i%GM-UJ-5v{FjD4dzE;7jbY#eC z`v{OP)uPA4bExR#UcZyP54eyz8%l0XF|iX z3-`hrTD)~IcE$s2_14*?;o0>E&SBZO8nWR#h$2_&lH+>Yar12a#rh33>E$gUN724{T7H8WY*4Os6>rJBV}Hmu*KB^Un5r#C;sXQK%vFuiiR|c z&9Cl4#@CLNs&c~$Z_qEk-%C$ok#&9Mv^B(o;>>n3|83ydwRiZG_y{0RR#smRN4B8-{0SZ?J!o|y`S^sy;A@rcFmgoR5;VVm4av${ z)0@6nX=G7Z9)9I|ZRvSp#3=&+Ks=Ne1}t1X);`4{3he)GkP*lw8fkG90D9QZ3P>|= zcX!Ua%nRM6(Rn*QwUVzg0Ojk^P$k&{>0zjp$NUEKjc zznVQN?X4yEWDg2Ol5LVB>XuWQy3{*!V3wAt((scNZv(hyv95MAFn^fk8U1ZFEP-nN*GG4-C*t zbT$Iv4OFHP#sG*(4OChKku@YbTO&vbpH7JjZ!0cU57GmDpi;V&RIimQb^i6`h+RWF zjh~U~5DS|Uo5YVa^ofUmYKS6eqEW}!fu$^o%-h;xL&&%IC{x=T1(`q8}HX6a1fuHGyuB~b6Usl`;W|E8uh3nqNqsQL@bVq*cc zNH45<#ajrkl*2t_Sbbd>Lk@oiq&rr=%N0A1GepCR-dDs7_z#)*^ljAj4C^QqJ=n_Y zuRJYRCH)PixSqUOLu@`K1mtnV2r)lO#O4~-=mz(8bv;GA5(^xbb z%?z_3WO!*NR*v3!NmUWMUvq`#x=&sgyh>2;o97^QZ?5Z|~(m3>?rgDAh+?_xCzYZ9w zH!4-7V|^nqaw}idCqaYjMNG8AqL4KL7R8RHsMA*I%qo<t&19dj^8XMj7INUT2)m~Y{$<(wLnKHbh?EsN1k*vpYzrwl%|JLftxUq zJP;Rv;QQjb`#CVzsgaq{^r;po*8-yQdpS!7NMswqYW<1PG{AkTOID#f_0 zoRGo00j?9ib&iNRvKucL2~b3~^?;Rr zqjQ0Wpz}L)@pI=D0guL(gzkS5{nK(T!zs1=VPg8YTE% z1HUfOyAmz^EfB0BNSB~q$>UWR?7Lb9t$wQJ1e*~O!P(p(WDn@^k*f`gFv!qZAAAxH zm2$pLFA+Om2Glbv+vGU2@$%q33WA!Rqfkq&sQS2zInEm5e8Xtu zc*;}bIiNjN3D2xojb$nlbyt$ps*VU_7Yh6dnm6!%m;VcWfT6j6A(fVgVq7m>5QYj{ z(_IuHXBiilQPi2Xzo4L zS@M>4h3=6eDr6IkBHOEb*j5u9PC!$3^9R$_B=3p!pGY-9zOqQ}B$>+#^1_4kZ9Dv1 zM{)kbLdJ`&K3R&otmXn$3(Ic^=4}OK@O|Gnw@39|5{TvBmPGuUWx~v#&KMG4?Ef;>2O6vgM9A;` zl|r-DoKXx>&)y|MRgXOPfF@`pyD0(JH~o;7PtcBRb(jEa@m@cCs{IkzF}vdXR<^P; zDS+@H+s*I5SaPhn<()J%*^Tpsw>AqbmF2{=@kFWBkTyzk=h2)1f`9ROPra z?~pM`V8dU(4ESdGHo}~|~KK)%iN{#H{lgNjeRpPwRN*8TkL4;&^ zcMcgmv1oVe(SOsw4iN+d9e;QhO>w)CW%DD-) zUc(!mcKpRRYm5bO(5=j7d3yZ#)1;>n72V{e$9L~byT8o~ztdeF_+WL_ zk@38D3)b-BkDOM`^in@>^N~&Cnl6b4!Nq0cgR%zp0#Lb1`?O)>ns_4zM*+cuUpKV~ zlLgZGPsK!x-iwVk0*y69^#9X78Gd3WkNtF55`aeOV7%_i@I6ShxW|OoC%U?wJH|~| zM%^_I=(7*A&1f9nmZ&WDI?7SCgMUpQepk7jxxfa{j8S<@T5JA!jWBlI=K(m0hZCPF zzyC!>^4X7qvMWKiy4quxC%qGg&jFlcPv9hgGVwG8Bec=w^`<@;iENo## z{)^!oZ$<4s-bE1B;q}-8JAv^Q26RN}rs)J%fY@kl+q$!Jog1@DcqDR827a5^fwyH{ z>bXGk_mK1)#TDrfzc}8|$q)?R{1$jK@$zCFvPuNlD*zF_1QD}CcB6U+f)@?1XNLj! zd1760-)^GJi}hd)%S8=pPT#={6q@A>n@eyF>|mR2I9xM=!P*EOkwdqT>EzCV!}JTbFA>vz#V z;>{oS#Ez;oAVb8-Jt zU=GHOP`PP;1F9XVmYzFFO&r)4(QOOxJ1@KYozEx7MbrRdfJyQKnS^Y{-|0@;_f?}O z{$ENH?BRfa{kHf88Ks=KzLPyW8p1hZQ?lhLa{C#!^xX}9Ac#KTSXJavu>GcBN9MIB zDYut`VqlM1^eK}yNV&(;TNpw^ko`KLdIRW<^#Qj%xdmved(u4an$0Zm2O8rBkGH;- zCegPHUIwZp0C8&YL`^6)LB=>Cy0!UW+9nU12WC{@aW`bdFWe}}kw^ndd%&Yq5Mnnb zk5)<>4`;V7tG^5cpu~yN^6${qwj(=kmjcb-ita%K6S%1l^)4#$d{h1TQNtBzBG);D zf!>)?tF~}G#8(@S%5udy@k(t>Ax#_xLsVZdYrZG_A zy?UraWO7xTwYABUGzBxX#3y>7t3PQ`@20C2My}zALmZ|i*7P2t*Z)k-_{;n(dys%N}Q7c zAh_hCT)sV*sFetk_iO_~L6=lJB%qeY(f>M0+{x@wqf#EH%^{^mawfN zcwmy1ZIDv*+u`~?Z|=zk=0OjEIHF>#MQmp$eFaL@^*>%#R!BVq?0%v$FHm(t%mc0M z5a&UeeIkHB|5YXaK++ZRa);SYG0!92^Yhb80sdze6p@WFAToC@rYOa1Y@oSf$pyWH zz_{7276GlwQ*mZ%?g3hvn~kfVu)VxzxZhpFVO?+yu@PN&5`Xa1;6`U7dnkv%xkm0Q z>}{&-Sv9w?^ZQ{NAudiy)(d<;?0}}jK);(&++B_JYu#&INkhe)Bb1^U+zTh22mY$g zr*C+Wls|g%o+ald5KH^=-6T~O0`!)+Vkm|duetWEG2cZ$g^}EI# z+<^sJ$BT0n`5Yk~dYeR{6!9@V9gi;AK7;&Ix@FD_F#<(M?Cr06FJj_7SPiq*9rrf8 zm)FVBTH|A*KU*nYq{k80SU5J=N{yg;U9{`bd>6 z<#qB8JAW~bO$2V9hyyMJcJquQFMG&%I?4@oReEJf>v}fLy(@U{$~_@cBGN)nF=rWD z8E|r?$lQjL{#q0-Q7=ajySGp6ezV46iyGZ9c1T>5XP9Ks-Mz7u%{+s_!i=zeig* zkCL?h)XZp^cUJ(=V!^X0nncmo4bd5-M-hc zMFuQ4MBe#RRI~caCI81nA5Q9YL&0sd0Pl-cE|@+7HdGN?EN9NPt!V2gn-tp zHA3g@*DboT zzT0!qd7^cL9x8Yu)N1_TMhj3Lw!AMdJU+1rPB@z`$~%9$D@j5+U9tG8^ywh~zXS^W zN)x~h+ILr>13rz&T~=kMen@N)TLOPxFom(YJ5Wrm1I87MZ>?v%5AdmW;^(+F*H(m} zfMg3iTZB6)F%4jydXFcdn*tj}`Mz&KMw+lrg7;|l;ojTPudokIsQivn&a}cEcN;6Y z<)R&ZdAkvRLcPjL|0J~rt%gaX+I%e~RdBE{F;(}K@%rMIQ(O<72e*0v`vzPvkbFK< zP2iESvBQwIOuO!6?`KyJLIEi`lHnldAP0^PsM6a+Kn2c+vt&UWZOt~F%&&y+I|0*7 zArJAfcgcT=f=9&eGXU{y1zZQ+*cM%Lwa}%Qu2K1Ye!J~CV6yL%(Eopty>EO9WgP1aR8F(i z>TNu#u{NbDb+T$R639_|aKZ<{+@e_x%H57B8}AXAhUV{1O10Sv)rSJx_m0h+=)J?A z*BTWSaxQlqAgW4@{VZ5`aSW&l#u!_7GZWH`fz&d=vdQM@Y-kAgls=9P`)s~ET7mw= zu!*xovz7*D!0f13-#41tkGIz7+TT;XDsA8lbcvwwZV$lM2C()^waNy-7#HAi)|_r& zvyY*^x`~QBf4a8fi!+(h6<10kL<-RgT#N#m00RJbfcc3FfK7bGV8NcOm+F_wR9{*4 zp|m07QEFzhr1t~$kL6i492{DvdRgG3a^s0{pMr{OrB}mEZ3b}tDhC9K5b&x%#>K&p zU*f5>1=*!4{0H?2>z=7_;4j4&yN4ZHN4dC6O%KeNZx9+)r^-dU<$>mgDkiH27+gD)9OY$LVgee`gMMl+Ai;8P6szfat{ucl zYmuV;efnZ7(zdz~FV4;JHWd$dqJ>oD`7-4*JHVaTkq<|88$C2Xe+)@Xg$_YE{kPTg zOEF^i)pWpGe~>i|!n{!4iyk3@!mQMa`f0*g`!3=w1E!h$e@ff09|?CbfO2#LluBBg ze{K&RSoWpV7~b}}jR=hdsFv`OQ}?DhGe}9RtPjjs|IJ=qfI{$wQ+o^xABKuVZXIQ` zTYf=D&{%B7d-0l>iF?%+ST4bc=*>Z_27pTP>UjbKaF<;w1 zn2K^Nw8oSd)K93b+5uV|v+B0}hUYPHx!ivtU)NWp#=RR93J zj!*70;uu)qOndwX1~bGMCs__it_5WK)~2Zj>+~R2w^(e^M9;#%rMm2y0Ec=GC}mFl zNA)tKy}oAIHT>P!^cQ}e+;EfPnGa$$u<$!Qzj-PvpuB_lY3;m=)!mt?8bKd(0WK~eF_=&+Oayc^KHudmKDaNq>4rVt!j zv7l?<+v}|zgNOG+Dsr7_lXrTT8S|wa!HipmdA8pBA!n`O|6eC^bR^iYhj;w9i~O^6 zxYqaPE09${pHjM|sjMM4)(nD;Rue4k*SGCQF(I>6@Wl*mWfn@%J!MQ zk*=tn0uPkF_Z`D?1N`Ntoug(4Sv%tnFhL7VoEiB37JfSFzF_d3P1*5oB(%^+8y4Q0 zymLj)%82m~@aru@zApGN7ttXq>0$U^)cSv2EnVZ&++9a;ynVZ~sd;B%4+KnEfr1#u z^12VGYo($ubmpiwRc2W@({?cFRx4;I}qdWuP@1Y*B^0 zTA1~bxMYd(dgAL-D5<36ho6jsn9rcE{Ir1WS)pf$8^nb%G~2X*8$z_qr?wdgY=2)M zx=tv@1Yq|dxJmqo$p_-8mAYw2I-r!t{d?i)N36VCzPp6UD{&f&gaNbVvXD)FOfZ-= z7D@)Uls>rCs%nv--}v@Q#=eN_hkhva_%U*)?P$W7)^wp9`)ld4&Ka=7f3v*A4TTkl zM=rl-eW$+C?3@2zPTiM~Gry~=Eg6_Q8l+mP5zVGMaz%+QqM}kAkk!~+IugO^O3g)s zx_&5=Pmw3YYt;^UanvAbW+{_SJ0BQRI@*k0Nu4eYd0}yEIX`W}VpauU6ev^2o;GXs zaIN|t|E4Cwtl0_4?Z(;Fq@Ggl^KYFtuZ?M#|1PM0jK)vvMFI6|^L||Ok2mYdQ#AWy zRXZ$xVbe+1o!XRao~)3aS*}CRP@rygJr5Q9&gyXSZkSf4>8J7;$@;(=@J%fLOVf-e zHz5Y2DpfH+fhoAiaG}r(0*%?Ko^NeNye;O`Zc&*`My0y*hnXtn$>$WJD#4?Qo#jEv zAl$C$;NGG3ep|WGq3vY;9Bu*U}54FVH*EqRs4WQymo;3gwOAH`lpz4 z6QAKPURydH5>GBRN>2nK0`~irMPF!@WT&>!cm^QEMe+XS;dq_xl^8g|OpG^a`iy(} z?PSoOchM?pPmxT~K}^j#@hRT0y>Orj&(3cEGm&%s(aF`9dQL+Gs}iGL+9&9Ki|lD2 zdb~;;v83)1fz#PGX1+4bs7|43X`=Yp=8gzy#j^|QeS;h#Kfmf6X;qE7W8^UUc%+#y zrV~$o*kj{aFN;CyhLfmNw^xVpzrXt|(Ir>TX zU|g{=9|-(@H^VEI{HhvQj2-pMr!i#nj@suZpNd0w1xf^gtbq_SGqbGp9)+vmvDiw; z`xG0ZXa1#vj)9`p*~&XkalpJJpX#c9dr|NOBhVj+_i5ZymIKqd99BqKMk+gl5OY=A zj%aJ)dS@Sb@RT*E&JfD3aCeBOm36spem5!AdekcMY6`L~ky@}1gv29%CTt_6j`xns zmJsXG>97Qc>^B`|Mk}@ZPX<(IZ-o|fR0^35yng+NRwo$sd7_-dhWjP;kwuf#2c3x8 zYby)W93Ii^#29PH^zj$w$>Uwv6@yN2PXTbkSA_#oJ~-PUzezu3NhLzQT9m#pcgMRpTf>c>3>-BxlRv zme;Q-X>}g0nP$Di*)?oz@P2SQzsH>37#gWo`sn#1VbL!l@b!d|`TIch2@v>;a`@!l z@(xuVg8CXE@T&pZ3=Q^p@R~&X5!^ruJ&}@ZhGFjp%kQ z>C>Bm<~dkkHIPk8W}3y=An~xBKU>K;4j@u2WA^1mc}+t-#`9TwfzE>n{kV<}a?rjmyaMHVlHpw4Lw5icGjW zuTxLUPS-ty#!%l+GME-9)Ek*`=@T5wN9D{lb&pwRAF&-PsC0~3w@fy>%mw}&TXw_s zVaOw^4`#yoQibc6myDH;1u2d5!*f-lq3aD&s~+pst>#=^9b8ok$1FyQ1<*)zxrM0SvEiU%!5B?zP|CoWbzElkg08 zENT$Ko>a@q|Ku1;IkG+3I$2m?`z!U7%y6>)G=v&O4|LM zz5#YpT73BXtK6z>)XG)OhJF^7{e~-$mu7(iGL4l|=rzfr>NOd{DhIsl4Q!2Z z>jpRq2IwD7)neq;K7q7AG;i|^^?sE(bZ*xO*3g4Bw6niqLz1M|+@ri0@hLG3ZtK4a zqGv(e-$82tdi`cY^)gP&rbmXc3T=_7nOHq7D3`NamD5@_zopB%A#2uV)ZXaA+-Z18 zXEF|tG?o#7YzF08oGT^Eq2+&0Er6}=aI*5j12dsd?tQ%#vavqEDmT29O1EHmF-y2{ z>nB{T_{o$Un-bIblwHJuGD6L+NqjiMUv)orSNl0a<4hD35!0-)J2bCQ0?3EMS&2{7 z141u+&wF6P;XhYtYUSSCHRjf`H;2l6OLL=DF6J1!h{}(oNCH$5tyR8d?dBm}JqtUp z5bBnU72nH-6hxt3Z61eRT}!CStQ5j4IoetSHzP}XFCX*fus*<@1ZrMb70vHI?RTAo1V%+KGw?L6@&T zs#BPTqiW_$)-12HhdG6I#tAEkS2cJ|j*X0&G>s(^gAa4ZR}*fBgR5g451~BlpM!en zUz@-8jM`n@tt|qpQD{_XN-?9F=%J!83p{n~ZLRDH^R$GmIIm=$Bd&e$nBB4Q)G9&_ z;SOGsi!ewI86(pDb6vIDSK8}eK=QvK7w4@=K2R$9kBp2|mjGLKD1QaaumdFK5g81U ztwD-h8}{&*OnZy@c*ftaUMZ(WgL$%A(5TrmFjsck5oh7&8ytkP=%R+o=S6kD7B4>r zv+klvH-$-Bu6$}-T3uD3T&-I3@^u~;rIpqNx^BLhGY!uie1QQP0nof9%qO#M5iz+o zQ8PnXqP8_bzFCf716#O8RZZhj?4tvcImTfcd-yZR!bp)MfB#D^?I-_px7A3F zY_Wy|Sp~Txr8b<#EvB83kBp-^_PSmM>J%-;Eh z>!q4$p~<|!)zaO0(jS+2JMPlkE&1P;XBL{P)mhFzN|75JjLHCu+G||N{I2u936ed! z*EG1^`J7vq!QzqM?=k(N020H!SGxR)C!~)*knDGsVeL60Sz@o85^BEk{bB~NL0;?p zcNnXeFp#-2C8vmNSsTs|mE%oVnqYK?=1vd9PUk`rstlxVuswQB6u} zJbPKbkmQIwK!h}p*QQ+tvi|eu&vq1a94H|QX|EjUjqx1c^_-0HZ!~t997nZ=H-=85 zU`uOWhcJAsn$|@<*Hm>_c5e(6SH3zPQ#zA9W=w6}*)Fy9azKh^C$tpxl(|Og#(6jE zvF8*8GDS75sbO7f47?{t*csW?*0dsXB1P8zogze^g*zMfq19uGeQ^LBVPIk4w?9X2 zx36Y!Gi))lQ!^ELTT@&9{zQ%Ip4TblQ3t{%AULAif~ zrq{*^T~*3S9kZ*!0GuG`_I8{=NM7r%Bkz0VPRSar zC0@yU{t+V35s{^t(p4ilj}Ofo5%qagqK}3C*xdM=Yox-R{SW0XfJ`c*ZQj2+!Q8;; zo_r7}ANWj>SzMsBlDu{22zqhvI5y7W+_{4N^J#_w#}~gaoHK|~Pq%BzF<8=W#sG3! zteL1;6&`_;@Lqa(cg`CEl3Q`-op}ThS2C+tqlkNG#?ftc_8nM(KFl9UlNge+uuE?} zu{5doOYG(eot%fvahHMwa4-t|za8w%J5f=&glHdL1q5y2Zx!)V?2)arrD9@SjGhR@ z(l?|dX@Ra|W8gPdFlM^aec*%&vgo%z94zK8xFc`oR@A)L6&{*gm1us{ZDmyHy|SHF z?ad3r(HEciZErX3=_ewQG!Nn_u)1*~t!dRiQj6iolk z2+6<*)qrxXuMkAMVdH&9XeyD=fsYelf*Be1E8E~=iz{ghP-P0JUh_*cQbz-+0eVCJ zFs6}nZjevKZXSZ?PIVW9-`cnxE9b-D_Y^uz@Lv!>ArW@}R!DXSb_0lY3u_Gs+L$Kg z9q*i# zBOQEjY0ncmE<5)Gih`X1KlP39c%p zvUIEJ0&^GM-8NSR16`4TDsuhD;Ji2l?9+o(DoRFUzu(`A_}K#7;s00_D(t+MtUObg zn(pe#ihNBso&z6zM!_WCzqRn&=_)I)L`7~6(UL>J-qr%@_Mc-)>AXjRrT-ybK1Q?O$UQ}gh<6-YEI7Xg`n?$cew4HT^kFZy8ClJ3&C=@SJ6 zXH--Jyzf7LiFdUM{dkXP35nk-A!j#4bt+i(_}xOhFjXE=RRDh6N8-2sV?oQ0+z@Zx zyy2}-XZ+hR_x;6rJ+Sab|5;lio0P1FuF4<8|L2eUmX??0T=&*zbEk9*AN~1Xe1_}H zjes|OCLM#cI5tw_gTKG_3yAICNP}LhFWKnerLVN|u&<@DNoeK39v$uztQuKKk-c<96>}+H2BnWX@hrT=rxar6PX%E&`rJM}iS>m5 zA;rImxhHSm343B{vbj|}$vYanDN^NBf3j^fVcj1Dxc7zkm}mh;nrK)r%4hxi6cQMF zF&SAChQ`X;+JihgzBhkg={mgU?ans^zoTmtS}5uT|AF4zhP8^;4|TvTm(Yg$|NbTv ztf^w7=#8(MBrIP35=U|7?JRF%Oj@Sba>*Rp!!DGO7ax_=K3H zpu0@s+kWOk3{wG44>zt)^4-6ENlDkvw|B>fzu{amQNL!7sv6f>IBx?%+wutWRE9#_hPUg)H2OrFj$1WT(alAd;BEdpZWWr1hC+cgmdF(GXb$1s|=| zEtt!IavY^8Y{wx=b9KnXNM)5*XwLZL!U`c!@c2B>3|mzmGc45d_7Y;V45^jdbA zN^W~$ec>&UQ(cKdlhBa~v|brauvrDaf5{%RwhtKI2!QK~IxXn67zWj%t+PR81QrKEx@HE{&@aEwpstd>vQ?vo{|PI zmd@4{F7#G74v$@P@c2tP1ymF+_~t&AKQc1Cs+?TzJYB7k2?#ont|304hfK5bPPw?8 zVQ}*Wk~^CDoWR?miIQPznQ_l`CMjG~uRv(N_`J7xa!5ihRlB0X6g!TS?50zlACdOk z9KfW>G#+8#ql5=c7k&H-fxv`>q~LwD;38Bf0{m3u+!xtU6!D4k@@I73Drsyy31oeI z&Tc40J(Is}{QLAZe}ZFcT*KbLbp23KYF8Mc&)=D_W>vG5t#AG7D|y;d%BS5@Or4ic zU0R(`lMeP)&yJ%Y@jZ`&1V%F^1~-kliG(Y+2dEx!e*8?#N(RMK()Q2Mz3>?i7OSbd z#Z+c%P#`cuYlDcS$MHn|nSRx7Uj}V5#T`Zp@DT7PfKIPUwZ3qn)IorUB;Kxd29d<6`umqbddsDKod{?gIrrdi1}nN5Iyj9p%Rxv=r{ZVNFvbWvvO@8*LeO zGtD?jgJ0%uLhz0J+@arT@MpEHZUn8|nJ53e;|lm&_*G|PaexF_2GB>V@5t?^#h(ie z{oAv*lz#%TiE7~+_EYXjiBWT&%qtLL!d1V!5>KnRI+m;%3K7TXlTJ%C_qMxL6<)>5 zpnP(`mQ~)e8&fW;sG4ZCSB4gjK%7iM!q3CIG@Qsn_yVxoN0e~Q(Tj7?y0=|jG2#Eb zQIsicLK}~L^va;~ahuyVRMs;$tM}@Y%}gT&oOVf_+s3Z7u%+~d6gy>Q_Eo$@gsp`} z&^RhVqA*gpd$fv-98nDX z&>FAnGCLT9S8$&U!KI8Kvp07Q`v=RXweoA!Lb}s4#;1*^wvt%%(eU@JI-p5_;1gD7 z1b2Mw7wQ8LL5N5MN{&=kA(EprKc^%CGwNp6m;XNeYa@N-+L%S8S|2F64>O6URnw)4 zo-HV|3tpnncnm6;qtbJXL1jZ|yMv~tW~4GLum{<}8)mocp3RKtrQe~woh$16)#Ep~ zN^A8F3{F?!ekH3SLUKVklm*|vHzfOjxi7;bt@0>8jrVVHaTjS+tp^y79$-8JN(JNJ z-!FdhkK9lJx=kfS4OQuWhJG2(l#Y=ywm*5e) zEl}MP3uA4Pht1DJeSrH)3T7R#4|;a?{z1(19R{<$?={pAw4P?23movhjRcBvaII-n zY*uyaFGAOo4H#lI=)wI0u@Z!)X8R;51Zuhf<(pW!#*ywO52-aEtB1G`%B)otMLQ;2 zzmEq)EkK2X+&eykHU7*-S$fRSHIFT|$Nyp=87<#-z<5QVFAN3&N)-H~GH(Z9)!26C zg$a#|K>if+FDtWk2PfAuxLE>d(Lzno6x6zN)c}auQ1Q=#>szrgFJTdba2tGUrKy2zpoj(Wh*ZNLy_T~Np@vsbk#4%MrV z6}!5*dTO;kar^$N-C;dgH@h~mGwaD(cNohm{}~@zm1>aey@MZ3XO#{Se%-jAdAas1 z4-2{Xbv_vU`>%?YGq88Gi(rAIDz)D2ZZ7d)f9(IX$IAN zf;Hw!N+?%X4(T(WT1azWNF@+;N278f+`~1MPU|%@S;IVLUAe`MW>tBTME?dLui~or zY?q{P;D=|uhFMzPFN9TAB?N9UsJd9@C>Zblnw;2apj&8*8;jX-taGlF-v%7H@x0qi z;1Oari6N}>%Ga+4idk?--?h%iD*_x%C*Y#HQEK!?Ka;P*aI!f#Ndz5;f3_(a&?_%&T%7)@(%2VJe9}_1exO#YwxLFQ9QY540 zAT$i!rzibF7c7kM9buaa4cY)ss8K5L=#i=|SCo@;5VL~3XyPBCdGE7NLeau4)5p`7 z8##`Oo>rCUNG(!k@Z~v&gHTMQh!(&( z(U9ym@0}Mev4d}+xXojL3l+||(2OJSQD_;5Tpnn1`;A>?^{2;T&7w_l6MkqmY$!8j z>|50~iv4=^0}uAwGF$#D%tPjIi>wpcqpm^>ksg?5Bf$G3(H%D6*#2mT6lC4!j*wVn zJWfSj=i(0#vdXyMJZjg}^UrKJ=>Kr`lhJbBhN*^NWzL>mfuc+m3PuY>iYXU2Y zZ@Z_a+1}@lJ9diK040Uh2{NEr*zPC>vl_`m+Lr0_wAgjBAR-;MFTc)=P?TqxWrZi| zyyx-pX=B=+VVs6dhrmCgEYp@5haH#{qB4Ls>?2A2#*WnAq3~WGIKprAlvZ;RMhmK! zI)Y;=3er^*lH9{h6xbby9%EDL1zdT|$Nr=o`<%H@dudiD#^(>D+)*lFALqxrqtLDL zb$|;P!s9Gi%l_<9QRi|M?D-Tg2rf?fWf??E0bU8 zO?7(7j_$K(1-Wa_FvF|WGuv$xi`2@qHMF@#f&C@!Iz0Aq;M9XhrWxhIpQ22RPwPRKH*b}}AqsNBdM2fIBfM=_-BCg{PkE<~oP?I%Uc`P|9h^ih zPzE-IgrqHf-R=ilaqUuayW=Yc#IWamesDlkRmx4JFA%MeuyNEQgmMlo?M)4(+$d~x z%1r{3YqXt8UhFFCPh&H24!JLQ`FdgX`gouk|0Q||CLkvS)YRM2w}dwM!WBp{qH(SF zdhS}sL^Xr#y-?p%(psTtCbr^)51W@qSs}Q?Z+(}#ALHXKp5|PVyr-CMX_VRn;~aeZ zX?(OucD7Y1Rr9L=cUXabj%r|2Km4^e$V__0pd1T)kOy0@Em|7F;EUS^cU`{1a~>oM zptaZEsyP7b41!kxhNYAgg=~@qw-(yah~DL$k~eS+sLbpS*c_>)-`^L>VjO(@`oh<* zmlPTDTL<2kV9V)r2=;90jTTwhmqBq~Gq}ds(gcVOU%8SdS7+5SFq2E&r9EdW%B-qZ z<)UwtptaANWtrbM@rsu4EjR(k_A0P{62j7s*F}xryJ5Ca6@^96uOk3uBt!p-S3b9!OBmd zY|E7(!$1qdJDVfpPBI&;;ov-<^%T?9E~2@v-cM7Er#hW2Ys2Q66)l*T@$p4d;cG2} zw}&1W2E#Q2TjSs87sECLXr;8{ojEf3xNRGUcssf)d^Po`1SMnSXpK6gZgWkyAv%`5 zxdT8HaOL$bx}C82^Yy4eP$6y~6?2m&_G7VLAC88n-DN&f%F>>56x!(>DAYjtj zdS8D@Q;Xp}&p^eF*HnHbL8RR%sGMFKiAnny`bNj4COTybwq+=GXKHagnT#tCK z&&9AB8S;oF$M)_DoWaG9Svaw10}5nN)(gj|Pq_f`>-Lno@m(G$^X|53JQU=TWq@H{ ztu42_!%Ten^E8z?&Q=BQEER*b9|~}~sL#@v--+g7V6%Lhn7Q93`u170^fpuO8v}NM zEG=^r_Lk+V*Pm-gw&+(OPJeYY{{=(f$_Dmh zUAzd!W!;lbkmmPMb!gCaz?A?L{O+#E+S3D(&A>qTNV;^8M4nPu=x~PSaoQ!3)U9Xo za*FBW+!>g_W_w&pl;ZSgqc-HiG}6E-;IFS+!wWY>j-S0kYj9IG|Hb*6<4LjH9V4%) z_4C>!BOKkBKyj4As7VjfkaW&b!m9r|QCzZ(O%uN8E(ejJz>2vuWx`A#7(r&gKDT(R zUYQ1yU8zbxe~PrbJw+ba2=MT)JqY@rC*%#d#L!bjDrUO7<25e`K6&EF^u>2a-j`_G zZE{5n*#h~fRa8(Eg;)nEBiPa{!fULUkLfp6xn?<|V!dN2WjI64BDiVqYiee0w39R9 zT9*<Bk$upxB zunr9v#MChGT8X4rvnMWMQexOf!ZiA{5k#$I(ruo-aI&;=N|io8_q<^luXnPCQO|W* zTizK*P1Z7$Ee~*MMt5DBCq?r>uuMSS1$5V(C+XV0(gXisTw{gT+I_Ei7si!So6HU{ z-;oEJmY7fd6{57XBMVl;cO-i3?Us;DCo%UcUDx~1OjG6=s58S+`Q91N?}>QUzTJwq z5JRuGm03!({n*UHzR8Ys-)Nk)K-*7C`4LNWAd9Mz7V)SQ>D6nnWYL1RY7)LjQ%ds3 zRU&x%*d%K`!oDu)mL2+uPjBx2-|$HXL{Ktjg*!Qkf1&ajb2|b^Jcpuknr>f>JkUo; zqP=acEJ&pSU#I6kqJfR(Cei+`#OVK!m7J#_D_m>3gWmtH3Y-;=0gYd-{6D-5rYQkZ z0Hy-67B+EB`(}bjx-Vn~kPxJjCZ_)r*!k-zGSJ0XYyDn>!C(?6bXEHb3y*5cfXe<8Z{PjK@XL$^PjNF z6))(WdVPxz?5cY9Sg`Li?}%P}QmUBW3FO9puUanX0NpU4dG(V4#7Z_vVgCLy4~(&x z2|9PfX>L<2szMN2ssccBM-hB~E5d-HAuroKw0@_wW7~xXSzQ9vAZ;6Z%m%m+jKR|l zn;tCE^!g1#muh9q2r3=!ep2}{CS^ik#6GdOqy)}-4+9*qFjn&&n`qrJ0dOpOWAuIF6MJMF=MPC@k6pA8M=iu&`$IH39<|`^6k7MX4S-v z{Jh?KDj)?)2Iw~TOn&2P?8)F#m^67_o+4KU2K6rjf|7>Hp@nrG9u>`onLPjsH~^>> z-m153-?AF5nFg&jjOrnMYER~7bYO#B7yfY|%I}AknTNrss@8<}2 z^ZW@_=wDD(wzb~+Sv>p9au4JX8|p${l=jU}O4~JDupC*is|R>2HXBjo3Df=LQU#6> zvz%-*haPqm*-GDY`9y#+C)2k!l7Fx!=Y4#=b)$c4?;_~f?4*p zM$Q#Qk7c1|lVY_y$a`Ehd4mNXq{uDMI4ytt<;U3I{SGD-l)PS2s9yr>?^yOVUGTl$M!z@Y^SiRK7*8W-4M@91C`gJwL7>n zkS0;`J!O}egOTaKMYu{jHpR>uIvwfXQ#O7PI4^B~lm$}t0Jq$=f;k4v?W2{rHCk1! zYo@WKTz@ghS9>si3(I3F-hS!!esIBKo^Tpjt4ddEuI#n~{)&8|4!bXvsLhvyjvCwT z8PWrh()iU?=BvM;yl;zTU!fgea@%ulQCDFNb#6qX@sM$XU|$)K=jGT6muZzIuR;?^ zVz0HS#2|=vvbVRsJNkt8b3Rt8KJscCy@=71)?hd!=KBl7P~y3_XbgJbnbDlcQFN)+ zlMsgt%=#YQ!q(}c;$eJ+0GF;8yIOal;-HWpt`Mo{@4y@RvTFi6BmMIhb9;z6Hpz{o zqXeyg`jUw`byIqEINCn*TMc7RbAUix01wzlrIap%|E+IsoY6MsUW01EHy~Z?!Yi3U z&*U+Fis>`zm7gs~yUP74pXZB@DA2G&itP?B`LNLOd^CO=8A zSMSye+=B`tgU9b-40ITxS=pnr(-$uRd$;<_-u2C9P!J~1SWHttel=wS%{*=t`&=Hk z=R%bZC~;FYtVSpHRbDH&{^uL9@JXa=jB9IVp6>+h(z@CYw)3DXtWEDQclcn1r^JKR z_-k|cQ#dOud~Q(kBF(3FzNeiRbgraqy2qj|JK9UB=y(0L2SI^7Zk#5YPkEbU=Or|p z+1f}wDss-YhLE`-hJqI=AZB=3Q&XcrDog5Y zLR}h9?NYxK3s9rSSZs^xeivnp?8SjjzWu-@!+BfgfQUM6X>RD0B0s2LTvRl8pn`YR z8#lI=J*8F%o%U7Vsd<91ZTTcc;f$KY4L{mu*chXLZSxsRXlB?N^#?mShGer{yNPk* z%%7?V8TGY4)g`M^z&lAd3~|nVCXX(;#C*)N^S36JztCMVmXnn*S-$WMU@qapH`m!6 za_v+i@{pd3|MW?Zs7K|-DY{abeIn?i};&agMe9i%HCi;lpzVp)x^%qRG>GOUy{FuZ)> zgKi-$)W!G4UpXNhz(gh*L(q_mcy>3!;xk%=`w#l?&hc zcR3{XIkd-bh=lMpafQb<83w#&rgHI)_E*&(y_By21r0eC-SN%V&}1nDXlciP7!02V zh3l?QM@=PJFYf2WVA4m4R;?cXDu1vDTBt$WiHU?&Kf`Ip}o_tW(}Gz%0lYl9^lML^?nW%*?G-|C?XC&>+KU(NwA-+ZbKiU^k3Q;LXkyZ= zJ7y<7j=dfsy_sLACfC5BWzo-xL^dKiHZ+*6qnl_W&pLnq#NyQ+Q(|G-W6@;io6@Aw zFtW6qHaQJo$WC&|Ksx8akLAAWHN1egn}6pm_2){YOn{4av7AA!F&DVu>2@2hDBYFg zcj4Mb?z#i03}+Onccp2c50Lu-66SHQtrbC<#nd)EdP(H-i7z~UgW<%!0wvnvzWhc| zMGJY6>mg?5B!D6~un{vOg=kh~msPg&-LUh`MGbJ4>iOnR@K8VT$ZsN&S#*UuQof+h z@$P#@&2ayCo_mVtkLIPuCH^G>+L7I?i!ao)T<3It%d4Kt%yyV*L7y;=SNGc~k$nQp z;upKtvDxJYQ=S0Krhmm_J#HMF7#&zomF?9WWpy=f%h%H?l&sWVAnJ@6eLPcDHt(LPor zQ>!vo`&L8Ir=m%MeS`P1pp--thxxY|#^_h}(GrFi+tee{)MX{{7S~0_wF`|N_8Y}= zT`iw-&8M+UtW|d%hB;6WPC04ky3ow2{6p_mxiFo($F>bE2K{qHc`gJw^z{3Of_;M- zJ*mKqBZ%kIz?JgM3jxf7a3zi8RUzJ@CLrG8oS15`zr3JvD+g1+$z zX0L}~4Et>cM8~)Sg+*(P%esVX)iFI<-$l69qU0Z{?>LA4gQ_`Ir$Y;8R4P;J+In(b zLW@ha~ITATMDc0BenF%v_N3g zetI6-h4u`FFG^I{X1E$fXFswz`e=#GlF3Zbr{v|+=L_ym*!87cYO`#JIGz1W${;^c zx^3zEI>J6Eg+^w&P11ei>w3xyJ`Gd>fBsQJ2<>v~NQ#78l0w0`kuoJL8#agopFe#Q zLaSk2s4anBmWpxt(2h7GRSqZBJzBs9gD0Jx$O z0?o&1-{Cx0!hDA^YYW?RSoZM)o_3uSnml=J8tDz(Td7DaW3;>-QnH)e`7Bjo#*{@t zF|=Uu-T-QmbrCXP&A}!dEqIf@RVm*Z8QUhQu)1m2CdsJ~^RbwHznwZ$zSwO0%rFki zA=!frNrWrPCv3X6Q5(pknbk!=loIO+wIfXc}p$OEsvRVmXF^&Q~56 zxgvgDObFV^lnxx>lXv0Zzdf2LhEMJwcH@jKiak7wmc7IFg=;zQAcw>SBi&<9Mbqwo z@1CYDhC%~BUK{=qJ}u{buX!DJ??cj$I4QSMz07Jc&IP^;8GO{2aNNOdebT0}T>J2< zEFmFzkiw1(7-MjaP@z+Fl9>3cJj?)t&w?4YHv!Oa{NrZ#Sw*zF;3l+P?K8gVZ1SMq zQ$UL5gq~1RwA+YB>9U3J*Y+$(=+!OtG??W$A{TRy>oJ_rbm0h_1zq)b1D>FZ>aP$a zp*r1L7rw3C=oSXPaH5JAXz=i1DOX6x%#OPG39Tmf?3z!&Q zE=Gn}6&OyuQ;uxWX@C8kA1*sx%w~SiG%kF*Eufy|Mz`M%mwb{y0sC=GJOfh@>E|OE#CL-MX5DUgyNi-sx5m|afNp9sc8)9jg?!InBt@0C zT4SO(o;MUFp9%cD0&JRmre^!Zm&O?yV2L>&vLx%BA9x~|K+8&z=fv0d$ou)*I9j5> zqIIxNT%PGyFiECUR5E$y2UJ``?voJcK%o+bcd3Wwec%IM8`CwZS;;h4swnN7iQk|L z$;^y4${V!;N!=v0A`m>8X^u`4F;n0fsc>Olmyq9@q&p(|T!;(Z(EZMdWf2q?LVrnL zY`<`llId(X~N}VnFP;cnx$@l6|Q> z<{BH(^UiLATEJ@3ttRix<0+(N24v7)PlI8Gu-4N9pPGV1il7r!z3O&TnZ%VQY2Ro;lnE zwTd8Ja%ZJOjq+WLjEd=UU5XUQs3%GEkzE&En_@zq+6@(Zqaa(rAg>49@#F~RG3qhR zeIx3Jn4BJbGi+^nsE^=gz${ z-*f%N7tIlyTN_92R}u13?cj&Xsf@gjo{@HEH3j=FU2LzF$VW1V;0A~r%?3bg@R(+60X?&XuZ#hnaOLz zcTJiu0mJ4|2kxZJkX$GHVY@J|Z)J1o<>uP?*{Hl1r3Dr*?<%E_EUZn8whX6d8A0|- zHSHgm!DnbrzBjHM^&AeWFNz8WSr(V0BdY@K6KoG%fOJj9Oy|y5P(uYTh{Pzrc8#nG z$)FWSKYh+USS%6k9IMvs6i8p8$n2xb4o3`4YK-pfXz90v+@)^NV6OHwon;a}!O&(O=) zafW~TLOm@q-cAAnEMuGB@rTPjMBFy9ZZIRY`_?n@k}*8Bk(=LgSBIA8=5{glbR}rO zw~@SHtqbWe{%du%BrL^eymNI1Gro}U8P}>irG^Yp?-NcDPsv7}8y>P{xuz}Yk`73p zkGiE=pu&X`uGvPiJ3Oy#dVK(h5q*6u?2IYMZ{0k%O?Yt9ot*U&=8PQ^69oWwWTi+gd%ToDOwu5xc<`EuV)}0v`&Lpw)=YUyM_Z%`4d7 zmys~e^vP6tDD8`M?P;M?43l@$XjKbtV3w&Y?Re589Ui7z1gkzB;EWFx<)>(pCb6 z3f`*My1_@Qny4JbPJ3Ba2FXCJ!f9N(SUYvB@oSqhSIYuf7k?`})XI~9clHF#zafTXNdh2wu zbw|5R)Kq-#d{62Ak+bo0jVsZ|{3eUKAXUcEVfp|)isV*4iDW?&KRb#do?nB{XhEn1 zYv#DhwKUj=kZ^Twcz2l!Ax^D4!YoSz>`m2P_h64U0_K_je`N@HJ=4)%D?DO$w&0F9J@by3$PXoh#g_1>J6{t4+BXyHkVNOXb_u|4QZmQ=n5~ z<(ozp+;^Pn9*tJW}koPp^!uD8zty+tK0OUN5<;1 z$D5rDd7U{Z25YbSync27w8NQPxb8>P6%q{z3q}5HcMcSxEh1F(8G(br+rDEfyZXRg2 z-P#U22)I$|u{2uVe#-T$?}8xR5+I1UW>s*_ZgUq z=V^Y0%*d6fXzl(cnp+|$2VtMCIIrxTfWz~3HD-i%jHtr+35wV zDR(M|0u@n+WHQt+B>$BIVYgm8fikk|)X|C_{uksq0Q zVUh;{YJ~uegxSNNoTrl=;$c0_cOiujDIhu^@2$Jwd}BP)nv3zwV4?DlLmar!Dv8V<24q=mv##sQ$Az!$RxKaj}sb?jf^NPy< zn%(qFhude3!0(YfEF4O}EW6sC7s{4(m~{=Q6Yt96-13Zh6_N#-d9M7|=xy82cQ*># zQ7Gu{pw9k2*QWQ@%l^g%-ped}FIZTlh{#Cy@GdKBG*!H=kz{0!xO=}!`9h^xb`;KL z$*cM3@!e#U+`nVbzPJPXus?QfCquc)#OvLhf7AbZI2Z+}gk?4heIs7%adUTP5&An6 zkT_0iAK7cUzw`Y+;)sHLIwtKO)*GB)w<^7RW(v+-mmc6tTEt%X0gMd_rkNy2PLlYQ zUlPC5d9YXf3jFu0Vr8Gc;-nZsWe0%(%%2p1?Fs}5*7n-_>)-9V-hYA!$+3p5{=dBJ z54!#rx7vT@$bQt6D)p)u{oO|+7C!H$bhZdA|9|4c{&)k8LXs%m?gd_MczxNVBd{kZcYxLv@@wiCe z#iyDlf$H@Q&Q*2dNBV3dSj{=ljtGN*GuHF2;H&nWXY$_-ft3MIY7-*y8>z$Ej^61_ zW!!$^dD7(l1|%b>CzXXbb$9M<0HIO1zoA{5mCYX)BgL7p73lQ<|=2xB<{LwgYJZ@Yr>b4G|yTS-)}Sj@*Nn z=|_6N%_V~hzJq-)TX_O~4a$lj3cXaYZvnSMQ|n#MyXVg}33c}y+|!3o^Lyio7VmA?Od9 z7q0CFKvli?5ktE+R)J?iDb3cF>8|39Fc2Lql17!38BPT6F>Lpt#-xY3D_WVYe;;Bt zct*=QeH^wqjTLo?&UrR1$zyIrfboYQMiX|aGJ#Lt`d$c|lKa7C(LZ>Jbk^k`*T7kO z3rzohRPfXSX0NB|W)C+0x^~7&t}^Zj9#vy`7J3@Tj?C$G(9TGN6jT}Bb!h|ul{|X? zMfOh5`SZOr>sT#Ik15>xxo=xOgdR5Z7L>>hKxe$VuZYN26^ePfk9lJ?d}N?1hyXsy zGx2%HeZmot3fA+0_byFe6F-UkHLWDf5$wK3kt1~%%=tlVIb zsgU)E>_>x6q zM#V}s;8Itr_nG=}hQHe>N6EZDRtDA|9NTIUC7UPiC$kXzGV5D7cfg;7vJ;b2iR|wz zGv9cQJa~Tltkyl6=7sMI)gG4LuLfiovel-Dw!O1WV}+(v%snDcRU7T)08MnO0yDij zsz2x2{EwA23odI+n6>Tm$J2>5kTfG5W8?lV-S9x84e)7AhmMeu{2PqzWXW^E2l)9g zrg$1*?OZsqVtBPE(CcVY$xJs|r`h=SR%yV!`}=fQzBya<{r z7==`}i>_t>%xe|F<$QX88|P>7TQmkGijJA76|W_^-BFoKiMQ25G=1qHmR;EER*{df)AY>je53>H{<;ZN~|mOn;F zm^H&Xz@o6x-enKjkFC0}&refX9dsdr;iyPuWF{_Q(2dXw_2Pf_K!p_A@7r~}>V{i{ zf4{fLuT6k7uX8jEQ-8nF7c2~DoRNDbPp25GqI>o;q^K1#7&euq76~;BFO_+aOrCp4 z);cP`Po?b|=aBlL&tkbHuc+-%KF)>OfnkR3#@d)t`QD!tCmZMJG~7qvT;|7-)o)M? zOd+_!-_f5q4*vlr%kT7?g02$Nkk{0L(-&KjE_nZK(ve93etiLY@W(* zudr#^$SSsaP~96CnSyu{!uRO_dr%tdP^$A@>6f3{m+q_G8yN@xhNaI$Y(fwLrF zwfXpJA-miEDg(WGT@QX=J;}b8`fjWQw%b^>tW#rL&NaRKlxJ|Z^u}2G3-VX&<~P<}+=>s`6_O{X_Mt^j zdMJn7n#;Cvbt+FPOAEw?yl|r?Gs3tYIs_3|Y-vwhmqTvT$K1jDt>=F2B&@q@^_Npx zxK@1P7lp{eFfw$6np#T01Zu_f74v(^f(iN629;`rev4bO^I^RDs^8y%NLv-(Qg?4yJozIeeCVH!F6=*B=5t$p3of^6M~t zHb~Zs@ltc^0pU3?r}3OGR;g8n`nu-oJaZE!&#wvj}_9x$H7q^(1H;<=kS1< z{oI@$n$hpULuz6vC^ICbzV)5|c(rJYheU0*9FUDC*H-P00omYx1crqeSCdlpd4vZg zTglVq_FHJJxNv#u_H#;(Cmm0qk?ycfgD7Qo_KRk>+kAYpu!d6_nHdA+b7nh}6-+yv zT2QBL`JSzyV&BWHD z5pW4>b>{H8#AXDG*TSdvXbTmt55K^=`5!u^y|qMq&p!lmF}76n>7=BP4+~ismL1@= zV>9z3bNe!1_3=V=Dx2f7|I=iiKhP@~t0X*j5&m&3IkL{JfY1p9s3b zBrq8%I_oiLyrBb;QEM3ZTBM^?ynu(`F`!1fH_meZ4~1L5&-fQ;+2!4DA$TRJ$V`RI z-^q(A1LOUw-7*?v!!KLGH{{1gbS!l(uSLsiz$pESXS_bfsd2?;L6qp&Q#d6f`nwl0 z-@%y74A)EE3QQ&^mNl_7okg2;IjA9{{sRNVceZJQR?A;SfSvb;{qj?6JR4f&j7s## za|%s(V+3)TjbiK0x=w;VKLWKzXBZoXCrbB2fdP+yV;El*RMzCnmj-tpbk(u}slf=P zAr9aR>8b#kCR0(*Dck?cTOkA7cEkVTc3wl1m_Z5jm6&zq=Z$#YevONtOKq*y7n8QU zxNf&0U-D5aOn+!uD_^%oLeM^gxcFE(Mu?+i?m;8HqUEr#%F${0pLTOIgdh70LdgJd zf(YjqqO6l=u?EQpe)$L{h2)~eH4e7s>Q~sVJ1xFtz0>IQdThb2&5Ipe}bN$j_8H*ojy+~;N%7MRGvwyvi49nrl_aKuIxV5##S$fb| z+8?B}e(EboUdx!hb(w50R4>Tx;TFIK<67&WqJZ(KcNUbn?JdxIF-Z}MTJ^N76n zj^ziXMfx?~U-nGuaV8^!pa16a%aoE{z8pyDJO4QHb90&;=(+RD9wWixqXzDLe;8;C zPH`YSr^991989#YSsz#MYgz}}9JF~4^DuAY2Cv~ukAj}(?_pcOLWf~P zchYhXYr&oT^xvX3{dR0c>U|P*v4USK!RFK}#Ix@)b53AyhRoMBX?%)kCmWbz_(K*5 zjbkmbe(Cp*mZdoBI|sRbqW1I{{f>sGi|ISnBT^SvReNRU?#SAXJQ*+oOfY z6r-6}m=8V0`W?|VW62+I@lUO2~%sORd*4L!<pO{Di8+0L696I*TBZC0FM;sCTY0|2xjlX9_)38jQ>jg{e`JBzlV(2mU3=Tyz+1xD674esKl7W|c0JdS%DKW4@5Y5rnHKKF|<1gb~=0$mt!4Jg|z#BaRxl zkiye(r~3PQVL_H^c`j!}$g+W)&3w%#L0yc^VT7xI}!*?zg{#zvLo_>0@CkUVS&aiX} zqL9w^owQhsYW7wocZlx<*r>F#Tnnru3Rw|69<$CnMKY0$hNJ?QzB%cZuv-nHb*BPI zvh`Qk(%vHv?aJ0F*Rfzh$22`h!1zcjP~N1!XLliRs5zajh;Z^K7&nXAg`*v zSgKq@(%X*RnCt+VzZnQ=x8b*T4e6cl`q9?1!FH4^7(Ei zFjH8KTWe#HUdOxFZLv0CK$-A43G%PQ=LVY&0>l@102Gc)%qw8hJb(59R|S4jpd)Nry^}qh73Y$xqXyQ%3dgQ3Thz z^AgyC!AGU<_`BTw&NZ4ga-BHZy-*`vA>CZ`bXjz$)_t?F+)T=MESjRR?rzd!C({oi zkz>6B17&d(paSu5&wi2lJCFu@zGu9cpll9l2W#HLq!@g<#Ls{yla+dYw>5+;$5K=M zC40}K!q0mSyWIsU;%U2&a}+*#CkIeIeis@U$-eNeg0gZ2Foi0vv~p%!xb4xkp>xD> zK|eUYVq|+c87HTkGGSEWd&Z}rVE?2N!smlHJPc%O#-LUJAt;Yi&^FtkCT_*Lmu%=Prhajr;t#A@4Nu%hbwFa#Shxi(ln zM|J7eJt@|+CjnnSiPGcb?$L~RqjB?ijoN_PJs)GI1izD&5++Nn@!k=z_DmJWjCK

6mY<61OZAHc+vTsNEDA#rQnSe?0j8uk2tZv zyryN79y$n`=btv$%Tp$nNW_jKuP2l|wZD@zx54Ba1Du8zXC8v`+g=(8MkeFc3+DLl zPqt^qj%QX{`&n$S6>cv_eYiO(_ljQup^l8GJ?%3@!uT%>4S6Ug6&BWWTMR3_&a$67QDQUgiv*@dH>_kg+XivtlvN?$xpli&6h_r05w zkXITCL+a&uk$8VnD^2QqATXjaIec<)r=EYRCeGOToZEile6rD#>g%WoWj#(m)o~Y$ z0I| zPEG$5KaM}e56ej_Z!tYvSFypAd;9S7iRosyl@BDM7Vw#tjp={9#a4XjKcD4JRmQuC z?Rm6(6J_nj{`lL6qbHUy_+U~Y;G9{tZA;O!;9H;xXpSWMpglr}G+J<#A>55rv9~=z zO8oDo2o96kMVLSNJx(qVS*M^u~ZR2JJn1fn}Zb zuFkz85r(;F4>Uc=#}#|y(G_FCN)rqUOGCIjNpxU{RCMr zPb{Cw0}GB1k{gU0J0vi;eUEP;YCm;M|d?!`PZJP_dR#+oXKf=h;9D2 z3Au9z$x;_X^~&r+uRPaMws9GZyn)bDJ{At94*w!F)mX5|3?07X*On}f59T1Fa~%oN zICg}qOWP@;6df-T5X$+;4{ zgGH37jtAbbB?F`3&}ez=h+vX84wzM-N+Dwao^@;^QzP=3LS zho=OOr6D5-lT~$?#t_B*R^sLnT8uhLH)C>-kmalmLwK=lsygmlL`0q6^ib`}yP%cv z(4nLOi_HOUKffl6O_btQ7 z+;HH#Rg|T%nSOXW^iksFvKtMeou*k*ZC8^Ilcl~QalGZlyIWL-N_nfWi2G_@$gb<# z8+6uqcyLpvZ`eZIA&&t0mHR%Xh#p+@mrLJ-PIcb@`RI|(Ty6YoUBJ?}GkVe`xQ^{I&dHV9+}$>KY13u%QIBX{AT()Uu9U)aFT6Xp-7Jl z6OaHtlIX!HXc}IWQ=Ocmpj?3jxZ9G`ewMUZnvFE8owh!81P=oiWPS#iKY_2MIHFv4^%^_L(<`c1bl2 zCv|v&i@n{s7`y7}zam`>u^cNJdfP#%pHqAtCM{lDA{3sfJX5rBISF*A2S;f@^#~?i zdlTQiDit|j#LO=!CeJgn{P99$zoRJUCNo8g*zCCtk}P1|U0jxpX{@}~?GQAJ+O|h% zak}u72GQ&#GBTa}3&| zgtCdepg4WbIsRMUBjKtXm%6&umAoU^7oDpNwafB>VznS2TI9CLRtRMo%C1@9Su? z)vrWl$&3|ntvd2*Z@16uLh04wY$~@LF9RYY)DZ}ar&ni|gaTbwJkv0)1V3${|JE~9 zB=SyftsW%dom-p$@+A})s?b^z_f$nyU-F4E-FOwJSpJy|Eq0?Z?p`-fWOehZJwr~| z8%W8yBDJ!uP4mQdpPDwJE%Qj$cZ7?dV==l9t20fcV=!s6_=3ysz%?D_A_=UGOC7W4 z=yT}@bG;P|+mfzRosz3ZeIo-cnfBms=BlO6HG+~soqP&U@{91yRqTj zufgk6o8cI}y#4}?`ZACkt7uIvWAYYtoJs$RFx0lRO-|bbUSL8 z5V>ch+>)gIh}z&xu4~YAC%!2#esQF7hkaL7Up~3ssH%V+J6(NMNRZc2HC4bN&vDVf z>`ktn=s?j8gbUJW!^=XzsF^rTsO0!o)@BhlMSeQ`*rSGkN@M>#$EiDJ;qme$G?-pm z`mtm|u%Gd%%|lNu0q6k`fAXi<6W7h_`pi+fY9?Kyr4~0kU?u^dc9*UwUZK{}5rQPa z^Oe%CyIv&oKVVXgv^2^(!(q$MT^%|J&!qh;wqVTp!dg3z6XOkpu?;(&x&fz62kpfW z8I1rN^G}A}YW=3O)0Hu&)#vIQUlx#t2`DlF{8r{3CR_DhJ7xgYLeyq7DeIM z(9?t;=fE_eUxQDdvc&wr_acha7W5P5)ZRn1kDvZrw#_?swKWY*$;(n#SU(}W;mr`1 z?2MRuz|1$ZWI}U;q!@inEG!70!UEt9yr)bNbDd)LItW|>fuAnHcw3U_k_?T$*Y|aW zJo1jMrj-^uO3H~%nQepwM@|khPXwQ^bfrxx`54(ZvRzOJ3~q0>v54sy&~4~M89&Q# zL>dREH1e1kQI`hKD8?>?&rK(A#Zp|B8>^M78EDURgWoMI*wP}nR(#VndwUthy0z{S zm{p0YIQBUFSkY?WW46(k8wSV1r@j+5t2exdf*4l6;^1bngAS8NuGmg2Rmk9^2;M{R zG^x6zp85RBUDK{USI$WW%$+dY#l@xOSl+9o zBPFSk)rsqX4ap%`rWh-v5bCxA8EBkC-KrGA0sf=uD!Rvl;LTuVVvay;*sW#p8NZ!> z@(=Gqf5^71vium5n#KFci6MiSJbW>SzrG4B2|qb#QqS|ep?%Q-X`jl2E)fG@}qKO zoXmEr3t`v@EVpOUByp00Cj1!l*rR)y8%-g2}BBoa2!V;aqo9 zKY4vE9}&yt2)l(NgDK$P9rFBBx5>!7c0u{Fs-TLg`z9DYL%z7AVCUeQ;Q-ve)u9#)%oZIyQJ`(AJeWc2H-b&SN z0XpO2q|ExRb<7N{e(1frB{(zSLvyF&a(d$GdV77*mkF07Nw3xP)%_%-KDUR|pLcv3 z#Tj4)k>txY8==;-wH&9zb|mnT@- zF66^=VkzTBV*g?}Ht9nwI7Ph*18VX?SmuWL09W$;*u;-LWe1)3N{x$+i@w;@?Ao!y zLNw(eF1QM6t{5G8ETaI6Yg%nFSzRyi$weP%-F9Vq4d3&MZ6l}Y=pz9n3K z7K`xE`JxHCn(AqNX}!!*+MvO$p`te_)+u622hg^92Qe>$=)6Aclp-(9ZLG?)FfD7+ z(NMwY!XV!i8jpjah)7Cuo_utZ6nzJ-iX(mpNPC>#Oz!z` z`a>8D2CgPTau$m#Zx7YgEO#dNED?u?O=t0VY4M74=fgJa^z1bb8Z=2g$s%qc5XAYp z?GeJ5xP#ZFH}qyK+E+*HE=X*A-zf51?47BL^c%XEgq0Xvt&OmCT+6uP z@EY1|LJy@}tZGBK%>=Dgy&b59mVR~(i#>s{eHt!O=#rEkUIB_KJxR-+DjJy8in%+|TvL?UJO51cD)hM>hN6!E1 zqo|ql=6Vf1F9QTSlya%u!s;~MhxlmoT_`muR-3`H(A2lWR1B#;hWVILFNW2_4&GEj zU3VxKe95p;wd|HiX5-*BLR5Afxt*q|(s_W4X@1vzvJ9o9`tbC;szXA5?^FVV9(AeG zoL_6e+oF~&dAT_2MSolmpiP2(R=tyrBPwvM-N^ zdVT*MqDU&KQz@JlB(l^X$|$rjwooJ!j_g|)OBhs2i{+f`>m+6@m3?W55#dM-27|$b z7=y8d8D=ccJ*x9N-|soU=k+{)^{VDGpL@CX_xrkrwLiVUyN}7YZ>Z>GSF(vbye@`@ za@(WldJ=mZn?d699e0=6uNnC(ZNepeb}(4yowuIn<-0dy*BxFe#P;tT}qyE4~Zoz=4QkLUPHfIb32SC{hB~qdp5pW|8kwts4>c|s+L+b)4sV~!?ya%BdZxxNrs?o7 zA^)z+YGAWzH?o@6- zpEL*B|2Ndc)oL%E})IMkEuc7X1vU*r@1ebjg1N`=e8XwDKU+Ptz<@JzWM#aD(r)sSxR_|O@3 zS@#m?#LYdWeRerx`Bu9FC5r`lt1HW0CL9vURz+6235Et+G*S0+6xqg!j=>!3Y%__1 z!4wKxVU%vT7g0uqwt%=ukXT&FC?NZyXOmsi$niC!I%tQhJeO?iCIUB5tDE|NjHCaa zKlHzm{Z&e1r9<*}29+RYrfLU8^rIXD#?|7s?hohAw8eXT&T6Y^w>8Tt@d)u5G_0hf zVvMUKQI{tc+CoRqWJ(r}*S$t)P!b{i>5nZ=yOr}ND-$if+42bNdV9Mc^kPydqood#TAYPM(Fq$LpV&0JjXl-}MLawo6uo#dY*4HuTv4bW#;IUR;xE~!~N;-3$&HH#&|qdUT|Xk!BqrXO7NcGnjX>i zLZTza=lAsTlZF z{A0rr2Jz*el`Sjd?s%C}<2|L#AbN^7jH6S7w2Ht^6zF3T5=L_dtX4$I)cxc4YphyzfNSAd{9AQ82pTl$^emH`QrQ)y`KPqN?fDR-H zIATrIy<;@OHPKq|zG(hPY|G~aSAyJYD}7u zpJq4d9n)4R8IL&O= zgC~c!1L3}NA~r4<1x(vudG9t8fqma|rHO^AsRe|3VGj&V9?Fo$I<@<_q6upQJG-gj zQ5lQi*Bn~MS*u;x*Z`l~;~C*%m9xvs%hSiA&wJsk?{i9kKl8&>Vzyz(d;Sa*wP12b z%a~?T%8hfONsqU}6P(0_MfB^VBx3Z4(E8HqA+afG&Yj0Z(}n{C?y>D?@m+C8&*l`la#mUXT8 zy&KOFqLZuEk>-KevKsa?vJ>}Jr#~?=dZubO)$E9(pHhfpw<4h2^k z32YwO3sock5wC-uowA);Tv?p*Mg_Z`IP0F-*Oa0c+e3YHxuOG9N9S_>BY!#Jx4yb! zsC1;%YVAw&$%kG-a|6DP&UmPvAUx| zkf*=uu7<3l%$6nAYvg~A5qS5JsqH8^bL_!WA&aMMC(4x)QK!V?HBy4Hu{$CBeML#1X)?i5>+!g}6O-fh@Z8VIjZJ3eku zB}W>VV-GTE1Pu5qgDR%w9@04KvGL|N@^9xxX1z1Yq~#FjN$VA{O$uW$%Dz=g;1Bh? zrzaD%P_UYUQbGdH$%+nYrg%P)IvQ9$NNv&^8M=b@h`OH-LkGTLou~h^J~jqw5M`2K z3^Ga1>|pHk+!)&NKlvowjZqmNinu-@jqOB4B10#7#|RaovHBIXd?rN2e5e}Xd5%VK zAsWqA4tLnICX6nqq;Xf#A#`P#whj>el8_3JP=MNSsum)W&YDt)`>(E{!vbfOAIJYe z7m)Y4ekSdW%e}7*Xh-J-I};%!ZTsb=>p_MTTe`*LcMJRLHr5+Pem7G4@YVx2X33XV zkQ{1CGVZ`NhiFABsnC>E*5n7HYRJ<9k^-Cg{4jg9w?++1xI&Rb+^ELF#E%e52~8+a zw4h>B+&ih^u+XDWwP@0u{$_!qf75vq*>rvmeBcED0DEE0*GeZ69<$2T`Mrqk6YW`_ zeBw0>J1JAq0#2rKD2zfJMD9R0k9a;q}TmFK$dY<6|38%ev2 z@vX-8finFse~}|v1CI-uwg>t z5cH$OW_ihHaYga|ClDwIoc3K>nYhjhx`+0_K474%X4W~`^eOzXr$^YOQ9NTS$VA6} z)(pMSs~}?N=V`y~zuw`jpLqO&NNCD9bMQNE;*g;qI{VH8W|!u63`p*k`!Y zY^92P^;ILux)qsy@sy3}J9n)3w z+HLyZ4h!#njwd|&FhcOOqA`8+W2ad6c0LOEOY{hRg183$#zgs@JyS;hi!D}_fqkq2SVZWo=&adlL&Kz2rf0q~)h)GN z?I5If=Vm3-n_qY=9vW46B~1UQ_8#KLO37z$OO)hYK)QI-#okEn5j^*73;XTS16sLMEXK#E=a zsk^ERIH=WqYy1z_@NxiTybY2;jF9y)+Q}_mwUi+5$^4G?Vr066qW{1SwcHN zO)#A~Lv>14y1pgng)^iC!5^eai65j4H*@0k{AuXCWx zV`as%utYvbl~L4qoRHYrx35N4kcnl(@=#Ue)ZpZEzCB6YffN4_At6a)fDyK_6(<%r zupj*_0H9_zQ^OFm*WK0sSpfHX`{iaC7mklb4*;u>lNEHt-ftRUVp`A%kEMxj&wh7s zvM%KhYh)mK6^Mmjjf~Eq4m({?7L06E*0%PYe!;-GJtaRyi8g75T_>gedWZ`UMqEC} z_G#T<4|M+})&ISurOgBcH6jM;oDTx<>RbR!RFH+;A&0eXDpkFw)62VNF~1&*I4gNR zG3ECpb~^OkS$kt=H9_Qw&mzO07CpZ{c!8sf_vbJA65X0l8B!{$g?8wRTbVf`Cu+j$ zN>EJ(A|j&6?H2F`Rr2;IR_%F6Er8Ph0ftsquggQ9fxsc@2X=VCm$gWXR>>$yz%y{V z3B$oyzsfN=kiFE}$lW<`zme}ZEV)~WO9@dE{5h*D|5tmp4`=G~Jk~)i%}`NPIA0GB z!$xB(M59&KDtlFEgd@z7PrMgwH7c}T;^y2|2Z6a4^B@)NW+pwp=uJ))i1dBr>hk)m zL&}0mo1Lg2#2Qcrocn&UISK@4;=TAoSV8O_k-;dwXN}&qj|BGL29>etE8j7cvp?cl zyEe4OMy@21vEX88dN2a66@!777Tj_QEyNL)*#mf`jr7Nd+1NW#X|er2pvDmq0^gEm zi}l2s7!k=c0q+qe=0u6v@H~FUooj)VV8>wCym?RGxFzJQScpm4&^)HR=}g z%)4AQWYn^!1DHu9$4vgGKwYbyI%~f1Q^9U>6s-Nbf<>JB*f}h8G@{ViYFSb9F{&lA zB0qYOgYYkrs26ewO4$ahF0E*nSIo_0XOm|Z-Vp{C z`(EsJBdsCnWXrpycPyqdPPX-puSR;`yaEEij(@?V|BjIxjjygOcqnI-SUmI$f5WG7 zIZ@$c-E*M}5gX#?q>=mg9U<@;Hi9CU`JRcx-ejR?gNyTx%%m$^BWH`~gy@%w}Mb-s!L|e!^>r=>3o6ZThhV2EvBDYO2~6-r+_N@(^vF%C$=($UDLF7;~^08 zgFo{N^K(!Z&^NyCOEGiY3$bqcskx?3iH^50zzyl<227@juhqXjzT@5%NC`hmxy<72 zjDEmKNV!%vJ;a4q*JJEK27S)n^xOdv=9xl-1DMQ(U-BUJZ}jX8##XS0l<^%Et#l*W zwhdpUb(edR9PCu}hu+t7^j>BAh`g5Czu|3R@I z5P%H`Hj}}J7x*I^Ro|9?bmPlkf+v~m4yxX9#;o&z4Ke-G+3s)&zf4(cIK%C)t6w-W z0O|lgGPX@piym|kR8(a!i}z|>e(k0ID2N~E*%`T=BCRyI=l|)`lF&Th;UN&-@0b6| zuKSz@EBqEdaBNoN4P|42SrIJmnL=kjVV7z=db$XXjkdtZhVAkfd~T_#e@(^y{vGvD`=}5m&Bc! zm$gY^Dw$lKMGxs%do=RhoqIFbuw?8fWsU4et6&&-_WqYE6Zc8`|-FXwj(9D zD`fS{xspLNoZo=fzr?v}%o0Y%kkXN`zBaqzOGUvX?*Huw0yZ7TNOcrDlP;po8&#^KRpoEJkNpyxkMIDub-ik6ZN9~C3F9W8oj$eT zi3d>|=Ulvh7HaClF2`|h;pLBeE=_&*#YnHwl~g`^4EwCSUMT_n4m!1l`|BIyK)ruz z0Z>#5$v=&jo}(#H5eQ`a59jZkvahA2qF$+rPqy2*2vpvR8eg<~qux~dRs-6O8CXIA zVGGa%_n%<50#GmzKtfJzmbCbUbKQF2AuA4kJg!GAp`<2OKdE47-h8x3K$teH)Jg4D zmeG9mVEI zaPOh*^&j#0l@S#Wd7DENQvPz4KDVSNxk#|+6pkF_CMvv03mmYmIKu25Avo1y?`$-c zzh#%mtPL$!_FB!G_eUR#7m30jIwvj9fV0e-&hNB23eFv*9xH2%l_Cu(l$bROh}Es1 zVg;;2zwe+Aswe9jxW-V`O(PNii{!KB1iF<1hp`mA%%r`jLdBdOojvyCMKCIV1lG9K zzEi@p>LeC%x!qv`RN)L4-m&XcB%(1ptF)dJ_UFE>*aucLcsgUg#`sdrIuUWv7=p zcXAm%?p0qoi{x=-J<#?H#4ra3Zmd?UF%>cHDWHCeI}n{;^Wt%8VRJgP5bh?<%JXLa{F1d6w`Qt>Ii-klGp!LXRRJ-RBy}0d6Z`g z?swyX%VuB7r(nuS?W&Rhn0j(4^d$4F7gyf$dSX1uhfN!mL(G_Oo_;n7z^Oq|^o0(W z@gAx-8v{y~u&5e{`wW8}bqEw+Mfk@5GQIqfd2T%_8zUoWB!>_$ySqo7!miNIaRhpD zQ)_ZtIB>jlfT=xk_j74weyF}&Xsp1=I9Dy5tCDFaNcsAb z>G7-6l@F3}C|K#6yVFyhP3dGbipykEnJ6AU`kYgowa`VOLBaTz%j5!vc)@RwnwdSd z03n75@{s>#nYxu6>&HGe7GbmAczoRi4Uq839OQIkILnLf{>S>U!9Tq(Aoi-0!oaVT_K#iKI&&16D4^I#$!>Y;$9wo# z`$3zw#i`l%!D|z5Ls*T%X+)JOca@nlX^IslBLi-2qi3^yltH%k-B|9G{PgIy?gL5Mo#IZ~ zUBtyi%jM%0UGB8b23x6*W0EZxw*6|ejfe1lAa4$U(Jpe6Nxk$7ky1fDKwv{QtMf2 z>1$39GM5#+)JTfwIb?fI*JGicsfnN0o^>1Y5q+od&f*&i6w9``9{YTgb)bKk^lny> zUC!SzuK5=JpRpe2vP8IP7MiFNyH%CHnCy|9v@llXmP;{sCBxqwyVXgTd2NP$%=Mh_ zh97FS_kx+b$Zc2KD&3GaT1|gX)`jnP^}bW*g%ZGz_ZpyT*s2!5`v6n^GX7`C@J3Xm zdcHpUmxG%erI}=8pHkl$!NAM4MIPH7t?rh3d~z_ehR(>8t6<%I2R#4)tliBx-mVy9 zZc7HFCV}V+iHfQ1F?{S0x1pzt-T7>&2w(++U%-mvy-6_+62Ap9ZhEZzRYuQ`kc_ z{P!f-cjsb~M2YjAYX`Z?BvLiL$8Bg2Adc?$o&X%|kAFmw258vYJSO~dmE=vvDbMuB z;_&#i=yrP%*UuVXuoBNY&xa z-wn+YPpDihMLLaIUb>ryRI{WJWYYE|8c0niKd>m~qy=;RvSoyX$7{YFR5)v*oE4)8*?+Lcka5G^OCkSqWgTt)J$Ndm@=rY#w>&HC)myhn(b z0V01k&Ka9@neWVlBwVeFi0mocVCSq%+ONs5^88;N)!fQFjyj3xMzWu5G`c0M>Wv$5 zvU<-{qS_%)qTLLc;rzmw`w5-9ugcxoQ&FZ9_t^2(Z@RY!94bXI(U{{WVjsshK7Oh@ zbF8A&ljemNDn6C8lLW|=kn7V6HEZbxZ>IXU(QHrgLpT8`$VyP_`D6DO1JqF$m)Qjx zv}b^s&E8;SlL0^Z20O^?Pi4l3eAa3&3bPr7ul~qKFCy+5(s~kKU>VXtSeR4orc7maU5> zF!eB9L7!wU#xM6%Hv1-wu>2{PPMva1FxYYG=62XxdW}R+xMm`*)@fh}Azn+6Rnfq9 zV#vqd-voB?BO!klF7?Eh*JIWK=d5k6#JFzuCz93;3;&;jT>KtMU9DdgSG=5UUe!EJ z7J4V$w?2R*=!@C9>kJRv!2!CI6l9z`4fn;=9UW`%u0{VMoi(&Lb@a(`kT;Utb5S+W zE`%)*xUT8s8r3fR2*G4(0Y{zCT3YGM?PaY71xP}&2)5}h96skKK*e*>|Kcj$a?ekH zDWW;kR?4^WYln|kCeDsT40SknR*g|pDS1C$j+yQbcR%gy&d(n3jhC~bER{Gt$kd9l zPPpNzSFQ;D8v|Oygs70_hN$O%M*gNAIo>@qu_Y^X4c9Suy!)2;Ct%AkWQ*1 z!Hz@aw*zopHz<>mN%8ysJah=sdMc$x$A?#n=!B&)KN{0*xoeytB`zz=J_%{!$>}2d z?hhymTiE6~0!o7TM@kbjPZn>ZH!i{B&vp1x>YleyZZ0_4rf0TfdGG1BR);(du92@tiDYQ<{N zkm-+>h`H@ezR^#GhZx}2dY2C9f_j0*Mmj%)wvb3Y&4JxcQwit|Q(?6#j++uLmq7$n z%WLCaw>$D^9y=gH?pmtWzgv8V<;beW5Y>oH?<8 zefBlxU&_1jyCpxJg5P3Q3&DWXUmWxZGpMXPQ#9=sgwTsUBz*p4l3ap;M+>jCw@tG7 zGyg$pe}qk|kLFDr=7~2jdeIqQ8QwNIHBGxs7J8CiNdXC)T42vE;L>}q({Soof(k*X z3g}AlTp4p^(FFub!Fm62P2c&>YV4IVDX_WcFKsGU+3n07ya$?YG=C)YwgJba2q$F^ z_mUs(+%AO#YOfFULmj)Q_?0_HYq%r7Ia7ba@9A*Ie^=GxCBmL|?*22e*@lK}9>}Wb zoP}$t(MZ~b806{Om8o8GUt=G8R%&X}+~TIu@9+ci#t7ygK;gg5<6e4D%Hs_FIJ8}B z=~3AK>?#*}UKLBAvRd<5L5pNJ#!6|lTM2>6ordB(XoNP@h*j*uR{&Cu#+R1_`4R{2 z3#{|wxE+9r_VP20n5{AN9r0)gqyMH$?QKq=eQjM%=hMi)C1IjT9wzjT=hHIhnK+3l z+q?;cR>1Zd`L&vSJ1X&4H?zCmX>JqAwX9AvdAGeE(@X%+k&5?}n{ou{+$OtB_6T6( zUjS8#aW=7CC+u96<{8Cna{I%Y2OWaw2)Ou;Fjuc5z4=dF{7}xb)od9-y)kYjq1vZS zgZmE9tD*;#sSKN-5H>Z=;E9YN3;75&!mz!SOpaVjTMvRi%&oF`VX?_IRheC|mC_z( z1(Ej5AOQ0Sy;(#7S+BwxY5j-EP|D!cpBI0t^Ob-Xc#H=6UK5)5tUnl`V8<#GdZm}( zZ6#$&E}ISl)?1|kn&xX!2?#C-D>WUTo%^V+-s_Whz^*nKvtU=HZ7<4E@DCMQQbKx9 z+jUn}(!TcWuwkkXVIOmY>rsDaX;j2!fnyQAbQ-pKsO zXrgDc<;4PNrCs^WSw)eahpsvC<*nepirp&NNV#k3?(`MI^EB-8)C?fJd$EHmTLCpW zKZF7@?d?+>1})@n&R<*ObnJONaKJgmdB1@oZ+?5{!XN2->YO<7GO+-j?RB}m7$o;k zu?XSwaLFf)$abIdj4UscD{yRMTgFJDTO0XoxX)=2tl#F8KgY#DuzsN@>2S}!8wd0F z3KvgZI=s=N(&3gxM|Xk0lRNf3o(!<0!46hN=YKJ^x^Qw3o6qluf=ln>ea~Wq z2;Y8II9Um|+Vr@qP;f6^G>Nsz-GCgjD~f(KJ7A}JJ`(L(LQsjhNpw>)MT@iF=Mo4N ze;3XHz;W*nBXF{nzHlI$V`?p!Y@&+o2=$2g6_LizkF1C}tU(y9AE2XjA;?_5+8a=%TSqD}g{wSnUIh!&m% z+3v#^(=uueU2PZMbt+tIM#T;Umq0zkP>rk8x({#8pK;yxsZw%oaQ)Hp!`f>sb8nLk zP(GWpXssq>+u#A`Gv98IL|bTG!&Vo3g*np}=yNnRRLxgaeKgvEz!SQ7@3Z$o(06nJ z_q}rsy|&sfT(XON2~vD~`s`lpVPS)ag2>+;DB8s3ilU2M$fFZj;x*etozia*@EVZ( zlvT8<6!m_6)+}W~xy>eR2gEvjv-JWO{xn%4BxO?IOGI_6J#J9)<(_>Z zl(Mh@n%fm42}GmH186Hf;r!#}WX9->#Y}~a>E4Su_PJjfYvtKA47+?0b~JWhMfWt` z{^^%@1O~my_sv3y%WQqGM{8#TihO{1NTXsL4DF*xvQ561At=-oF-vc>_!&gmpjC?9 zAeEbyV`9F_KX=ObdGf%n?755c(pyN zmG92wKNYJ7dmoRxbcW34CHCHH(lxLOa8)Q&-J9d;(bRst2l>E}-SN{02Bsl~bJq0k%W~0(P46 zaeb*VnjARU);<0{(%W1LfFOTw6a8M{2lZR)il5<2qpF%(vvmYj0L~npxKRf-(Dk{j+Ebsfm(pB_7iDNMdxolO99TFLuih2(OY;d**cZ*1Dsc&L?nzmW>Eb*Gv(A2I!gzdgv$gW&nBG4j5Qe z_x=NJ@i~TDekWJb`JCd1Zt$oOX=!w8s<`HJ!e0Gj^zHq=D2f`pJa>6Wg6DGP$YHlf zpqs-Q*w4*w4!%upLN+MAY;qGI(~KWFQG3>*E%n|@{tU!MPeb2h`q9)RgKA5v?@`N} zBHtpK)3sV!Rqpp7Pdexr6(?!;`&CJN=@!)^7Si4mgX)hv+J<747ZYy z6gMl~2G#!50?(QMrm6A8BGgl8kY>0{@3&1lgQ9c>@z z4R5c&hd9}EV8LOuk?5^DV(SO|O{PX|X#{;+v(A)^^9LDZ$*F51=4 zMUuGj-^9=V%SD0?QgD%(oc5=>WZmoLp6<$2r_>U){g7I*zflstV``v38&ZW5Td>^9 z;Y1AKys5B`u#TDqvuOSa>FYNC;Mo4}*Xf^akXD(^pULS{;tu%#dT(KRx3fl+nUE$BmPF<{?QfwFY49fJ^ndqTe4AqixoTdWxDac>!~rVD+j50QGg?x z{WsY9Uu6D`Lz%^(%hLeNq*XGk?YgJ{#M&7)Qd9v`TPpeYegT5U$#>aZTrzDR#)BffO~L_ve&Hv=3wrYZ<@A*+EZ({+ zUo7*xtsyjIG6~s7z3uX8LjQky18? zwKDwoM5Pr_tpigE`!NI#=A`_p zP24=0{a(eDE0N_A@;!GW7g@Z`SH52cIIB7rVHk$FXImL}rrFO9Pp81&ZW?ERU6ltf zenVCI4sP1h?g47GjX-Ue6+3X#1NKIJClS0=XLn`uuEh4+HmH(PL;k0OmB<(fSc)^` z(?5ZkNry4<_-tDerT#fgg(0&!&?VNMMdSSd?-7l5u}@F zn5%A@>e6~|KlP;n59DqwkaaiWTXDSCb$?Ci?!1lnONNx?CsFE=o2auhePO7O*Lt#G zO?}heyAn9HI0ZM;+oE3Ym*GKRk~yB%qiA*cRb z@|>ssYYSF^{SyVjb6I!M#^-X*R_GlB0K)XhbvoI9>WVzY@0=-eEhNOSRx|hBwkPh0 zkTHSyOtjheoh<&>P72iB7CRlpE0<>E(}h6a{qucP)6`qo2yTd}@4T}!IVezPl<$Bv z#@?iI-fMFgumT6}+JK*4-q*Iw0^!2#M#B4CYX>tBZls#DuI!^GM{R)^H8;ova$VT9 zt^Eww%bA~ASLMkGk190XD%Pj6&BDNN0nG+n7p!9B=hOr{c`%v>0tz8rYd@kGYd>)P z=`Ii44aZnE%vCzsmUcEgc|p4ElqeV* zQT*KOU*6{dPN77v+L(MR9@ZwE2C($H|Lt>wBu;<-F}*opUYL6d4$44A|a zH2>)~q`jVNQ4f;C{u$5&qrSzUS0_L!)5kM>d%d5^!xQ((H1*J1JDNu$F7qLHF8JS` zTTeUZHzWL3A@xg+@!I{4Tb^wbhanK*cmDqrfiDW1)rxa_{nl>nf5aOXP%vWYh(6?* zKLO@X3FH3liMt%3Ipb-XJHwyp88xvNe6I4}K3B+dC2r3FUPxl=za3_H!qzKz5ETpt zaAt_?$-88Fc*^s$0ML)mUq<4pAuq$XOe8^!m_PlITGodS(3iU06SB7W%qSz-r$JGy zsj?R6xSrhYf1Y_x6No&-T*IkyC`QJu4XRc8FLI_OZ_bvF9`F!f@Z328X0{2}{L8Xm z%4Hj(*OxhGzOxfVl9yV#U*9}+MZ5{gJ`imSi$Z|`d)6cS3#NG?>W43Yl&tb+z}v-f z{(&G?8tl4O7Djs|et3$hw!j6kzxywDbRo?kP0feEVH(~M8GXAyJ!G*5P-^*p&C|Jl zxWscB+vI(C)bq``QSiLizdb+rTk{NZ(otAU>7J>+O|jz@^To=s3GiwEfBAGRG!;n1 z2M`pU5u|XOhsWCFHp66CUS9G^k)}I`Q)u%dO?MBsv^hdTlWzZu0xO7e!rNT{uTJ70 z9o$LdIM%^RP`wMg+I?H=mFMS%B9hSFYSCZTzVud;l6F880Qdc$>WtkqAE~O|i{ULfw`dTM0p58z`1F8&xX# z=hyvI3~HEZhX@14&d-)cA{}m{=HJR#EvHn#HfkxWi=9oWgSA~Bp-tY@Hq^*NyV`qHMiQUf60`vZ&b#nmFY>u`675Olx`=a{;A>kaR9wIv&Z{|Q(x4vHxIBS*d&^Tom zxGPjEkVCP&wNMsvJ|QVN zvbRuMs8pORpBZGnJyawW40%ZRNpE^JqS`JNX7|i);?bozk^N$2uIk`h3i)ieTmh3( z2z@RPAO8X=4H!dz)W5zjeakPbN@m#~;_a7qgd6VFxB?_HlW%+;Uzip>S2JV>o;B;wUjm|AG1<-5DXeh)Sv^^J1ZJe&d` z&U;9GJqMTnyIdP*>yPDqzvZM+FV~XGs#B3dYRFDNU_1Jf-^1C9)o-uAUp|~Gy&hB63O)`A*TX7XA->mToZk4 zf&#mzRcM$yC~vl*;(=P{LTm$%B}Rse1x&!egV@)1l5{;pwyaic`~q*gl`IyD!*8zc z2zRE?9pP~k=Magr+rcBBKeeaq>y%vA})G9s;^g;t z6z0&uVHvNGX){#c_8xv zk4SdZZ&=KUzkKJg-oN?Xl&)!Wokp<-_X6fs5@z>zndIfOW+G*7em=Fbl7ha?>h*I^9oXAxl2`MLzqXR2ND4O*@U9f2ZASQfiAmlKu9=>F zx-`E1Af%fUtHTmUT?R{rLT!1WK zCqWzD8w|~6y=FPag!$foG|BAIx7fUD1NTO4YlHxJE-{M`G=9cRKW9rK7TolQkWhD_ zH$tUc)_EiKHj?)Bt0*d6#!9Hs#Q7-kGPvqv4~9U74A!aY^yN>^8?Pqh>|fnBff@`9 zsd8vU)AvEJ$6?3qe^dTU^7A;q_VU+sW8v2o1wogXoZyOX1DUS3{hexEA;{08XqA`uMG<=yTcJ;LH>m55p~)6`c3E;>L#6tUPb=8(7~6 zqSK~Hh&3?EXSvd2?c1jtGa54msH!6MU`AB|U+|PYcu8#*6y6nB&t)ButP%wT&uFod z84M?GQLqz#1D)IG7gi9bRC|tjW>l?pZLml!70Gj`E^2xZa*8>>T7iBy3L7Ed3S2_; zyUOd*<`erX4n_A7f|;8}xVsg+AXMimXf@v)Uc#lIKf5$%#(B%Ynd%u{>*A4zc$mW0 zh51c~P&>GOQqrS*OB^A1#rqaMI)*A-_hCCX(qIp@m9vc zM+toU*+P$j)z4Q(Ufo)KHPq!dRP!wkU*-8t-N$cDW5ahvoE{!jz1$Ng4{d7a+>P~N zvm)2nk{!NMZAE8EBdP5A6~8f0b)8+}x8?^Z!Kda%Jme_i1wyHIvikid39FUMkI?FC zTI%z=3S81eFPtKnge>$>#U1hP3l_>&A?yvrJ(|bRyKgA=Q7gLbi707;PggL#zIc)S zRz7&GQ}q5Pgsh>}>5G8ZOfPu)l4dHId$I)#Vt`z@ew3$^=b2@y5j!^~#q)iGCsm)X zSI^SOZRkLhH$3DTJ7@eM*SttwI9KAR%P6^t37ncw&FdGKy(z&H(_Fr%V70E^&_NE}O^)_+)@7%XSqF6Lcbi+0|RN}?%y+?uiR^4lsB+sQ9&y;T8KgW*t=TJ7o@ubEJd*{Atu|c!Xt;kq^F4%mbEqo6GN+ z_sE)#2)BM7LnS6Z=)+zo?1(QPB}=(1^FpM``TLRROrA^KJd*BBMU(Zm(=pw}3@iH6 zG?d8&m0Y|(?ddu95aRFDiV##Wu{p=tZ&uLX0GPGVQ@HAnSQU{jZ7CAJSP`;9$}w@r zTOO?SYj?xJ{dH!6>hF zFNj7Z>WaGVNwEvMFIM-;Sq{L0@sFZ~bFEd)Q?hyEm0ycg#1gB{Hri@F z_rBfg8BkigH{i8JKvLb-Ecb$)3&6hxWF_DF(v-Kw_10k%xN7)134gmrCMU^&6`_-g zI09N-F#W{lbba-uY1@j8Y8079+Ieb8jB<#mGg=PV`J&tP6JA7rQZKi!N_hsz*$xX# zDFWplUg%f15GyrlC59iH(x1`0Na;x`79lel3almv7?xL|!RrWsa2c+$Q@3Qz!$R{p zzVev4vq_TqHlj};ce+YMoL!^!>!WX6D|1f!?9I{V`P25gAnID{+Cy8I?1ysM;Q*a5 z-l_)=5W^obAPyq8^|r(z_8n;&XLp87rErT}Y(xSYloDC&!)NHbP9*`mU{jGyE1r)s>^c%UjM-9l6CP{SR>D#l({=$dq9_y zEqA7V12Ze*ldp9d!s%tX=xu$E%z{p*4BGK-#(KoB)WmjIIlknX7~c~0(Q7=d7<5S2{$%#OuL^)D}@|wM#V3OQPJM#KG_%0Z}@$%4l<8WJ%6h|(`?Sgr%c_sd}L$Ug5b^=Utu|U?$0~b&( zugTvgFQL7q>!a7AZuQ2n71ytg0U_3P?+KAmXdjPgliuQI-cxMsUB;swZ0zmJ%cXa= zJBGp858j|+u6xIraL|-J4BLbl`J^n1Jb6qZj zRTS@i%g#d749xoji6cD<&ZIkC`2_?z zo9|9OXwnb4Omm~g=SOQKOjkjt`}e&{tFPrFJqPP}*^n}Vj7o`Z}kQig7wul?DBMAHl0?U@Ao=NUL3s?h{c7TW#Q5G7%YM9Ef<$IaA7mYQcMP zPd*~~BWBibgn%iv@;cfVO+nE2$^B!oPusCEEu#z93)Xl+=V?Y&d&RLC1`9YCw z)O{$@LXFGk8R;2P3oPIlLu*s%57)5p%|8~+Fz@3ZJvy(l8FzkaT_88MW4Gkw{0tamU)l>rDdAZeW-+;5s3Q zddHAAMdav}8~FwLOlIO*Ji9L|g8~4hvrVQv$b>y2k<3QqCC-+m8H*-Dr9oaMZ zP$cnmR+kzaYIV<&X?-=!>vjR7vVgHsUiT1Z{hOMoH#mSIcy)pSL{wO$6@{Q_w<2+jjOIKVscDe_ z4nXSRxa6zx2jz$uvkK7zqUXkZUQk;=OjK|V#Il74utaG)3tpoAr{9fJ9&McJ(Ayug z95;9V3r;6DN&i;R)Tf(iVPw)rN}ynASnWjf!bVIyE}QgAQm}`dYtq)!Rak%D>$1Wcd-Wo9(o@1N6X#q=S>P88wSQG+`q)anj#^A#It9}Om%5J~{y5Opf}|}K!JD%0w^{y*oW4WwiT5(BPv)ps%=MYeD$^&WRR%X2w#0Idcbr5epeST z;xYT90FzV>`J;Arpp}$#n#K3 zgw>4)2W1b}cXDiW-@bCahq)N0&~QWItDAfD5GqiS=woT0`;>s>m?4C3+Nv%ql3xtX zbc>^c7sGmc&1k2Y^Y3)IU(#SvPxCNMhSLw1R~Y(d(w1f~X;d#NrtJX{Vc%1J3-~() zY*)s~p?0EEFDB7(%F@KyPgp|l5JK7Ha@^bwqwa-Hj`(Xxk8KflB^YB>vbmZvFkK!Y zPri}-EjxU-W zbtwEu-8#s*xSK1W>=0db;7zPVTcRYmsMBt-gGH+a#vwWWtr;>GcnSKj&o99^U)RAG zTTdcSZJ}Hja*YVJmIJ@{>~k7;)}+#cqos+D53;c@eNU-S%y2rdCE#s-j{tor-IrI5 z$QDno?XP%)(s@~SX79#S%#hnmWx+Vb>!J-_n4>=*KQ$l^3@B7@(_xt<(yZi{xGkf-|S$)mgYi5Qh0|I+@_`xqcfP8}|EBZOl@Ph=c zWhP#w-dF3N=7J;w|F9f&1?~g&fpT!K)#^Wa!Rlbqv(#8RUX?#kXRBiu_)7|8DVItB z>8!A6%9C0Cn{1IZCvaG<;pCry^TGIm1JCfOp>-uJ`tDmp8s_M-H!tiM1J;d31J!-1 z9o_A~qA7oRbr~Nn*P}c$)huxd7Xj{FuLwjhnslNfJRwBbh`_VtLR4HGAiqQ z7xdTox|zYNe@{N_JG#8wFH7_vm@R!_>HqCy$}@JTi)Oahm`eNtTq+{^u&at8A2=Ws zZB>xiv5%a(iWQAdalt2LB%J#0YbdhpewocGEMFelN0t(EELcEh&FT3a#WSA>GP5`c zPf2G|;5zVSzDBQkG@MGpQ$q+E^KUd+BfDUqbxj(Dpt#R=ToRs{HU@L4T~Gdg7OG()MU!LRgiiZ641Q*w^;e+OZAoy_*OLz5qDgC_=@<8!8NwtA-&;Iqr zKQ0^2-rDcZjwtPq*(zwdaoG9s^ZVZRW8(zqZ9c=$PJFRtX~4d2YJT|pO`i>r-ssV6vDUT}9Jf2{aEuxTwJ-?2r=c#??@qC@Fh5&($P zK3DEL`HLCfESc7q8HoYr-^EgU%EsHP>W6HKu+uZI!kjhU@79~~zNV3?=ZAC z&ORu5!i8RUe0-#&F%a<+S|7F}o^QBTZ|Ro|Zs+8v$~)}KpVPp@fgI4Mq1||C62j9$;K)$_b8=dXa8@wxqOA zPvyrNHo`GOj_TnQlSa>5#oTk_Pn7KUdhqo`42PSD7#cp4j$MB{Jmw`Och@ALIJuKS zjegUrt+18)$KDH9hwq;(dlrcVvzdE-vgmPEH!qYIhxoLzJ|meS*7UfrS-P%Jt+hEb zu^1$h?AyYyUo>Ro`&f2*wkA_ehtfqqv9$?5-Is*mpk818>#bjgFAe) zVIhRvW=HYul&U>3+*H~4N4BsOyjZH}t;sW4315Lsm(8qThOIAVSp9hIp714rph;D~ zvUm;`xiabQqmAFF7~1h|e$s^>4CN(iteuUGp9=QZ@VPjyG5zV5>Sk7FGc;MlG+CuN z#)-~%O@+Vw<^g+>uo-=x4BmZTUZo&wSVRP8{LnqW;QuEl~5k5r zSfMa{t=Hu6*~Cq6vF)mB*SZE2SSOS2Zw^aD-jsR_vv-hEXVU&;{kSuqZA8F4c|fgn zyw+CdGelALVrrAYN`5RMC}eH0=!QXzPll!C2dvi<9ySgj?Pg9r7q=~T*_Ph?W$Z9QqENN;bzQi;7^*8L0O_LtvpcQpCQZyJ< zJ^E}Ju}jmIY@TaEWtK+3a?=cW~EJvI=#h| z#3)h%o^JNc+jF+MT{V#)NH1wwBzFdUa40)Y(mYk%o3Eg)7637KJXe`mE9_x)trQplHC33n>ljl7(sKgC9TC8vAbD?V6g!%PXFp{ zeP2qCoPA9e$P>46bdZ`AnW0bVnQp|bhksl6nqZY1nuFK;bDMxCO{+C2^q(GseDH~? z#SMA& z`FIw%wrP{=`36ElX$~2CM{PuHQf!n_`361%|2`hyZ-W)K8{Ti?Xx`=b?B_In)hv}< zh!fda&H5)o$1#wLfnE7)x~gmQks>`1&zQRzU3@m-UAvv4wXwQ3`r}#22uqIR=f;ur zQd_m+Ar57I{V?qcj1~b=8u~%ou6Af!b6Fbu?7Obfz1sP(i)v{A?RK#$w4BY%MN^T8 zmcAz6!r0e2bF(WxruWtvxt=iG9RVdI#^kOF#UPEt>k&7iz1`Ntx?phTZRVZzlbs;b z_$J-i%OtnGiGe~;#UQsx$s-V{0SPT+_IeeESKb4=$_uH~p@5!2HxCnateBlh9)5YO z8yCKlrhajlGX2Mn|A+SguN%e#`9-7-86f09bpWuOA2v#i#5wQkE|Ex!3K_2$Lv;+^ zac!w7n5EQ~83rsF&2tNUY*!8jkKE=JUxDdz%c)`$x^*JG>M4YGIa;;Ck#H|@r;37q z5;-;ROEaNQOu-BIEV3U$b;Yh<>Q@QyAeP}bk_^UP(T}9MM!mlB(*d^^=TzM?hB0R% zZ5z;OC>(S>bhla>RfDzB#f?@VztWH&N2EJ6M-7t&n_7gvJQ zsAX0z*MD${hKtv|sM%{^gbTrzPZjxOdd387O+e8U>>yx!Gl{uyaV$68;B`8Z1nI^f z>YP}9#qZMxjd^dm6)uHTgv8493%6|5p*E&r%SKc^$g7Ddg9>&v*G*RJp}m_6+BF$j zX?nbRQB&e0b@_SrqJ)-|81X<9v_8<(DW(IPMVP_T@wAxcs;pFW#Q7F;%eADbHArWe z@|F>-Sa<6u-bG0n@%2-;L3o_brY^k>zo+#rEIK{G@g#`b4SU9pNfDfORt=&WaeH3kjRY@z%nC5( zJu6+lp{paB0^b_5>>VOK9K0pUdH7yBV$n)aF1&(8(UE>?7hX4dfXc-?*O>$CI8i?2 z29#%{1KBWr*YJ;iK8lg= zz%057VT>q~klIoDZQm=O4i3xISky-RYL<9d!rU{8`(F7{SLljL*NlD6i`z~^tZ2Wq zZVv2&9PmV{I+_l^9~DN3&nO8nM6G};V1ALl>b9gU3!KqWeb1+S#@U8oE zxOjELaMb$sRHP^Dguh!IyPdCazN}!{bs2cHHQUk>6D;2m$je9vIRXQreyeR&Bb6yH zee&nGTEkhTqC%NSZHM}?K9i7$ju0s_lb}~ z;S58aPtE3`)=5(Wc&!)iRkF@aD-+VKnaDtv)3u4z0lodd@yVbJcc?FX&za^Z{chpS zv35;FO1~3a#$mqS1=yp0olbp`EJmkekmJjJuD!A!v$_~=?BGtQYMC$#O!zz2saB*nJxP+aK&Q^W3RBC{{!d{@ul9*uMc(s?1;Tj2tjEO0jQBLJb zVK$V#eZ(iIA(%%5a8Kpj0u0fMZCNR#nT6@|uPHno&=8pp(l1k8wKcHfY?^hyd_s^u;Sahd#CdS|`OmbcpuB2XI~{oJzf$N){;4IIWY?6))Dn%2~^3+B^^?@*hXER05=+4B+kGuC#OXSa7aWU`@fO6 z;Tc_I_)md=UNO&}RL7`EAj_U6bW2j#={?tGjw08Ei)OrOk)t!U*>IpWwOfNfrwlY_ zAsfTvYrb-@0cb+iQCj9e{QBtbtvIAK9D|?gSMn7SRS0U7hr@lIQ%kjERFk#DQSh6g z;J(*QExn;{KCmf~^L&wy+~pjCLf~GP{nFDtA2y#c(Un zWnl`NK5NvGmcP{F_pSdm`oOx-2+WxN?k{)N;`8e_J(pyEc)bstgeJJ3jdk7f>jS^X z@2vWkR&aEd1bkOp2Rme$_Yr#No5S8-e)wB}E;^-B$WCWUY@zJ*F;0KSF;$SHzoQWl z?;QI*={)-A13IE)>rYn9dzvDR1DLVQc$C$f2A^Z1>XOhIorlU*zuWvs1yeQF}EAjL`Fd+x#tNHPVW{wVJ zc%Bm~fike3^8?%tS;w-nBh)AGXAkX~80>9&4pqUyexq_t6r4FT8)~#O=W=L&EpECR zkP43FL2*?6*w71mYF~$%+)_f~=H)w;9G%V~p^lp4!vM({9r+jpsit?S(`=DPhUvrw zTDLs7dp(ysaPe-U*Li?GMtfbaF?@G>XdtmO%qPfXK&6J|_-1KVZZ^iT9|)S_@?DV4 z9a5=s9od-yJKq%AiKY}A zspmD2B2%-_Kn0-5|4&hzg>QDFZMN^qN7an@<(06vnZrpX@NnsozI0|@&jLQ+(smQz zgobaPh1brtYoc;pT#N1Ff%^WZ3SyZW!{7_{hNq3b!W&d>~$9`RruEBzRt73=OcY zZ#=28@R%j4POD5bpO!4=c&>@wJ02=pU!09G=B^L(b+5SSW&j)WVHYua>MzqrMS zS+O3Ach-814lYXvka!o*wb>BlvLbG+QzMP+h@K*=F0y)*addka%CR9x{|#?<^?o z_U&0^^{zGt#T6Sahbkjc>H9Z51ZZN?2RDrNz9UDhDCl;NXzCt#C#P1*1wJo27;;Q# zSc@{et^jiCJQ~JU*stj2=*%!U3fu}L+C-U>a75Xx@pK}}UGui|UjhqnnzNHj3GUIP zdVu@uFUie@!o~4G@WEgl-@H2CbxWssxGk-3ip6hdll>wsxJxl!>2`WLI8dZZdn@?a@+Rn=~;2v)JMkWxipya{>dw+TDat9FWgw< z2*Wz+8S$6#^zhQd4$&V4lP-a0`x(f{YV7 zKTh265~D2770MR$*7S{n&j9S`b33vzveafWm^3ai2a4xAAHNTJ z#re7i7W~ZBy*FGln8tN%<=*HBk>y0y)3X6Q+;N^0I_1o^e8`F8Gz}lx<<)REaeydz z_ZsYkHfKW}s%t+$E32(EX1$&D)6+6fb_`9aVkQsdYLsd+CJ660TLfD=@m_RM2Mhh$ zgofrDAUB2Fu4NMnir%YrEd!7_dPu-O_M=~>>Clq^-k56;lM6) zHDP_xX%xVfQa<0sAGe>PA)x$B)Gr7yn3_Bw=fD`1Vud_Y*4M1^Ln@ceYiW~s`g|*hOlf`eY2=%;qst^_L1zW=DsJtSPS7E34e}Ia6^Xrz z^S*%NI35-9{WB%+LVL(|$%>*2-Z0|dOnHzpF>bYj?$pWI2Y(dYXg>SLE1NgG#qaFH z{CL|O_MBTx^qF^eW$qcnK%pzN+Hn=%oi7xm+~CIy4XEk!GoGVzAec;rizED{^r1XmbflwlhDe=WDPOdLfY-n6Y{$29 zp2-i&?1MbglYQe)Y6UGrThM%%u~QTxw4%%qtCuC#h4DtXWz45c7-r{j`)F3p%(|?a z@D?y^zOPpIB9L~aOl5LaIo31pJC_7RHezbJ$EyY0`@bpGRhE@IaG#iB3t`dy%k-l6 z^T3L$^nDgaS!PD&DYU@eCdUqm z!^~zr8E6r};tAOYxpA5M@ivJy$nKjG<6C=7jNz6F7eHT`7odFwKyeM6*QuPpjUPo!7!O9)jnLmFa)R7);*{8jM zG?uXmZQ49$5u|Cyvl4ztSwW*jV)NC=K87PgCn~rBrgE2Wt}xdwGMB>k>XoU>$sVw; z%uS{W%D)x+*=WRVZ`6~faR$i2a8m}s$83+q+c|&7v1>PVdbos;D@GTMmVDY=)eWZ= z;sRwZ2T&{W2olnC;a@h#rayAHVmDsXNWs_AwANK9yLR=DajzFK4uZO@{uas?)78zr zNJ?U6^yk%pLIq5FtJz^?B+}^3DAH||b-?vd(B^)peb(e4ue^WRt~V0-7RG|4Hxb?M zwcGrrzH0F=cG572NIn&}%lW53EK;>Y3p+ctP+Qiz{WgEM)DrF;A30?R<4PzdX;KD7DAeSW$d@ZW<#;0vp zAnme?I_*>Wu)S+i=By80$zp;xs#51}6e}Te+yaip!T+!_xLKe?etD2bUt*~^lMG77 zC`RobMTm1qU-mp%-TgX!F>?wdpWewzcY6$E1ITFC4RkOC%rb%}^{*1p(x~iq`*~RB&**06^?!ODmu`%u*0tJz?b>@&o0Rba_M@GrdXfp z*U~Q&B7GWM;@EN)Z-q$(0-*F-M`a*mqe(WE1?*uer2SmKKxv8IEb(!x@xQl8j%m}I zYRDHJ0zlF&4lFgoxWj-H8}rK0ZA7{fS*&mBi8f~G^32RkllRv8N~qCFLJFlwPDqt4 z>~P3yD;LjwJ~ik#p&!pw=H0hyD6MCq36yPyyw`qlFU&dG@WqXmX}R6oG;Ig*X@C%; z*nEO1v+P*`JR|T&2aCv?)*tD-7{ywIrJleFyq%eF&&CX4xLD0(r_P_#=gxNXU_wgOmiEQ6g)v1xs-*8Gc9{$sDj{-EW$T#hxS1E}{k=>sh4 zIV2uyLJOgz#xJA}g?1_klZmFoS^XtCk*d1`%2}Td_qv5%&b7f&G`;yjQe7WO#d0r9>RI8!OGiiaFeGEeDXy7({O)#^G&;$<4_O(Y)1|uFE{KCw2vAe13(IfDOVjfw3XLhq)gSxMT zi{P^$*x^w_^ZIH&D0(rwe@ru|-)i1!pa#{SlMiMT@KowU#i4YrKLVvP{Y@mJ=>JVd zKOjtAKL4Mv%%fFuwq*`XGxg04hdo7Hk*2&C{3;t!hP+|lJKhbr9^{~S7&2JB`O=NH zq!*0u#@qS^of z)CEFhhX*6udZbXXl(v`KyO#$IncvdYbEqU-B)DQwS&Nb?(`j#G0VG47mEQul)79%X z0z)6nf-Gh3W%96t)4sZTJ+;Ynj@V$I*@Y~9`a=Li1|#oyh(&j1V`{lO{hQ>o6+NC@ zSr~D~|-OlJ$3f5ekjaGlT5DO41Bl9>inJIxGpu0$E-YxU%DqM7?l%`n+3>k6~N6i~W%sW?r_ z>yj8&p8IP+t=G|8aHJ|6Y6q%4po<=5h3hk5Qd|lN+>Fs1x$qdJTf{972Df2bJ*gbl~_fJ;{H*s(J!`+WVrG@Wi!|Tx<1z31)W@fb|#nIJ@pR&rPX0coVR@eErwK) zHw@RQ1Qd<_ueVl2gNbIBHvXmtF*aXo7?*qR7UWu@lH+x&0L7ie4D(55o#5uEupg=fh!ca9@`W@91|HX~)c9u-`ggQlA17po=mQofYlp9(1TtP#MK8amD8J z-E~@3K$<*DhE^???==-VZ(bHeASYDxTV;v4JS%?i$Zbe}e9wSF#*(I-9 z_(3eDY2v208`Pw>}IDtPm&u6<4(K<4(N1d87C?AHi^0{uZcEsg^3*1_uQOT654Uqyj zsZp81^4{`tQ{Lct*%_F7UATV;*nxqO6l#iolFw`NDn;``kup zLqb(~uWZ3ufUV;m`;LN-Ey}qtA=2u$c8}~{OUEUkKP!MLRj=5BA#zi$7pKiuo6@h9 zV(ma_i=}tg9-gc-X6FTv22(`uP^%*Rb;dQSVaS}1nN6hu2IRn#{L(n0QBd* zFl3ORbDv5M^uZc@%UV}rfQLot?%ZZ4eZi=#o(KIpZ^2rmWL{P%CQE>zM%|H_Yqhy* z>&Kn2&g-&{EWMFqGHvQe;oSjklqU!iQ7-or-0(uFUnS2{BJ2HlWJZo81&lk*krO#W zM3K)}l=HsZMF!DEs`Y;|cT?)tz@N@+k%li35eI4D~#`!dIce22lkG%=! zvY&fPkJ$nA(Q~V23c)z*5GrZia`nhdMEQLYLJnWc7$m^E@^mbpB>{ijw^2BCKaAy1 zu*JGc4!VE=a_cVe=2+vH``3>lRJ1k4#|xE**3_jbUvVB^E1%_3MdnKW#S+o}3At$2 z(h}J7W$a#iLZ=+d{7Ola{RsU&gd8?Z{A$YPQAE|IOrw?uP@UzTBnn3#N4H2hz4Ov* z%vq5fKXbph$zC)dxaJaLr$lby=m!85e_BJquIf=x3m6(P`^O&Yd*dKTBD>~Oi)I5G z)`0z^mro`5eVjf|hEV1F!pv;(mK`OqCfY?%EuIh;b2o!m^|D^*lE?kSpHPZ{aNkl1 zqO;^Somyu-*8RG}!%Wu(79vz3vN1=d+$aimV_o7_h+r*A-mp+;f~G|r6@_Z78R7+) za`FQ(3Rw=}GXgL`N00~!T&xQa@)P5|qgQQEcK*+m9`tfyS`Q-O*6i-T(BQf~+I7$a zz?2Iw0YzWv1#Iqew4=Q(k9O`F0s$MzMQ3&`Fuoyr%x~0A9~fNn5j})8Z2$BGJAlKw z=|(86ZPG>c*SychP%(@iO_5hjZ^>N)UZn6SqHX)p$)8xN1Zj)`^5&EzY46&g740{2 zcJ4U+oVo-AOGN%!MGI;mH0lA4n7&IV&w>*3y;@Xca89arJqD%>qRXW>{}wdqpn+wt z=sVi5J*?nwm1^W+_H=t+PEH{zDZiY=h%)o7!oiJakXgXTF81}Xa0LEIP zhNUOV(!yX)gXy8w5!bYkT@Z{y+6?hqSf&KVrREIyuRWGm`$Cl!1Y_C-MP-bRMyh%; z(OIU-40j(8r^C)^CJ;rLzHD9>w8~tvT2Rg+m!=Kk?k$1L$__G4{y=INZ}~R_-)5*k zZO@zm-o~Y29h2^~=d~RH>?OIoEY0h|fLIvv)a8B`x;w9jkjh3x2+hzVTZK#>AvUtr zD>|~FfM*#SJ>*Pg1>WF1ah`psf4?H8A0#BSrqh>DOQKj@Xdv4EnE%!=DNA~X7~G=q zGJxXcI|&AfskMxr_m%=Ol(mX;XJ`Xa#_w_D710l3fN@&Yp&zn*boqVVOe(lx44GGu z91w4I$@SxkHfA>rr29}ne_vSHX{B^xJ+wbU=+z%gO5@D z;uNTMZF)u!vTf25wz)LM@hIZHM|ceU2AOu1roM#Rn+{DD_mDy>UE=^esd+^hGSI3K z8ETg~)jQ#USxP;QZ2&GQUAtB>;{6c&Fy*juD^mgq$$X)$<#a-C$Cx z5{;Ed(8_)YKPF40rIAY8c1hi~`B|F40i`!8~LN7@$ zZ~p6%W^OOz3r%PmL&ME>mDWxkw`e5COyi+x%U^VnXp3HzoG&p~AjR-vp-v(}-?u~T z)JeLs?Lh1*gb<}Ab>2?R9p;u`OJRu_eW>xre?a|rQ8%!ib{mez#9 zn*J-MnY4|*W=-;sv_KsR%9_!0XK6YM5zd5mABFZ)2u60WO_FY!6(1Uom$fOT(E*1@ z23@xMuRIv#`T2Z!6sd|2d|ql4;fdJPCr%{WDexV=;*G!Fid-?jhEJ-vPOw?swk6OZ zydcH4kA#z1fKCRWxGEBN$&j>bB~cxY=U3)mkVw&zOt5uD*+>e)GPxyn ze7M>nl&Zu?RS4*09;-e?+C59+&Ph_G5Ocftg(+H-=*B=luT_+XVgT-sClF=Zfd4-x zr31=Pxsn2rWlx|vJ#`H}UXufkbNGMu#1gYsObGkP?JxtyL<})5F#>wFW+#6nd;9gu zygG?}FtbR)Y@^e3Hasg-mVF{-)5VLeSC80f?ms%6H#Z&6{ekd>h)!7S*&ga95WTP7 zmwN&s%s1}Xkt&}4i?IJ?R)J?Eb~gV_^$+K6-wj^xeqN6t6+`$zM71CI9nRkI);1n672-IL6YK(-vJ*H1NUPf1XFj*q~e;1xd6OBG)bTr=uDDo z{u@z*Zx9W4tJgjxjq_KrO3|-wmcMt4QNdz1HxCqePiQSIy)l#Ly=B4YXMy8HCosnR zJN=+L>wOGt%G;?NitG+n!EDniIa@}=N=_2-Z@;r_?+u3}Y?M-H&;;P?Uh3&n+ZVCh@nGvf+S`)t|)XR;S->22rj^%*B7_Dv^IA4^sbk+W$7f zM3W1g*6{z4+LIQThve*GRFMDr0aM%B{Nh7t`@QOaw*t>GL{I&{fB#E?|Dr%zZ!oDn WoeU$^jAx(N^jJkxxfEg^`hNg3KfqT2 literal 0 HcmV?d00001 diff --git a/docs/index.rst b/docs/index.rst index 40420fb..01451b7 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -26,6 +26,7 @@ Welcome to Greykite! View the contents to get started. gallery/quickstart/index gallery/tutorials/index + gallery/templates/index .. toctree:: :maxdepth: 1 diff --git a/docs/nbpages/quickstart/0100_simple_forecast.py b/docs/nbpages/quickstart/0100_simple_forecast.py index 80129aa..1cfd29c 100644 --- a/docs/nbpages/quickstart/0100_simple_forecast.py +++ b/docs/nbpages/quickstart/0100_simple_forecast.py @@ -54,17 +54,18 @@ # %% # Create a forecast # ----------------- -# You can pick the ``PROPHET`` or ``SILVERKITE`` -# forecasting model template. (see :doc:`/pages/stepbystep/0100_choose_model`). +# You can choose from many available +# models (see :doc:`/pages/stepbystep/0100_choose_model`). # -# In this example, we use ``SILVERKITE``. -# You may also use ``PROPHET`` to see how a third-party library -# is leveraged in the same framework. +# In this example, we choose the "AUTO" model template, +# which uses the Silverkite algorithm with automatic parameter configuration +# given the input data frequency, forecast horizon and evaluation configs. +# We recommend starting with the "AUTO" template for most use cases. forecaster = Forecaster() # Creates forecasts and stores the result result = forecaster.run_forecast_config( # result is also stored as `forecaster.forecast_result`. df=df, config=ForecastConfig( - model_template=ModelTemplateEnum.SILVERKITE.name, + model_template=ModelTemplateEnum.AUTO.name, forecast_horizon=365, # forecasts 365 steps ahead coverage=0.95, # 95% prediction intervals metadata_param=metadata @@ -207,10 +208,10 @@ # # See the following guides: # -# * :doc:`/gallery/quickstart/0200_changepoint_detection` -# * :doc:`/gallery/quickstart/0300_seasonality` -# * :doc:`/gallery/quickstart/0400_model_summary` -# * :doc:`/gallery/quickstart/0500_grid_search` +# * :doc:`/gallery/quickstart/01_exploration/0100_changepoint_detection` +# * :doc:`/gallery/quickstart/01_exploration/0300_seasonality_plots` +# * :doc:`/gallery/quickstart/02_interpretability/0100_model_summary` +# * :doc:`/gallery/quickstart/03_benchmark/0100_grid_search` # # For example, for this dataset, you could add changepoints to # handle the change in trend around 2014 and avoid the overprediction @@ -228,5 +229,5 @@ # For details about the model templates and how to set model # components, see the following guides: # -# * :doc:`/gallery/tutorials/0200_templates` +# * :doc:`/gallery/templates/0100_template_overview` # * :doc:`/pages/stepbystep/0000_stepbystep` diff --git a/docs/nbpages/quickstart/01_exploration/0100_changepoint_detection.py b/docs/nbpages/quickstart/01_exploration/0100_changepoint_detection.py new file mode 100644 index 0000000..098500d --- /dev/null +++ b/docs/nbpages/quickstart/01_exploration/0100_changepoint_detection.py @@ -0,0 +1,355 @@ +""" +Changepoint Detection +===================== + +You can detect trend and seasonality changepoints with just a few lines of code. + +Provide your timeseries as a pandas dataframe with timestamp and value. + +For example, to work with daily sessions data, your dataframe could look like this: + +.. code-block:: python + + import pandas as pd + df = pd.DataFrame({ + "datepartition": ["2020-01-08-00", "2020-01-09-00", "2020-01-10-00"], + "macrosessions": [10231.0, 12309.0, 12104.0] + }) + +The time column can be any format recognized by ``pd.to_datetime``. + +In this example, we'll load a dataset representing ``log(daily page views)`` +on the Wikipedia page for Peyton Manning. +It contains values from 2007-12-10 to 2016-01-20. More dataset info +`here `_. +""" + +import warnings + +warnings.filterwarnings("ignore") + +import pandas as pd +import plotly + +from greykite.algo.changepoint.adalasso.changepoint_detector import ChangepointDetector +from greykite.framework.benchmark.data_loader_ts import DataLoaderTS +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.forecaster import Forecaster +from greykite.framework.templates.model_templates import ModelTemplateEnum + +# Loads dataset into UnivariateTimeSeries +dl = DataLoaderTS() +ts = dl.load_peyton_manning_ts() +df = ts.df # cleaned pandas.DataFrame + +# %% +# Detect trend change points +# -------------------------- +# Let's plot the original timeseries. +# There are actually trend changes within this data set. +# The `~greykite.framework.input.univariate_time_series.UnivariateTimeSeries` +# class is used to store a timeseries and to provide basic description and plotting functions. +# The ``load_peyton_manning`` function automatically returns a ``UnivariateTimeSeries`` instance, +# however, for any ``df``, you can always initialize a ``UnivariateTimeSeries`` instance and +# do further explorations. +# (The interactive plot is generated by ``plotly``: **click to zoom!**) +fig = ts.plot() +plotly.io.show(fig) + +# %% +# `~greykite.algo.changepoint.adalasso.changepoint_detector.ChangepointDetector` +# utilizes pre-filters, regularization with regression based models, and +# post-filters to find time points where trend changes. +# +# To create a simple trend changepoint detection model, we first initialize the +# `~greykite.algo.changepoint.adalasso.changepoint_detector.ChangepointDetector` class, +# then run its attribute function ``find_trend_changepoints``. +model = ChangepointDetector() +res = model.find_trend_changepoints( + df=df, # data df + time_col="ts", # time column name + value_col="y") # value column name +pd.DataFrame({"trend_changepoints": res["trend_changepoints"]}) # prints a dataframe showing the result + +# %% +# The code above runs trend changepoint detection with the default parameters. +# We may visualize the detection results by plotting it with the attribute +# function ``plot``. + +fig = model.plot(plot=False) # plot = False returns a plotly figure object. +plotly.io.show(fig) + +# %% +# There might be too many changepoints with the default parameters. +# We could customize the parameters to meet individual requirements. +# +# To understand the parameters, we introduce a little bit of the background +# knowledge. The algorithm first does a mean aggregation to eliminate small +# fluctuations/seasonality effects (``resample_freq``). This avoids the trend +# picking up small fluctuations/seasonality effects. +# +# Then a great number of potential changepoints are placed uniformly over the +# whole time span (specified by time between changepoints ``potential_changepoint_distance`` +# or number of potential changepoints ``potential_changepoint_n`` +# , the former overrides the latter). +# +# The adaptive lasso (more info +# at `adalasso `_) +# is used to shrink insignificant changepoints' coefficients to zero. +# The initial estimator for adaptive lasso could be one of "ols", "ridge" +# and "lasso" (``adaptive_lasso_initial_estimator``). The regularization +# strength of adaptive lasso is also controllable by users +# (``regularization_strength``, between 0.0 and 1.0, greater values imply +# fewer changepoints. ``None`` triggers cross-validation to select the best +# tuning parameter based on prediction performance). +# +# Yearly seasonality effect is too long to be eliminated by aggregation, so +# fitting it with trend is recommended (``yearly_seasonality_order``). +# This allows changepoints to distinguish trend from yearly seasonality. +# +# Putting changepoints too close to the end of data is not recommended, +# because we may not have enough data to fit the final trend, +# especially in forecasting tasks. Therefore, one could specify how far +# from the end changepoints are not allowed (specified by the time from the end +# of data ``no_changepoint_distance_from_end`` or proportion of data from the end +# ``no_changepoint_proportion_from_end``, the former overrides the latter). +# +# Finally, a post-filter is applied to eliminate changepoints that are too close +# (``actual_changepoint_min_distance``). +# +# The following parameter combination uses longer aggregation with less potential +# changepoints placed and higher yearly seasonality order. Changepoints are not +# allowed in the last 20% of the data + +model = ChangepointDetector() # it's also okay to omit this and re-use the old instance +res = model.find_trend_changepoints( + df=df, # data df + time_col="ts", # time column name + value_col="y", # value column name + yearly_seasonality_order=15, # yearly seasonality order, fit along with trend + regularization_strength=0.5, # between 0.0 and 1.0, greater values imply fewer changepoints, and 1.0 implies no changepoints + resample_freq="7D", # data aggregation frequency, eliminate small fluctuation/seasonality + potential_changepoint_n=25, # the number of potential changepoints + no_changepoint_proportion_from_end=0.2) # the proportion of data from end where changepoints are not allowed +pd.DataFrame({"trend_changepoints": res["trend_changepoints"]}) + +# %% +# We may also plot the detection result. + +fig = model.plot(plot=False) +plotly.io.show(fig) + +# %% +# Now the detected trend changepoints look better! Similarly, we could also +# specify ``potential_changepoint_distance`` and ``no_changepoint_distance_from_end`` +# instead of ``potential_changepoint_n`` and ``no_changepoint_proportion_from_end``. +# For example ``potential_changepoint_distance="60D" and +# ``no_changepoint_distance_from_end="730D"``. Remeber these will override +# ``potential_changepoint_n`` and ``no_changepoint_proportion_from_end``. +# +# Moreover, one could also control what components to be plotted. For example + +fig = model.plot( + observation=True, # whether to plot the observations + observation_original=True, # whether to plot the unaggregated values + trend_estimate=True, # whether to plot the trend estimation + trend_change=True, # whether to plot detected trend changepoints + yearly_seasonality_estimate=True, # whether to plot estimated yearly seasonality + adaptive_lasso_estimate=True, # whether to plot the adaptive lasso estimated trend + seasonality_change=False, # detected seasonality change points, discussed in next section + seasonality_change_by_component=True, # plot seasonality by component (daily, weekly, etc.), discussed in next section + seasonality_estimate=False, # plot estimated trend+seasonality, discussed in next section + plot=False) # set to True to display the plot (need to import plotly interactive tool) or False to return the figure object +plotly.io.show(fig) + +# %% +# Detect seasonality change points +# -------------------------------- +# By seasonality change points, we mean the time points where the shape +# of seasonality effects change, i.e., the seasonal shape may become "fatter" +# or "thinner". Similar to trend changepoint detection, we also have +# pre-filtering, regularization with regression based model and post-filtering +# in seasonality change point detection. +# +# To create a simple seasonality changepoint detection model, we could either use +# the previous ``ChangepointDetector`` object which already has the trend changepoint +# information, or initialize a new ``ChangepointDetector`` object. Then one could run +# the ``find_seasonality_changepoints`` function. +# +# Note that because we first remove trend effect from the timeseries before detecting +# seasonality changepoints, using the old ``ChangepointDetector`` object with trend changepoint +# detection results on the same df will pass the existing trend information and save time. +# If a new class object is initialized and one runs ``find_seasonality_changepoints`` directly, +# the model will first run ``find_trend_changepoints`` to get trend changepoint information. +# In this case, it will run with the default trend changepoint detection parameters. +# However, it is recommended that user runs ``find_trend_changepoints`` and check the result +# before running ``find_seasonality_changepoints``. +# +# Here we use the old object which already contains trend changepoint information. + +res = model.find_seasonality_changepoints( + df=df, # data df + time_col="ts", # time column name + value_col="y") # value column name +pd.DataFrame(dict([(k, pd.Series(v)) for k, v in res["seasonality_changepoints"].items()])) # view result +# one could also print res["seasonality_changepoints"] directly to view the result + +# %% +# We can also plot the detection results, simply set ``seasonality_change`` and +# ``seasonality_estimate`` to be True. + +fig = model.plot( + seasonality_change=True, # detected seasonality change points, discussed in next section + seasonality_change_by_component=True, # plot seasonality by component (daily, weekly, etc.), discussed in next section + seasonality_estimate=True, # plot estimated trend+seasonality, discussed in next section + plot=False) # set to True to display the plot (need to import plotly interactive tool) or False to return the figure object +plotly.io.show(fig) + +# %% +# In this example, there is not too much seasonality change, thus we only see one +# yearly seasonality change point, however, we could also customize parameters to +# increase the seasonality changepoint detection sensitivity. +# +# The only parameter that differs from trend changepoint detection is ``seasonality_components_df``, +# which configures the seasonality components. Supplying daily, weekly and yearly seasonality +# works well for most cases. Users can also include monthly and quarterly seasonality. +# The full df is: + +seasonality_components_df = pd.DataFrame({ + "name": ["tod", "tow", "conti_year"], # component value column name used to create seasonality component + "period": [24.0, 7.0, 1.0], # period for seasonality component + "order": [3, 3, 5], # Fourier series order + "seas_names": ["daily", "weekly", "yearly"]}) # seasonality component name + +# %% +# However, if the inferred data frequency is at least one day, the daily component will be removed. +# +# Another optional parameter is ``trend_changepoints`` that allows users to provide +# a list of trend changepoints to skip calling ``find_trend_changepoints``. +# +# Now we run ``find_seasonality_changepoints`` with a smaller ``regularization_strength``, +# and restrict changepoints to the first 80% data. As recommended, we use our previous +# detected trend change points (use the same object after running ``find_trend_changepoints``). + +res = model.find_seasonality_changepoints( + df=df, # data df + time_col="ts", # time column name + value_col="y", # value column name + seasonality_components_df=pd.DataFrame({ # seasonality config df + "name": ["tow", "conti_year"], # component value column name used to create seasonality component + "period": [7.0, 1.0], # period for seasonality component + "order": [3, 5], # Fourier series order + "seas_names": ["weekly", "yearly"]}), # seasonality component name + regularization_strength=0.4, # between 0.0 and 1.0, greater values imply fewer changepoints, and 1.0 implies no changepoints + no_changepoint_proportion_from_end=0.2, # no changepoint in the last 20% data + trend_changepoints=None) # optionally specify trend changepoints to avoid calling find_trend_changepoints +pd.DataFrame(dict([(k, pd.Series(v)) for k, v in res["seasonality_changepoints"].items()])) # view result +# one could also print res["seasonality_changepoints"] directly to view the result + +# %% +# We can also plot the detection results. + +fig = model.plot( + seasonality_change=True, # detected seasonality change points, discussed in next section + seasonality_change_by_component=True, # plot seasonality by component (daily, weekly, etc.), discussed in next section + seasonality_estimate=True, # plot estimated trend+seasonality, discussed in next section + plot=False) # set to True to display the plot (need to import plotly interactive tool) or False to return the figure object +plotly.io.show(fig) + +# %% +# Create a forecast with changepoints +# ----------------------------------- +# Both trend changepoint detection and seasonality changepoint detection algorithms +# have been integrated with Silverkite, so one is able to invoke the algorithm by +# passing corresponding parameters. +# It will first detect changepoints with the given parameters, +# then feed the detected changepoints to the forecasting model. + +# specify dataset information +metadata = dict( + time_col="ts", # name of the time column ("datepartition" in example above) + value_col="y", # name of the value column ("macrosessions" in example above) + freq="D" # "H" for hourly, "D" for daily, "W" for weekly, etc. + # Any format accepted by ``pd.date_range`` +) +# specify changepoint parameters in model_components +model_components = dict( + changepoints={ + # it's ok to provide one of ``changepoints_dict`` or ``seasonality_changepoints_dict`` by itself + "changepoints_dict": { + "method": "auto", + "yearly_seasonality_order": 15, + "regularization_strength": 0.5, + "resample_freq": "7D", + "potential_changepoint_n": 25, + "no_changepoint_proportion_from_end": 0.2 + }, + "seasonality_changepoints_dict": { + "potential_changepoint_distance": "60D", + "regularization_strength": 0.5, + "no_changepoint_proportion_from_end": 0.2 + } + }, + custom={ + "fit_algorithm_dict": { + "fit_algorithm": "ridge"}}) # use ridge to prevent overfitting when there many changepoints + +# Generates model config +config = ForecastConfig.from_dict( + dict( + model_template=ModelTemplateEnum.SILVERKITE.name, + forecast_horizon=365, # forecast 1 year + coverage=0.95, # 95% prediction intervals + metadata_param=metadata, + model_components_param=model_components)) + +# Then run with changepoint parameters +forecaster = Forecaster() +result = forecaster.run_forecast_config( + df=df, + config=config) + +# %% +# +# .. note:: +# The automatic trend changepoint detection algorithm also supports adding additional custom trend +# changepoints in forecasts. In the ``changepoints_dict`` parameter above, you may add the following +# parameters to include additional trend changepoints besides the detected ones: +# +# - ``dates``: a list of custom trend changepoint dates, parsable by `pandas.to_datetime`. For example, ["2020-01-01", "2020-02-15"]. +# - ``combine_changepoint_min_distance``: the minimum distance allowed between a detected changepoint and a custom changepoint, default is None. +# For example, "5D". If violated, one of them will be dropped according to the next parameter ``keep_detected``. +# - ``keep_detected``: True or False, default False. Decides whether to keep the detected changepoint or the custom changepoint when they are too close. +# If set to True, keeps the detected changepoint, otherwise keeps the custom changepoint. + +# %% +# Check results +# ------------- +# Details of the results are given in the :doc:`/gallery/quickstart/0100_simple_forecast` +# example. We just show a few specific results here. + +# %% +# The original trend changepoint detection plot is accessible. +# One could pass the same parameters in a dictionary as they are using +# the ``plot`` function in ``ChangepointDetector``. + +fig = result.model[-1].plot_trend_changepoint_detection(dict(plot=False)) # -1 gets the estimator from the pipeline +plotly.io.show(fig) + +# %% +# Let's plot the historical forecast on the holdout test set. +backtest = result.backtest +fig = backtest.plot() +plotly.io.show(fig) + +# %% +# Let's plot the forecast (trained on all data): +forecast = result.forecast +fig = forecast.plot() +plotly.io.show(fig) + +# %% +# Check out the component plot, trend changepoints are marked in the trend +# component plot. +fig = backtest.plot_components() +plotly.io.show(fig) # fig.show() if you are using "PROPHET" template diff --git a/docs/nbpages/quickstart/01_exploration/0200_auto_configuration_tools.py b/docs/nbpages/quickstart/01_exploration/0200_auto_configuration_tools.py new file mode 100644 index 0000000..2bda022 --- /dev/null +++ b/docs/nbpages/quickstart/01_exploration/0200_auto_configuration_tools.py @@ -0,0 +1,285 @@ +""" +Auto Configuration Tools +======================== + +The Silverkite model has many hyperparameters to tune. +Besides domain knowledge, we also have tools that can help +find good choices for certain hyperparameters. +In this tutorial, we will present + + * seasonality inferrer + * holiday inferrer + +.. note:: + If you use the model templates, you can specify the "auto" option for certain model components + (growth, seasonality and holiday), + and the auto configuration tool will be activated automatically. + See `auto seasonality <../../../pages/model_components/0300_seasonality.html#silverkite>`_, + `auto growth <../../../pages/model_components/0500_changepoints.html#auto-growth>`_ and + `auto holidays <../../../pages/model_components/0400_events.html#auto-holiday>`_ for the way to activate them. + This doc explains how the "auto" options work behind the code. + You can replay the "auto" options with the Seasonality Inferrer and Holiday Inferrer below. + Please remember that if you are doing train-test split, + running the inferrers on training data only is closer to the reality. + +Seasonality Inferrer +-------------------- + +The Silverkite model uses Fourier series to model seasonalities. +It's sometimes difficult to decide what orders we should use +for each Fourier series. +Larger orders tend to fit more closely to the curves, while having +the risk of overfitting. +Small orders tend to underfit the curve and may not learn the exact seasonality patterns. + +`~greykite.algo.common.seasonality_inferrer.SeasonalityInferrer` +is a tool that can help you decide what order to use for a seasonality's Fourier series. +Note that there are many ways to decide the orders, +and you don't have to strictly stick to the results from Seasonality Inferrer. + +How it works +~~~~~~~~~~~~ + +The seasonality inferrer utilizes criteria including AIC and BIC to find the most +appropriate Fourier series orders. +For a specific seasonality, e.g. yearly seasonality, the steps are as follows: + +* Trend removal: seasonality inferrer provides 4 options for trend removal. + They are listed in `~greykite.algo.common.seasonality_inferrer.TrendAdjustMethodEnum`. + Specifically: + + * ``"seasonal_average"``: given an indicator of seasonal period, the method subtracts + the average within each seasonal period from the original time series. + For example, given the column ``year``, the average is calculated on each different year. + * ``"overall_average"``: subtracts the overall average from the original time series. + * ``"spline_fit"``: fits a polynomial up to a given degree and subtract from the original time series. + * ``"none"``: does not adjust the trend. + + Typically "seasonal_average" is a good choice with appropriate columns. + For example, we can use ``year_quarter`` for quarterly seasonality, ``year_month`` for monthly seasonality, + ``year_woy_iso`` for weekly seasonality and ``year_woy_dow_iso`` for daily seasonality. +* Optional aggregation: sometimes we want to get rid of shorter fluctuations before + fitting a longer seasonality period. We can do an optional aggregation beforehand. + For example, when we model yearly seasonality, we can do a ``"7D"`` aggregation to eliminate + weekly effects to make the result more stable. +* With a pre-specified maximum order ``n``, we fit the de-trended (and aggregated) time series + with Fourier series from 1 to n, and calculate the AIC/BIC for those fits. + The most appropriate order is then decided by choosing the order with best AIC or BIC. + The method also allows to slightly sacrifice the criterion and reduce the order + for less risk of overfitting using the ``tolerance`` parameter. +* Finally, an optional offset can be applied to any inferred orders to allow manual adjustments. + For example, if one would like to use less yearly seasonality order, they may specify + offset for yearly seasonality to be -2, and the final order will subtract 2 from the inferred result. + This is useful when users tend to use more or less orders to model seasonality, + and want a knob on top of the inferring results. + +Example +~~~~~~~ + +Now we look at an example with the Peyton-Manning Wiki page view data. +""" + +import pandas as pd +import plotly +from greykite.common.data_loader import DataLoader +from greykite.algo.common.seasonality_inferrer import SeasonalityInferConfig +from greykite.algo.common.seasonality_inferrer import SeasonalityInferrer +from greykite.algo.common.seasonality_inferrer import TrendAdjustMethodEnum +from greykite.common import constants as cst + +# %% +# The ``SeasonalityInferrer`` class uses +# `~greykite.algo.common.seasonality_inferrer.SeasonalityInferConfig` +# to specify configuration for a single seasonality component, +# and it takes a list of such configurations to infer multiple seasonality +# components together. +# Now we specify seasonality inferring configs for yearly to weekly seasonalities. +# In each of these configs, specify the parameters that are distinct for each component. +# If there are parameters that are the same across all configs, +# you can specify them in the function directly. + +yearly_config = SeasonalityInferConfig( + seas_name="yearly", # name for seasonality + col_name="toy", # column to generate Fourier series, fixed for yearly + period=1.0, # seasonal period, fixed for yearly + max_order=30, # max number of orders to model + adjust_trend_param=dict( + trend_average_col="year" + ), # column to adjust trend for method "seasonal_average" + aggregation_period="W", # aggregation period, + offset=0 # add this to the inferred result, default 0 +) +quarterly_config = SeasonalityInferConfig( + seas_name="quarterly", # name for seasonality + col_name="toq", # column to generate Fourier series, fixed for quarterly + period=1.0, # seasonal period, fixed for quarterly + max_order=20, # max number of orders to model + adjust_trend_param=dict( + trend_average_col="year_quarter" + ), # column to adjust trend for method "seasonal_average" + aggregation_period="2D", # aggregation period +) +monthly_config = SeasonalityInferConfig( + seas_name="monthly", # name for seasonality + col_name="tom", # column to generate Fourier series, fixed for monthly + period=1.0, # seasonal period, fixed for monthly + max_order=20, # max number of orders to model + adjust_trend_param=dict( + trend_average_col="year_month" + ), # column to adjust trend for method "seasonal_average" + aggregation_period="D" # aggregation period +) +weekly_config = SeasonalityInferConfig( + seas_name="weekly", # name for seasonality + col_name="tow", # column to generate Fourier series, fixed for weekly + period=7.0, # seasonal period, fixed for weekly + max_order=10, # max number of orders to model + adjust_trend_param=dict( + trend_average_col="year_woy_iso" + ), # column to adjust trend for method "seasonal_average" + aggregation_period="D", + tolerance=0.005, # allows 0.5% higher criterion for lower orders +) + +# %% +# Next, we put everything together to infer seasonality effects. + +df = DataLoader().load_peyton_manning() +df[cst.TIME_COL] = pd.to_datetime((df[cst.TIME_COL])) + +model = SeasonalityInferrer() +result = model.infer_fourier_series_order( + df=df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + configs=[ + yearly_config, + quarterly_config, + monthly_config, + weekly_config + ], + adjust_trend_method=TrendAdjustMethodEnum.seasonal_average.name, + fit_algorithm="linear", + plotting=True, + criterion="bic", +) + +# %% +# The method runs quickly and we can simply extract the inferred results +# from the output. + +result["best_orders"] + +# %% +# We can also plot the results to see how different orders vary the criterion. +# Similar to other trade-off plots, the plot first goes down and then goes up, +# reaching the best at some appropriate value in the middle. + +# The [0] extracts the first seasonality component from the results. +plotly.io.show(result["result"][0]["fig"]) + +# %% +# Holiday Inferrer +# ---------------- +# +# The Silverkite model supports modeling holidays and their neighboring days +# as indicators. Significant days are modeled separately, +# while similar days can be grouped together as one indicator, +# assuming their effects are the same. +# +# It's sometimes difficult to decide which holidays to include, +# to model separately or to model together. +# `~greykite.algo.common.holiday_inferrer.HolidayInferrer` +# is a tool that can help you decide which holidays to model +# and how to model them. +# It can also automatically generate the holiday configuration parameters. +# Note that there are many ways to decide the holiday configurations, +# and you don't have to strictly stick to the results from Holiday Inferrer. +# +# How it works +# ~~~~~~~~~~~~ +# +# The holiday inferrer estimates individual holiday or their +# neighboring days' effects by comparing the observations +# on these days with some baseline prior to or after the holiday period. +# Then it ranks the effects by their magnitude. +# Depending on some thresholds, it decides whether to model +# a day independently, together with others or do not model it. +# +# In detail, the first step is to unify the data frequency. +# For data whose frequency is greater than daily, +# holiday effect is automatically turned off. +# For data whose frequency is less than daily, +# it is aggregated into daily data, +# since holidays are daily events. +# From now on, we have daily data for the next step. +# +# Given a list of countries, the tool automatically pulls candidate +# holidays from the database. With a ``pre_search_days`` and a ``post_search_days`` +# parameters, those holidays' neighboring days are included in the candidate pool +# as well. +# +# For every candidate holiday or neighboring day, +# the baseline is the average of a configurable offsets. +# For example, for data that exhibits strong weekly seasonality, +# the offsets can be ``(-7, 7)``, where the baseline will be +# the average of the last same day of week's observation and the +# next same day of week's observation. +# For example, if the holiday is New Year on 1/1 while 12/25 (7 days ago) is Christmas, +# it will look at the value on 12/18 instead of 12/25 as baseline. +# +# The day's effect is the average of the signed difference between +# the true observation and the baseline across all occurrences in the time series. +# The effects are ranked from the highest to the lowest by their absolute effects. +# +# To decide how each holiday is modeled, we rely on two parameters: +# ``independent_holiday_thres`` and ``together_holiday_thres``. +# These parameters are between 0 and 1. +# Starting from the largest effect, +# we calculate the cumulative sum of effect of all candidates. +# Once the cumulative effect reaches ``independend_holiday_thres`` of the total effects, +# these days will be modeled independently (i.e, each day has an individual coefficient). +# We keep accumulating effects until the sum reaches ``together_holiday_thres``, +# the days in the between are grouped into "positive_group" and "negative_group", +# with each group modeled together. +# +# Example +# ~~~~~~~ +# +# Now we look at an example with the Peyton-Manning Wiki page view data. + +import pandas as pd +import plotly +from greykite.algo.common.holiday_inferrer import HolidayInferrer +from greykite.common.data_loader import DataLoader +from greykite.common import constants as cst + +df = DataLoader().load_peyton_manning() +df[cst.TIME_COL] = pd.to_datetime(df[cst.TIME_COL]) + +# %% +# Let's say we want to infer the holidays in the United States, +# with consideration on +/- 2 days of each holiday as potential candidates too. + +hi = HolidayInferrer() +result = hi.infer_holidays( + df=df, + countries=["US"], # Search holidays in United States + plot=True, # Output a plot + pre_search_days=2, # Considers 2 days before each holiday + post_search_days=2, # Considers 2 days after each holiday + independent_holiday_thres=0.9, # The first 90% of effects are modeled separately + together_holiday_thres=0.99, # The 90% to 99% of effects are modeled together + baseline_offsets=[-7, 7] # The baseline is the average of -7/+7 observations +) + +# %% +# We can plot the inferred holiday results. + +plotly.io.show(result["fig"]) + +# %% +# The class also has a method to generate the holiday configuration +# based on the inferred results, that is consumable directly by the Silverkite model. + +hi.generate_daily_event_dict() diff --git a/docs/nbpages/quickstart/01_exploration/0300_seasonality_plots.py b/docs/nbpages/quickstart/01_exploration/0300_seasonality_plots.py new file mode 100644 index 0000000..b4839de --- /dev/null +++ b/docs/nbpages/quickstart/01_exploration/0300_seasonality_plots.py @@ -0,0 +1,836 @@ +""" +Seasonality Plots +================= + +Forecast models learn seasonal (cyclical) patterns and project them into the +future. Understanding the seasonal patterns in your dataset +can help you create a better forecast. Your goal is to identify which +seasonal patterns are most important to capture, and which should +be excluded from the model. + +This tutorial explains how to identify the dominant seasonal patterns and +check for interactions (e.g. daily seasonality that depends on day of week, +or weekly seasonality increases in magnitude over time). Such interactions +are important to model if they affect a large number of data points. + +We use the Peyton Manning dataset as a running example. +""" + +# %% +# Quick reference +# --------------- +# You will learn how to use the function +# `~greykite.framework.input.univariate_time_series.UnivariateTimeSeries.plot_quantiles_and_overlays` +# in `~greykite.framework.input.univariate_time_series.UnivariateTimeSeries` to assess seasonal patterns. +# +# Steps to detect seasonality: +# +# #. Start with the longest seasonal cycles to see the big picture, then proceed to shorter cycles. +# (yearly -> quarterly -> monthly -> weekly -> daily). +# #. For a given seasonality period: +# +# a. First, check for seasonal effect over the entire timeseries (main effect). +# Look for large variation that depends on the location in the cycle. +# Pick the time feature for your seasonality cycle. See available time features at +# `~greykite.common.features.timeseries_features.build_time_features_df`. +# +# - for yearly: ``"doy"``, ``"month_dom"``, ``"woy_dow"`` +# - for quarterly: ``"doq"`` +# - for monthly ``"dom"`` +# - for weekly: ``"str_dow"``, ``"dow_grouped"``, ``"is_weekend"``, ``"woy_dow"`` +# - for daily: ``"hour"``, ``"tod"`` +# - ("do" = "day of", "to" = "time of") +# +# .. code-block:: python +# +# fig = ts.plot_quantiles_and_overlays( +# groupby_time_feature="doy", # day of year (yearly seasonality) +# show_mean=True, # shows mean on the plot +# show_quantiles=[0.1, 0.9], # shows quantiles [0.1, 0.9] on the plot +# xlabel="day of year", +# ylabel=ts.original_value_col, +# title="yearly seasonality", +# ) +# +# b. Then, check for interactions by adding overlays and centering the values. +# These may be present even when there is no main effect:: +# +# # random sample of individual overlays (check for clusters with similar patterns) +# fig = ts.plot_quantiles_and_overlays( +# groupby_time_feature="str_dow", # day of week (weekly seasonality) +# show_mean=True, +# show_quantiles=False, +# # shows every 5th overlay. (accepts a list of indices/names, a number to sample, or `True` to show all) +# show_overlays=np.arange(0, ts.df.shape[0], 5), +# center_values=True, +# # each overlay contains 28 observations (4 weeks) +# overlay_label_sliding_window_size=28, +# xlabel="day of week", +# ylabel=ts.original_value_col, +# title="weekly seasonality with selected 28d averages", +# ) +# # interactions with periodic time feature +# fig = ts.plot_quantiles_and_overlays( +# groupby_time_feature="str_dow", +# show_mean=True, +# show_quantiles=False, +# show_overlays=True, +# center_values=True, +# # splits overlays by month (try other features too) +# overlay_label_time_feature="month", +# # optional overlay styling, passed to `plotly.graph_objects.Scatter` +# overlay_style={"line": {"width": 1}, "opacity": 0.5}, +# xlabel="day of week", +# ylabel=ts.original_value_col, +# title="weekly seasonality by month", +# ) +# # interactions with an event (holiday, etc.) +# fig = ts.plot_quantiles_and_overlays( +# groupby_time_feature="str_dow", +# show_mean=True, +# show_quantiles=False, +# show_overlays=True, +# center_values=True, +# # splits overlays by custom pd.Series value +# overlay_label_custom_column=is_football_season, +# overlay_style={"line": {"width": 1}, "opacity": 0.5}, +# # optional, how to aggregate values for each overlay (default=mean) +# aggfunc=np.nanmean, +# xlabel="day of week", +# ylabel=ts.original_value_col, +# title="weekly seasonality:is_football_season interaction", +# ) +# # seasonality changepoints (option a): overlay against time (good for yearly/quarterly/monthly) +# fig = ts.plot_quantiles_and_overlays( +# groupby_time_feature="woy_dow", # yearly(+weekly) seasonality +# show_mean=True, +# show_quantiles=True, +# show_overlays=True, +# overlay_label_time_feature="year", # splits by time +# overlay_style={"line": {"width": 1}, "opacity": 0.5}, +# center_values=True, +# xlabel="weekofyear_dayofweek", +# ylabel=ts.original_value_col, +# title="yearly and weekly seasonality for each year", +# ) +# # seasonality changepoints (option b): overlay by seasonality value (good for daily/weekly/monthly) +# # see advanced version below, where the mean is removed. +# fig = ts.plot_quantiles_and_overlays( +# # The number of observations in each sliding window. +# # Should contain a whole number of complete seasonality cycles, e.g. 24*7*k for k weekly seasonality cycles on hourly data. +# groupby_sliding_window_size=7*13, # x-axis, sliding windows with 13 weeks of daily observations. +# show_mean=True, +# show_quantiles=False, +# show_overlays=True, +# center_values=True, +# # overlays by the seasonality of interest (e.g. "hour", "str_dow", "dom") +# overlay_label_time_feature="str_dow", +# overlay_style={"line": {"width": 1}, "opacity": 0.5}, +# ylabel=ts.original_value_col, +# title="daily averages over time (centered)", +# ) +# +# #. For additional customization, fetch the dataframe for plotting via +# `~greykite.framework.input.univariate_time_series.UnivariateTimeSeries.get_quantiles_and_overlays`, +# compute additional stats as needed, and plot with +# `~greykite.common.viz.timeseries_plotting.plot_multivariate`. +# For example, to remove the mean effect in seasonality changepoints (option b):: +# +# grouped_df = ts.get_quantiles_and_overlays( +# groupby_sliding_window_size=7*13, # accepts the same parameters as `plot_quantiles_and_overlays` +# show_mean=True, +# show_quantiles=False, +# show_overlays=True, +# center_values=False, # note! does not center, to compute raw differences from the mean below +# overlay_label_time_feature="str_dow", +# ) +# overlay_minus_mean = grouped_df[OVERLAY_COL_GROUP] - grouped_df[MEAN_COL_GROUP].values # subtracts the mean +# x_col = overlay_minus_mean.index.name +# overlay_minus_mean.reset_index(inplace=True) # `plot_multivariate` expects the x-value to be a column +# fig = plot_multivariate( # plots the deviation from the mean +# df=overlay_minus_mean, +# x_col=x_col, +# ylabel=ts.original_value_col, +# title="day of week effect over time", +# ) +# +# +# #. The yearly seasonality plot can also be used to check for holiday effects. Click +# and drag to zoom in on the dates of interest:: +# +# fig = ts.plot_quantiles_and_overlays( +# groupby_time_feature="month_dom", # date on x-axis +# show_mean=True, +# show_quantiles=False, +# show_overlays=True, +# overlay_label_time_feature="year", # see the value for each year +# overlay_style={"line": {"width": 1}, "opacity": 0.5}, +# center_values=True, +# xlabel="day of year", +# ylabel=ts.original_value_col, +# title="yearly seasonality for each year (centered)", +# ) +# +# .. tip:: +# #. `~greykite.framework.input.univariate_time_series.UnivariateTimeSeries.plot_quantiles_and_overlays` +# allows grouping or overlays by (1) a time feature, (2) a sliding window, or (3) a custom column. +# See available time features at `~greykite.common.features.timeseries_features.build_time_features_df`. +# #. You can customize the plot style. See +# `~greykite.framework.input.univariate_time_series.UnivariateTimeSeries.plot_quantiles_and_overlays` +# for details. +# +# Load data +# --------- +# To start, let's plot the dataset. It contains daily observations between +# ``2007-12-10`` and ``2016-01-20``. + +# necessary imports +import numpy as np +import plotly + +from greykite.framework.input.univariate_time_series import UnivariateTimeSeries +from greykite.framework.constants import MEAN_COL_GROUP, OVERLAY_COL_GROUP +from greykite.common.constants import TIME_COL +from greykite.common.data_loader import DataLoader +from greykite.common.viz.timeseries_plotting import add_groupby_column +from greykite.common.viz.timeseries_plotting import plot_multivariate + +# Loads dataset into pandas DataFrame +dl = DataLoader() +df = dl.load_peyton_manning() +df.rename(columns={"y": "log(pageviews)"}, inplace=True) # uses a more informative name + +# plots dataset +ts = UnivariateTimeSeries() +ts.load_data( + df=df, + time_col="ts", + value_col="log(pageviews)", + freq="D") +fig = ts.plot() +plotly.io.show(fig) + +# %% +# Yearly seasonality +# ------------------ +# Because the observations are at daily frequency, +# it is possible to see yearly, quarterly, monthly, and weekly seasonality. +# The name of the seasonality refers to the length of one cycle. For example, +# yearly seasonality is a pattern that repeats once a year. +# +# .. tip:: +# It's helpful to start with the longest cycle to see the big picture. +# +# To examine yearly seasonality, plot the average value by day of year. +# +# Use `~greykite.framework.input.univariate_time_series.UnivariateTimeSeries.plot_quantiles_and_overlays` +# with ``show_mean=True`` and ``groupby_time_feature="doy"`` (day of year). +# ``groupby_time_feature`` accepts any time feature generated by +# `~greykite.common.features.timeseries_features.build_time_features_df`. +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="doy", # day of year + show_mean=True, # shows the mean + xlabel="day of year", + ylabel=f"mean of {ts.original_value_col}", + title="yearly seasonality", +) +plotly.io.show(fig) + +# %% +# There is a varying, non-constant pattern over the year, which indicates +# the presence of yearly seasonality. But the mean often does not reveal +# the entire story. +# +# Use `~greykite.framework.input.univariate_time_series.UnivariateTimeSeries.plot_quantiles_and_overlays` +# to see the volatility. Set ``show_mean=True`` and ``show_quantiles=True`` to plot the mean with the 0.1 and +# 0.9 quantiles. +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="doy", + show_mean=True, # shows mean on the plot + show_quantiles=True, # shows quantiles [0.1, 0.9] on the plot + xlabel="day of year", + ylabel=ts.original_value_col, + title="yearly seasonality", +) +plotly.io.show(fig) + +# %% +# The day of year does explain a lot of the variation in ``log(pageviews)``. However, the wide quantiles +# indicate that a lot of variation is not explained by this variable alone. This includes variation from +# trend, events, and other factors. +# +# You can easily request additional quantiles for a better sense of the distribution. +# Pass a list of the desired quantiles via ``show_quantiles``. +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="doy", + show_mean=True, + show_quantiles=[0.1, 0.25, 0.75, 0.9], # specifies quantiles to include + xlabel="day of year", + ylabel=ts.original_value_col, + title="yearly seasonality", +) +plotly.io.show(fig) + +# %% +# Surprisingly, the 75th percentile is below the mean between days 67 and 81. +# +# .. tip:: +# Click and drag to zoom in on the plot. +# Reset the view by double clicking inside the plot. +# +# To better understand what causes the volatility, we can use overlays to see the +# seasonality pattern split by a dimension of interest. Let's plot one line +# for each year to see if the pattern is consistent over time. Specify +# ``overlay_label_time_feature=True`` and +# ``overlay_label_time_feature="year"`` to request overlays, where one line is shown for +# each year. +# +# We also provide plotly styling options for the overlay lines via ``overlay_style`` (optional). +# Finally, we group by "month_dom" instead of "doy" on the x-axis to make it easier +# read the dates in "MM/DD" format. +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="month_dom", # groups by "MM/DD", e.g. 03/20 for March 20th. + show_mean=True, + show_quantiles=False, + show_overlays=True, # shows overlays, as configured by `overlay_label_time_feature` + overlay_label_time_feature="year", # splits by "year" + # optional overlay styling, passed to `plotly.graph_objects.Scatter` + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + xlabel="day of year", + ylabel=ts.original_value_col, + title="yearly seasonality for each year", +) +plotly.io.show(fig) + +# %% +# Before we look too carefully, to isolate the effect against the selected groupby +# feature, it can be helpful to center the overlays. This removes the effect of trend and +# longer seasonal cycles from the overlays. Each line is shifted so that the average effect +# over a cycle is zero. Quantiles and mean are shifted together, centering the mean at 0, +# to maintain their relative positions; note that quantiles are still computed on the original +# uncentered distribution. +# +# .. tip:: +# Always start with an uncentered plot with mean and quantiles to check the magnitude +# of the seasonal effect relative to the timeseries' values. Then, center the plot and +# use overlays to better understand the effect. +# +# The plot below is the same plot after centering with ``center_values=True``. +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="month_dom", + show_mean=True, + show_quantiles=False, + show_overlays=True, + overlay_label_time_feature="year", + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + center_values=True, + xlabel="day of year", + ylabel=ts.original_value_col, + title="yearly seasonality for each year (centered)", +) +plotly.io.show(fig) + +# %% +# This plot reveals some new insights: +# +# 1. Yearly seasonality is actually weak in this dataset; the line is mostly constant +# above/below 0 depending on whether the date is during the football season, which +# runs between September and early February. +# 2. The volatility is larger during the football season, and smaller otherwise. +# 3. The volatility in early March can be explained by a single spike in 2012. +# Similarly, there is an anomaly in June and December. +# +# .. note:: +# The above plot can also be used to assess the effect of yearly holidays. Use +# `~greykite.framework.input.univariate_time_series.UnivariateTimeSeries.plot_quantiles_and_overlays` +# with ``overlay_label_time_feature="year"``, and ``groupby_time_feature`` set to: +# +# - ``"doy"`` (day of year), +# - ``"month_dom"`` (month + day of month), +# - or ``"woy_dow"`` (week of year + day of week). +# - (to align the holiday to the groupby value across years). +# +# Click and drag to zoom in on a particular date range, to see the holiday's +# effect in each year. +# +# These insights provide hints for forecasting: +# +# - A feature indicating whether a particular date is in the football season +# or off-season (potentially split by regular season vs playoffs), is a simple +# way to capture most of the yearly variation. +# - Because the season starts on a different calendar day each year, consider adding +# add a feature for "days till start of season" and "days since end of season" to capture +# the on-ramp and down-ramp. +# - Check the anomalies to see if they should be considered outliers; if so, +# remove them from the training data to avoid affecting future predictions. +# +# With the insight that the values closely depend on the football season, +# and knowing that football games are played on particular days of the week, +# starting on a particular week of the year, we may expect yearly seasonal patterns +# to depend more on "week of year" + "day of week" than on the calendar date. (The +# same calendar date can fall on a different day of the week, depending on the year.) +# To check this, simply group by ``woy_dow``. This variable is encoded as +# {week of year}_{day of week}, e.g. 04_01 for Monday of 4th week. +# +# This is a different way to label each day of the year that captures both +# yearly and weekly seasonality at the same time. +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="woy_dow", # week of year and day of week + show_mean=True, + show_quantiles=True, + show_overlays=True, + overlay_label_time_feature="year", + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + center_values=True, + xlabel="weekofyear_dayofweek", + ylabel=ts.original_value_col, + title="yearly and weekly seasonality for each year", +) +plotly.io.show(fig) + +# %% +# Notice a much stronger relationship than before: the mean varies more +# with the x-axis value, with tigher quantiles, so ``woy_dow`` explains more +# variability in the time series. There is a different weekly pattern during and outside +# the football season, with increasing volatility toward the playoffs (end of season). +# Next, let's explore the weekly patterns in more detail. +# +# Weekly seasonality +# ------------------ +# So far, we learned that the main seasonal effects depend on day of week and whether the day +# is during the football season. +# +# To check overall weekly seasonality, group by day of week (``str_dow``). We +# also set ``overlay_label_sliding_window_size=7`` and ``show_overlays=20`` to +# plot the values for 20 randomly selected weeks from the dataset. The "size" parameter indicates +# the number of sequential observations contained in each overlay (7=1 week). In the legend, each +# overlay is labeled by the first date in the overlay's sliding window. +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="str_dow", + show_mean=True, + show_quantiles=True, + show_overlays=20, # randomly selects up to 20 overlays + overlay_label_sliding_window_size=7, # each overlay is a single cycle (week) + center_values=False, + xlabel="day of week", + ylabel=ts.original_value_col, + title="weekly seasonality with overlays" +) +plotly.io.show(fig) + +# %% +# In the above plot, the effect doesn't vary much by day of week, +# but quantiles are large. Such a plot indicates one of two possibilities: +# +# 1) there is no seasonal pattern for this period (cycle length) +# 2) there is a seasonal pattern for this period, but it +# is not consistent across the entire timeseries. +# +# (2) is possible when seasonality depends on an interaction +# term. It may vary by a time dimension, change during an event, +# or evolve over time. In this case, it could be useful to model +# the seasonality conditional on the parameter when forecasting +# (interaction terms). +# +# For the Peyton Manning dataset, we know there is weekly seasonality +# during the football season. We suspect the effect is washed out in the +# above plot, because it averages weekly seasonality during the season +# and off-season. +# +# Suppose we did not already have this insight. How could we detect the presence +# of weekly seasonality conditional on interactions? +# +# - Overlays of individual cycles can suggest the presence of an interaction effect. +# - Look for clusters of overlay lines with similar (and not flat) patterns. +# Try to identify what they have in common. +# +# The previous plot showed a random sample of 20 overlays. The plot below +# selects every 5th overlay, evenly spaced through time. Each overlay is +# the average of a 28 day sliding window (four cycles) to smooth out volatility +# (``overlay_label_sliding_window_size=28``). +# There is a trade off when setting sliding window size: +# +# - Smaller window = see unique effects, but adds noise +# - Larger window = smooths out noise, but values regress toward the mean and may hide effects. +# +# Given this tradeoff, try a few window sizes to see if any patterns emerge. + +# Selects every 5th overlay. ``which_overlays`` is a list of +# allowed overlays. Each overlay spans 28 days, so every 5th overlay +# allows selection of different months across years. +which_overlays = np.arange(0, ts.df.shape[0], 5) # ``ts.df.shape[0]`` is an upper bound on the number of overlays +overlay_style = { # this is the default style + "opacity": 0.5, + "line": dict( + width=1, + color="#B3B3B3", # light gray + dash="solid"), + "legendgroup": OVERLAY_COL_GROUP} +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="str_dow", + show_mean=True, + show_quantiles=False, + show_overlays=which_overlays, # indices to show. Also accepts a list of strings (overlay names). + center_values=True, + overlay_label_sliding_window_size=28, # each overlay contains 28 observations (4 weeks) + overlay_style=overlay_style, + xlabel="day of week", + ylabel=ts.original_value_col, + title="weekly seasonality with 28d overlays", +) +plotly.io.show(fig) + +# %% +# In the above plot, some lines are close together above/below the mean +# on Monday, Saturday, and Sunday, suggesting the presence of +# an interaction pattern. In the next section, we explain how to +# detect such interactions. +# +# Checking for interactions +# ------------------------- +# The same function, `~greykite.framework.input.univariate_time_series.UnivariateTimeSeries.plot_quantiles_and_overlays`, +# can be used to check the three possible interaction factors: +# +# 1) interaction with time dimension, +# 2) interaction with events, +# 3) seasonality changepoints +# +# 1) Time dimension interaction +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# It is common for a seasonality pattern to depend on a time dimension. +# For example, daily seasonality may differ by day of week, or +# weekly seasonality may change around year end. The seasonality +# changes periodically with a time feature. +# +# To check this, use ``overlay_label_time_feature``. We check whether +# weekly seasonality interacts with month, by setting +# ``overlay_label_time_feature="month"``. +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="str_dow", + show_mean=True, + show_quantiles=False, + show_overlays=True, + center_values=True, + overlay_label_time_feature="month", # splits overlays by month + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + xlabel="day of week", + ylabel=ts.original_value_col, + title="weekly seasonality by month", +) +plotly.io.show(fig) + +# %% +# There is a clear interaction -- notice two clusters of lines with +# different weekly seasonality patterns. +# (When forecasting, we do need to pay special attention to February, +# whose line is in between the two clusters. This is because it has +# one weekend in the football season and one weekend outside it. +# The month interaction alone is too coarse to reflect this.) +# +# 2) Event/holiday interaction +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# It is also common to have yearly seasonality that interacts with +# an event. For example, for hourly traffic data, a holiday can affect +# the daily seasonality as rush hour traffic is reduced. +# In our dataset, the football season may affect the weekly +# seasonality. +# +# .. note:: +# Both ``events`` and ``time dimensions`` occur at known times in the future; +# the difference is that events require external knowledge about when they +# occur, whereas time dimensions can be derived directly from +# the date itself, without any external knowledge. +# +# Our library contains information about the dates of common holidays, +# but you will need to supply information about other events if desired. +# +# You can pass a custom `pandas.Series` to the plotting function +# to define overlays. The series assigns a label to each row, and +# must have the same length as your input data. +# +# In the code below, we create two overlays using +# a (rough) indicator for ``is_football_season``. +# We used +# `~greykite.common.viz.timeseries_plotting.add_groupby_column` +# to get the derived time feature used to define this indicator. +# See the function's documentation for details. + +# Defines `is_football_season` by "week of year", +# using `add_groupby_column` to get the "week of year" time feature. +df_week_of_year = add_groupby_column( + df=ts.df, + time_col=TIME_COL, # The time column in ts.df is always TIME_COL + groupby_time_feature="woy") # Computes "week of year" based on the time column +added_column = df_week_of_year["groupby_col"] +week_of_year = df_week_of_year["df"][added_column] +is_football_season = (week_of_year <= 6) | (week_of_year >= 36) # rough approximation +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="str_dow", + show_mean=True, + show_quantiles=False, + show_overlays=True, + center_values=True, + overlay_label_custom_column=is_football_season, # splits overlays by `is_football_season` value + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + aggfunc=np.nanmean, # how to aggregate values for each overlay (default=mean) + xlabel="week of year", + ylabel=ts.original_value_col, + title="weekly seasonality:is_football_season interaction", +) +plotly.io.show(fig) + +# %% +# ``is_football_season`` is able to distinguish the two weekly seasonality +# patterns identified by previous plots. There is strong weekly seasonality +# during the football season, but not outside it. Forecasts that use weekly +# seasonality should account for this important interaction. +# +# 3) Seasonality changepoint +# ^^^^^^^^^^^^^^^^^^^^^^^^^^ +# Lastly, we check if seasonality changes over time. +# For example, the seasonality may increase or decrease +# in magnitude, or its shape may change. +# +# For this, use seasonality changepoint detection. +# See :doc:`/gallery/quickstart/01_exploration/0100_changepoint_detection` +# for details. +# +# Plots can provide additional understanding to tune +# the parameters for changepoint detection. +# +# Let's plot the mean value by "day of week" over time. There will be one +# line for Mondays, one for Tuesdays, etc. We are looking for a change +# in the distribution of the values around the mean; this could indicate, +# for example, that the value on Mondays becomes a smaller % of the weekly +# total over time. +# +# Unlike before, notice that day of week is now the `overlay` feature, +# and we group by sliding windows of 91 observations each. The x-axis is +# indexed by the start of each window. You can adjust the window size +# as you'd like; as before, larger windows smooth out noise, but if the +# window is too large, it may mask meaningful changes. +fig = ts.plot_quantiles_and_overlays( + groupby_sliding_window_size=7*13, # x-axis, sliding windows with 91 days (13 weeks) each + show_mean=True, + show_quantiles=False, + show_overlays=True, + center_values=True, + overlay_label_time_feature="str_dow", # overlays by the seasonality of interest + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + ylabel=ts.original_value_col, + title="daily averages over time (centered)", +) +plotly.io.show(fig) + +# %% +# This plot is hard to assess because of mean changes +# over time. It would be more clear to see if relative offset +# from the mean changes over time. +# +# To do this, get the raw daily averages using +# `~greykite.framework.input.univariate_time_series.UnivariateTimeSeries.get_quantiles_and_overlays`, +# subtract the mean, and plot the result with +# `~greykite.common.viz.timeseries_plotting.plot_multivariate`. +grouped_df = ts.get_quantiles_and_overlays( + groupby_sliding_window_size=7*13, # accepts the same parameters as `plot_quantiles_and_overlays` + show_mean=True, + show_quantiles=False, + show_overlays=True, + center_values=False, # note! does not center, to compute raw differences from the mean below + overlay_label_time_feature="str_dow", +) +overlay_minus_mean = grouped_df[OVERLAY_COL_GROUP] - grouped_df[MEAN_COL_GROUP].values # subtracts the mean +x_col = overlay_minus_mean.index.name +overlay_minus_mean.reset_index(inplace=True) # `plot_multivariate` expects the x-value to be a column +fig = plot_multivariate( # plots the deviation from the mean + df=overlay_minus_mean, + x_col=x_col, + ylabel=ts.original_value_col, + title="day of week effect over time") +plotly.io.show(fig) + +# %% +# The pattern looks fairly stable until Nov 2013, when Monday +# far surpasses Sunday as the weekly peak. The relative values on Monday +# and Tuesday increase, and the relative values on Saturday and Sunday decline. +# Thus, it may be useful to include a seasonality changepoint around +# that time. +# +# .. tip:: +# You can interact with the plot to focus on a particular day +# by double clicking its name in the legend. Double click again +# to unselect, or single click to show/hide a single series. +# +# Quarterly and monthly seasonality +# --------------------------------- +# Finally, let's check quarterly and monthly seasonality. +# +# Quarterly seasonality is weak relative to the size of the quantiles. +# The overlays do not suggest any clear interaction effects. +# It is likely not useful for a forecast model. +# (Remember to check the plot with ``center_values=False`` +# as well, to better assess the magnitude of the effect.) +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="doq", # day of quarter + show_mean=True, + show_quantiles=True, + show_overlays=20, # randomly selects up to 20 overlays + # No explicit overlay feature. Each overlay is a single cycle (quarter) + center_values=True, + xlabel="day of quarter", + ylabel=ts.original_value_col, + title="quarterly seasonality", +) +plotly.io.show(fig) + +# %% +# Monthly seasonality is weak relative to the size of the quantiles. +# The overlays do not suggest any clear interaction effects. +# It is likely not useful for a forecast model. +# (Remember to check the plot with ``center_values=False`` +# as well, to better assess the magnitude of the effect.) +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="dom", + show_mean=True, + show_quantiles=True, + show_overlays=20, # randomly selects up to 20 overlays + # No explicit overlay feature. Each overlay is a single cycle (month) + center_values=True, + xlabel="day of month", + ylabel=ts.original_value_col, + title="monthly seasonality", +) +plotly.io.show(fig) + +# %% +# How to forecast with this information +# ------------------------------------- +# Our goal was to identify seasonal patterns in the dataset to create +# a better forecast. +# +# We learned that a good forecast model must model dates during the +# football season and off-season differently. At a minimum, both the +# mean value and weekly seasonality should be allowed to vary depending +# on this ``is_football_season`` variable. +# +# To accomplish this, the following approaches could be considered, from least +# to most complex: +# +# 1. ``is_football_season*weekly_seasonality`` interaction +# 2. ``month*weekly_seasonality + february_week_num*weekly_seasonality`` interaction +# 3. ``woy_dow`` effect +# +# The first option is the most basic. The second allows capturing month-specific, +# weekly seasonality patterns, with special attention given to February, which +# falls both inside and outside the football season. Each week is allowed to +# have a different weekly seasonality. february_week_num is a categorical variable +# indicating the week of February (1, 2, 3, 4). The last option model every day +# of the year as a separate variable. This is unlikely to work well because it +# has too many parameters for the amount of data. +# +# .. note:: +# Appropriately increasing model complexity can improve the model's ability +# to capture meaningful variation. However, unnecessary complexity adds variance to +# the forecast due to estimation noise. A sparser model can better predict the +# future by making more efficient use of the data, as long as it captures the underlying +# dynamics. Proper cross validation and backtesting can be used to pick the best model. +# +# For example, while ``woy_dow`` enables modeling each day of year separately, doing so +# is likely to overfit the training data. Typically, weekly patterns should be modeled with +# weekly seasonality, rather than using yearly seasonality to model shorter +# cyclical patterns. +# +# To capture other seasonal effects, the following model components can be added: +# +# a) ``yearly_seasonality`` to capture weak yearly seasonality +# b) ``season_start`` and ``season_end`` events to capture start and end of season effect +# c) ``weekly seasonality changepoint`` (around Nov 2013) to capture shift in weekly seasonality shape +# +# In the "Silverkite" forecast model, the above components could be specified via +# +# .. code-block:: none +# +# - weekly seasonality: seasonality->weekly_seasonality, custom->extra_pred_cols->"str_dow" +# - yearly seasonality: seasonality->yearly_seasonality, custom->extra_pred_cols->"woy" or "woy_dow" +# - is_football_season: regressors->regressor_cols->"is_football_season" (define custom regressor) +# - start/end of season: holidays->daily_event_df_dict->"season_start","season_end" (define custom event) +# - interactions: custom->feature_sets_enabled, custom->extra_pred_cols (define interactions yourself) +# - changepoint: changepoints->seasonality_changepoints_dict +# +# See :doc:`/pages/model_components/0100_introduction` for details. +# +# Daily seasonality +# ----------------- +# The Peyton Manning dataset cannot have daily seasonality +# (variation within one day), because there is only one observation +# each day. +# +# For completeness, we show how to test for daily seasonality +# using an hourly bike sharing dataset. +# +# First, prepare and load your dataset. +df = dl.load_bikesharing() +bikesharing_ts = UnivariateTimeSeries() +bikesharing_ts.load_data( + df=df, + time_col="ts", + value_col="count", + freq="H", + regressor_cols=["tmax", "tmin", "pn"] +) +plotly.io.show(bikesharing_ts.plot()) + +# %% +# We proceed with further exploration for now. Group by +# ``"hour"`` to see the daily seasonality effect. +# There is more bikesharing activity during the day than at night. +fig = bikesharing_ts.plot_quantiles_and_overlays( + groupby_time_feature="hour", + show_mean=True, + show_quantiles=True, + show_overlays=25, + overlay_label_sliding_window_size=24, # each overlay contains 24 observations (1 day) + center_values=False, + xlabel="hour of day", + ylabel="number of shared bikes", + title="bike sharing activity by hour of day" +) +plotly.io.show(fig) + +# %% +# Check for interactions with day of week as follows. In this plot, weekdays +# follow a similar pattern, but Saturday and Sunday are different. +fig = bikesharing_ts.plot_quantiles_and_overlays( + groupby_time_feature="hour", + show_mean=True, + show_quantiles=False, + show_overlays=True, + center_values=True, + overlay_label_time_feature="str_dow", # splits overlays by day of week + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + xlabel="hour of day", + ylabel="number of shared bikes", + title="bike sharing daily seasonality, by day of week" +) +plotly.io.show(fig) + +# %% +# As an aside, for multivariate datasets, you may set +# ``value_col`` to check the seasonality pattern +# for a different metric in the dataset. +# The bike sharing dataset is a multivariate dataset +# with columns "tmax", "tmin", "pn" for max/min daily +# temperature and precipitation. Let's plot max daily +# temperature by week of year. +print(f"Columns: {bikesharing_ts.df.columns}") +fig = bikesharing_ts.plot_quantiles_and_overlays( + value_col="tmax", + groupby_time_feature="woy", + show_mean=True, + show_quantiles=True, + show_overlays=False, + center_values=False, + xlabel="week of year", + title="max daily temperature by week of year" +) +plotly.io.show(fig) diff --git a/docs/nbpages/quickstart/01_exploration/README.rst b/docs/nbpages/quickstart/01_exploration/README.rst new file mode 100644 index 0000000..e8e0f6d --- /dev/null +++ b/docs/nbpages/quickstart/01_exploration/README.rst @@ -0,0 +1,6 @@ +Data exploration +---------------- + +Here are some library features for data exploration. + + diff --git a/docs/nbpages/quickstart/02_interpretability/0100_model_summary.py b/docs/nbpages/quickstart/02_interpretability/0100_model_summary.py new file mode 100644 index 0000000..2ef43af --- /dev/null +++ b/docs/nbpages/quickstart/02_interpretability/0100_model_summary.py @@ -0,0 +1,230 @@ +""" +Model Summary +============= + +For every forecast model trained with the Silverkite algorithm, +you can print the model summary with only a few lines of code. +The model summary gives you insight into model performance, +parameter significance, etc. + +In this example, we will discuss how to utilize the +`~greykite.algo.common.model_summary.ModelSummary` +module to output model summary. + +First we'll load a dataset representing ``log(daily page views)`` +on the Wikipedia page for Peyton Manning. +It contains values from 2007-12-10 to 2016-01-20. More dataset info +`here `_. +""" + +import warnings + +warnings.filterwarnings("ignore") + +from greykite.common.data_loader import DataLoader +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.autogen.forecast_config import MetadataParam +from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam +from greykite.framework.templates.model_templates import ModelTemplateEnum +from greykite.framework.templates.forecaster import Forecaster + +# Loads dataset into pandas DataFrame +dl = DataLoader() +df = dl.load_peyton_manning() + +# %% +# Then we create a forecast model with ``SILVERKITE`` template. +# For a simple example of creating a forecast model, see +# :doc:`/gallery/quickstart/0100_simple_forecast`. +# For a detailed tuning tutorial, see +# :doc:`/gallery/tutorials/0100_forecast_tutorial`. + +# Specifies dataset information +metadata = MetadataParam( + time_col="ts", # name of the time column + value_col="y", # name of the value column + freq="D" # "H" for hourly, "D" for daily, "W" for weekly, etc. +) + +# Specifies model parameters +model_components = ModelComponentsParam( + changepoints={ + "changepoints_dict": { + "method": "auto", + "potential_changepoint_n": 25, + "regularization_strength": 0.5, + "resample_freq": "7D", + "no_changepoint_distance_from_end": "365D"} + }, + uncertainty={ + "uncertainty_dict": "auto", + }, + custom={ + "fit_algorithm_dict": { + "fit_algorithm": "linear", + }, + } +) + +# Runs the forecast +forecaster = Forecaster() +result = forecaster.run_forecast_config( + df=df, + config=ForecastConfig( + model_template=ModelTemplateEnum.SILVERKITE.name, + forecast_horizon=365, # forecasts 365 steps ahead + coverage=0.95, # 95% prediction intervals + metadata_param=metadata, + model_components_param=model_components + ) +) + +# %% +# Creating model summary +# ^^^^^^^^^^^^^^^^^^^^^^ +# Now that we have the output from :py:meth:`~greykite.framework.templates.forecaster.Forecaster.run_forecast_config`, +# we are able to access the model summary. + +# Initializes the model summary class. +# ``max_colwidth`` is the maximum length of predictor names that can be displayed. +summary = result.model[-1].summary(max_colwidth=30) + +# %% +# The above command creates a model summary class and derives extra information +# that summarizes the model. Generally the summarized information includes +# the following sections: +# +# #. **Model parameter section:** includes basic model parameter information such +# as number of observations, number of features, model name and etc. +# #. **Model residual section:** includes the five number summary of training residuals. +# #. **Model coefficients section (for regression model):** the estimated coefficients +# and their p-values/confidence intervals. For linear regression, these are the +# conventional results; for ridge regression, these are calculated from bootstrap [1]_; +# for lasso regression, these are calculated by multi-sample-splitting [2]_. +# #. **Model coefficients section (for tree model):** the feature significance. +# #. **Model significance section (for regression model only):** the overall significance +# of the regression model, including the coefficient of determination, the +# F-ratio and its p-value, and model AIC/BIC. The results are based on classical +# statistical inference and may not be reliable for regularized methods (ridge, lasso, etc.). +# #. **Warning section:** any warnings for the model summary such as high multicollinearity +# are displayed in this section. +# +# To see the summary, you can either type ``summary`` or ``print(summary)``. + +# Prints the summary +print(summary) + +# %% +# The model summary provides useful insights: +# +# #. We can check the ``sig. code`` column to see which features are not significant. +# For example, the "Independence Day" events are not significant, +# therefore we could consider removing them from the model. +# #. We can check the effect of each feature by examing the confidence interval. +# For example, the Christmas day has a negative effect of -0.57, with a confidence interval +# of -0.93 to -0.22. The changepoint at 2010-02-15 changes the slope by -2.52, with a +# confidence interval of -3.60 to -1.44. +# +# For linear regression, the results are the +# same as the regular regression summary in R (the ``lm`` function). +# The usual considerations apply when interpreting the results: +# +# #. High feature correlation can increase the coefficient variance. +# This is common in forecasting problems, so we recommend regularized models. +# #. There is no standard way to calculate confidence intervals and p-values for regularized +# linear models (ridge, lasso, elastic_net). We follow the approach in [1]_ for ridge +# inference and [2]_ for lasso inference. +# The ideas are to use bootstrap and sample-splitting, respectively. +# +# - For ridge regression, the confidence intervals and p-values are based on biased estimators. +# This is a remedy for multicollinearity to produce better forecast, but could lower the true +# effect of the features. +# - For lasso regression, the confidence intervals and p-values are based on a multi-sample-split +# procedure. While this approach of generating CIs is optimized for accuracy, they are calculated +# independently of the coefficient estimates and are not guaranteed to overlap with the estimates. +# It's worth noting that the probability of a coefficient being nonzero is also reported in the column ``Prob_nonzero``. +# This probability can be used to interpret the significance of the corresponding feature. +# +# Moreover, if you would like to explore the numbers behind the printed summary, +# they are stored in the ``info_dict`` attribute, which is a python dictionary. + +# Prints the keys of the ``info_dict`` dictionary. +print(summary.info_dict.keys()) + +# %% + +# The above coefficient summary can be accessed as a pandas Dataframe. +print(summary.info_dict["coef_summary_df"]) + +# %% +# Selected features in a category +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# You may have noticed that there are too many features in the forecast model. +# It's not easy to read all of them in the coefficient summary table. +# The model summary class is able to filter the categories of these features. +# This is done by the +# `~greykite.algo.common.model_summary.ModelSummary.get_coef_summary` +# function. +# +# A few filters are available, including: +# +# - ``is_intercept``: intercept term. +# - ``is_time_feature``: features defined in `~greykite.common.features.timeseries_features.build_time_features_df`. +# - ``is_event``: holidays and events. +# - ``is_trend``: trend features. +# - ``is_seasonality``: seasonality features. +# - ``is_lag``: autoregressive features. +# - ``is_regressor``: extra regressors provided by user. +# - ``is_interaction``: interaction terms. +# +# All filters set to ``True`` will be joined with the logical operator ``or``, +# while all filters set to ``False`` will be joined with the logical operator ``and``. +# Simply speaking, set what you want to see to ``True`` and what you don't want to see +# to ``False``. +# +# By default, ``is_interaction`` is set to ``True``, this means as long as one feature in +# an interaction term belongs to a category set to ``True``, the interaction term is included +# in the output. However, if one feature in an interaction term belongs to a category set to +# ``False``, the interaction is excluded from the output. +# To hide interaction terms, set ``is_interaction`` to ``False``. + +# Displays intercept, trend features but not seasonality features. +summary.get_coef_summary( + is_intercept=True, + is_trend=True, + is_seasonality=False +) + +# %% +# There might be too many featuers for the trend (including interaction terms). +# Let's hide the interaction terms. + +# Displays intercept, trend features but not seasonality features. +# Hides interaction terms. +summary.get_coef_summary( + is_intercept=True, + is_trend=True, + is_seasonality=False, + is_interaction=False +) + +# %% +# Now we can see the pure trend features, including the continuous growth term and trend changepoints. +# Each changepoint's name starts with "cp" followed by the time point it happens. +# The estimated coefficients are the changes in slope at the corresponding changepoints. +# We can also see the significance of the changepoints by examining their p-values. +# +# We can also retrieve the filtered dataframe by setting ``return_df`` to ``True``. +# This way you could further explore the coefficients. + +output = summary.get_coef_summary( + is_intercept=True, + is_trend=True, + is_seasonality=False, + is_interaction=False, + return_df=True # returns the filtered df +) + +# %% +# .. [1] Reference: "An Introduction to Bootstrap", Efron 1993. +# .. [2] Reference: "High-Dimensional Inference: Confidence Intervals, p-Values and R-Software hdi", Dezeure, Buhlmann, Meier and Meinshausen. diff --git a/docs/nbpages/quickstart/02_interpretability/0200_interpretability.py b/docs/nbpages/quickstart/02_interpretability/0200_interpretability.py new file mode 100644 index 0000000..43af6f3 --- /dev/null +++ b/docs/nbpages/quickstart/02_interpretability/0200_interpretability.py @@ -0,0 +1,346 @@ +""" +Interpretability +================ + +Silverkite generates easily interpretable forecasting models when using its default ML algorithms (e.g. Ridge). +This is because after transforming the raw features +to basis functions (transformed features), the model uses an additive structure. +Silverkite can break down each forecast into various summable components e.g. long-term growth, +seasonality, holidays, events, short-term growth (auto-regression), regressors impact etc. + +The approach to generate these breakdowns consists of two steps: + +#. Group the transformed variables into various meaningful groups. +#. Calculate the sum of the features multiplied by their regression coefficients within each group. + +These breakdowns then can be used to answer questions such as: + +- Question 1: How is the forecast value is generated? +- Question 2: What is driving the change of the forecast as new data comes in? + +Forecast components can also help us analyze model behavior and sensitivity. +This is because while it is not feasible to compare a large set of features across two model +settings, it can be quite practical and informative to compare a few well-defined components. +""" + +# required imports +import plotly +import warnings +import pandas as pd +from greykite.framework.benchmark.data_loader_ts import DataLoaderTS +from greykite.framework.templates.autogen.forecast_config import EvaluationPeriodParam +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.autogen.forecast_config import MetadataParam +from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam +from greykite.framework.templates.forecaster import Forecaster +from greykite.framework.templates.model_templates import ModelTemplateEnum +from greykite.framework.utils.result_summary import summarize_grid_search_results +from greykite.common.viz.timeseries_plotting import plot_multivariate +warnings.filterwarnings("ignore") + + +# %% +# Function to load and prepare data +# --------------------------------- +# This is the code to upload and prepare the daily bike-sharing data in Washington DC. +def prepare_bikesharing_data(): + """Loads bike-sharing data and adds proper regressors.""" + dl = DataLoaderTS() + agg_func = {"count": "sum", "tmin": "mean", "tmax": "mean", "pn": "mean"} + df = dl.load_bikesharing(agg_freq="daily", agg_func=agg_func) + + # There are some zero values which cause issue for MAPE + # This adds a small number to all data to avoid that issue + value_col = "count" + df[value_col] += 10 + # We drop last value as data might be incorrect as original data is hourly + df.drop(df.tail(1).index, inplace=True) + # We only use data from 2018 for demonstration purposes (run time is shorter) + df = df.loc[df["ts"] > "2018-01-01"] + df.reset_index(drop=True, inplace=True) + + print(f"\n df.tail(): \n {df.tail()}") + + # Creates useful regressors from existing raw regressors + df["bin_pn"] = (df["pn"] > 5).map(float) + df["bin_heavy_pn"] = (df["pn"] > 20).map(float) + df.columns = [ + "ts", + value_col, + "regressor_tmin", + "regressor_tmax", + "regressor_pn", + "regressor_bin_pn", + "regressor_bin_heavy_pn"] + + forecast_horizon = 7 + train_df = df.copy() + test_df = df.tail(forecast_horizon).reset_index(drop=True) + # When using the pipeline (as done in the ``fit_forecast`` below), + # fitting and prediction are done in one step + # Therefore for demonstration purpose we remove the response values of last 7 days. + # This is needed because we are using regressors, + # and future regressor data must be augmented to ``df``. + # We mimic that by removal of the values of the response. + train_df.at[(len(train_df) - forecast_horizon):len(train_df), value_col] = None + + print(f"train_df shape: \n {train_df.shape}") + print(f"test_df shape: \n {test_df.shape}") + print(f"train_df.tail(14): \n {train_df.tail(14)}") + print(f"test_df: \n {test_df}") + + return { + "train_df": train_df, + "test_df": test_df} + + +# %% +# Function to fit silverkite +# -------------------------- +# This is the code for fitting a silverkite model to the data. +def fit_forecast( + df, + time_col, + value_col): + """Fits a daily model for this use case. + The daily model is a generic silverkite model with regressors.""" + + meta_data_params = MetadataParam( + time_col=time_col, + value_col=value_col, + freq="D", + ) + + # Autoregression to be used in the function + autoregression = { + "autoreg_dict": { + "lag_dict": {"orders": [1, 2, 3]}, + "agg_lag_dict": { + "orders_list": [[7, 7*2, 7*3]], + "interval_list": [(1, 7), (8, 7*2)]}, + "series_na_fill_func": lambda s: s.bfill().ffill()}, + "fast_simulation": True + } + + # Changepoints configuration + # The config includes changepoints both in trend and seasonality + changepoints = { + "changepoints_dict": { + "method": "auto", + "yearly_seasonality_order": 15, + "resample_freq": "2D", + "actual_changepoint_min_distance": "100D", + "potential_changepoint_distance": "50D", + "no_changepoint_distance_from_end": "50D"}, + "seasonality_changepoints_dict": { + "method": "auto", + "yearly_seasonality_order": 15, + "resample_freq": "2D", + "actual_changepoint_min_distance": "100D", + "potential_changepoint_distance": "50D", + "no_changepoint_distance_from_end": "50D"} + } + + regressor_cols = [ + "regressor_tmin", + "regressor_bin_pn", + "regressor_bin_heavy_pn", + ] + + # Model parameters + model_components = ModelComponentsParam( + growth=dict(growth_term="linear"), + seasonality=dict( + yearly_seasonality=[15], + quarterly_seasonality=[False], + monthly_seasonality=[False], + weekly_seasonality=[7], + daily_seasonality=[False] + ), + custom=dict( + fit_algorithm_dict=dict(fit_algorithm="ridge"), + extra_pred_cols=None, + normalize_method="statistical" + ), + regressors=dict(regressor_cols=regressor_cols), + autoregression=autoregression, + uncertainty=dict(uncertainty_dict=None), + events=dict(holiday_lookup_countries=["US"]), + changepoints=changepoints + ) + + # Evaluation is done on same ``forecast_horizon`` as desired for output + evaluation_period_param = EvaluationPeriodParam( + test_horizon=None, + cv_horizon=forecast_horizon, + cv_min_train_periods=365*2, + cv_expanding_window=True, + cv_use_most_recent_splits=False, + cv_periods_between_splits=None, + cv_periods_between_train_test=0, + cv_max_splits=5, + ) + + # Runs the forecast model using "SILVERKITE" template + forecaster = Forecaster() + result = forecaster.run_forecast_config( + df=df, + config=ForecastConfig( + model_template=ModelTemplateEnum.SILVERKITE.name, + coverage=0.95, + forecast_horizon=forecast_horizon, + metadata_param=meta_data_params, + evaluation_period_param=evaluation_period_param, + model_components_param=model_components + ) + ) + + # Gets cross-validation results + grid_search = result.grid_search + cv_results = summarize_grid_search_results( + grid_search=grid_search, + decimals=2, + cv_report_metrics=None) + cv_results = cv_results.transpose() + cv_results = pd.DataFrame(cv_results) + cv_results.columns = ["err_value"] + cv_results["err_name"] = cv_results.index + cv_results = cv_results.reset_index(drop=True) + cv_results = cv_results[["err_name", "err_value"]] + + print(f"\n cv_results: \n {cv_results}") + + return result + +# %% +# Loads and prepares data +# ----------------------- +# The data is loaded and some information about the input data is printed. +# We use the number of daily rented bikes in Washington DC over time. +# The data is augmented with weather data (precipitation, min/max daily temperature). +data = prepare_bikesharing_data() + +# %% +# Fits model to daily data +# ------------------------ +# In this step we fit a silverkite model to the data which uses weather regressors, +# holidays, auto-regression etc. +df = data["train_df"] +time_col = "ts" +value_col = "count" +forecast_horizon = 7 + +result = fit_forecast( + df=df, + time_col=time_col, + value_col=value_col) +trained_estimator = result.model[-1] +# Checks model coefficients and p-values +print("\n Model Summary:") +print(trained_estimator.summary()) + + +# %% +# Grouping of variables +# --------------------- +# Regex expressions are used to group variables in the breakdown plot. +# Each group is given in one key of this dictionary. +# The grouping is done using variable names and for each group multiple regex are given. +# For each group, variables that satisfy EITHER regex are chosen. +# Note that this grouping assumes that regressor variables start with "regressor_". +# Also note that the order of this grouping matters (Python treats the dictionary as ordered in 3.6+). +# That means the variables chosen using regex in top groups will not be picked up again. +# If some variables do not satisfy any of the groupings, they will be grouped into "OTHER". +# The following breakdown dictionary should work for many use cases. +# However, the users can customize it as needed. + +grouping_regex_patterns_dict = { + "regressors": "regressor_.*", # regressor effects + "AR": ".*lag", # autoregression component + "events": ".*events_.*", # events and holidays + "seasonality": ".*quarter.*|.*month.*|.*C\(dow.*|.*C\(dow_hr.*|sin.*|cos.*|.*doq.*|.*dom.*|.*str_dow.*|.*is_weekend.*|.*tow_weekly.*", # seasonality + "trend": "ct1|ct2|ct_sqrt|ct3|ct_root3|.*changepoint.*", # long term trend (includes changepoints) +} + +# %% +# Creates forecast breakdown +# -------------------------- +# This is generated for observed data plus the prediction data (available in ``df``). +# Each component is centered around zero and the sum of all components is equal to forecast. + +breakdown_result = trained_estimator.forecast_breakdown( + grouping_regex_patterns_dict=grouping_regex_patterns_dict, + center_components=True, + plt_title="forecast breakdowns") +forecast_breakdown_df = breakdown_result["breakdown_df_with_index_col"] +forecast_components_fig = breakdown_result["breakdown_fig"] +plotly.io.show(forecast_components_fig) + +# %% +# Standardization of the components +# --------------------------------- +# Next we provide a more "standardized" view of the breakdown. +# This is achieved by dividing all components by observed absolute value of the metric. +# By doing so, intercept should be mapped to 1 and the y-axis changes can be viewed +# relative to the average magnitude of the series. +# The sum of all components at each time point will be equal to "forecast / obs_abs_mean". + +column_grouping_result = breakdown_result["column_grouping_result"] +component_cols = list(grouping_regex_patterns_dict.keys()) +forecast_breakdown_stdzd_df = forecast_breakdown_df.copy() +obs_abs_mean = abs(df[value_col]).mean() +for col in component_cols + ["Intercept", "OTHER"]: + if col in forecast_breakdown_stdzd_df.columns: + forecast_breakdown_stdzd_df[col] /= obs_abs_mean +forecast_breakdown_stdzd_fig = plot_multivariate( + df=forecast_breakdown_stdzd_df, + x_col=time_col, + title="forecast breakdowns divided by mean of abs value of response", + ylabel="component") +forecast_breakdown_stdzd_fig.update_layout(yaxis_range=[-1.1, 1.1]) +plotly.io.show(forecast_breakdown_stdzd_fig) + +# %% +# Breaking down the predictions +# ----------------------------- +# Next we perform a prediction and generate a breakdown plot for that prediction. +test_df = data["test_df"].reset_index() +test_df[value_col] = None +print(f"\n test_df: \n {test_df}") +pred_df = trained_estimator.predict(test_df) +forecast_x_mat = trained_estimator.forecast_x_mat +# Generate the breakdown plot +breakdown_result = trained_estimator.forecast_breakdown( + grouping_regex_patterns_dict=grouping_regex_patterns_dict, + forecast_x_mat=forecast_x_mat, + time_values=pred_df[time_col]) + +breakdown_fig = breakdown_result["breakdown_fig"] +plotly.io.show(breakdown_fig) + + +# %% +# Demonstrating a scenario-based breakdown +# ---------------------------------------- +# We artificially inject a "bad weather" day into test data on the second day of prediction. +# This is done to observe if the breakdown plot captures a decrease in the collective regressors' effect. +# The impact of the change in the regressor values can be clearly seen in the updated breakdown. + +# Altering the test data. +# We alter the normal weather conditions on the second day to heavy precipitation and low temperature. +test_df["regressor_bin_pn"] = [0, 1, 0, 0, 0, 0, 0] +test_df["regressor_bin_heavy_pn"] = [0, 1, 0, 0, 0, 0, 0] +test_df["regressor_tmin"] = [15, 0, 15, 15, 15, 15, 15] +print(f"altered test_df: \n {test_df}") + +# Gets predictions and the design matrix used during predictions. +pred_df = trained_estimator.predict(test_df.reset_index()) +forecast_x_mat = trained_estimator.forecast_x_mat + +# Generates the breakdown plot. +breakdown_result = trained_estimator.forecast_breakdown( + grouping_regex_patterns_dict=grouping_regex_patterns_dict, + forecast_x_mat=forecast_x_mat, + time_values=pred_df[time_col]) +breakdown_fig = breakdown_result["breakdown_fig"] +plotly.io.show(breakdown_fig) diff --git a/docs/nbpages/quickstart/02_interpretability/README.rst b/docs/nbpages/quickstart/02_interpretability/README.rst new file mode 100644 index 0000000..d2a1382 --- /dev/null +++ b/docs/nbpages/quickstart/02_interpretability/README.rst @@ -0,0 +1,4 @@ +Interpretability +---------------- + +Here are some library features for forecast interpretation. \ No newline at end of file diff --git a/docs/nbpages/quickstart/03_benchmark/0100_grid_search.py b/docs/nbpages/quickstart/03_benchmark/0100_grid_search.py new file mode 100644 index 0000000..a21089d --- /dev/null +++ b/docs/nbpages/quickstart/03_benchmark/0100_grid_search.py @@ -0,0 +1,312 @@ +""" +Grid Search +=========== + +Forecast models have many hyperparameters that could significantly affect +the accuracy. These hyperparameters control different components +in the model including trend, seasonality, events, etc. +You can learn more about how to configure the components or hyperparameters in +the model tuning tutorial (:doc:`/gallery/tutorials/0100_forecast_tutorial`). Here we +will see a step-by-step example of how to utilize the "grid search" functionality +to choose the best set of hyperparameters. + +All model templates support grid search. +Here we continue the model tuning tutorial +example to use the ``SILVERKITE`` model on the Peyton Manning data set. +The mechanism of using grid search in ``PROPHET`` is similar. +""" + +import warnings + +warnings.filterwarnings("ignore") + +from greykite.common.data_loader import DataLoader +from greykite.common.evaluation import EvaluationMetricEnum +from greykite.framework.templates.autogen.forecast_config import ComputationParam +from greykite.framework.templates.autogen.forecast_config import EvaluationMetricParam +from greykite.framework.templates.autogen.forecast_config import EvaluationPeriodParam +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam +from greykite.framework.templates.forecaster import Forecaster +from greykite.framework.templates.model_templates import ModelTemplateEnum +from greykite.framework.utils.result_summary import summarize_grid_search_results + +# Loads dataset into pandas DataFrame +dl = DataLoader() +df = dl.load_peyton_manning() + +# %% +# Grid search hyperparameters +# --------------------------- +# +# In :doc:`/gallery/tutorials/0100_forecast_tutorial` +# we learned how the components affect the prediction and how to choose the potential +# candidate components. We also learned how to interpret the cross-validation results +# for one set of hyperparameters. In this section, we will go over the ``grid_search`` +# functionality that allows us to compare different sets of hyperparameters by running +# cross-validation on them automatically. +# +# In the `~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam` class, +# each attribute contains a dictionary mapping parameter names to parameter values. You may +# specify either a specific parameter value to use, or a list of values to explore via grid search. +# Grid search is done over every possible combination of hyperparameters across the lists. +# +# .. note:: +# You may only provide lists for these attributes' parameter values, not for the parameter values +# of these attributes' parameter values if they are dictionaries. +# For example, ``seasonality`` is an attribute in ``ModelComponentsParam``, +# which has parameter names ``yearly_seasonality``, ``quarterly_seasonality``, etc. +# We can provide lists for the parameter values of these names. +# On the other hand, ``changepoints`` is an attribute, too, +# which has parameter names ``changepoints_dict`` and ``seasonality_changepoints_dict``. +# Both names take dictionaries as their parameter values. +# We can provide lists of dictionaries as the values, however, within each dictionary, +# we are not allowed to further wrap parameters in lists. +# +# Cross-validation will be performed over these sets of hyperparameters, and the best set of hyperparameters +# will be selected based on the metric you pick, specified by ``cv_selection_metric`` in +# `~greykite.framework.templates.autogen.forecast_config.EvaluationMetricParam`. +# +# Now consider that we want to compare different yearly seasonalities (10 or 20), trend changepoints (None or "auto") +# and fit algorithms (linear or ridge), while keeping all other model components the same. We could specify: + +seasonality = { + "yearly_seasonality": [10, 20], # yearly seasonality could be 10 or 20 + "quarterly_seasonality": False, + "monthly_seasonality": False, + "weekly_seasonality": False, + "daily_seasonality": False +} + +changepoints = { + # Changepoints could be None or auto. + "changepoints_dict": [ + None, + {"method": "auto"} + ] +} + +# Specifies custom parameters +custom = { + "fit_algorithm_dict": [ + {"fit_algorithm": "ridge"}, + {"fit_algorithm": "linear", "fit_algorithm_params": dict(missing="drop")} + ] +} + +# Specifies the model components +# Could leave the other components as default, +# or specify them in the normal way. +model_components = ModelComponentsParam( + seasonality=seasonality, + changepoints=changepoints, + custom=custom +) + +# Specifies the metrics +evaluation_metric = EvaluationMetricParam( + # The metrics in ``cv_report_metrics`` will be calculated and reported. + cv_report_metrics=[EvaluationMetricEnum.MeanAbsolutePercentError.name, + EvaluationMetricEnum.MeanSquaredError.name], + # The ``cv_selection_metric`` will be used to select the best set of hyperparameters. + # It will be added to ``cv_report_metrics`` if it's not there. + cv_selection_metric=EvaluationMetricEnum.MeanAbsolutePercentError.name +) + +# Specifies the forecast configuration. +# You could also specify ``forecast_horizon``, ``metadata_param``, etc. +config = ForecastConfig( + model_template=ModelTemplateEnum.SILVERKITE.name, + model_components_param=model_components, + evaluation_metric_param=evaluation_metric +) + +# %% +# For the configuration above, all other model components parameters are the same but yearly seasonality, +# changepoints and fit algorithm have 2 options each. The model will automatically run +# cross-validation over the 8 cases: +# +# - yearly seasonality = 10, no changepoints, fit algorithm = "linear". +# - yearly seasonality = 20, no changepoints, fit algorithm = "linear". +# - yearly seasonality = 10, automatic changepoints, fit algorithm = "linear". +# - yearly seasonality = 20, automatic changepoints, fit algorithm = "linear". +# - yearly seasonality = 10, no changepoints, fit algorithm = "ridge". +# - yearly seasonality = 20, no changepoints, fit algorithm = "ridge". +# - yearly seasonality = 10, automatic changepoints, fit algorithm = "ridge". +# - yearly seasonality = 20, automatic changepoints, fit algorithm = "ridge". +# +# The CV test scores will be reported for all 8 cases using the metrics in ``cv_report_metrics``, +# and the final model will be trained on the best set of hyperparameters according to the +# ``cv_selection_metric``. +# +# Selective grid search +# --------------------- +# Consider the case when you have 6 model components to tune, each with 3 different candidates. +# In this case, there will be 3^6=729 different sets of hyperparameters to grid search from. +# The results might be convincing because of the exhaustive grid search, however, the running +# time is going to pile up. +# +# It's very common that not all of the 729 sets of hyperparameters makes sense to us, so it +# would be good not to run all of them. There are two ways to do selective grid search: +# +# - Setting ``hyperparameter_budget``. +# - Utilizing ``hyperparameter_override``. +# +# Setting ``hyperparameter_budget`` +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# The ``hyperparameter_budget`` parameter directly controls how many sets of hyperparameters +# will be used in grid search. If this number is less than the number of all possible sets +# of hyperparameters, the algorithm will randomly pick ``hyperparameter_budget`` number of +# hyperparameter sets. Set ``hyperparameter_budget`` to ``-1`` to search all possible sets. +# You may set the budget in the ``ComputationParam`` class. This is a simple way to search a +# large space of hyperparameters if you are not sure which are likely to succeed. After you +# identify parameter values with better performance, you may run a more precise grid search +# to fine tune around these values. +# +# .. note:: +# If you have a small number of timeseries to forecast, we recommend using the +# model tuning tutorial (:doc:`/gallery/tutorials/0100_forecast_tutorial`) +# to help identify good parameters candidates. This is likely more effective than +# random grid search over a large grid. + +# Specifies the hyperparameter_budget. +# Randomly picks 3 sets of hyperparameters. +computation = ComputationParam( + hyperparameter_budget=3 +) +# Specifies the forecast configuration. +# You could also specify ``forecast_horizon``, ``metadata_param``, etc. +config = ForecastConfig( + model_template=ModelTemplateEnum.SILVERKITE.name, + model_components_param=model_components, + evaluation_metric_param=evaluation_metric, + computation_param=computation +) + +# %% +# Utilizing ``hyperparameter_override`` +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# The ``hyperparameter_override`` functionality allows us to customize the sets of hyperparameters +# to search within. The way is to specify the ``hyperparameter_override`` parameter in the +# ``ModelComponentsParam`` class. +# First, model components are translated to the parameters in the corresponding sklearn Estimator +# for the template (`~greykite.sklearn.estimator.simple_silverkite_estimator.SimpleSilverkiteEstimator` +# and `~greykite.sklearn.estimator.prophet_estimator.ProphetEstimator`). The name is usually the same as the +# key, for example, "estimator__yearly_seasonality" and "estimator__fit_algorithm_dict" (the ``ModelComponentsParam`` +# attribute is ignored). This creates a default hyperparameter_grid dictionary. Then for each dict in +# ``hyperparameter_override``, the default grid's values are replaced by the override values, producing a +# list of customized grids to search over. Grid search done across all the grids in the list. +# For more details, see +# `hyperparameter override <../../../pages/model_components/1000_override.html#selective-grid-search>`_. +# Now assume we have the following parameter options, as above: +# +# - yearly seasonality orders: 10 and 20. +# - trend changepoints: None and "auto". +# - fit algorithm: linear and ridge. +# +# We do not want to run all 8 sets of hyperparameters. For example, we think that +# ridge is not needed for the model without changepoints because the model is simple, while linear should +# not be used when there are changepoints because the model is complex. So we want: +# +# - for no changepoints we use linear regression only. +# - for automatic changepoints we use ridge regression only. +# +# Then we can specify: + +seasonality = { + "yearly_seasonality": [10, 20], + "quarterly_seasonality": False, + "monthly_seasonality": False, + "weekly_seasonality": False, + "daily_seasonality": False +} + +changepoints = { + "changepoints_dict": None +} + +# Specifies custom parameters +custom = { + "fit_algorithm_dict": {"fit_algorithm": "linear"} +} + +# Hyperparameter override can be a list of dictionaries. +# Each dictionary will be one set of hyperparameters. +override = [ + {}, + { + "estimator__changepoints_dict": {"method": "auto"}, + "estimator__fit_algorithm_dict": {"fit_algorithm": "ridge"} + } +] + +# Specifies the model components +# Could leave the other components as default, +# or specify them in the normal way. +model_components = ModelComponentsParam( + seasonality=seasonality, + changepoints=changepoints, + custom=custom, + hyperparameter_override=override +) + +# Specifies the evaluation period +evaluation_period = EvaluationPeriodParam( + test_horizon=365, # leaves 365 days as testing data + cv_horizon=365, # each CV test size is 365 days (same as forecast horizon) + cv_max_splits=3, # 3 folds CV + cv_min_train_periods=365 * 4 # uses at least 4 years for training because we have 8 years data +) + +config = ForecastConfig( + forecast_horizon=365, + model_template=ModelTemplateEnum.SILVERKITE.name, + model_components_param=model_components, + evaluation_metric_param=evaluation_metric, + evaluation_period_param=evaluation_period +) + +# %% +# The forecast configuration above specifies the yearly seasonality orders in +# a list, therefore, both 10 and 20 will be searched. For the hyperparameter override +# list, there are two elements. The first one is an empty dictionary, which corresponds +# to the original changepoint and fit algorithm in the configuration. The second dictionary +# overrides changepoint method with automatic changepoint detection and fit algorithm with ridge. +# In total, the model will run 4 different configurations: +# +# - yearly seasonality 10, no changepoint, fit algorithm linear. +# - yearly seasonality 20, no changepoint, fit algorithm linear. +# - yearly seasonality 10, automatic changepoints, fit algorithm ridge. +# - yearly seasonality 20, automatic changepoints, fit algorithm ridge. +# +# In this way, we could only search the sets of hyperparameters we need and save a lot of time. +# Also note that the above configuration also configures the CV splits using +# `~greykite.framework.templates.autogen.forecast_config.EvaluationPeriodParam`. +# We can see the configs and evaluations with ``summarize_grid_search_results``. + +# Runs the forecast +forecaster = Forecaster() +result = forecaster.run_forecast_config( + df=df, + config=config +) + +# Summarizes the CV results +cv_results = summarize_grid_search_results( + grid_search=result.grid_search, + decimals=1, + # The below saves space in the printed output. Remove to show all available metrics and columns. + cv_report_metrics=None, + column_order=["rank", "mean_test", "split_test", "mean_train", "split_train", "mean_fit_time", "mean_score_time", "params"]) +cv_results["params"] = cv_results["params"].astype(str) +cv_results.set_index("params", drop=True, inplace=True) +cv_results + + +# %% +# .. tip:: +# The simple silverkite templates that use +# `~greykite.sklearn.estimator.simple_silverkite_estimator.SimpleSilverkiteEstimator` +# are the easiest templates to do grid search, because they support a list of model templates +# and a list of ``ModelComponentsParam``. For more information, see +# :doc:`/gallery/templates/0100_template_overview`. diff --git a/docs/nbpages/quickstart/03_benchmark/0200_benchmark.py b/docs/nbpages/quickstart/03_benchmark/0200_benchmark.py new file mode 100644 index 0000000..7316844 --- /dev/null +++ b/docs/nbpages/quickstart/03_benchmark/0200_benchmark.py @@ -0,0 +1,459 @@ +""" +Benchmarking +============ + +You can easily compare predictive performance of multiple algorithms such as +``Silverkite`` and ``Prophet`` using the +`~greykite.framework.benchmark.benchmark_class.BenchmarkForecastConfig` class. +In this tutorial we describe the step-by-step process of defining, running and monitoring a benchmark. +We also demonstrate how to use the class functions to compute and plot errors for multiple models. +""" + +from dataclasses import replace + +import plotly +import plotly.graph_objects as go + +from greykite.common.evaluation import EvaluationMetricEnum +from greykite.framework.benchmark.benchmark_class import BenchmarkForecastConfig +from greykite.framework.benchmark.data_loader_ts import DataLoaderTS +from greykite.framework.templates.autogen.forecast_config import ComputationParam +from greykite.framework.templates.autogen.forecast_config import EvaluationMetricParam +from greykite.framework.templates.autogen.forecast_config import EvaluationPeriodParam +from greykite.framework.templates.autogen.forecast_config import MetadataParam +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam +from greykite.framework.templates.model_templates import ModelTemplateEnum +from greykite.sklearn.cross_validation import RollingTimeSeriesSplit + +# %% +# Load the data +# ------------- +# First load your dataset into a pandas dataframe. +# We will use the peyton-manning dataset as a running example. + +# Loads dataset into UnivariateTimeSeries +dl = DataLoaderTS() +ts = dl.load_peyton_manning_ts() +df = ts.df # cleaned pandas.DataFrame + +# %% +# Define the Configs +# ------------------ +# We specify the models we want to benchmark via the ``configs`` parameter. +# In this example we will benchmark 1 ``Prophet`` and 2 different ``Silverkite`` models. +# We first define the common components of the models +# such as ``MetadataParam`` and ``EvaluationMetricParam``, and then update the configuration to specify +# individual models. + +## Define common components of the configs +# Specifies dataset information +metadata = MetadataParam( + time_col="ts", # name of the time column + value_col="y", # name of the value column + freq="D" # "H" for hourly, "D" for daily, "W" for weekly, etc. +) + +# Defines number of periods to forecast into the future +forecast_horizon = 7 + +# Specifies intended coverage of the prediction interval +coverage = 0.95 + +# Defines the metrics to evaluate the forecasts +# We use Mean Absolute Percent Error (MAPE) in this tutorial +evaluation_metric = EvaluationMetricParam( + cv_selection_metric=EvaluationMetricEnum.MeanAbsolutePercentError.name, + cv_report_metrics=None +) + +# Defines the cross-validation config within pipeline +evaluation_period = EvaluationPeriodParam( + cv_max_splits=1, # Benchmarking n_splits is defined in tscv, here we don't need split to choose parameter sets + periods_between_train_test=0, +) + +# Defines parameters related to grid-search computation +computation = ComputationParam( + hyperparameter_budget=None, + n_jobs=-1, # to debug, change to 1 for more informative error messages + verbose=3) + +# Defines common components across all the configs +# ``model_template`` and ``model_components_param`` changes between configs +common_config = ForecastConfig( + metadata_param=metadata, + forecast_horizon=forecast_horizon, + coverage=coverage, + evaluation_metric_param=evaluation_metric, + evaluation_period_param=evaluation_period, + computation_param=computation, +) + +# %% +# Now we update ``common_config`` to specify the individual models. + +# Defines ``Prophet`` model template with custom seasonality +model_components = ModelComponentsParam( + seasonality={ + "seasonality_mode": ["additive"], + "yearly_seasonality": ["auto"], + "weekly_seasonality": [True], + }, + growth={ + "growth_term": ["linear"] + } +) +param_update = dict( + model_template=ModelTemplateEnum.PROPHET.name, + model_components_param=model_components +) +Prophet = replace(common_config, **param_update) + +# Defines ``Silverkite`` model template with automatic autoregression +# and changepoint detection +model_components = ModelComponentsParam( + changepoints={ + "changepoints_dict": { + "method": "auto", + } + }, + autoregression={ + "autoreg_dict": "auto" + } +) +param_update = dict( + model_template=ModelTemplateEnum.SILVERKITE.name, + model_components_param=model_components +) +Silverkite_1 = replace(common_config, **param_update) + +# Defines ``Silverkite`` model template via string encoding +param_update = dict( + model_template="DAILY_SEAS_NMQM_GR_LINEAR_CP_NM_HOL_SP2_FEASET_AUTO_ALGO_RIDGE_AR_AUTO_DSI_AUTO_WSI_AUTO", + model_components_param=None +) +Silverkite_2 = replace(common_config, **param_update) + +# Define the list of configs to benchmark +# The dictionary keys will be used to store the benchmark results +configs = { + "Prophet": Prophet, + "SK_1": Silverkite_1, + "SK_2": Silverkite_2, +} + +# %% +# Define the Cross-Validation (CV) +# -------------------------------- +# In time-series forecasting we use a Rolling Window CV. +# You can easily define it by using +# `~greykite.sklearn.cross_validation.RollingTimeSeriesSplit` class. +# The CV parameters depend on the data frequency, +# forecast horizon as well as the speed of the models. +# See ``Benchmarking documentation`` for guidance on how +# to choose CV parameters for your use case. + +# Define the benchmark folds +# CV parameters are changed for illustration purpose +tscv = RollingTimeSeriesSplit( + forecast_horizon=forecast_horizon, + min_train_periods=2 * 365, + expanding_window=True, + use_most_recent_splits=True, + periods_between_splits=5, + periods_between_train_test=0, + max_splits=4) # reduced to 4 from 16 for faster runtime + +# Print the train, test split for benchmark folds +for split_num, (train, test) in enumerate(tscv.split(X=df)): + print(split_num, train, test) + +# %% +# Run the Benchmark +# ----------------- +# To start the benchmarking procedure execute its ``run`` method. +# +# If you get an error message at this point, then there is a compatibility issue between your +# benchmark inputs. Check :ref:`Debugging the Benchmark` section for instructions on how to derive valid inputs. + +bm = BenchmarkForecastConfig(df=df, configs=configs, tscv=tscv) +bm.run() + +# %% +# Monitor the Benchmark +# --------------------- +# During benchmarking a couple of color coded progress bars are displayed to inform the user of the +# advancement of the entire process. The first bar displays ``config`` level information, while +# the second bar displays split level information for the current ``config``. +# See example in `Benchmarking documentation`. +# +# On the left side of the progress bar, it shows which ``config``/ split is currently being +# benchmarked and progress within that level as a percentage. +# +# On the right side, the user can see how many ``configs``/ splits have been benchmarked +# and how many are remaining. Additionally, this bar also displays elapsed time and remaining runtime +# for the corresponding level. + +# %% +# Benchmark Output +# ---------------- +# The output of a successful benchmark procedure is stored as a nested dictionary under the class attribute +# ``result``. For details on the structure of this tree check +# ``Benchmarking documentation``. +# +# You can extract any specific information by navigating this tree. For example, you can +# check the summary and component plot of any ``config``. + +# Check summary of SK_1 model on first fold +model = bm.result["SK_2"]["rolling_evaluation"]["split_0"]["pipeline_result"].model +model[-1].summary(max_colwidth=30) + +# %% + +# Check component plot of SK_2 on second fold +model = bm.result["SK_2"]["rolling_evaluation"]["split_1"]["pipeline_result"].model +fig = model[-1].plot_components() +plotly.io.show(fig) + + +# %% +# Compare forecasts +# ^^^^^^^^^^^^^^^^^ +# To obtain forecasts run the ``extract_forecasts`` method. You only need to run this once. + +bm.extract_forecasts() + +# %% +# This method does two things. +# +# * For every ``config``, it gathers forecast results across rolling windows and stores it +# as a dataframe in ``rolling_forecast_df`` under the ``config`` key. This helps in comparing forecasts +# and prediction accuracy across splits for the ``config``. + +# Forecast across rolling windows for SK_1 +forecast_sk_1 = bm.result["SK_1"]["rolling_forecast_df"] +forecast_sk_1.head() + +# %% +# * Concatenates ``rolling_forecast_df`` for all the ``configs`` and stores it as a dataframe in the +# class attribute ``forecasts``. This helps in comparing forecasts and prediction accuracies across ``configs``. + +# Forecasts across configs +bm.forecasts.head() + +# %% +# For any ``config`` you can plot forecasts across splits. This allows you to quickly check if there is +# any particular time window where the test performance drops. The forecasts for adjacent folds will +# overlap if the time windows of the corresponding folds overlap. + +fig = bm.plot_forecasts_by_config(config_name="SK_1") +plotly.io.show(fig) + +# %% +# The importance of this function becomes more significant when assessing a models performance over a +# longer period e.g. a year or multiple years. You can quickly catch if models test performance drops +# during weekends, specific months or holiday seasons. +# +# You can also compare forecasts from multiple ``configs`` by ``forecast_step`` which is +# defined as any number between 1 and ``forecast_horizon``. This is useful in forecasts with longer +# forecast horizons to check if the forecast volatility changes over time. + +fig = bm.plot_forecasts_by_step(forecast_step=3) +plotly.io.show(fig) + +# %% +# Compare Errors +# ^^^^^^^^^^^^^^ +# You can compare the predictive performance of your models via multiple evaluation metrics. +# In this example we will use MAPE and RMSE, but you can use any metric from ``EvaluationMetricEnum``. + +metric_dict = { + "MAPE": EvaluationMetricEnum.MeanAbsolutePercentError, + "RMSE": EvaluationMetricEnum.RootMeanSquaredError +} + +# %% +# Non Grouping Errors +# ^^^^^^^^^^^^^^^^^^^ +# To compare evaluation metrics without any grouping use ``get_evaluation_metrics``. +# The output shows metric values by ``config`` and ``split``. We can group by ``config_name`` to get +# metric values aggregated across all folds. + +# Compute evaluation metrics +evaluation_metrics_df = bm.get_evaluation_metrics(metric_dict=metric_dict) +# Aggregate by model across splits +error_df = evaluation_metrics_df.drop(columns=["split_num"]).groupby("config_name").mean() +error_df + +# %% + +# Visualize +fig = bm.plot_evaluation_metrics(metric_dict) +plotly.io.show(fig) + +# %% +# Train MAPE is high because some values in training dataset are close to 0. +# +# You can also compare the predictive accuracy across splits for any model from ``configs``. +# This allows you to check if the model performance varies significantly across time periods. + +# Compute evaluation metrics for a single config +evaluation_metrics_df = bm.get_evaluation_metrics(metric_dict=metric_dict, config_names=["SK_1"]) +# Aggregate by split number +error_df = evaluation_metrics_df.groupby("split_num").mean() +error_df.head() + +# %% + +# Visualize +title = "Average evaluation metric across rolling windows" +data = [] +# Each row (index) is a config. Adds each row to the bar plot. +for index in error_df.index: + data.append( + go.Bar( + name=index, + x=error_df.columns, + y=error_df.loc[index].values + ) + ) +layout = go.Layout( + xaxis=dict(title=None), + yaxis=dict(title="Metric Value"), + title=title, + title_x=0.5, + showlegend=True, + barmode="group", +) +fig = go.Figure(data=data, layout=layout) +plotly.io.show(fig) + +# %% +# Grouping Errors +# ^^^^^^^^^^^^^^^ +# To compare evaluation metrics with grouping use ``get_grouping_evaluation_metrics``. +# This allows you to group the error values by time features such as day of week, month etc. + +# Compute grouped evaluation metrics +grouped_evaluation_df = bm.get_grouping_evaluation_metrics( + metric_dict=metric_dict, + which="test", + groupby_time_feature="str_dow") +# Aggregate by split number +error_df = grouped_evaluation_df.groupby(["str_dow", "config_name"]).mean() +error_df + +# %% + +# Visualize +fig = bm.plot_grouping_evaluation_metrics( + metric_dict=metric_dict, + which="test", + groupby_time_feature="str_dow") +plotly.io.show(fig) + +# %% +# As you can see all the models have higher MAPE and RMSE during weekends. That means adding +# ``is_weekend`` indicator to the models will help. +# +# Compare runtimes +# ^^^^^^^^^^^^^^^^ +# You can compare and visualize runtimes of the models using the following codes. + +# Compute runtimes +runtime_df = bm.get_runtimes() +# Aggregate across splits +runtimes_df = runtime_df.drop(columns=["split_num"]).groupby("config_name").mean() +runtimes_df + +# %% + +# Visualize +fig = bm.plot_runtimes() +plotly.io.show(fig) + +# %% +# You can see ``Silverkite`` models run almost 3 times faster compared to ``Prophet``. +# +# Debugging the Benchmark +# ----------------------- +# When the `run` method is called, the input ``configs`` are first assessed of +# their suitability for a cohesive benchmarking procedure via the ``validate`` method. +# This is done prior to passing the ``configs`` to the forecasting pipeline to save wasted +# computing time for the user. +# Though not necessary, the user is encouraged to use ``validate`` for debugging. +# +# The ``validate`` method runs a series of checks to ensure that +# +# * The ``configs`` are compatible among themselves. For example, it checks if all the ``configs`` +# have the same ``forecast horizon``. +# * The ``configs`` are compatible with the CV schema. For example, ``forecast_horizon`` and +# ``periods_between_train_test`` parameters of ``configs`` are +# matched against that of the ``tscv``. +# +# Note that the ``validate`` method does not guarantee that the models will execute properly +# while in the pipeline. It is a good idea to do a test run on a smaller data and/ or smaller +# number of splits before running the full procedure. +# +# In the event of a mismatch a ``ValueError`` is raised with informative error messages +# to help the user in debugging. Some examples are provided below. +# +# Error due to incompatible model components in config +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +# regressor_cols is not part of Prophet's model components +model_components=ModelComponentsParam( + regressors={ + "regressor_cols": ["regressor1", "regressor2", "regressor_categ"] + } +) +invalid_prophet = replace(Prophet, model_components_param=model_components) +invalid_configs = {"invalid_prophet": invalid_prophet} +bm = BenchmarkForecastConfig(df=df, configs=invalid_configs, tscv=tscv) +try: + bm.validate() +except ValueError as err: + print(err) + +# %% +# Error due to wrong template name +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +# model template name is not part of TemplateEnum, thus invalid +unknown_template = replace(Prophet, model_template="SOME_TEMPLATE") +invalid_configs = {"unknown_template": unknown_template} +bm = BenchmarkForecastConfig(df=df, configs=invalid_configs, tscv=tscv) +try: + bm.validate() +except ValueError as err: + print(err) + +# %% +# Error due to different forecast horizons in configs +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +# the configs are valid by themselves, however incompatible for +# benchmarking as these have different forecast horizons +Prophet_forecast_horizon_30 = replace(Prophet, forecast_horizon=30) +invalid_configs = { + "Prophet": Prophet, + "Prophet_30": Prophet_forecast_horizon_30 +} +bm = BenchmarkForecastConfig(df=df, configs=invalid_configs, tscv=tscv) +try: + bm.validate() +except ValueError as err: + print(err) + +# %% +# Error due to different forecast horizons in config and tscv +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +## Error due to different forecast horizons in config and tscv +tscv = RollingTimeSeriesSplit(forecast_horizon=15) +bm = BenchmarkForecastConfig(df=df, configs=configs, tscv=tscv) +try: + bm.validate() +except ValueError as err: + print(err) diff --git a/docs/nbpages/quickstart/03_benchmark/README.rst b/docs/nbpages/quickstart/03_benchmark/README.rst new file mode 100644 index 0000000..1f7bfd7 --- /dev/null +++ b/docs/nbpages/quickstart/03_benchmark/README.rst @@ -0,0 +1,4 @@ +Grid Search and Benchmarking +---------------------------- + +Here are some library features for grid search and benchmarking. \ No newline at end of file diff --git a/docs/nbpages/quickstart/04_postprocessing/0100_reconcile_forecasts.py b/docs/nbpages/quickstart/04_postprocessing/0100_reconcile_forecasts.py new file mode 100644 index 0000000..13ee1f4 --- /dev/null +++ b/docs/nbpages/quickstart/04_postprocessing/0100_reconcile_forecasts.py @@ -0,0 +1,664 @@ +""" +Reconcile Forecasts +=================== + +This tutorial explains how use the +`~greykite.algo.reconcile.convex.reconcile_forecasts.ReconcileAdditiveForecasts` +class to create forecasts that satisfy inter-forecast additivity constraints. + +The inputs are: + +1. additive constraints to be satisfied +2. original (base) forecasts (timeseries) +3. actuals (timeseries) + +The output is adjusted forecasts that satisfy the constraints. +""" +# %% +# Optimization Approach +# --------------------- +# The adjusted forecasts are computed as a linear transformation of the base forecasts. +# The linear transform is the solution to an optimization problem +# (:doc:`/pages/miscellaneous/reconcile_forecasts`). +# +# In brief, the objective is to minimize the weighted sum of these error terms: +# +# 1. ``Training MSE``: empirical MSE of the adjusted forecasts on the training set +# 2. ``Bias penalty``: estimated squared bias of adjusted forecast errors +# 3. ``Variance penalty``: estimated variance of adjusted forecast errors for an unbiased +# transformation, assuming base forecasts are unbiased (this underestimates the variance +# if the transformation is biased). +# 4. ``Adjustment penalty``: regularization term that penalizes large adjustments +# +# Subject to these constraints: +# +# 1. Adjusted forecasts satisfy inter-forecast additivity constraints (required) +# 2. Transform is unbiased (optional) +# 3. Transform matrix entries are between [lower, upper] bound (optional) +# +# `~greykite.algo.reconcile.convex.reconcile_forecasts.ReconcileAdditiveForecasts` +# allows you to tune the optimization objective and constraints. +# It also exposes common methods as special cases of this optimization problem. +# The available methods are: +# +# * ``"bottom_up"`` (bottom up) +# * ``"ols"`` (`OLS `_) +# * ``"mint_sample"`` (`MinT `_ with sample covariance) +# * ``"custom"`` (custom objective and constraints) +# +# .. note:: +# +# ``"bottom_up"`` is applicable when the constraints can be represented as a tree. +# It produces reconciled forecasts by summing the leaf nodes. This is equivalent to the +# solution to the optimization that only penalizes adjustment to the leaf nodes' forecasts. +# +# ``"ols"`` and ``"mint_sample"`` include only the variance penalty and require +# that the transform be unbiased. The variance penalty depends on forecast error covariances. +# ``"ols"`` assumes base forecast errors are uncorrelated with equal variance. +# ``"mint_sample"`` uses sample covariance of the forecast errors. + +# %% +# Prepare Input Data +# ------------------ +# In this tutorial, we consider a 3-level tree with the parent-child relationships below. +# +# .. code-block:: none +# +# 00 # level 0 +# / \ +# 10 11 # level 1 +# / | \ /\ +# 20 21 22 23 24 # level 2 +# +# We want the forecasts of parent nodes to equal the sum of the forecasts of their children. + +# %% +# First, we need to generate forecasts for each of the nodes. +# One approach is to generate the forecasts independently, using rolling window +# forecasting to get h-step ahead forecasts over time, for some constant ``h``. +# This can be done with the :doc:`benchmark class `. +# (The variance penalty assumes the residuals have fixed covariance, +# and using constant ``h`` helps with that assumption.) +# +# For this tutorial, we assume that forecasts have already been computed. +# Below, ``forecasts`` and ``actuals`` are pandas DataFrames in long format, where each column +# is a time series, and each row is a time step. The rows are sorted in ascending order. +import logging +import plotly +import warnings + +import pandas as pd +import numpy as np + +from greykite.algo.reconcile.convex.reconcile_forecasts import ReconcileAdditiveForecasts +from greykite.common.constants import TIME_COL +from greykite.common.data_loader import DataLoader +from greykite.common.viz.timeseries_plotting import plot_multivariate + +logger = logging.getLogger() +logger.setLevel(logging.ERROR) # reduces logging +warnings.simplefilter("ignore", category=UserWarning) # ignores matplotlib warnings when rendering documentation + +dl = DataLoader() +actuals = dl.load_data(data_name="daily_hierarchical_actuals") +forecasts = dl.load_data(data_name="daily_hierarchical_forecasts") +actuals.set_index(TIME_COL, inplace=True) +forecasts.set_index(TIME_COL, inplace=True) +forecasts.head().round(1) + +# %% +# .. note:: +# +# To use the reconcile method, dataframe columns should contain +# only the forecasts or actuals timeseries. Time should +# not be its own column. +# +# Above, we set time as the index using ``.set_index()``. +# Index values are ignored by the reconcile method +# so you could also choose to drop the column. + +# %% +# The rows and columns in forecasts and actuals correspond to each other. +assert forecasts.index.equals(actuals.index) +assert forecasts.columns.equals(actuals.columns) + +# %% +# Next, we need to encode the constraints. +# In general, these can be defined by ``constraint_matrix``. +# This is a ``c x m`` array encoding ``c`` constraints in ``m`` variables, +# where ``m`` is the number of timeseries. The columns in this matrix +# correspond to the columns in the forecasts/actuals dataframes below. +# The rows encode additive expressions that must equal 0. +constraint_matrix = np.array([ + # 00 10 11 20 21 22 23 24 + [-1, 1, 1, 0, 0, 0, 0, 0], # 0 = -1*x_00 + 1*x_10 + 1*x_11 + [ 0, -1, 0, 1, 1, 1, 0, 0], # 0 = -1*x_10 + 1*x_20 + 1*x_21 + 1*x_22 + [ 0, 0, -1, 0, 0, 0, 1, 1] # 0 = -1*x_11 + 1*x_23 + 1*x_24 +]) + +# %% +# Alternatively, if the graph is a tree, you can use the ``levels`` parameter. This +# is a more concise way to specify additive tree # constraints, where forecasts of +# parent nodes must equal the sum of the forecasts of their children. It assumes +# the columns in ``forecasts`` and ``actuals`` are in the tree's breadth first +# traversal order: i.e., starting from the root, scan left to right, +# top to bottom, as shown below for our example: +# +# .. code-block:: none +# +# 0 +# / \ +# 1 2 +# / | \ / \ +# 3 4 5 6 7 +# +# Here is an equivalent specification using the ``levels`` parameter. + +# The root has two children. +# Its children have 3 and 2 children, respectively. +levels = [[2], [3, 2]] +# Summarize non-leaf nodes by the number of children +# they have, and iterate in breadth first traversal order. +# Each level in the tree becomes a sublist of `levels`. +# +# (2) --> [2] +# / \ +# (3) (2) --> [3, 2] + +# %% +# .. note:: +# +# More formally, ``levels`` specifies the number of children of each +# internal node in the tree. The ith inner list provides the number +# of children of each node in level i. Thus, the first sublist has one +# integer, the length of a sublist is the sum of the previous sublist, +# and all entries in ``levels`` are positive integers. +# All leaf nodes must have the same depth. + +# %% +# For illustration, we plot the inconsistency between forecasts +# of the root node, ``"00"``, and its children. +# Notice that the blue and orange lines do not perfectly overlap. +parent = "00" +children = ["10", "11"] +cols = { + f"parent-{parent}": forecasts[parent], + "sum(children)": sum(forecasts[child] for child in children) +} +cols.update({f"child-{child}": forecasts[child] for child in children}) +cols[TIME_COL] = forecasts.index +parent_child_df = pd.DataFrame(cols) +fig = plot_multivariate( + df=parent_child_df, + x_col=TIME_COL, + title=f"Forecasts of node '{parent}' and its children violate the constraint", +) +plotly.io.show(fig) + +# %% +# Forecast reconciliation +# ----------------------- +# +# Training Evaluation +# ^^^^^^^^^^^^^^^^^^^ +# To reconcile these forecasts, we use the +# `~greykite.algo.reconcile.convex.reconcile_forecasts.ReconcileAdditiveForecasts` class. +raf = ReconcileAdditiveForecasts() + +# %% +# Fit +# ~~~ +# Call ``fit()`` to learn the linear transform. +# Available methods are ``"bottom_up"``, ``"ols"``, +# ``"mint_sample"``, ``"custom"``. +# Let's start with the bottom up method. +_ = raf.fit( + forecasts=forecasts, + actuals=actuals, + levels=levels, + method="bottom_up", +) + +# %% +# Each row in the transform matrix shows how to compute +# the adjusted forecast as a linear combination of the base forecasts. +# For the "bottom up" transform, the matrix simply reflects the tree structure. +raf.transform_matrix + +# %% +# We can visualize this matrix to more easily see how forecasts are combined. +# The top row in this plot shows that the adjusted forecast for +# node "00" (tree root) is the sum of all the base forecasts of the leaf nodes. +# "10" and "11" are the sum of their children, and each leaf node keeps its original value. +fig = raf.plot_transform_matrix() +plotly.io.show(fig) + +# %% +# Transform +# ~~~~~~~~~ +# The ``transform()`` method applies the transform and returns the adjusted (consistent) forecasts. +# If we call it without arguments, it applies the transform to the training set. +adjusted_forecasts = raf.transform() +adjusted_forecasts.head().round(1) + +# %% +# The adjusted forecasts on the training set are stored in the ``adjusted_forecasts`` attribute. +assert adjusted_forecasts.equals(raf.adjusted_forecasts) + +# %% +# Evaluate +# ~~~~~~~~ +# Now that we have the actuals, forecasts, and adjusted forecasts, +# we can check how the adjustment affects forecast quality. +# Here, we do evaluation on the training set. +_ = raf.evaluate( + is_train=True, # evaluates on training set + ipython_display=True, # displays evaluation table + plot=True, # displays plots + plot_num_cols=2, # formats plots into two columns +) + +# %% +# For better formatting in this documentation, let's display the +# table again. ``evaluation_df`` contains the +# evaluation table for the training set. The errors for +# the leaf nodes are the same, as expected, because their +# forecasts have not changed. +# The error for nodes "00" and "11" have increased. +raf.evaluation_df.round(1) + +# %% +# .. note:: +# +# The ``ipython_display`` parameter controls whether to display the evaluation table. +# +# - The "\*change" columns show the change in error after adjustment. +# - The "Base\*" columns show evaluation metrics for the original base forecasts. +# - The "Adjusted\*" columns show evaluation metrics for the adjusted forecasts. +# - MAPE/MedAPE = mean/median absolute percentage error, +# RMSE = root mean squared error, pp = percentage point. + +# %% +# We can check the diagnostic plots for more information. +# The "Base vs Adjusted" and "Adjustment Size" plots show that +# the forecasts for "00" and "11" are higher after adjustment. +# The "Forecast Error" plot shows that this increased the forecast error. +# (Plots are automatically shown when ``plot=True``. +# To make plots appear inline in this tutorial, we need +# to explicitly show the figures.) +plotly.io.show(raf.figures["base_adj"]) + +# %% +plotly.io.show(raf.figures["adj_size"]) + +# %% +plotly.io.show(raf.figures["error"]) + +# %% +# .. note:: +# +# The ``plot`` parameter controls whether to display +# diagnostic plots to adjusted to base forecasts. +# +# - "Base vs Adjusted Forecast" shows base forecast (blue) vs adjusted forecast (orange) +# - "Adjustment Size (%)" shows the size of the adjustment. +# - "Forecast Error (%)" shows the % error before (blue) and after (orange) adjustment. +# Closer to 0 is better. +# - Note that the y-axes are independent. + + +# %% +# For completeness, we can verify that the actuals +# and adjusted forecasts satisfy the constraints. +# ``constraint_violation`` shows constraint violation on the training set, +# defined as root mean squared violation +# (averaged across time points and constraints), +# divided by root mean squared actual value. +# It should be close to 0 for "adjusted" and "actual". +# (This is not necessary to check, because +# a warning is printed during fitting if actuals do not satisfy the constraints +# or if there is no solution to the optimization problem.) +raf.constraint_violation + +# %% +# Test Set Evaluation +# ^^^^^^^^^^^^^^^^^^^ +# Evaluation on the training set is sufficient for the ``"bottom_up"`` +# and ``"ols"`` methods, because they do not use the forecasts or actuals +# to learn the transform matrix. The transform depends only on the constraints. +# +# The ``"mint_sample"`` and ``"custom"`` methods use forecasts and actuals +# in addition to the constraints, so we should evaluate accuracy +# on an out-of-sample test set. +# +# .. csv-table:: Information used by each method +# :header: "", "constraints", "forecasts", "actuals" +# +# "``bottom_up``", "X", "", "" +# "``ols``", "X", "", "" +# "``mint_sample``", "X", "X", "X" +# "``custom``", "X", "X", "X" +# +# ``"custom"`` always uses the constraints. Whether it uses forecasts +# and actuals depends on the optimization terms: +# +# - ``forecasts``: used for adjustment penalty, train penalty, variance penalty +# with "sample" covariance, preset weight options ("MedAPE", "InverseMedAPE"). +# - ``actuals``: used for bias penalty, train penalty, variance penalty +# with "sample" covariance, preset weight options ("MedAPE", "InverseMedAPE"). + +# %% +# Train +# ~~~~~ +# We'll fit to the first half of the data and evaluate accuracy +# on the second half. +train_size = forecasts.shape[0]//2 +forecasts_train = forecasts.iloc[:train_size,:] +actuals_train = actuals.iloc[:train_size,:] +forecasts_test = forecasts.iloc[train_size:,:] +actuals_test = actuals.iloc[train_size:,:] + +# %% +# Let's try the ``"mint_sample"`` method. +# First, fit the transform and apply it on the training set. +# The transform matrix is more complex than before. +raf = ReconcileAdditiveForecasts() +raf.fit_transform( # fits and transforms the training data + forecasts=forecasts_train, + actuals=actuals_train, + levels=levels, + method="mint_sample" +) +assert raf.transform_matrix is not None # train fit result, set by fit +assert raf.adjusted_forecasts is not None # train transform result, set by transform +fig = raf.plot_transform_matrix() +plotly.io.show(fig) + +# %% +# Now, evaluate accuracy on the training set. +# In our example, all the reconciled forecasts have lower error +# than the base forecasts on the training set. +raf.evaluate(is_train=True) +assert raf.evaluation_df is not None # train evaluation result, set by evaluate +assert raf.figures is not None # train evaluation figures, set by evaluate +assert raf.constraint_violation is not None # train constraint violation, set by evaluate +raf.evaluation_df.round(1) + +# %% +# Test +# ~~~~ +# Next, apply the transform to the test set and evaluate accuracy. +# Not all forecasts have improved on the test set. +# This demonstrates the importance of test set evaluation. +raf.transform_evaluate( # transform and evaluates on test data + forecasts_test=forecasts_test, + actuals_test=actuals_test, + ipython_display=False, + plot=False, +) +assert raf.adjusted_forecasts_test is not None # test transform result, set by transform +assert raf.evaluation_df_test is not None # test evaluation result, set by evaluate +assert raf.figures_test is not None # test evaluation figures, set by evaluate +assert raf.constraint_violation_test is not None # test constraint violation, set by evaluate +raf.evaluation_df_test.round(1) + +# %% +# .. note:: +# +# The results for the test set are in the +# corresponding attributes ending with ``"_test"``. +# +# As a summary, here are some key attributes containing the results: +# +# .. code-block:: none +# +# transform_matrix : transform learned from train set +# adjusted_forecasts : adjusted forecasts on train set +# adjusted_forecasts_test : adjusted forecasts on test set +# evaluation_df : evaluation result on train set +# evaluation_df_test : evaluation result on test set +# constraint_violation : normalized constraint violations on train set +# constraint_violation_test : normalized constraint violations on test set +# figures : evaluation plots on train set +# figures_test : evaluation plots on test set +# +# For full attribute details, see +# `~greykite.algo.reconcile.convex.reconcile_forecasts.ReconcileAdditiveForecasts`. + +# %% +# Model Tuning +# ^^^^^^^^^^^^ +# Now that you understand the basic usage, we'll introduce some tuning parameters. +# If you have enough holdout data, you can use the out of sample evaluation to tune the model. +# +# First, try the presets for the ``method`` parameter: +# ``"bottom_up"``, ``"ols"``, ``"mint_sample"``, ``"custom"``. +# +# If you'd like to tune further, use the ``"custom"`` method to tune +# the optimization objective and constraints. +# The tuning parameters and their default values are shown below. +# See `~greykite.algo.reconcile.convex.reconcile_forecasts.ReconcileAdditiveForecasts` +# for details. +raf = ReconcileAdditiveForecasts() +_ = raf.fit_transform_evaluate( # fits, transforms, and evaluates on training data + forecasts=forecasts_train, + actuals=actuals_train, + fit_kwargs=dict( # additional parameters passed to fit() + levels=levels, + method="custom", + # tuning parameters, with their default values for the custom method + lower_bound=None, # Lower bound on each entry of ``transform_matrix``. + upper_bound=None, # Upper bound on each entry of ``transform_matrix``. + unbiased=True, # Whether the resulting transformation must be unbiased. + lam_adj=1.0, # Weight for the adjustment penalty (adj forecast - forecast) + lam_bias=1.0, # Weight for the bias penalty (adj actual - actual). + lam_train=1.0, # Weight for the training MSE penalty (adj forecast - actual) + lam_var=1.0, # Weight for the variance penalty (variance of adjusted forecast errors for an unbiased transformation, assuming base forecasts are unbiased) + covariance="sample", # Variance-covariance matrix of base forecast errors, used to compute the variance penalty ("sample", "identity" or numpy array) + weight_adj=None, # Weight for the adjustment penalty to put a different weight per-timeseries. + weight_bias=None, # Weight for the bias penalty to put a different weight per-timeseries. + weight_train=None, # Weight for the train MSE penalty to put a different weight per-timeseries. + weight_var=None, # Weight for the variance penalty to put a different weight per-timeseries. + ), + evaluate_kwargs=dict() # additional parameters passed to evaluate() +) + +# %% +# Using ``"custom"`` with default settings, +# we find good training set performance overall. +raf.evaluation_df.round(1) + +# %% +# Test set performance is also good, except for node "24". +raf.transform_evaluate( + forecasts_test=forecasts_test, + actuals_test=actuals_test, + ipython_display=False, + plot=False +) +raf.evaluation_df_test.round(1) + +# %% +# Notice from the tables that node "24" had the most accurate +# base forecast of all nodes. Therefore, we don't want its adjusted +# forecast to change much. It's possible that the above +# transform was overfitting this node. +# +# We can increase the adjustment penalty for node "24" +# so that its adjusted forecast will be closer to the original one. +# This should allow us to get good forecasts overall and +# for node "24" specifically. + +# the order of `weights` corresponds to `forecasts.columns` +weight = np.array([1, 1, 1, 1, 1, 1, 1, 5]) # weight is 5x higher for node "24" +raf = ReconcileAdditiveForecasts() +_ = raf.fit_transform_evaluate( + forecasts=forecasts_train, + actuals=actuals_train, + fit_kwargs=dict( + levels=levels, + method="custom", + lower_bound=None, + upper_bound=None, + unbiased=True, + lam_adj=1.0, + lam_bias=1.0, + lam_train=1.0, + lam_var=1.0, + covariance="sample", + weight_adj=weight, # apply the weights to adjustment penalty + weight_bias=None, + weight_train=None, + weight_var=None, + ) +) + +# %% +# .. note:: +# +# The default ``weight=None`` puts equal weight on all nodes. +# Weight can also be ``"MedAPE"`` (proportional to MedAPE +# of base forecasts), ``"InverseMedAPE"`` (proportional to 1/MedAPE +# of base forecasts), or a numpy array that specifies the weight +# for each node. +# +# .. note:: +# +# When the transform is unbiased (``unbiased=True``), +# the bias penalty is zero, so ``lam_bias`` and +# ``weight_bias`` have no effect. + +# %% +# The training error looks good. +raf.evaluation_df.round(1) + +# %% +# Plots of the transform matrix and adjustment size +# show that node "24"'s adjusted forecast is almost the +# same as its base forecast. +fig = raf.plot_transform_matrix() +plotly.io.show(fig) + +# %% +plotly.io.show(raf.figures["adj_size"]) + +# %% +# The test error looks better than before. + +# Transform and evaluate on the test set. +raf.transform_evaluate( + forecasts_test=forecasts_test, + actuals_test=actuals_test, + ipython_display=False, + plot=True, + plot_num_cols=2, +) +raf.evaluation_df_test.round(1) + +# %% +plotly.io.show(raf.figures_test["base_adj"]) + +# %% +plotly.io.show(raf.figures_test["adj_size"]) + +# %% +plotly.io.show(raf.figures_test["error"]) + + +# %% +# Tuning Tips +# ----------- +# +# If you have enough data, you can use cross validation with multiple test sets +# for a better estimate of test error. You can use test error to select the parameters. +# +# To tune the parameters, +# +# 1. Try all four methods. +# 2. Tune the lambdas and the weights for the custom method. +# +# For example, start with these lambda settings to see +# which penalties are useful: + +lambdas = [ + # lam_adj, lam_bias, lam_train, lam_var + (0, 0, 0, 1), # the same as "mint_sample" if other params are set to default values. + (0, 0, 1, 1), + (1, 0, 0, 1), + (1, 0, 1, 1), # the same as "custom" if other params are set to default values. + (1, 1, 1, 1), # try this one with unbiased=False +] + +# %% +# Tips: +# +# * ``var`` penalty is usually helpful +# * ``train``, ``adj``, ``bias`` penalties are sometimes helpful +# * You can increase the lambda for penalties that are more helpful. +# +# To try a biased transform, set ``(unbiased=False, lam_bias>0)``. +# Avoid ``(unbiased=False, lam_bias=0)``, because that can result in high bias. +# +# Choose weights that fit your needs. For example, you may care about +# the accuracy of some forecasts more than others. +# +# Setting ``weight_adj`` to ``"InverseMedAPE"`` is a convenient way to +# penalize adjustment to base forecasts that are already accurate. +# +# Setting ``weight_bias``, ``weight_train``, or ``weight_var`` +# to ``"MedAPE"`` is a convenient way to improve the error +# on base forecasts that start with high error. + +# %% +# Debugging +# --------- +# Some tips if you need to debug: + +# %% +# 1. Make sure the constraints are properly encoded +# (for the bottom up method, another way is to check +# the transform matrix). +raf.constraint_matrix + +# %% +# 2. The constraint violation should be 0 for the actuals. +raf.constraint_violation +raf.constraint_violation_test + +# %% +# 3. Check the transform matrix to understand predictions. +# +# .. code-block:: +# +# fig = raf.plot_transform_matrix() +# plotly.io.show(fig) + +# %% +# 4. For all methods besides "bottom_up", check if a solution was found to the optimization problem. +# If False, then the ``transform_matrix`` may be set to a fallback option (bottom up transform, if available). +# A warning is printed when this happens ("Failed to find a solution. Falling back to bottom-up method."). +raf.is_optimization_solution + +# %% +# 5. Check ``prob.status`` for details about cvxpy solver status +# and look for printed warnings for any issues. You can pass solver options +# to the ``fit`` method. See +# `~greykite.algo.reconcile.convex.reconcile_forecasts.ReconcileAdditiveForecasts` +# for details. +raf.prob.status + +# %% +# 6. Inspect the objective function value at the identified +# solution and its breakdown into components. This shows the terms +# in the objective after multiplication by the lambdas/weights. +raf.objective_fn_val + +# %% +# 7. Check objective function weights, to make sure +# covariance, etc., match expectations. +raf.objective_weights + +# %% +# 8. Check the convex optimization problem. +print(type(raf.prob)) +raf.prob diff --git a/docs/nbpages/quickstart/04_postprocessing/README.rst b/docs/nbpages/quickstart/04_postprocessing/README.rst new file mode 100644 index 0000000..fb2c02c --- /dev/null +++ b/docs/nbpages/quickstart/04_postprocessing/README.rst @@ -0,0 +1,4 @@ +Reconciliation +-------------- + +Here are some library features for reconciliation of multiple time series forecasts. \ No newline at end of file diff --git a/docs/nbpages/quickstart/README.rst b/docs/nbpages/quickstart/README.rst index 7e7f0d7..0ecc4bc 100644 --- a/docs/nbpages/quickstart/README.rst +++ b/docs/nbpages/quickstart/README.rst @@ -1,6 +1,5 @@ Quickstart ========== -Here are some examples to get you started with specific library features. - -.. add here: Input plots, Output plots + component plots +Here are some examples to get you started with core library functionality, +starting with a simple forecast. \ No newline at end of file diff --git a/docs/nbpages/templates/0100_template_overview.py b/docs/nbpages/templates/0100_template_overview.py new file mode 100644 index 0000000..001b2e0 --- /dev/null +++ b/docs/nbpages/templates/0100_template_overview.py @@ -0,0 +1,696 @@ +""" +Template Overview +================= + +This is a basic tutorial for utilizing model templates and adding additional customization. +After reading this tutorial, you will be able to + + - Choose the desired template(s) to use. + - Customize the parameters in the templates. + - Perform grid search via multiple templates/parameters. + +Model templates include parameters and their default values that are ready to use for forecast models. +These templates can be run with the :py:meth:`~greykite.framework.templates.forecaster.Forecaster.run_forecast_config` +function by defining the `~greykite.framework.templates.autogen.forecast_config.ForecastConfig` class. +The intention of using these templates is to easily combine with our pipeline +`~greykite.framework.pipeline.pipeline.forecast_pipeline` and do grid search, cross-validation and evaluation. +In this tutorial, we will go over available templates, their default values and how to customize the parameters. + +A General View of the Templates and the ``ForecastConfig`` Class +---------------------------------------------------------------- + +Greykite supports a few forecast models, including ``SILVERKITE``, ``PROPHET``, and ``ARIMA``. +The ``SILVERKITE`` model has a high-level +estimator named `~greykite.sklearn.estimator.simple_silverkite_estimator.SimpleSilverkiteEstimator` +and a low-level estimator named `~greykite.sklearn.estimator.silverkite_estimator.SilverkiteEstimator`. +The ``PROPHET`` model has an estimator named +`~greykite.sklearn.estimator.prophet_estimator.ProphetEstimator`. +The ``ARIMA`` model has an estimator named +`~greykite.sklearn.estimator.auto_arima_estimator.AutoArimaEstimator`. + +The estimators only implement fit and predict methods. They are used in the +`~greykite.framework.pipeline.pipeline.forecast_pipeline` function, +for grid search, cross-validation, backtest, and forecast. +To easily configure and run the forecast pipeline, pass +`~greykite.framework.templates.autogen.forecast_config.ForecastConfig` +to the :py:meth:`~greykite.framework.templates.forecaster.Forecaster.run_forecast_config` function. + +The `~greykite.framework.templates.autogen.forecast_config.ForecastConfig` class takes the following +parameters + + - ``computation_param``: the `~greykite.framework.templates.autogen.forecast_config.ComputationParam` class, + defines the computation parameters of the pipeline. + - ``coverage``: the forecast interval coverage. + - ``evaluation_metric_param``: the `~greykite.framework.templates.autogen.forecast_config.EvaluationMetricParam` class, + defines the metrics used to evaluate performance and choose the best model. + - ``evaluation_period_param``: the `~greykite.framework.templates.autogen.forecast_config.EvaluationPeriodParam` class, + defines the cross-validation and train-test-split rules. + - ``forecast_horizon``: the forecast horizon. + - ``metadata_param``: the `~greykite.framework.templates.autogen.forecast_config.MetadataParam` class, + defines the metadata of the training data. + - ``model_components_param``: the `~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam` class, + defines the model parameters. + - ``model_template``: the name or dataclass of the base model template, corresponding to one or some pre-defined + `~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam` class(es). + +Among these parameters, ``model_components_param`` and ``model_template`` define the parameters used in the estimators. + + #. The full estimator parameters can be specified through the + `~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam` class, + as described in :doc:`/pages/model_components/0100_introduction`. + #. We have pre-defined `~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam` classes + that serve as default estimator parameters for different use cases. These pre-defined ``ModelComponentsParam`` classes have names. + #. You can specify in the ``model_template`` parameter a valid model template name. + The function will automatically map the ``model_template`` input to the corresponding estimator and its default parameters. + #. To override the default values, you can create a + `~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam` class + with only the parameters you want to override, and pass it to the ``model_components_param`` parameter. + +Note that you don't have to specify all values in the +`~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam` +to override the defaults. If a parameter is not specified, the default value for the parameter +specified by the model template name will be used. +In the later sections we will go over the valid ``model_template`` and ``ModelComponentsParam`` for each of the +three estimators. +For details about how to configure the other parameters and how to use the ``run_forecast_config`` function, see +:doc:`/gallery/tutorials/0100_forecast_tutorial`. + +The three estimators accept different input for ``model_template`` and ``ModelComponentsParam``. +Below are the valid input types for the ``model_template`` parameter. + + - High-level ``Silverkite`` template: for the high-level ``SimpleSilverkiteEstimator``, we have model templates named + ``"AUTO"``, ``"SILVERKITE"``, ``"SILVERKITE_HOURLY_1"``, ``"SILVERKITE_HOURLY_24"``, + ``"SILVERKITE_HOURLY_168"``, ``"SILVERKITE_HOURLY_336"``, + ``"SILVERKITE_DAILY_1"``, ``"SILVERKITE_DAILY_90"``, ``"SILVERKITE_WEEKLY"``, ``"SILVERKITE_MONTHLY"``, + ``"SILVERKITE_EMPTY"`` and a set of + generic naming following some rules. This type of model templates support list input for both + ``model_template`` and ``model_components_param`` parameters. + This type of model templates are most recommended for ease of use. + - Low-level ``Silverkite`` template: for the low-level ``SilverkiteEstimator``, we have a model template + named ``"SK"``. This template allows you to configure lower-level parameters in the ``Silverkite`` model. + This template does not support list input. + - Prophet template: for the ``ProphetEstimator``, we have a model template named ``"PROPHET"``. + This template does not support list input. + +To customize the default parameters in the templates, the +`~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam` dataclass +takes the following parameters + +* ``growth``: defines how the trend of the time series grows. +* ``seasonality``: defines the seasonality components and orders. +* ``changepoints``: defines when trend and/or seasonality should change, including automatic options. +* ``events``: defines short term events and holidays. +* ``autoregression``: defines the lags and aggregations for the past values. +* ``regressors``: defines extra regressors. +* ``uncertainty``: defines the forecast interval parameters. +* ``custom``: defines parameters that do not belong to the other sections. +* ``hyperparameter_override``: used to create overrides for the parameters specified above; useful in grid search. + +The model's tuning parameters are set according to the categories above. +However, different estimators take different types of values for these categories. +We will go over each of the three types of templates, their default values, and how to customize the +``ModelComponentsParam`` for them. +For more general details, see :doc:`/pages/model_components/0100_introduction`. +""" +# Imports related libraries. +import pandas as pd + +from greykite.common.constants import GrowthColEnum +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam +from greykite.framework.templates.model_templates import ModelTemplateEnum +from greykite.framework.templates.simple_silverkite_template import SimpleSilverkiteTemplate + +# %% +# The High-level Templates in ``SILVERKITE`` +# ------------------------------------------ +# The high-level templates in ``SILVERKITE`` provides many good defaults that work under different scenarios. +# All templates in this section use `~greykite.sklearn.estimator.simple_silverkite_estimator.SimpleSilverkiteEstimator`. +# The two most basic templates are ``"SILVERKITE"`` and ``"SILVERKITE_EMPTY"``. +# +# ``"SILVERKITE"`` is a template with automatic growth, seasonality, holidays, and interactions. +# It works best for hourly and daily frequencies. +# If you specify ``"SILVERKITE"`` as ``model_template``, the following +# `~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam` class +# is used as default template values. + +model_components_param_silverkite = ModelComponentsParam( + seasonality={ + "auto_seasonality": False, + "yearly_seasonality": "auto", + "quarterly_seasonality": "auto", + "monthly_seasonality": "auto", + "weekly_seasonality": "auto", + "daily_seasonality": "auto", + }, + growth={ + "growth_term": GrowthColEnum.linear.name + }, + events={ + "auto_holiday": False, + "holidays_to_model_separately": "auto", + "holiday_lookup_countries": "auto", + "holiday_pre_num_days": 2, + "holiday_post_num_days": 2, + "holiday_pre_post_num_dict": None, + "daily_event_df_dict": None, + }, + changepoints={ + "auto_growth": False, + "changepoints_dict": { + "method": "auto", + "yearly_seasonality_order": 15, + "resample_freq": "3D", + "regularization_strength": 0.6, + "actual_changepoint_min_distance": "30D", + "potential_changepoint_distance": "15D", + "no_changepoint_distance_from_end": "90D" + }, + "seasonality_changepoints_dict": None + }, + autoregression={ + "autoreg_dict": "auto", + "simulation_num": 10 # simulation is not triggered with ``autoreg_dict="auto"`` + }, + regressors={ + "regressor_cols": [] + }, + lagged_regressors={ + "lagged_regressor_dict": None + }, + uncertainty={ + "uncertainty_dict": None + }, + custom={ + "fit_algorithm_dict": { + "fit_algorithm": "ridge", + "fit_algorithm_params": None, + }, + "feature_sets_enabled": "auto", # "auto" based on data freq and size + "max_daily_seas_interaction_order": 5, + "max_weekly_seas_interaction_order": 2, + "extra_pred_cols": [], + "drop_pred_cols": None, + "explicit_pred_cols": None, + "min_admissible_value": None, + "max_admissible_value": None, + "normalize_method": "zero_to_one" + } +) + +# %% +# To customize this template, create a ``ModelComponentsParam`` class like above with the parameters you would like to use +# to override the defaults, and feed it to the ``model_components_param`` parameter in ``ForecastConfig``. For example + +custom_model_components = ModelComponentsParam( + seasonality={ + "yearly_seasonality": 15 + }, + custom={ + "fit_algorithm_dict": { + "fit_algorithm": "ridge", + "fit_algorithm_params": None + } + } +) + +# %% +# These two parameters can be put in the +# `~greykite.framework.templates.autogen.forecast_config.ForecastConfig` class. +# The parameters used by the model will be those in the ``model_components_param_silverkite`` +# with ``"yearly_seasonality"`` and ``"fit_algorithm_dict"`` overridden by the custom parameters. + +forecast_config = ForecastConfig( + model_template=ModelTemplateEnum.SILVERKITE.name, + model_components_param=custom_model_components +) + +# %% +# Detailed explanations for these parameters are in :doc:`/pages/model_components/0100_introduction`. The following paragraphs +# briefly summarized what each parameter does. +# +# The ``seasonality`` parameter recognizes the keys ``"yearly_seasonality"``, ``"quarterly_seasonality"``, ``"monthly_seasonality"``, +# ``"weekly_seasonality"`` and ``"daily_seasonality"``. Their values are the corresponding Fourier series values. +# For ``"SILVERKITE"`` template, the values are ``"auto"`` and their defaults are defined in +# `~greykite.algo.forecast.silverkite.constants.silverkite_seasonality.SilverkiteSeasonalityEnum`. +# +# The ``growth`` parameter recognizes the key ``"growth_term"``, which describes the growth rate of the time series model. +# For ``"SILVERKITE"`` template, the value is ``"linear"`` and indicates linear growth. +# +# The ``events`` parameter recognizes the keys ``"holidays_to_model_separately"``, ``"holiday_lookup_countries"``, +# ``"holiday_pre_num_days"``, ``"holiday_post_num_days"``, ``"holiday_pre_post_num_dict"`` and ``"daily_event_df_dict"``. +# More details can be found at :doc:`/pages/model_components/0400_events`. +# For ``"SILVERKITE"`` template, it automatically looks up holidays in a holiday dictionary and model major holidays +# plus minus 2 days with separate indicators. +# +# The ``changepoints`` parameter recognizes the keys ``"changepoints_dict"`` and ``"seasonality_changepoints_dict"``, +# which correspond to trend changepoints and seasonality changepoints. +# For more details of configuring these two parameters, see :doc:`/gallery/quickstart/01_exploration/0100_changepoint_detection`. +# For ``"SILVERKITE"`` template, both parameters are ``None``, indicating that neither trend changepoints nor seasonality changepoints +# is included. +# +# The ``autoregression`` parameter recognizes the key ``"autoreg_dict"``. You can specify lags and aggregated lags through the +# dictionary to trigger autoregressive terms. Specify the value as ``"auto"`` to automatically include recommended +# autoregressive terms for the data frequency and forecast horizon. +# Note that "auto" ensures that all the lag orders in the autoregressive terms are at least ``forecast_horizon``. +# Therefore, simulation is not used in the prediction phase, hence ``simulation_num`` does not matter. +# More details can be found at :doc:`/pages/model_components/0800_autoregression`. +# For ``"SILVERKITE"`` template, autoregression is not included. +# +# The ``regressors`` parameter recognizes the key ``"regressor_cols"``, which takes a list of regressor column names. These regressor columns +# have to be included in the training df for both training and forecast periods. For more details about regressors, see +# `Regressors <../../pages/model_components/0700_regressors.html#silverkite>`_. +# For ``"SILVERKITE"`` template, no regressors are included. +# +# The ``lagged_regressors`` parameter recognizes the key ``"lagged_regressor_dict"``. +# It is a dictionary with keys being the regressor's name, value being a dictionary that specifies the lag structure +# in a similar manner as ``"autoreg_dict"``. For more details about lagged regressors, see +# `Regressors <../../pages/model_components/0700_regressors.html#silverkite>`_. +# For ``"SILVERKITE"`` template, no lagged regressors are included. +# +# The ``uncertainty`` parameter recognizes the key ``"uncertainty_dict"``, which takes a dictionary to specify how forecast intervals +# are calculated. For more details about uncertainty, see `Uncertainty <../../pages/model_components/0900_uncertainty.html#silverkite>`_. +# For ``"SILVERKITE"`` template, the default value is ``None``. If ``coverage`` in ``ForecastConfig`` is not None, +# the template uses a default setting based on data frequency. We will see how to set ``coverage`` later. +# +# The ``custom`` parameter recognizes specific keys for ``SILVERKITE`` type of templates that correspond to +# `~greykite.sklearn.estimator.simple_silverkite_estimator.SimpleSilverkiteEstimator`. These keys include +# +# - ``"fit_algorithm_dict"`` takes a dictionary to specify what regression method is used to fit the time series. +# The default is the ridge regression in `sklearn`. For a detailed list of algorithms, see +# `Algorithms <../../pages/model_components/0600_custom.html#fit-algorithm>`_. +# - ``"feature_sets_enabled"`` defines the interaction terms to be included in the model. A list of pre-defined +# interaction terms can be found at `Feature sets <../../pages/model_components/0600_custom.html#interactions>`_. +# The default is ``None``, which automatically finds the proper interaction terms that fit the data frequency. +# - ``"max_daily_seas_interaction_order"`` is the maximum order of Fourier series components in daily seasonality to +# be used in interactions. The default is 5. +# - ``"max_weekly_seas_interaction_order"`` is the maximum order of Fourier series components in daily seasonality to +# be used in interactions. The default is 2. +# - ``"extra_pred_cols"`` defines extra predictor column names. For details, see +# `Extra predictors <../../pages/model_components/0600_custom.html#extra-predictors>`_. +# The default is no extra predictors. +# - ``"min_admissible_value"`` is the minimum admissible value in forecast. All values below this will be clipped at this value. +# The default is None. +# - ``"max_admissible_value"`` is the maximum admissible value in forecast. All values above this will be clipped at this value. +# The default is None. +# - ``"normalize_method"`` is the way of normalizing all columns in the feature matrix before fitting the model. +# Supported methods are "statistical", "zero_to_one", "minus_half_to_half" and "zero_at_origin". +# The default is "zero_to_one". +# +# All default high-level ``SILVERKITE`` templates are defined through this framework. +# The ``"SILVERKITE_EMPTY"`` template is an empty template that does not include any component. +# If you provide ``ModelComponentsParam`` via ``model_components_param`` with ``"SILVERKITE_EMPTY"``, +# the final model parameter to be used will be exactly what you provided through ``ModelComponentsParam``. +# It's not like ``"SILVERKITE"``, where the values you do not provide within ``model_components_param`` will +# be filled with the defaults in ``"SILVERKITE"``. +# If you choose to use the ``"SILVERKITE_EMPTY"`` template but do not provide any ``ModelComponentsParam`` +# via ``model_components_param``, the model will only fit the intercept term. +# +# Auto model template +# ------------------- +# The Greykite library supports auto model template selection. +# If you are not sure which model template to use, +# you can try out the auto model template selection. +# Simply specify "AUTO" for ``model_template``, +# the model will automatically select the most appropriate +# model template based on the data frequency, forecast horizon and evaluation configs. + +forecast_config_auto = ForecastConfig( + model_template=ModelTemplateEnum.AUTO.name +) + +# %% +# The auto model template selection will always map to a high-level Silverkite model template. +# That means you can specify ``model_components_param`` to override the model configurations +# in the same way as if you specified a high-level Silverkite model template. +# +# The default model template is ``SILVERKITE``, with the following exceptions: +# +# * Hourly data +# +# * enough cv (cv splits >= 5 and cv evaluation >= 30 points) +# +# * Forecast horizon == 1: uses ``SILVERKITE_HOURLY_1``. +# * Forecast horizon <= 48: uses ``SILVERKITE_HOURLY_24``. +# * Forecast horizon <= 192: uses ``SILVERKITE_HOURLY_168``. +# * Forecast horizon <= 504: uses ``SILVERKITE_HOURLY_336``. +# +# * not enough cv +# +# * Forecast horizon == 1: uses ``SILVERKITE``. +# * Forecast horizon <= 48: uses first template in ``SILVERKITE_HOURLY_24``. +# * Forecast horizon <= 192: uses first template in ``SILVERKITE_HOURLY_168``. +# * Forecast horizon <= 504: uses first template in ``SILVERKITE_HOURLY_336``. +# +# * Daily data +# +# * enough cv (cv splits >= 5 and cv evaluation >= 30 points) +# +# * Forecast horizon <= 7: uses ``SILVERKITE_DAILY_1``. +# * Forecast horizon >= 90: uses ``SILVERKITE_DAILY_90``. +# +# * not enough cv +# +# * Forecast horizon <= 7: uses ``SILVERKITE_DAILY_1_CONFIG_1``. +# * Forecast horizon >= 90: uses first template in ``SILVERKITE_DAILY_90``. +# +# * Weekly data +# +# * enough cv (cv splits >= 5 and cv evaluation >= 30 points) +# +# * Uses ``SILVERKITE_WEEKLY``. +# +# * not enough cv +# +# * Uses first template in ``SILVERKITE_WEEKLY``. +# +# * Monthly data +# +# * Uses ``SILVERKITE_MONTHLY``. +# +# Pre-defined Generic High-level ``SILVERKITE`` Templates +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# It can happen that you would like to customize the ``ModelComponentsParam`` but are not sure +# which values to set for each parameter. +# The high-level ``SILVERKITE`` template pre-defines sets of values for different components, +# indexed by human-readable language. +# This allows you to try sensible options for the components using a directive language. +# For example, "setting seasonality to normal and changepoints to light" is specified by +# ``sk.SEAS.value.NM`` and ``sk.CP.value.LT``. +# This option provides rough tuning knobs before fine tuning the exact parameter values. +# This type of template name must be initialized through the +# `~greykite.framework.templates.simple_silverkite_template_config.SimpleSilverkiteTemplateOptions` +# dataclass. +# You can choose a value for each component and assemble them as a template. + + +from greykite.framework.templates.simple_silverkite_template_config \ + import SimpleSilverkiteTemplateOptions as st +from greykite.framework.templates.simple_silverkite_template_config \ + import SILVERKITE_COMPONENT_KEYWORDS as sk +# The model template specifies +# hourly frequency, normal seasonality (no quarterly or monthly), linear growth, light trend changepoints, +# separate holidays with plus/minus 2 days, automatic feature sets, ridge regression, automatic autoregression, +# automatic max daily seasonality interaction order and automatic max weekly seasonality interaction order. +model_template = st( + freq=sk.FREQ.value.HOURLY, + seas=sk.SEAS.value.NM, + gr=sk.GR.value.LINEAR, + cp=sk.CP.value.LT, + hol=sk.HOL.value.SP2, + feaset=sk.FEASET.value.AUTO, + algo=sk.ALGO.value.RIDGE, + ar=sk.AR.value.AUTO, + dsi=sk.DSI.value.AUTO, + wsi=sk.WSI.value.AUTO +) + +# %% +# This option provides rough tuning knobs to intuitively try out different model component parameters. +# You can then fine tune the model using ``ModelComponentsParams`` directly. +# A complete list of the key-values are +# +# - ``FREQ``: the data frequency, can be "HOURLY", "DAILY" or "WEEKLY", default "DAILY". +# - ``SEAS``: the seasonality, can be "LT", "NM", "HV", "NONE", "LTQM", "NMQM" or "HVQM", default "LT". +# The "QM" versions include quarterly and monthly seasonality while the others do not. +# - ``GR``: the growth term, can be "LINEAR" or "NONE", default "LINEAR", corresponding to linear growth or constant growth. +# - ``CP``: the automatically detected trend change points, can be "NONE", "LT", "NM", "HV", default "NONE". +# - ``HOL``: the holidays, can be "NONE", "SP1", "SP2", "SP4" or "TG", default "NONE". The default configuration looks up +# popular holidays in a list of popular countries. The "SP{n}" values models major holidays +# with plus/minus n days around them separately, while "TG" models all holidays along with +# plus/minus 2 days together as one indicator. +# - ``FEASET``: the feature sets that defines the interaction terms, can be "AUTO", "ON" or "OFF", default "OFF". +# "AUTO" choose the pre-defined interaction terms automatically, while "ON" and "OFF" includes +# or excludes all pre-defined interaction terms, respectively. +# - ``ALGO``: the algorithm used to fit the model, can be "LINEAR", "RIDGE", "SGD" or "LASSO", default "LINEAR". +# Ridge and Lasso use cross-validation to identify the tuning parameter, while "SGD" +# (stochastic gradient descent) implements L2 norm regularization with tuning parameter 0.001. +# - ``AR``: the autoregressive terms, can be "AUTO" or "OFF", default "OFF". +# - ``DSI``: the maximum daily seasonality order used for interaction in feature sets, can be "AUTO" or "OFF", default "AUTO". +# - ``WSI``: the maximum weekly seasonality order used for interaction in feature sets, can be "AUTO" or "OFF", default "AUTO". +# +# Note that if you do not specify any parameter, the default value will be used: +# ``FREQ=DAILY``, ``SEAS=LT``, ``GR=LINEAR``, ``CP=NONE``, ``HOL=NONE``, ``FEASET=OFF``, ``ALGO=LINEAR``, +# ``AR=OFF``, ``DSI=AUTO``, ``WSI=AUTO``. +# To see how these keywords are converted to these model component params, see +# `~greykite.framework.templates.simple_silverkite_template_config.COMMON_MODELCOMPONENTPARAM_PARAMETERS`. +# However, you can print the ``ModelComponentsParam`` class for a model template with the util function +# `~greykite.framework.templates.simple_silverkite_template.SimpleSilverkiteTemplate.get_model_components_from_model_template`. + +sst = SimpleSilverkiteTemplate() +model_components = sst.get_model_components_from_model_template("SILVERKITE_EMPTY") +print(model_components[0]) # `model_components` is a list of length 1. + +# %% +# You can also pass a dataclass. + +model_components = sst.get_model_components_from_model_template(model_template) +print(model_components[0]) # `model_components` is a list of length 1. + +# %% +# Provide a List of Templates +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# For the high-level ``"SILVERKITE"`` templates through the +# `~greykite.sklearn.estimator.simple_silverkite_estimator.SimpleSilverkiteEstimator` estimator, +# you are allowed to provide a list of ``model_template`` or/and a list of ``model_components_param``. +# This option allows you to do grid search and compare over different templates/model component overrides +# at the same time. +# +# For ``model_template``, you can provide a list of any templates defined above. For example, you can do + +model_templates_list = ["SILVERKITE", "SILVERKITE_EMPTY", model_template] + +# %% +# The `~greykite.framework.templates.simple_silverkite_template.SimpleSilverkiteTemplate.get_model_components_from_model_template` +# also takes a list as input. +model_components = sst.get_model_components_from_model_template(model_templates_list) +print(model_components) # There are 3 elements. + +# %% +# For ``model_components_param``, you can also create a list of ``ModelComponentsParam`` classes to override +# the base templates. Each single ``ModelComponentsParam`` is used to override each single base template. +# Therefore, if you provide a list of 4 ``ModelComponentsParam`` via ``model_components_param`` and the list +# of 3 base templates above via ``model_template``, a total of 12 different sets of model parameters is expected. +# However, only unique sets of parameters will be kept. +# +# There are also pre-defined model templates that are defined through lists. +# The ``"SILVERKITE_DAILY_1"`` is a pre-tuned model template on daily data with 1 day forecast horizon. +# It is defined as a list of 3 model configs. +# The ``"SILVERKITE_DAILY_90"`` is a pre-tuned model template on daily data with 90 day's forecast horizon. +# It is defined as a list of 4 model configs. +# The ``"SILVERKITE_WEEKLY"`` is a pre-tuned model template on weekly data. +# It is defined as a list of 4 model configs. +# The ``"SILVERKITE_HOURLY_1"``, ``"SILVERKITE_HOURLY_24"``, ``"SILVERKITE_HOURLY_168"``, ``"SILVERKITE_HOURLY_336"`` +# are pre-tuned model templates on hourly data with horizons 1 hour, 1 day, 1 week and 2 weeks, respectively. +# They are defined as a list of 3 (for ``"SILVERKITE_HOURLY_1"``) or 4 (for others) model configs. +# +# You are also allowed to put these names in the ``model_template`` list, for example + +model_templates_list2 = ["SILVERKITE_DAILY_90", model_template] + +# %% +# This corresponds to 5 single base templates. Whenever you specify multiple sets of parameters +# (list of templates, list of model components, etc.), it's best to have a sufficient number +# of cross validation folds so that the model does not pick a biased set of parameters. +# +# The Low-level Templates in ``SILVERKITE`` +# ----------------------------------------- +# +# There is a pre-defined low-level template named ``"SK"`` that takes low-level parameters and uses +# `~greykite.sklearn.estimator.silverkite_estimator.SilverkiteEstimator`. +# +# The attributes in ``ModelComponentsParam`` are the same as in ``"SILVERKITE"`` but they take different +# types of inputs. + +model_components_param_sk = ModelComponentsParam( + growth={ + }, # growth does not accept any parameters, pass growth term via `extra_pred_cols` instead. + seasonality={ + "fs_components_df": [pd.DataFrame({ + "name": ["tod", "tow", "tom", "toq", "toy"], + "period": [24.0, 7.0, 1.0, 1.0, 1.0], + "order": [3, 3, 1, 1, 5], + "seas_names": ["daily", "weekly", "monthly", "quarterly", "yearly"]})], + }, + changepoints={ + "changepoints_dict": [None], + "seasonality_changepoints_dict": [None] + }, + events={ + "daily_event_df_dict": [None] + }, + autoregression={ + "autoreg_dict": [None] + }, + # `regressors` does not take any input for SK template, + # please specify regressor columns in ``custom.extra_pred_cols`` below. + regressors={}, + uncertainty={ + "uncertainty_dict": [None] + }, + custom={ + "fit_algorithm_dict": { + "fit_algorithm": "ridge", + "fit_algorithm_params": None, + }, + "extra_pred_cols": ["ct1"], # extra predictor columns and regressors + "min_admissible_value": [None], + "max_admissible_value": [None], + } +) + +# %% +# The ``growth`` parameter, the dictionary should be empty. The growth term's name is specified +# via ``extra_pred_cols`` in ``custom``. The default growth term is ``"ct1"``, which corresponds to linear growth. +# +# The ``seasonality`` parameter, it recognizes the key ``"fs_components_df"``, which is a pandas dataframe +# that specifies the fourier series generation information. For more information, see +# `~greykite.sklearn.estimator.silverkite_estimator.SilverkiteEstimator`. +# For ``"SK"`` template, the default includes daily, weekly, monthly, quarterly and yearly seasonality +# with orders 3, 3, 1, 1, 5, respectively. +# +# The ``changepoints`` parameter recognizes the keys ``"changepoints_dict"`` and ``"seasonality_changepoints_dict"``. +# Each of the two keys takes a parameter dictionary that corresponds to trend changepoints and seasonality changepoints. +# For more details of configuring these two parameters, see :doc:`/gallery/quickstart/01_exploration/0100_changepoint_detection`. +# For ``"SK"`` template, both parameters are ``None``, indicating that neither trend changepoints nor seasonality changepoints +# is included. +# +# The ``events`` parameter recognizes the key ``"daily_event_df_dict"``. +# Specify any events or holidays through the "daily_event_df_dict". The usage is the same as this parameter in ``SILVERKITE``. +# For ``"SK"`` template, the default is no daily events (holidays). +# +# The ``autoregression`` parameter recognizes the key ``"autoreg_dict"``. You can specify lags and aggregated lags through the +# dictionary to trigger autoregressive terms. Specify the value as ``"auto"`` to automatically include the proper order of lags. +# For ``"SK"`` template, autoregression is not included. +# +# The ``regressors`` parameter does not recognize any key. +# If you have external regressors you would like to include, +# you need to include them in ``custom.extra_pred_cols`` instead of ``regressors.regressor_cols``. +# For more details about regressors, see +# `Regressors <../../pages/model_components/0700_regressors.html#silverkite>`_. +# For ``"SK"`` template, no regressors are included. +# +# The ``uncertainty`` parameter recognizes the key ``"uncertainty_dict"``, which takes a dictionary to specify how forecast intervals +# are calculated. For more details about uncertainty, see `Uncertainty <../../pages/model_components/0900_uncertainty.html#silverkite>`_. +# For ``"SK"`` template, the default value is ``None``. If ``coverage`` in ``ForecastConfig`` is not None, it will automatically finds the +# most proper conditional residual to compute forecast intervals. We will see how to set ``coverage`` later. +# +# The ``custom`` parameter recognizes specific keys for ``"SK"`` type of template that correspond to +# `~greykite.sklearn.estimator.silverkite_estimator.SilverkiteEstimator`. These keys include +# +# - ``"fit_algorithm_dict"`` takes a dictionary to specify what regression method is used to fit the time series. +# The default is the linear regression in `sklearn`. For a detailed list of algorithms, see +# `Algorithms <../../pages/model_components/0600_custom.html#fit-algorithm>`_. +# - ``"extra_pred_cols"`` defines extra predictor column names. It accepts any valid patsy model formula term. Every column +# name needs to be either generated by `~greykite.common.features.timeseries_features.build_silverkite_features` +# or included in the data df. For details, see +# `Extra predictors <../../pages/model_components/0600_custom.html#specify-model-terms>`_. +# The default is ``["ct1"]``, which is the linear growth term. +# If you have external regressors, this is the place to include the regressor names. +# - ``"min_admissible_value"`` is the minimum admissible value in forecast. All values below this will be clipped at this value. +# The default is None. +# - ``"max_admissible_value"`` is the maximum admissible value in forecast. All values above this will be clipped at this value. +# The default is None. + +# %% +# A major difference between the high-level and low-level interfaces is that +# the lower-level interface does not have pre-defined holidays or feature sets (interaction terms), +# and takes more customizable seasonality information. Note that ``"SK"`` is the only low-level +# template in ``SILVERKITE`` estimators, and does not support a list of ``model_template`` or +# ``model_components_param``. +# +# The ``"PROPHET"`` Template +# -------------------------- +# +# The ``"PROPHET"`` template uses +# `~greykite.sklearn.estimator.prophet_estimator.ProphetEstimator`, +# which is a wrapper for the `Prophet model `_. +# +# The attributes in ``ModelComponentsParam`` are the same as in ``"SILVERKITE"`` but they take different +# types of inputs. + +model_components_param_prophet = ModelComponentsParam( + growth={ + "growth_term": ["linear"] + }, + seasonality={ + "seasonality_mode": ["additive"], + "seasonality_prior_scale": [10.0], + "yearly_seasonality": ['auto'], + "weekly_seasonality": ['auto'], + "daily_seasonality": ['auto'], + "add_seasonality_dict": [None] + }, + changepoints={ + "changepoint_prior_scale": [0.05], + "changepoints": [None], + "n_changepoints": [25], + "changepoint_range": [0.8] + }, + events={ + "holiday_lookup_countries": "auto", + "holiday_pre_num_days": [2], + "holiday_post_num_days": [2], + "start_year": 2015, + "end_year": 2030, + "holidays_prior_scale": [10.0] + }, + regressors={ + "add_regressor_dict": [None] + }, + uncertainty={ + "mcmc_samples": [0], + "uncertainty_samples": [1000] + } +) + +# %% +# The ``growth`` parameter recognizes the key ``"growth_term"``, which describes the growth rate of the time series model. +# For ``"PROPHET"`` template, the value indicates linear growth. +# +# The ``seasonality`` parameter recognizes the keys ``"seasonality_mode"``, ``"seasonality_prior_scale"``, +# ``"yearly_seasonality"``, ``"weekly_seasonality"``, ``"daily_seasonality"`` and ``"add_seasonality_dict"``. +# For ``"PROPHET"`` template, the seasonality model is "additive" with prior scale 10 and automatic components. +# +# The ``changepoints`` parameter recognizes the keys ``"changepoint_prior_scale"``, ``"changepoints"``, ``"n_changepoints"`` +# and ``"changepoint_range"``. +# The Prophet model supports trend changepoints only. +# For ``"PROPHET"`` template, it puts 25 potential trend changepoints uniformly over the first 80% +# data and use regularization with prior scale 0.05. +# +# The ``events`` parameter recognizes the keys ``"holiday_lookup_countries"``, +# ``"holiday_pre_num_days"``, ``"holiday_post_num_days"``, ``"start_year"``, ``"end_year"`` and ``"holidays_prior_scale"``. +# The algorithm automatically looks up holidays in ``"holiday_lookup_countries"``. +# For ``"PROPHET"`` template, it automatically looks up holidays between 2015 and 2030 with their +# plus/minus 2 days. The holiday prior scale is 10. +# +# The Prophet model does not support autoregression, so the ``autoregression`` value should be empty. +# +# The ``regressors`` parameter recognizes the key ``"add_regressor_dict"``. +# For more details about regressors, see +# `Regressors <../../pages/model_components/0700_regressors.html#prophet>`_. +# For ``"PROPHET"`` template, no regressors are included. +# +# The ``uncertainty`` parameter recognizes the key ``"mcmc_samples"`` and ``"uncertainty_samples"``. +# For more details about uncertainty, see `Uncertainty <../../pages/model_components/0900_uncertainty.html#prophet>`_. +# For ``"PROPHET"`` template, the default value is to sample 1000 uncertainty samples. +# +# The Prophet model does not have any specific value in the ``custom`` parameter. + +# %% +# Extra Notes +# ----------- +# - All templates take the ``hyperparameter_override`` key in their +# ``ModelComponentsParam`` class, which is used to define extra grid search options. +# For details, see :doc:`/gallery/quickstart/03_benchmark/0100_grid_search`. +# +# - To specify a string as a template name, it is recommended to use the +# `~greykite.framework.templates.model_templates.ModelTemplateEnum` +# to avoid typos. For example, + +silverkite_template = ModelTemplateEnum.SILVERKITE.name +silverkite_templates = [ + ModelTemplateEnum.SILVERKITE_EMPTY.name, + ModelTemplateEnum.SILVERKITE_DAILY_90.name +] +prophet_template = ModelTemplateEnum.PROPHET.name diff --git a/docs/nbpages/templates/0200_multistage_forecast.py b/docs/nbpages/templates/0200_multistage_forecast.py new file mode 100644 index 0000000..35bee9a --- /dev/null +++ b/docs/nbpages/templates/0200_multistage_forecast.py @@ -0,0 +1,480 @@ +""" +The Multistage Forecast Model +============================= + +This is a tutorial for the Multistage Forecast model. +Multistage Forecast is a fast solution designed for more granular time series +(for example, minute-level), where a long history is needed to train a good model. + +For example, suppose we want to train a model on 2 years of 5-minute frequency data. +That's 210,240 observations. +If we directly fit a model to large input data, +training time and resource demand can be high (15+ minutes on i9 CPU). +If we use a shorter period to train the model, +the model will not be able to capture long term effects +such as holidays, monthly/quarterly seasonalities, year-end drops, etc. +There is a trade-off between speed and accuracy. + +On the other hand, if due to data retention policy, +we only have data in the original frequency for a short history, +but we have aggregated data for a longer history, +could we utilize both datasets to make the prediction more accurate? + +Multistage Forecast is designed to close this gap. +It's easy to observe the following facts: + + - Trend can be learned with data at a weekly/daily granularity. + - Yearly seasonality, weekly seasonality and holiday effects can be learned with daily data. + - Daily seasonality and autoregression effects can be learned with most recent data if the forecast horizon + is small (which is usually the case in minute-level data). + +Then it's natural to think of the idea: not all components in the forecast model need +to be learned from minute-level granularity. Training each component with the least granularity data needed +can greatly save time while keeping the desired accuracy. + +Here we introduce the Multistage Forecast algorithm, which is built upon the idea above: + + - Multistage Forecast trains multiple models to fit a time series. + - Each stage of the model trains on the residuals of the previous stages, + takes an appropriate length of data, does an optional aggregation, + and learns the appropriate components for the granularity. + - The final predictions will be the sum of the predictions from all stages of models. + +In practice, we’ve found Multistage Forecast to reduce training time by up to 10X while maintaining accuracy, +compared to a Silverkite model trained on the full dataset. + +A diagram of the Multistage Forecast model flow is shown below. + +.. image:: /figures/multistage_forecast.png + :width: 600 + :alt: Multistage Forecast training flow + +Next, we will see examples of how to configure Multistage Forecast models. +""" + +# import libraries +import plotly +from greykite.framework.templates.forecaster import Forecaster +from greykite.framework.templates.autogen.forecast_config import ForecastConfig,\ + MetadataParam, ModelComponentsParam, EvaluationPeriodParam +from greykite.framework.templates.model_templates import ModelTemplateEnum +from greykite.framework.benchmark.data_loader_ts import DataLoaderTS +from greykite.algo.forecast.silverkite.forecast_simple_silverkite_helper import cols_interact +from greykite.framework.templates.multistage_forecast_template_config import MultistageForecastTemplateConfig + +# %% +# Configuring the Multistage Forecast model +# ----------------------------------------- +# +# We take an hourly dataset as an example. +# We will use the hourly Washington D.C. bikesharing dataset +# (`source `_). + +# loads the dataset +ts = DataLoaderTS().load_bikesharing_ts() +print(ts.df.head()) + +# plot the data +plotly.io.show(ts.plot()) + +# %% +# The data contains a few years of hourly data. +# Directly training on the entire dataset may take a couple of minutes. +# Now let's consider a two-stage model with the following configuration: +# +# - **Daily model**: a model trained on 2 years of data with daily aggregation. +# The model will learn the trend, yearly seasonality, weekly seasonality and holidays. +# For an explanation of the configuration below, see the `paper `_. +# - **Hourly model**: a model trained on the residuals to learn short term patterns. +# The model will learn daily seasonality, its interaction with the ``is_weekend`` indicator, +# and some autoregression effects. +# +# From :doc:`/gallery/tutorials/0100_forecast_tutorial` we know how to specify +# each single model above. The core configuration is specified via +# `~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam`. +# We can specify the two models as follows. + +# the daily model +daily_model_components = ModelComponentsParam( + growth=dict( + growth_term="linear" + ), + seasonality=dict( + yearly_seasonality=12, + quarterly_seasonality=0, + monthly_seasonality=0, + weekly_seasonality=5, + daily_seasonality=0 # daily model does not have daily seasonality + ), + changepoints=dict( + changepoints_dict=dict( + method="auto", + regularization_strength=0.5, + yearly_seasonality_order=12, + resample_freq="3D", + potential_changepoint_distance="30D", + no_changepoint_distance_from_end="30D" + ), + seasonality_changepoints_dict=None + ), + autoregression=dict( + autoreg_dict="auto" + ), + events=dict( + holidays_to_model_separately=["Christmas Day", "New Year's Day", "Independence Day", "Thanksgiving"], + holiday_lookup_countries=["UnitedStates"], + holiday_pre_num_days=1, + holiday_post_num_days=1 + ), + custom=dict( + fit_algorithm_dict=dict( + fit_algorithm="ridge" + ), + feature_sets_enabled="auto", + min_admissible_value=0 + ) +) + +# creates daily seasonality interaction with is_weekend +daily_interaction = cols_interact( + static_col="is_weekend", + fs_name="tod_daily", + fs_order=5 +) + +# the hourly model +hourly_model_components = ModelComponentsParam( + growth=dict( + growth_term=None # growth is already modeled in daily model + ), + seasonality=dict( + yearly_seasonality=0, + quarterly_seasonality=0, + monthly_seasonality=0, + weekly_seasonality=0, + daily_seasonality=12 # hourly model has daily seasonality + ), + changepoints=dict( + changepoints_dict=None, + seasonality_changepoints_dict=None + ), + events=dict( + holidays_to_model_separately=None, + holiday_lookup_countries=[], + holiday_pre_num_days=0, + holiday_post_num_days=0 + ), + autoregression=dict( + autoreg_dict="auto" + ), + custom=dict( + fit_algorithm_dict=dict( + fit_algorithm="ridge" + ), + feature_sets_enabled="auto", + extra_pred_cols=daily_interaction + ) +) + +# %% +# Now to use Multistage Forecast, +# just like specifying the model components of the Simple Silverkite model, +# we need to specify the model components for Multistage Forecast. +# The Multistage Forecast configuration is specified via +# ``ModelComponentsParam.custom["multistage_forecast_configs"]``, +# which takes a list of +# `~greykite.framework.templates.multistage_forecast_template_config.MultistageForecastTemplateConfig` +# objects, each of which represents a stage of the model. +# +# The ``MultistageForecastTemplateConfig`` object for a single stage takes the following parameters: +# +# - ``train_length``: the length of training data, for example ``"365D"``. +# Looks back from the end of the training data and takes observations up to this limit. +# - ``fit_length``: the length of data where fitted values are calculated. +# Even if the training data is not the entire period, the fitted values can still be calculated +# on the entire period. The default will be the same as the training length. +# - ``agg_freq``: the aggregation frequency in string representation. +# For example, "D", "H", etc. If not specified, the original frequency will be kept. +# - ``agg_func``: the aggregation function name, default is ``"nanmean"``. +# - ``model_template``: the model template name. This together with the ``model_components`` below +# specify the full model, just as when using the Simple Silverkite model. +# - ``model_components``: the model components. This together with the ``model_template`` above +# specify the full model for a stage, just as when using the Simple Silverkite model. +# +# ``MultistageForecastTemplateConfig`` represents the flow of each stage of the model: +# taking the time series / residual, +# taking the appropriate length of training data, doing an optional aggregation, +# then training the model with the given parameters. +# Now let's define the ``MultistageForecastTemplateConfig`` object one by one. + +# the daily model +daily_config = MultistageForecastTemplateConfig( + train_length="730D", # use 2 years of data to train + fit_length=None, # fit on the same period as training + agg_func="nanmean", # aggregation function is nanmean + agg_freq="D", # aggregation frequency is daily + model_template=ModelTemplateEnum.SILVERKITE.name, # the model template + model_components=daily_model_components # the daily model components specified above +) + +# the hourly model +hourly_config = MultistageForecastTemplateConfig( + train_length="30D", # use 30 days data to train + fit_length=None, # fit on the same period as training + agg_func="nanmean", # aggregation function is nanmean + agg_freq=None, # None means no aggregation + model_template=ModelTemplateEnum.SILVERKITE.name, # the model template + model_components=hourly_model_components # the daily model components specified above +) + +# %% +# The configurations simply go to ``ModelComponentsParam.custom["multistage_forecast_configs"]`` +# as a list. We can specify the model components for Multistage Forecast as below. +# Note that all keys other than ``"custom"`` and ``"uncertainty"`` will be ignored. + +model_components = ModelComponentsParam( + custom=dict( + multistage_forecast_configs=[daily_config, hourly_config] + ), + uncertainty=dict() +) + +# %% +# Now we can fill in other parameters needed by +# `~greykite.framework.templates.autogen.forecast_config.ForecastConfig`. + +# metadata +metadata = MetadataParam( + time_col="ts", + value_col="y", + freq="H" # the frequency should match the original data frequency +) + +# evaluation period +evaluation_period = EvaluationPeriodParam( + cv_max_splits=0, # turn off cv for speeding up + test_horizon=0, # turn off test for speeding up +) + +# forecast config +config = ForecastConfig( + model_template=ModelTemplateEnum.MULTISTAGE_EMPTY.name, + forecast_horizon=24, # forecast 1 day ahead + coverage=0.95, # prediction interval is supported + metadata_param=metadata, + model_components_param=model_components, + evaluation_period_param=evaluation_period +) +forecaster = Forecaster() +forecast_result = forecaster.run_forecast_config( + df=ts.df, + config=config +) + +print(forecast_result.forecast.df_test.head()) + +# plot the predictions +fig = forecast_result.forecast.plot() +# interactive plot, click to zoom in +plotly.io.show(fig) + +# %% +# This model is 3X times faster than training with Silverkite on the entire hourly data +# (23.5 seconds vs 79.4 seconds). +# If speed is a concern due to high frequency data with long history, +# Multistage Forecast is worth trying. +# +# .. note:: +# The order of specifying the ``MultistageForecastTemplateConfig`` objects +# does not matter. The models will be automatically sorted with respect to +# ``train_length`` from long to short. This is to ensure that we have enough +# residuals from the previous model when we fit the next model. +# +# .. note:: +# The estimator expects different stage models to have different aggregation +# frequencies. If two stages have the same aggregation frequency, an error will +# be raised. +# +# .. note:: +# Since the models in each stage may not fit on the entire training data, +# there could be periods at the beginning of the training period where +# fitted values are not calculated. +# These NA fitted values are ignored when computing evaluation metrics on the training set. +# +# The uncertainty configuration +# ----------------------------- +# +# If you would like to include the uncertainty intervals, +# you can specify the ``"uncertainty"`` parameter in model components. +# +# The ``"uncertainty"`` key in ``ModelComponentsParam`` takes one key: +# ``"uncertainty_dict"``, which is a dictionary taking the following keys: +# +# - ``"uncertainty_method"``: a string representing the uncertainty method, +# for example, ``"simple_conditional_residuals"``. +# - ``"params"``: a dictionary of additional parameter needed by the uncertainty method. +# +# Now let's specify a configuration of uncertainty method via the +# ``uncertainty_dict`` parameter on the ``"simple_conditional_residuals"`` model. + +# specifies the ``uncertainty`` parameter +uncertainty = dict( + uncertainty_dict=dict( + uncertainty_method="simple_conditional_residuals", + params=dict( + conditional_cols=["dow"] # conditioning on day of week + ) + ) +) + +# adds to the ``ModelComponentsParam`` +model_components = ModelComponentsParam( + custom=dict( + multistage_forecast_configs=[daily_config, hourly_config] + ), + uncertainty=uncertainty +) + +# %% +# The Multistage Forecast Model templates +# ----------------------------------------- +# +# In the example above we have seen an model template named +# ``MULTISTAGE_EMPTY``. The template is an empty template +# that must be used with specified model components. +# Any model components (``multistage_forecast_configs``) specified +# will be exactly the model parameters to be used. +# :doc:`/gallery/templates/0100_template_overview` explains how model templates +# work and how they are overridden by model components. +# +# The Multistage Forecast model also comes with the following model template: +# +# - ``SILVERKITE_TWO_STAGE``: a two-stage model similar to the model we present above. +# The first stage is a daily model trained on 56 * 7 days of data learning the long term effects +# including yearly/quarterly/monthly/weekly seasonality, holidays, etc. The second stage is +# a short term model in the original data frequency learning the daily seasonality +# and autoregression effects. Both stages' ``model_templates`` are ``SILVERKITE``. +# Note that this template assumes the data to be sub-daily. +# +# When you choose to use the Multistage Forecast model templates, +# you can override default values by specifying the model components. +# The overriding in Multistage Forecast works as follows: +# +# - For each ``MultistageForecastTemplateConfig``'s overridden, there are two situations. +# +# If the customized ``model_template`` is the same as the ``model_template`` in the default model, +# for example, both are ``SILVERKITE``, then the customized ``model_components`` +# in the ``MultistageForecastTemplateConfig`` will be used to override the +# ``model_components`` in the default ``MultistageForecastTemplateConfig``, +# as overriding is done in the Silverkite template. +# +# If the model templates are different, say ``SILVERKITE`` in the default and ``SILVERKITE_EMPTY`` +# in the customized, then both the new ``model_template`` and the new entire ``model_components`` +# will be used to replace the original ``model_template`` and ``model_components`` in the default model. +# +# In both cases, the ``train_length``, ``fit_length``, ``agg_func`` and ``agg_freq`` will be overridden. +# +# For example, in ``SILVERKITE_TWO_STAGE``, both stages of default templates are ``SILVERKITE``. +# Consider the following example. + +model_template = "SILVERKITE_TWO_STAGE" +model_components_override = ModelComponentsParam( + custom=dict( + multistage_forecast_configs=[ + MultistageForecastTemplateConfig( + train_length="730D", + fit_length=None, + agg_func="nanmean", + agg_freq="D", + model_template=ModelTemplateEnum.SILVERKITE.name, + model_components=ModelComponentsParam( + seasonality=dict( + weekly_seasonality=7 + ) + ) + ), + MultistageForecastTemplateConfig( + train_length="30D", + fit_length=None, + agg_func="nanmean", + agg_freq=None, + model_template=ModelTemplateEnum.SILVERKITE_EMPTY.name, + model_components=ModelComponentsParam( + seasonality=dict( + daily_seasonality=10 + ) + ) + ) + ] + ) +) + + +# %% +# The first model has the same model template ``SILVERKITE`` as the default model template, +# so in ``model_components``, only the weekly seasonality parameter will be used to override +# the default weekly seasonality in ``SILVERKITE`` model template. +# The second model has a different model template ``SILVERKITE_EMPTY``. +# Then the second model will use exactly the model template and model components specified in +# the customized parameters. +# +# This design is to maximize the flexibility to override an existing Multistage Forecast model template. +# However, if you fully know what your configuration will be for each stage of the model, +# the suggestion is to use ``MULTISTAGE_EMPTY`` and specify your own configurations. +# +# .. note:: +# If the customized model components contains fewer models than provided by the model template, +# for example, only 1 stage model is customized when using ``SILVERKITE_TWO_STAGE``. +# The ` customized ``MultistageForecastTemplateConfig`` will +# be used to override the first model in the ``SILVERKITE_TWO_STAGE``, +# and the 2nd model in ``SILVERKITE_TWO_STAGE`` will be appended to the end of the first overridden model. +# Oppositely, if the number of customized models is 3, the extra customized model will be appended to the +# end of the 2 models in ``SILVERKITE_TWO_STAGE``. +# +# Grid search +# ----------- +# +# See :doc:`/gallery/quickstart/03_benchmark/0100_grid_search` for an introduction to the grid search functionality +# of Greykite. Grid search is also supported in Multistage Forecast. +# The way to specify grid search is similar to specifying grid search in Simple Silverkite model: +# please specify the grids in each stage of the model's ``model_components``. +# The Multistage Forecast model will automatically recognize the grids +# and formulate the full grids across all models. +# This design is to keep the behavior the same as using grid search in Silverkite models. +# +# For example, the following model components specifies two stage models. +# The first model has a grid on weekly seasonality with candidates 3 and 5. +# The second model has a grid on daily seasonality with candidates 10 and 12. +# The Multistage Forecast model will automatically combine the grids from the two models, +# and generate a grid of size 4. + +model_components_grid = ModelComponentsParam( + custom=dict( + multistage_forecast_configs=[ + MultistageForecastTemplateConfig( + train_length="730D", + fit_length=None, + agg_func="nanmean", + agg_freq="D", + model_template=ModelTemplateEnum.SILVERKITE.name, + model_components=ModelComponentsParam( + seasonality=dict( + weekly_seasonality=[3, 5] + ) + ) + ), + MultistageForecastTemplateConfig( + train_length="30D", + fit_length=None, + agg_func="nanmean", + agg_freq=None, + model_template=ModelTemplateEnum.SILVERKITE.name, + model_components=ModelComponentsParam( + seasonality=dict( + daily_seasonality=[10, 12] + ) + ) + ) + ] + ) +) diff --git a/docs/nbpages/templates/0300_lag_forecast.py b/docs/nbpages/templates/0300_lag_forecast.py new file mode 100644 index 0000000..97800e1 --- /dev/null +++ b/docs/nbpages/templates/0300_lag_forecast.py @@ -0,0 +1,244 @@ +""" +Enhanced week over week models +============================== + +Week over week model is a useful tool in business applications, +where time series exhibits strong weekly seasonality. +It's fast and somewhat accurate. +Typical drawbacks of week over week models include +not adapting to seasonality (e.g. year-end), fast growth +and holiday effects. +Also, week over week model is vulnerable to corrupted data +such as outliers on last week. + +Using aggregated lags such like week over 3 weeks median is more robust to data corruption, +but the growth/seasonality/holiday issue is not resolved. + +The enhanced version of week over week model fits a two-step +model with the ``MultistageForecast`` method in Greykite. +It first uses a ``Silverkite`` model to learn the growth, +yearly seasonality and holiday effects. +Then it uses a week over week or other lag-based models to model the residual +weekly patterns. + +In this example, we will learn how to do the original +week over week type models and how to use the enhanced versions. + +The regular week over week models +--------------------------------- + +Greykite supports the regular lag-based models through ``LagBasedTemplate``. +To see a general introduction of how to use model templates, +see `model templates <../templates/0100_template_overview>`_. + +Lag-based methods are invoked by specifying the ``LAG_BASED`` model template. +""" + +import warnings + +import pandas as pd +from greykite.common.data_loader import DataLoader +from greykite.common.aggregation_function_enum import AggregationFunctionEnum +from greykite.common import constants as cst +from greykite.framework.templates.forecaster import Forecaster +from greykite.framework.templates.model_templates import ModelTemplateEnum +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.autogen.forecast_config import MetadataParam +from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam +from greykite.framework.templates.autogen.forecast_config import EvaluationPeriodParam +from greykite.framework.templates.multistage_forecast_template import MultistageForecastTemplateConfig +from greykite.sklearn.estimator.lag_based_estimator import LagUnitEnum + +warnings.filterwarnings("ignore") + +df = DataLoader().load_peyton_manning() +df[cst.TIME_COL] = pd.to_datetime(df[cst.TIME_COL]) + +# %% +# We specify the data set and evaluation parameters below. +# First, we don't specify model components. +# In this case, the default behavior for ``LAG_BASED`` model template +# is the week over week model. +# If the forecast horizon is longer than a week, +# the model will use the forecasted value to generate further forecasts. + +metadata = MetadataParam( + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + freq="D" +) + +# Turn off cv and test for faster run. +evaluation = EvaluationPeriodParam( + cv_max_splits=0, + test_horizon=0 +) + +config = ForecastConfig( + forecast_horizon=7, + model_template=ModelTemplateEnum.LAG_BASED.name, + metadata_param=metadata, + evaluation_period_param=evaluation +) + +forecaster = Forecaster() +result = forecaster.run_forecast_config( + df=df, + config=config +) + +# %% +# This is the simple week over week estimation. +# If we print the results, we can see that the predictions +# are exactly the same as the last week's observations. + +result.forecast.df_train.tail(14) + +# %% +# In general, the lag-based method supports any +# aggregation of any lag combinations. +# Now let's use an example to demonstrate how to do a +# week-over-3-week median estimation. +# We override the parameters in ``ModelComponentsParam.custom`` dictionary. +# The parameters that can be customized are +# +# * ``lag_unit``: the unit of the lags. Options are in +# `~greykite.sklearn.estimator.lag_based_estimator.LagUnitEnum`. +# * ``lags``: a list of integers indicating the lags in ``lag_unit``. +# * ``agg_func``: the aggregation function name. Options are in +# `~greykite.common.aggregation_function_enum.AggregationFunctionEnum`. +# * ``agg_func_params``: a dictionary of parameters to be passed to the aggregation function. +# +# Specifying the following, the forecasts will become week-over-3-week median. + +model_components = ModelComponentsParam( + custom=dict( + lag_unit=LagUnitEnum.week.name, # unit is "week" + lags=[1, 2, 3], # lags are 1 week, 2 weeks and 3 weeks + agg_func=AggregationFunctionEnum.median.name # aggregation function is "median" + ) +) + +config = ForecastConfig( + forecast_horizon=7, + model_template=ModelTemplateEnum.LAG_BASED.name, + metadata_param=metadata, + evaluation_period_param=evaluation, + model_components_param=model_components +) + +forecaster = Forecaster() +result = forecaster.run_forecast_config( + df=df, + config=config +) + +result.forecast.df_train.tail(14) + +# %% +# The enhanced week over week model +# --------------------------------- +# +# The enhanced week over week model consists of a two-stage model: +# +# * ``"Silverkite model"``: the first stage uses a Silverkite model to learn the +# yearly seasonality, growth and holiday effects. +# * ``"Lag-based model"``: the second stage uses a lag-based model to learn the +# residual effects including weekly seasonality. +# +# The model is available through the ``MultistageForecastTemplate``. +# For details about the multistage forecast model, see +# `multistage forecast <../tutorials/0200_multistage_forecast>`_. +# +# To use this two-stage enhanced lag model, +# specify the model template as ``SILVERKITE_WOW``. +# The default behavior is to model growth, yearly seasonality and holidays +# with the automatically inferred parameters from the time series. +# Then it models the residual with a week over week model. + +config = ForecastConfig( + forecast_horizon=7, + model_template=ModelTemplateEnum.SILVERKITE_WOW.name, + metadata_param=metadata, + evaluation_period_param=evaluation +) + +forecaster = Forecaster() +result = forecaster.run_forecast_config( + df=df, + config=config +) + +result.forecast.df_train.tail(14) + +# %% +# You may notice that the forecast is not exactly the observations a week ago, +# because the Silverkite model did some adjustments on the growth, yearly seasonality +# and holidays. +# +# To override the model parameters, we will follow the rules mentioned in +# `multistage forecast <../tutorials/0200_multistage_forecast>`_. +# For each stage of model, if you would like to just change one parameter +# and keep the other parameters the same, +# you can specify the same model template for the stage as in ``SILVERKITE_WOW`` +# (they are ``SILVERKITE_EMPTY`` and ``LAG_BASED``), +# and specify a model components object to override the specific parameter. +# Otherwise, you can specify a new model template. +# The code below overrides both the Silverkite model and the lag model. +# In the first stage, it keeps the original configuration but forces turning yearly seasonality off. +# In the second stage, it uses week-over-3-week median instead of wow model. + +model_components = ModelComponentsParam( + custom=dict( + multistage_forecast_configs=[ + MultistageForecastTemplateConfig( + train_length="1096D", + fit_length=None, + agg_func="nanmean", + agg_freq="D", + # Keeps it the same as the model template in `SILVERKITE_WOW` to override selected parameters below + model_template=ModelTemplateEnum.SILVERKITE_EMPTY.name, + # Since the model template in this stage is the same as the model template in `SILVERKITE_WOW`, + # the parameter below will be applied on top of the existing parameters. + model_components=ModelComponentsParam( + seasonality={ + "yearly_seasonality": False # force turning off yearly seasonality + } + ) + ), + MultistageForecastTemplateConfig( + train_length="28D", # any value longer than the lags (21D here) + fit_length=None, # keep as None + agg_func="nanmean", + agg_freq=None, + # Keeps it the same as the model template in `SILVERKITE_WOW` to override selected parameters below + model_template=ModelTemplateEnum.LAG_BASED.name, + # Since the model template in this stage is the same as the model template in `SILVERKITE_WOW`, + # the parameter below will be applied on top of the existing parameters. + model_components=ModelComponentsParam( + custom={ + "lags": [1, 2, 3], # changes to 3 weeks' median, default unit is "week", + "lag_unit": LagUnitEnum.week.name, + "agg_func": AggregationFunctionEnum.median.name, # changes to 3 weeks' median + } + ) + ) + ] + ) +) + +config = ForecastConfig( + forecast_horizon=7, + model_template=ModelTemplateEnum.LAG_BASED.name, + metadata_param=metadata, + evaluation_period_param=evaluation, + model_components_param=model_components +) + +forecaster = Forecaster() +result = forecaster.run_forecast_config( + df=df, + config=config +) + +result.forecast.df_train.tail(14) \ No newline at end of file diff --git a/docs/nbpages/templates/0400_forecast_one_by_one.py b/docs/nbpages/templates/0400_forecast_one_by_one.py new file mode 100644 index 0000000..3f393ac --- /dev/null +++ b/docs/nbpages/templates/0400_forecast_one_by_one.py @@ -0,0 +1,155 @@ +""" +Forecast One By One +=================== + +A useful feature for short-term forecast in Silverkite model family is autoregression. +Silverkite has an "auto" option for autoregression, +which automatically selects the autoregression lag orders based on the data frequency and forecast horizons. +One important rule of this "auto" option is that the minimum order of autoregression terms +is at least the forecast horizon. +For example, if the forecast horizon is 3 on a daily model, +the minimum order of autoregression is set to 3. +The "auto" option won't have an order of 2 in this case, +because the 3rd day forecast will need the 1st day's observation, +which isn't available at the current time. +Although the model can make predictions with an autoregression lag order less than the forecast horizon +via simulations, it takes longer time to run and is not the preferred behavior in the "auto" option. + +However, in many cases, using smaller autoregression lag orders can give more accurate forecast results. +We observe that the only barrier of using an autoregression term of order 2 in the 3-day forecast model +is the 3rd day, while we can use it freely for the first 2 days. +Similarly, we are able to use an autoregression term of order 1 for the 1st day. +In a 3 day forecast, if the accuracy of all 3 days are important, then replacing the first 2 days' models +with shorter autoregression lag orders can improve the accuracy. +The forecast-one-by-one algorithm is designed in this context. + +The observations above together bring the idea of the forecast-one-by-one algorithm. +The algorithm allows fitting multiple models with the "auto" option in autoregression, +when one is forecasting with a forecast horizon longer than 1. +For each model, the "auto" option for autoregression selects the smallest +available autoregression lag order and predicts for the corresponding forecast steps, +thus improving the forecast accuracy for the early steps. + +In this example, we will cover how to activate the forecast-one-by-one approach +via the ``ForecastConfig`` and the ``Forecaster`` classes. +For a detailed API reference, please see the +`~greykite.framework.templates.autogen.forecast_config.ForecastConfig` and +`~greykite.sklearn.estimator.one_by_one_estimator.OneByOneEstimator` classes. +""" + +import warnings + +warnings.filterwarnings("ignore") + +import plotly +from greykite.common.data_loader import DataLoader +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam +from greykite.framework.templates.forecaster import Forecaster +from greykite.framework.templates.model_templates import ModelTemplateEnum +from greykite.framework.utils.result_summary import summarize_grid_search_results + +# Loads dataset into pandas DataFrame +dl = DataLoader() +df = dl.load_peyton_manning() + +# %% +# The forecast-one-by-one option +# ------------------------------ +# +# The forecast-one-by-one option is specified through the ``forecast_one_by_one`` parameter +# in ``ForecastConfig``. + +config = ForecastConfig( + model_template=ModelTemplateEnum.SILVERKITE.name, + forecast_horizon=3, + model_components_param=ModelComponentsParam( + autoregression=dict(autoreg_dict="auto") + ), + forecast_one_by_one=True +) + +# %% +# The ``forecast_one_by_one`` parameter can be specified in the following ways +# +# - **``True``**: every forecast step will be a separate model. +# The number of models equals the forecast horizon. +# In this example, 3 models will be fit with the 3 forecast steps. +# - **``False``**: the forecast-one-by-one method is turned off. +# This is the default behavior and a single model is used for all forecast steps. +# - **A list of integers**: each integer corresponds to a model, +# and it is the number of steps. For example, in a 7 day forecast, +# specifying ``forecast_one_by_one=[1, 2, 4]`` will result in 3 models. +# The first model forecasts the 1st day with forecast horizon 1; +# The second model forecasts the 2nd - 3rd days with forecast horizon 3; +# The third model forecasts the 4th - 7th days with forecast horizon 7. +# In this case, the sum of the list entries must equal the forecast horizon. +# - **an integer ``n``**: every model will account for n steps. The last model +# will account for the rest `_. +# A tutorial of using the function can be found at :doc:`/gallery/quickstart/01_exploration/0300_seasonality_plots`. # %% # Baseline model # -------------------- # A simple forecast can be created on the data set, -# see details in `Simple Forecast <../quickstart/0100_simple_forecast.html>`_. +# see details in :doc:`/gallery/quickstart/0100_simple_forecast`. # Note that if you do not provide any extra parameters, all model parameters are by default. # The default parameters are chosen conservatively, so consider this a baseline # model to assess forecast difficulty and make further improvements if necessary. @@ -324,7 +324,7 @@ # in the future. Including anomaly points will lead the model to fit the # anomaly as an intrinsic property of the time series, resulting in inaccurate forecasts. # These anomalies could be identified through overlay plots, see -# `Seasonality <../quickstart/0300_seasonality.html>`_. +# :doc:`/gallery/quickstart/01_exploration/0300_seasonality_plots`. fig = ts.plot_quantiles_and_overlays( groupby_time_feature="month_dom", @@ -356,8 +356,8 @@ anomaly_df = pd.DataFrame({ # start and end date are inclusive # each row is an anomaly interval - cst.START_DATE_COL: ["2010-06-05", "2012-03-01"], # inclusive - cst.END_DATE_COL: ["2010-06-20", "2012-03-20"], # inclusive + cst.START_TIME_COL: ["2010-06-05", "2012-03-01"], # inclusive + cst.END_TIME_COL: ["2010-06-20", "2012-03-20"], # inclusive cst.ADJUSTMENT_DELTA_COL: [np.nan, np.nan], # mask as NA }) # Creates anomaly_info dictionary. @@ -382,7 +382,7 @@ # potential trend changepoints, at which time the linear growth changes its rate. # Detailed changepoint configuration can be found at :doc:`/pages/model_components/0500_changepoints`. # These points can be detected with the ``ChangepointDetector`` class. For a quickstart example, -# see `Changepoint detection <../quickstart/0200_changepoint_detection.html>`_. +# see :doc:`/gallery/quickstart/01_exploration/0100_changepoint_detection`. # Here we explore the automatic changepoint detection. # The parameters in this automatic changepoint detection is customized for this data set. # We keep the ``yearly_seasonality_order`` the same as the model's yearly seasonality order. @@ -450,7 +450,7 @@ # Detailed seasonality configurations can be found at # :doc:`/pages/model_components/0300_seasonality`. # A detailed seasonality detection quickstart example on the same data set is -# available at `Seasonality Detection <../quickstart/0300_seasonality.html>`_. +# available at :doc:`/gallery/quickstart/01_exploration/0300_seasonality_plots`. # The conclusions about seasonality terms are: # # - daily seasonality is not available (because frequency is daily); @@ -482,7 +482,7 @@ # differently. For ``SILVERKITE``, this means the Fourier series coefficients are allowed # to change. We could decide to add this feature if cross-validation performance is poor # and seasonality changepoints are detected in exploratory analysis. -# For details, see :doc:`/gallery/quickstart/0200_changepoint_detection`. +# For details, see :doc:`/gallery/quickstart/01_exploration/0100_changepoint_detection`. # %% # Holidays and events @@ -495,7 +495,7 @@ # Events such as superbowl could potentially increase the pageviews. # Therefore, we add United States holidays and superbowls dates as custom events. # Other important events that affect the time series can also be found -# through the yearly seasonality plots in `Seasonality <../quickstart/0300_seasonality.html>`_. +# through the yearly seasonality plots in :doc:`/gallery/quickstart/01_exploration/0300_seasonality_plots`. # Includes major holidays and the superbowl date. events = { @@ -524,7 +524,7 @@ # """""" # Now we consider some custom features that could relate to the pageviews. The documentation for # extra regressors can be found at :Doc:`/pages/model_components/0700_regressors`. As mentioned -# in `Seasonality <../quickstart/0300_seasonality.html>`_, we observe that the football +# in :doc:`/gallery/quickstart/01_exploration/0300_seasonality_plots`, we observe that the football # season heavily affects the pageviews, therefore we need to use regressors to identify the football season. # There are multiple ways to include this feature: adding indicator for the whole season; # adding number of days till season start (end) and number of days since season start (end). @@ -572,7 +572,7 @@ # Finally, let's consider what possible interactions are relevant to the forecast problem. # Generally speaking, if a feature behaves differently on different values of another feature, # these two features could have potential interaction effects. -# As in `Seasonality <../quickstart/0300_seasonality.html>`_, the weekly seasonality +# As in :doc:`/gallery/quickstart/01_exploration/0300_seasonality_plots`, the weekly seasonality # is different through football season and non-football season, therefore, the multiplicative # term ``is_football_season x weekly_seasonality`` is able to capture this pattern. @@ -732,7 +732,7 @@ # etc. # # For a more detailed guide on model summary, see -# :doc:`/gallery/quickstart/0400_model_summary`. +# :doc:`/gallery/quickstart/02_interpretability/0100_model_summary`. # %% # Summary in model tuning @@ -769,7 +769,7 @@ # Try to detect this through the overlay plot # (`~greykite.framework.input.univariate_time_series.UnivariateTimeSeries.plot_quantiles_and_overlays`), too. # By default, we have a few pre-defined interaction terms, see -# `feature_set_enabled <../../pages/model_components/0600_custom.html#interactions>`_. +# `feature_sets_enabled <../../pages/model_components/0600_custom.html#interactions>`_. # # #. Choose an appropriate fit algorithm. This is the algorithm that models the relationship between the features # and the time series. See a full list of available algorithms at @@ -780,7 +780,7 @@ # It is worth noting that the template supports automatic grid search with different sets of parameters. # For each parameter, if you provide the configuration in a list, it will automatically run each combination # and choose the one with the best cross-validation performance. This will save a lot of time. -# For details, see `grid search <../quickstart/0500_grid_search.html>`_. +# For details, see :doc:`/gallery/quickstart/03_benchmark/0100_grid_search`. # %% # Follow your insights and intuitions, and play with the parameters, you will get good forecasts! diff --git a/docs/nbpages/tutorials/0200_monthly_data.py b/docs/nbpages/tutorials/0200_monthly_data.py new file mode 100644 index 0000000..dbe5ed7 --- /dev/null +++ b/docs/nbpages/tutorials/0200_monthly_data.py @@ -0,0 +1,386 @@ +""" +Example for monthly data +============================== + +This is a basic example for monthly data using Silverkite. +Note that here we are fitting a few simple models and the goal is not to optimize +the results as much as possible. +""" + +import warnings +from collections import defaultdict + +import plotly +import pandas as pd + +from greykite.framework.benchmark.data_loader_ts import DataLoaderTS +from greykite.framework.templates.autogen.forecast_config import EvaluationPeriodParam +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.autogen.forecast_config import MetadataParam +from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam +from greykite.framework.templates.forecaster import Forecaster +from greykite.framework.templates.model_templates import ModelTemplateEnum +from greykite.framework.utils.result_summary import summarize_grid_search_results +from greykite.framework.input.univariate_time_series import UnivariateTimeSeries + +warnings.filterwarnings("ignore") + +# %% +# Loads dataset into ``UnivariateTimeSeries``. +dl = DataLoaderTS() +agg_func = {"count": "sum"} +df = dl.load_bikesharing(agg_freq="monthly", agg_func=agg_func) +# In this monthly data the last month data is incomplete, therefore we drop it +df.drop(df.tail(1).index,inplace=True) +df.reset_index(drop=True) +ts = UnivariateTimeSeries() +ts.load_data( + df=df, + time_col="ts", + value_col="count", + freq="MS") + +# %% +# Exploratory data analysis (EDA) +# -------------------------------- +# After reading in a time series, we could first do some exploratory data analysis. +# The `~greykite.framework.input.univariate_time_series.UnivariateTimeSeries` class is +# used to store a timeseries and perform EDA. + +# %% +# A quick description of the data can be obtained as follows. +print(ts.describe_time_col()) +print(ts.describe_value_col()) +print(df.head()) + +# %% +# Let's plot the original timeseries. +# (The interactive plot is generated by ``plotly``: **click to zoom!**) +fig = ts.plot() +plotly.io.show(fig) + +# %% +# Exploratory plots can be plotted to reveal the time series's properties. +# Monthly overlay plot can be used to inspect the annual patterns. +# This plot overlays various years on top of each other. +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="month", + show_mean=False, + show_quantiles=False, + show_overlays=True, + overlay_label_time_feature="year", + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + center_values=False, + xlabel="month of year", + ylabel=ts.original_value_col, + title="yearly seasonality for each year (centered)",) +plotly.io.show(fig) + +# %% +# Specify common metadata. +forecast_horizon = 4 +time_col = "ts" +value_col = "count" +meta_data_params = MetadataParam( + time_col=time_col, + value_col=value_col, + freq="MS", +) + +# %% +# Specify common evaluation parameters. +# Set minimum input data for training. +cv_min_train_periods = 24 +# Let CV use most recent splits for cross-validation. +cv_use_most_recent_splits = True +# Determine the maximum number of validations. +cv_max_splits = 5 +evaluation_period_param = EvaluationPeriodParam( + test_horizon=forecast_horizon, + cv_horizon=forecast_horizon, + periods_between_train_test=0, + cv_min_train_periods=cv_min_train_periods, + cv_expanding_window=True, + cv_use_most_recent_splits=cv_use_most_recent_splits, + cv_periods_between_splits=None, + cv_periods_between_train_test=0, + cv_max_splits=cv_max_splits, +) + +# %% +# Fit a simple model without autoregression. +# The important modeling parameters for monthly data are as follows. +# These are plugged into ``ModelComponentsParam``. +# The ``extra_pred_cols`` is used to specify growth and annual seasonality +# Growth is modelled with both "ct_sqrt", "ct1" for extra flexibility as we have +# longterm data and ridge regularization will avoid over-fitting the trend. +# The annual seasonality is modelled categorically with "C(month)" instead of +# Fourier series. This is because in monthly data, the number of data points in +# year is rather small (12) as opposed to daily data where there are many points in +# the year, which makes categorical representation non-feasible. +# The categorical representation of monthly also is more explainable/interpretable in the model +# summary. +extra_pred_cols = ["ct_sqrt", "ct1", "C(month, levels=list(range(1, 13)))"] +autoregression = None + +# Specify the model parameters +model_components = ModelComponentsParam( + growth=dict(growth_term=None), + seasonality=dict( + yearly_seasonality=[False], + quarterly_seasonality=[False], + monthly_seasonality=[False], + weekly_seasonality=[False], + daily_seasonality=[False] + ), + custom=dict( + fit_algorithm_dict=dict(fit_algorithm="ridge"), + extra_pred_cols=extra_pred_cols + ), + regressors=dict(regressor_cols=None), + autoregression=autoregression, + uncertainty=dict(uncertainty_dict=None), + events=dict(holiday_lookup_countries=None), +) + +# Run the forecast model +forecaster = Forecaster() +result = forecaster.run_forecast_config( + df=df, + config=ForecastConfig( + model_template=ModelTemplateEnum.SILVERKITE.name, + coverage=0.95, + forecast_horizon=forecast_horizon, + metadata_param=meta_data_params, + evaluation_period_param=evaluation_period_param, + model_components_param=model_components + ) +) + +# Get the useful fields from the forecast result +model = result.model[-1] +backtest = result.backtest +forecast = result.forecast +grid_search = result.grid_search + +# Check model coefficients / variables +# Get model summary with p-values +print(model.summary()) + +# Get cross-validation results +cv_results = summarize_grid_search_results( + grid_search=grid_search, + decimals=2, + cv_report_metrics=None, + column_order=[ + "rank", "mean_test", "split_test", "mean_train", "split_train", + "mean_fit_time", "mean_score_time", "params"]) +# Transposes to save space in the printed output +print(cv_results.transpose()) + +# Check historical evaluation metrics (on the historical training/test set). +backtest_eval = defaultdict(list) +for metric, value in backtest.train_evaluation.items(): + backtest_eval[metric].append(value) + backtest_eval[metric].append(backtest.test_evaluation[metric]) +metrics = pd.DataFrame(backtest_eval, index=["train", "test"]).T +print(metrics) + +# %% +# Fit/backtest plot: +fig = backtest.plot() +plotly.io.show(fig) + +# %% +# Forecast plot: +fig = forecast.plot() +plotly.io.show(fig) + +# %% +# The components plot: +fig = forecast.plot_components() +plotly.io.show(fig) + +# %% +# Fit a simple model with autoregression. +# This is done by specifying the ``autoregression`` parameter in ``ModelComponentsParam``. +# Note that the auto-regressive structure can be customized further depending on your data. +extra_pred_cols = ["ct_sqrt", "ct1", "C(month, levels=list(range(1, 13)))"] +autoregression = { + "autoreg_dict": { + "lag_dict": {"orders": [1]}, + "agg_lag_dict": None + } +} + +# Specify the model parameters +model_components = ModelComponentsParam( + growth=dict(growth_term=None), + seasonality=dict( + yearly_seasonality=[False], + quarterly_seasonality=[False], + monthly_seasonality=[False], + weekly_seasonality=[False], + daily_seasonality=[False] + ), + custom=dict( + fit_algorithm_dict=dict(fit_algorithm="ridge"), + extra_pred_cols=extra_pred_cols + ), + regressors=dict(regressor_cols=None), + autoregression=autoregression, + uncertainty=dict(uncertainty_dict=None), + events=dict(holiday_lookup_countries=None), +) + +# Run the forecast model +forecaster = Forecaster() +result = forecaster.run_forecast_config( + df=df, + config=ForecastConfig( + model_template=ModelTemplateEnum.SILVERKITE.name, + coverage=0.95, + forecast_horizon=forecast_horizon, + metadata_param=meta_data_params, + evaluation_period_param=evaluation_period_param, + model_components_param=model_components + ) +) + +# Get the useful fields from the forecast result +model = result.model[-1] +backtest = result.backtest +forecast = result.forecast +grid_search = result.grid_search + +# Check model coefficients / variables +# Get model summary with p-values +print(model.summary()) + +# Get cross-validation results +cv_results = summarize_grid_search_results( + grid_search=grid_search, + decimals=2, + cv_report_metrics=None, + column_order=[ + "rank", "mean_test", "split_test", "mean_train", "split_train", + "mean_fit_time", "mean_score_time", "params"]) +# Transposes to save space in the printed output +print(cv_results.transpose()) + +# Check historical evaluation metrics (on the historical training/test set). +backtest_eval = defaultdict(list) +for metric, value in backtest.train_evaluation.items(): + backtest_eval[metric].append(value) + backtest_eval[metric].append(backtest.test_evaluation[metric]) +metrics = pd.DataFrame(backtest_eval, index=["train", "test"]).T +print(metrics) + +# %% +# Fit/backtest plot: +fig = backtest.plot() +plotly.io.show(fig) + +# %% +# Forecast plot: +fig = forecast.plot() +plotly.io.show(fig) + +# %% +# The components plot: +fig = forecast.plot_components() +plotly.io.show(fig) + +# %% +# Fit a model with time-varying seasonality (month effect). +# This is achieved by adding ``"ct1*C(month)"`` to ``ModelComponentsParam``. +# Note that this feature may or may not be useful in your use case. +# We have included this for demonstration purposes only. +# In this example, while the fit has improved the backtest is inferior to the previous setting. +extra_pred_cols = ["ct_sqrt", "ct1", "C(month, levels=list(range(1, 13)))", + "ct1*C(month, levels=list(range(1, 13)))"] +autoregression = { + "autoreg_dict": { + "lag_dict": {"orders": [1]}, + "agg_lag_dict": None + } +} + +# Specify the model parameters +model_components = ModelComponentsParam( + growth=dict(growth_term=None), + seasonality=dict( + yearly_seasonality=[False], + quarterly_seasonality=[False], + monthly_seasonality=[False], + weekly_seasonality=[False], + daily_seasonality=[False] + ), + custom=dict( + fit_algorithm_dict=dict(fit_algorithm="ridge"), + extra_pred_cols=extra_pred_cols + ), + regressors=dict(regressor_cols=None), + autoregression=autoregression, + uncertainty=dict(uncertainty_dict=None), + events=dict(holiday_lookup_countries=None), +) + +# Run the forecast model +forecaster = Forecaster() +result = forecaster.run_forecast_config( + df=df, + config=ForecastConfig( + model_template=ModelTemplateEnum.SILVERKITE.name, + coverage=0.95, + forecast_horizon=forecast_horizon, + metadata_param=meta_data_params, + evaluation_period_param=evaluation_period_param, + model_components_param=model_components + ) +) + +# Get the useful fields from the forecast result +model = result.model[-1] +backtest = result.backtest +forecast = result.forecast +grid_search = result.grid_search + +# Check model coefficients / variables +# Get model summary with p-values +print(model.summary()) + +# Get cross-validation results +cv_results = summarize_grid_search_results( + grid_search=grid_search, + decimals=2, + cv_report_metrics=None, + column_order=[ + "rank", "mean_test", "split_test", "mean_train", "split_train", + "mean_fit_time", "mean_score_time", "params"]) +# Transposes to save space in the printed output +print(cv_results.transpose()) + +# Check historical evaluation metrics (on the historical training/test set). +backtest_eval = defaultdict(list) +for metric, value in backtest.train_evaluation.items(): + backtest_eval[metric].append(value) + backtest_eval[metric].append(backtest.test_evaluation[metric]) +metrics = pd.DataFrame(backtest_eval, index=["train", "test"]).T +print(metrics) + +# %% +# Fit/backtest plot: +fig = backtest.plot() +plotly.io.show(fig) + +# %% +# Forecast plot: +fig = forecast.plot() +plotly.io.show(fig) + +# %% +# The components plot: +fig = forecast.plot_components() +plotly.io.show(fig) + diff --git a/docs/nbpages/tutorials/0300_weekly_data.py b/docs/nbpages/tutorials/0300_weekly_data.py new file mode 100644 index 0000000..32f8fc9 --- /dev/null +++ b/docs/nbpages/tutorials/0300_weekly_data.py @@ -0,0 +1,426 @@ +""" +Example for weekly data +======================= + +This is a basic example for weekly data using Silverkite. +Note that here we are fitting a few simple models and the goal is not to optimize +the results as much as possible. +""" + +import warnings +from collections import defaultdict + +import plotly +import pandas as pd + +from greykite.common.constants import TIME_COL +from greykite.common.constants import VALUE_COL +from greykite.framework.benchmark.data_loader_ts import DataLoader +from greykite.framework.input.univariate_time_series import UnivariateTimeSeries +from greykite.framework.templates.autogen.forecast_config import EvaluationPeriodParam +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.autogen.forecast_config import MetadataParam +from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam +from greykite.framework.templates.forecaster import Forecaster +from greykite.framework.utils.result_summary import summarize_grid_search_results + +warnings.filterwarnings("ignore") + +# %% +# Loads weekly dataset into ``UnivariateTimeSeries``. +dl = DataLoader() +agg_func = {"count": "sum"} +df = dl.load_bikesharing(agg_freq="weekly", agg_func=agg_func) +# In this dataset the first week and last week's data are incomplete, therefore we drop it +df.drop(df.head(1).index,inplace=True) +df.drop(df.tail(1).index,inplace=True) +df.reset_index(drop=True) +ts = UnivariateTimeSeries() +ts.load_data( + df=df, + time_col="ts", + value_col="count", + freq="W-MON") +print(ts.df.head()) + +# %% +# Exploratory Data Analysis (EDA) +# ------------------------------- +# After reading in a time series, we could first do some exploratory data analysis. +# The `~greykite.framework.input.univariate_time_series.UnivariateTimeSeries` class is +# used to store a timeseries and perform EDA. + +# %% +# A quick description of the data can be obtained as follows. +print(ts.describe_time_col()) +print(ts.describe_value_col()) + +# %% +# Let's plot the original timeseries. +# (The interactive plot is generated by ``plotly``: **click to zoom!**) +fig = ts.plot() +plotly.io.show(fig) + +# %% +# Exploratory plots can be plotted to reveal the time series's properties. +# Monthly overlay plot can be used to inspect the annual patterns. +# This plot overlays various years on top of each other. +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="month", + show_mean=True, + show_quantiles=False, + show_overlays=True, + center_values=True, + overlay_label_time_feature="year", # splits overlays by year + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + xlabel="Month", + ylabel=ts.original_value_col, + title="Yearly seasonality by year (centered)", +) +plotly.io.show(fig) + +# %% +# Weekly overlay plot. +fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="woy", + show_mean=True, + show_quantiles=False, + show_overlays=True, + center_values=True, + overlay_label_time_feature="year", # splits overlays by year + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + xlabel="Week of year", + ylabel=ts.original_value_col, + title="Yearly seasonality by year (centered)", +) +plotly.io.show(fig) + +# %% +# Fit Greykite Models +# ------------------- +# After some exploratory data analysis, let's specify the model parameters and fit a Greykite model. + +# %% +# Specify common metadata. +forecast_horizon = 4 # Forecast 4 weeks +time_col = TIME_COL # "ts" +value_col = VALUE_COL # "y" +metadata = MetadataParam( + time_col=time_col, + value_col=value_col, + freq="W-MON", # Optional, the model will infer the data frequency +) + +# %% +# Specify common evaluation parameters. +# Set minimum input data for training. +cv_min_train_periods = 52 * 2 +# Let CV use most recent splits for cross-validation. +cv_use_most_recent_splits = True +# Determine the maximum number of validations. +cv_max_splits = 6 +evaluation_period = EvaluationPeriodParam( + test_horizon=forecast_horizon, + cv_horizon=forecast_horizon, + periods_between_train_test=0, + cv_min_train_periods=cv_min_train_periods, + cv_expanding_window=True, + cv_use_most_recent_splits=cv_use_most_recent_splits, + cv_periods_between_splits=None, + cv_periods_between_train_test=0, + cv_max_splits=cv_max_splits, +) + +# %% +# Let's also define a helper function that generates the model results summary and plots. +def get_model_results_summary(result): + """Generates model results summary. + + Parameters + ---------- + result : `ForecastResult` + See :class:`~greykite.framework.pipeline.pipeline.ForecastResult` for documentation. + + Returns + ------- + Prints out model coefficients, cross-validation results, overall train/test evalautions. + """ + # Get the useful fields from the forecast result + model = result.model[-1] + backtest = result.backtest + grid_search = result.grid_search + + # Check model coefficients / variables + # Get model summary with p-values + print(model.summary()) + + # Get cross-validation results + cv_results = summarize_grid_search_results( + grid_search=grid_search, + decimals=2, + cv_report_metrics=None, + column_order=[ + "rank", "mean_test", "split_test", "mean_train", "split_train", + "mean_fit_time", "mean_score_time", "params"]) + # Transposes to save space in the printed output + print("================================= CV Results ==================================") + print(cv_results.transpose()) + + # Check historical evaluation metrics (on the historical training/test set). + backtest_eval = defaultdict(list) + for metric, value in backtest.train_evaluation.items(): + backtest_eval[metric].append(value) + backtest_eval[metric].append(backtest.test_evaluation[metric]) + metrics = pd.DataFrame(backtest_eval, index=["train", "test"]).T + print("=========================== Train/Test Evaluation =============================") + print(metrics) + +# %% +# Fit a simple model without autoregression. +# The the most important model parameters are specified through ``ModelComponentsParam``. +# The ``extra_pred_cols`` is used to specify growth and annual seasonality +# Growth is modelled with both "ct_sqrt", "ct1" for extra flexibility as we have +# longterm data and ridge regularization will avoid over-fitting the trend. +# The yearly seasonality is modelled using Fourier series. In the ``ModelComponentsParam``, +# we can specify the order of that - the higher the order is, the more flexible pattern +# the model could capture. Usually one can try integers between 10 and 50. + +autoregression = None +extra_pred_cols = ["ct1", "ct_sqrt", "ct1:C(month, levels=list(range(1, 13)))"] + +# Specify the model parameters +model_components = ModelComponentsParam( + autoregression=autoregression, + seasonality={ + "yearly_seasonality": 25, + "quarterly_seasonality": 0, + "monthly_seasonality": 0, + "weekly_seasonality": 0, + "daily_seasonality": 0 + }, + changepoints={ + 'changepoints_dict': { + "method": "auto", + "resample_freq": "7D", + "regularization_strength": 0.5, + "potential_changepoint_distance": "14D", + "no_changepoint_distance_from_end": "60D", + "yearly_seasonality_order": 25, + "yearly_seasonality_change_freq": None, + }, + "seasonality_changepoints_dict": None + }, + events={ + "holiday_lookup_countries": [] + }, + growth={ + "growth_term": None + }, + custom={ + 'feature_sets_enabled': False, + 'fit_algorithm_dict': dict(fit_algorithm='ridge'), + 'extra_pred_cols': extra_pred_cols, + } +) + +forecast_config = ForecastConfig( + metadata_param=metadata, + forecast_horizon=forecast_horizon, + coverage=0.95, + evaluation_period_param=evaluation_period, + model_components_param=model_components +) + +# Run the forecast model +forecaster = Forecaster() +result = forecaster.run_forecast_config( + df=ts.df, + config=forecast_config +) + +# %% +# Let's check the model results summary and plots. +get_model_results_summary(result) + +# %% +# Fit/backtest plot: +fig = result.backtest.plot() +plotly.io.show(fig) + +# %% +# Forecast plot: +fig = result.forecast.plot() +plotly.io.show(fig) + +# %% +# The components plot: +fig = result.forecast.plot_components() +plotly.io.show(fig) + +# %% +# Fit a simple model with autoregression. +# This is done by specifying the ``autoregression`` parameter in ``ModelComponentsParam``. +# Note that the auto-regressive structure can be customized further depending on your data. +autoregression = { + "autoreg_dict": { + "lag_dict": {"orders": [1]}, # Only use lag-1 + "agg_lag_dict": None + } +} +extra_pred_cols = ["ct1", "ct_sqrt", "ct1:C(month, levels=list(range(1, 13)))"] + +# Specify the model parameters +model_components = ModelComponentsParam( + autoregression=autoregression, + seasonality={ + "yearly_seasonality": 25, + "quarterly_seasonality": 0, + "monthly_seasonality": 0, + "weekly_seasonality": 0, + "daily_seasonality": 0 + }, + changepoints={ + 'changepoints_dict': { + "method": "auto", + "resample_freq": "7D", + "regularization_strength": 0.5, + "potential_changepoint_distance": "14D", + "no_changepoint_distance_from_end": "60D", + "yearly_seasonality_order": 25, + "yearly_seasonality_change_freq": None, + }, + "seasonality_changepoints_dict": None + }, + events={ + "holiday_lookup_countries": [] + }, + growth={ + "growth_term": None + }, + custom={ + 'feature_sets_enabled': False, + 'fit_algorithm_dict': dict(fit_algorithm='ridge'), + 'extra_pred_cols': extra_pred_cols, + } +) + +forecast_config = ForecastConfig( + metadata_param=metadata, + forecast_horizon=forecast_horizon, + coverage=0.95, + evaluation_period_param=evaluation_period, + model_components_param=model_components +) + +# Run the forecast model +forecaster = Forecaster() +result = forecaster.run_forecast_config( + df=ts.df, + config=forecast_config +) + +# %% +# Let's check the model results summary and plots. +get_model_results_summary(result) + +# %% +# Fit/backtest plot: +fig = result.backtest.plot() +plotly.io.show(fig) + +# %% +# Forecast plot: +fig = result.forecast.plot() +plotly.io.show(fig) + +# %% +# The components plot: +fig = result.forecast.plot_components() +plotly.io.show(fig) + +# %% +# Fit a greykite model with autoregression and forecast one-by-one. Forecast one-by-one is only +# used when autoregression is set to "auto", and it can be enable by setting ``forecast_one_by_one=True`` +# in +# Without forecast one-by-one, the lag order in autoregression has to be greater +# than the forecast horizon in order to avoid simulation (which leads to less accuracy). +# The advantage of turning on forecast_one_by_one is to improve the forecast accuracy by breaking +# the forecast horizon to smaller steps, fitting multiple models using immediate lags. +# Note that the forecast one-by-one option may slow down the training. +autoregression = { + "autoreg_dict": "auto" +} +extra_pred_cols = ["ct1", "ct_sqrt", "ct1:C(month, levels=list(range(1, 13)))"] +forecast_one_by_one = True + +# Specify the model parameters +model_components = ModelComponentsParam( + autoregression=autoregression, + seasonality={ + "yearly_seasonality": 25, + "quarterly_seasonality": 0, + "monthly_seasonality": 0, + "weekly_seasonality": 0, + "daily_seasonality": 0 + }, + changepoints={ + 'changepoints_dict': { + "method": "auto", + "resample_freq": "7D", + "regularization_strength": 0.5, + "potential_changepoint_distance": "14D", + "no_changepoint_distance_from_end": "60D", + "yearly_seasonality_order": 25, + "yearly_seasonality_change_freq": None, + }, + "seasonality_changepoints_dict": None + }, + events={ + "holiday_lookup_countries": [] + }, + growth={ + "growth_term": None + }, + custom={ + 'feature_sets_enabled': False, + 'fit_algorithm_dict': dict(fit_algorithm='ridge'), + 'extra_pred_cols': extra_pred_cols, + } +) + +forecast_config = ForecastConfig( + metadata_param=metadata, + forecast_horizon=forecast_horizon, + coverage=0.95, + evaluation_period_param=evaluation_period, + model_components_param=model_components, + forecast_one_by_one=forecast_one_by_one +) + +# Run the forecast model +forecaster = Forecaster() +result = forecaster.run_forecast_config( + df=ts.df, + config=forecast_config +) + +# %% +# Let's check the model results summary and plots. Here the forecast_one_by_one option fits 4 models +# for each step, hence 4 model summaries are printed, and 4 components plots are generated. +get_model_results_summary(result) + +# %% +# Fit/backtest plot: +fig = result.backtest.plot() +plotly.io.show(fig) + +# %% +# Forecast plot: +fig = result.forecast.plot() +plotly.io.show(fig) + +# %% +# The components plot: +figs = result.forecast.plot_components() +for fig in figs: + plotly.io.show(fig) diff --git a/docs/nbpages/tutorials/README.rst b/docs/nbpages/tutorials/README.rst index 81d2b1d..003a816 100644 --- a/docs/nbpages/tutorials/README.rst +++ b/docs/nbpages/tutorials/README.rst @@ -1,4 +1,4 @@ Tutorials ========= -Here are some tutorials with end-to-end forecast examples. \ No newline at end of file +Here are some end-to-end forecast examples on daily, weekly, and monthly data. \ No newline at end of file diff --git a/docs/pages/autodoc/doc.rst b/docs/pages/autodoc/doc.rst index db62dfe..d5f48f4 100644 --- a/docs/pages/autodoc/doc.rst +++ b/docs/pages/autodoc/doc.rst @@ -32,6 +32,19 @@ Silverkite Template .. currentmodule:: greykite.framework.templates.silverkite_template .. autoclass:: SilverkiteTemplate +Lag Based Template +------------------ +.. autoclass:: greykite.framework.templates.lag_based_template.LagBasedTemplate + +.. autoclass:: greykite.sklearn.estimator.lag_based_estimator.LagBasedEstimator +.. autoclass:: greykite.sklearn.estimator.lag_based_estimator.LagUnitEnum + +Multistage Forecast Template +---------------------------- +.. currentmodule:: greykite.framework.templates.multistage_forecast_template +.. autoclass:: MultistageForecastTemplate + +.. autoclass:: greykite.sklearn.estimator.multistage_forecast_estimator.MultistageForecastEstimator Prophet Template ---------------- @@ -61,6 +74,7 @@ Template Output Constants --------- +.. autoclass:: greykite.common.aggregation_function_enum.AggregationFunctionEnum .. autoclass:: greykite.common.evaluation.EvaluationMetricEnum .. automodule:: greykite.common.constants .. automodule:: greykite.framework.constants @@ -72,6 +86,14 @@ Constants .. autoclass:: greykite.algo.forecast.silverkite.constants.silverkite_time_frequency.SilverkiteTimeFrequencyEnum .. automodule:: greykite.framework.templates.simple_silverkite_template_config +EasyConfig +---------- +.. currentmodule:: greykite.algo.common.seasonality_inferrer +.. autoclass:: SeasonalityInferrer +.. autoclass:: TrendAdjustMethodEnum +.. autoclass:: SeasonalityInferConfig + +.. autoclass:: greykite.algo.common.holiday_inferrer.HolidayInferrer Changepoint Detection --------------------- @@ -95,6 +117,10 @@ Transformers .. automodule:: greykite.sklearn.transform.null_transformer .. automodule:: greykite.sklearn.transform.drop_degenerate_transformer +Quantile Regression +------------------- +.. autoclass:: greykite.algo.common.l1_quantile_regression.QuantileRegression + Hierarchical Forecast --------------------- .. autoclass:: greykite.algo.reconcile.convex.reconcile_forecasts.ReconcileAdditiveForecasts diff --git a/docs/pages/benchmarking/benchmarking.rst b/docs/pages/benchmarking/benchmarking.rst index 1259265..707e467 100644 --- a/docs/pages/benchmarking/benchmarking.rst +++ b/docs/pages/benchmarking/benchmarking.rst @@ -26,7 +26,7 @@ The ``Benchmark`` class requires 3 inputs. In the sections we below provide guidance on how to design a proper cross-validation schema for your use case and discuss the structure of the benchmark output. -Check the :doc:`Benchmarking tutorial ` to learn +Check the :doc:`Benchmarking tutorial ` to learn the step-by-step process of defining and running a benchmark. @@ -36,7 +36,7 @@ Time-series forecast quality strongly depends on the evaluation time window. Thus it is more robust to evaluate over a longer time window when dataset size allows. You can easily define the evaluation time window by using :class:`~greykite.sklearn.cross_validation.RollingTimeSeriesSplit` class. -See how in the `Define the CV `_ +See how in the `Define the CV <../../gallery/quickstart/03_benchmark/0200_benchmark.html#define-the-cross-validation-cv>`_ section of the tutorial. We use a rolling window CV for our benchmarking, which closely resembles the well @@ -182,5 +182,5 @@ Here is a brief overview of the leaf nodes i.e. nodes without any link to the ne Forecast output of the corresponding split of the ``config``. Using the output you can quickly compute and visualize the prediction errors for multiple metrics. -For examples check the `Benchmark output <../../gallery/tutorials/0300_benchmark.html#benchmark-output>`_ +For examples check the `Benchmark output <../../gallery/quickstart/03_benchmark/0200_benchmark.html#benchmark-output>`_ section of the tutorial. diff --git a/docs/pages/changelog/changelog.rst b/docs/pages/changelog/changelog.rst index 2ebe240..374794b 100644 --- a/docs/pages/changelog/changelog.rst +++ b/docs/pages/changelog/changelog.rst @@ -1,33 +1,66 @@ Changelog ========= +0.4.0 (2022-07-15) +------------------ + +* New features and methods + * @Reza Hosseini: Forecast interpretability. Forecasts can now be broken down to grouped components: trend, seasonality, events, autoregression, regressors, intercept, etc. + * @Sayan Patra: Enhanced components plot. Now supports autoregression, lagged regressors, residuals; adds support for centering. + * @Kaixu Yang: Auto model components. (1) seasonality inferrer (2) holiday inferrer (3) automatic growth. + * @Kaixu Yang: Lag-based estimator. Supports lag-based forecasts such as week-over-week. + * @Reza Hosseini: Fast simulation option. Provides a better accuracy and speed for mean prediction when simulation is used in autoregression. + * @Kaixu Yang: Quantile regression option for Silverkite `fit_algorithm`. + +* New model templates + * @Kaixu Yang: AUTO. Automatically chooses templates based on the data frequency, forecast horizon and evaluation configs. + * @Reza Hosseini, @Kaixu Yang: SILVERKITE_MONTHLY - a SimpleSilverkite template designed for monthly time series. + * @Kaixu Yang: SILVERKITE_WOW. Uses Silverkite to model seasonality, growth and holiday effects, and then uses week-over-week to fit the residuals. The final prediction is the total of the two models. + +* New datasets + * 4 hourly datasets: Solar Power, Wind Power, Electricity, San Francisco Bay Area Traffic. + * 1 daily dataset: Bitcoin Transactions. + * 2 monthly datasets: Sunspot, FRED House Supply. + +* Library enhancements and bug fixes + * The SILVERKITE template has been updated to include automatic autoregression and changepoint detection. + * Renamed `SilverkiteMultistageEstimator` to `MultistageForecastEstimator`. + * Renamed the normalization method "min_max" to "zero_to_one". + * @Reza Hosseini: Added normalization methods: "minus_half_to_half", "zero_at_origin". + * @Albert Chen: Updated tutorials. + * @Yi Su: Upgraded fbprophet 0.5 to prophet 1.0. + * @Yi Su: Upgraded holidays to 0.13 + * @Albert Chen @Kaixu Yang @Yi Su: Speed optimization for Silverkite. + * @Albert Chen @Reza Hosseini @Kaixu Yang @Sayan Patra @Yi Su: Other library enhancements and bug fixes. + + 0.3.0 (2021-12-14) ------------------ * New tutorials - * @Reza Hosseini: Monthly time series forecast. - * @Yi Su: Weekly time series forecast. - * @Albert Chen: Forecast reconciliation. - * @Kaixu Yang: Forecast one-by-one method. + * @Reza Hosseini: Monthly time series forecast. + * @Yi Su: Weekly time series forecast. + * @Albert Chen: Forecast reconciliation. + * @Kaixu Yang: Forecast one-by-one method. * New methods - * @Yi Su: Lagged regressor (method was released in 0.2.0 but documentation was added in this release). - * @Kaixu Yang @Saad Eddin Al Orjany: Model storage (method was released in 0.2.0 but documentation was added in this release). - * @Kaixu Yang: Silverkite Multistage method for fast training on small granularity data (with tutorial). - * @Albert Chen: Forecast reconciliation with interface and defaults optimized. + * @Yi Su: Lagged regressor (method was released in 0.2.0 but documentation was added in this release). + * @Kaixu Yang @Saad Eddin Al Orjany: Model storage (method was released in 0.2.0 but documentation was added in this release). + * @Kaixu Yang: Silverkite Multistage method for fast training on small granularity data (with tutorial). + * @Albert Chen: Forecast reconciliation with interface and defaults optimized. * New model templates - * @Yi Su: `SILVERKITE_WITH_AR`: The `SILVERKITE` template with autoregression. - * @Yi Su: `SILVERKITE_DAILY_1`: A SimpleSilverkite template designed for daily data with forecast horizon 1. - * @Kaixu Yang: `SILVERKITE_TWO_STAGE`: A two stage model using the Silverkite Multistage method that is good for sub-daily data with a long history. - * @Kaixu Yang: `SILVERKITE_MULTISTAGE_EMPTY`: A base template for the Silverkite Multistage method. + * @Yi Su: `SILVERKITE_WITH_AR`: The `SILVERKITE` template with autoregression. + * @Yi Su: `SILVERKITE_DAILY_1`: A SimpleSilverkite template designed for daily data with forecast horizon 1. + * @Kaixu Yang: `SILVERKITE_TWO_STAGE`: A two stage model using the Silverkite Multistage method that is good for sub-daily data with a long history. + * @Kaixu Yang: `SILVERKITE_MULTISTAGE_EMPTY`: A base template for the Silverkite Multistage method. * Library enhancements and bug fixes - * @Yi Su: Updated plotly to v5. - * @Reza Hosseini: Use `explicit_pred_cols`, `drop_pred_cols` to directly specify or exclude model formula terms (see Custom Parameters). - * @Reza Hosseini: Use `simulation_num` to specify number of simulations to use for generating forecasts and prediction intervals. Applies only if any of the lags in `autoreg_dict` are smaller than forecast_horizon (see Auto-regression). - * @Reza Hosseini: Use `normalize_method` to normalize the design matrix (see Custom Parameters). - * @Yi Su: Allow no CV and no backtest in pipeline. - * @Albert Chen: Added synthetic hierarchical dataset. - * Bug fix: `cv_use_most_recent_splits` in EvaluationPeriodParam was previously ignored. - * @Albert Chen @Kaixu Yang @Reza Hosseini @Saad Eddin Al Orjany @Sayan Patra @Yi Su: Other library enhancements and bug fixes. + * @Yi Su: Updated plotly to v5. + * @Reza Hosseini: Use `explicit_pred_cols`, `drop_pred_cols` to directly specify or exclude model formula terms (see Custom Parameters). + * @Reza Hosseini: Use `simulation_num` to specify number of simulations to use for generating forecasts and prediction intervals. Applies only if any of the lags in `autoreg_dict` are smaller than forecast_horizon (see Auto-regression). + * @Reza Hosseini: Use `normalize_method` to normalize the design matrix (see Custom Parameters). + * @Yi Su: Allow no CV and no backtest in pipeline. + * @Albert Chen: Added synthetic hierarchical dataset. + * Bug fix: `cv_use_most_recent_splits` in EvaluationPeriodParam was previously ignored. + * @Albert Chen @Kaixu Yang @Reza Hosseini @Saad Eddin Al Orjany @Sayan Patra @Yi Su: Other library enhancements and bug fixes. 0.2.0 (2021-06-30) ------------------ @@ -40,4 +73,4 @@ Changelog 0.1.1 (2021-05-12) ------------------ -* First release on PyPI. \ No newline at end of file +* First release on PyPI. diff --git a/docs/pages/greykite/overview.rst b/docs/pages/greykite/overview.rst index 91f7cfc..e759a08 100644 --- a/docs/pages/greykite/overview.rst +++ b/docs/pages/greykite/overview.rst @@ -3,17 +3,21 @@ Overview The Greykite model ------------------ -Greykite is a forecast library that allows you to do exploratory data analysis (EDA), -forecast pipeline, model tuning, benchmarking, etc. It includes the Silverkite model, a forecast model -developed by Linkedin, which allows feature engineering, automatic changepoint detection, -holiday effects, various machine learning fitting methods, statitical prediction bands, etc. -The Silverkite model has many pre-tuned templates (i.e. parameter configs) to fit for different +Greykite is a forecast library developed by LinkedIn. +Its flagship algorithm, Silverkite, provides interpretable, fast, and highly flexible +univariate forecasts that capture effects such as time-varying growth and seasonality, +autocorrelation, holidays, and regressors. +The Silverkite model offers pre-tuned templates (i.e. parameter configs) appropriate for different forecast frequencies, horizons, and data patterns. -Besides Silverkite, it also includes an interface for the Prophet model developed by Facebook. +The library facilitates exploratory data analysis (EDA), +end-to-end forecasting, model tuning, and benchmarking. + +Greykite also includes an interface for the Prophet model +developed by Facebook (``prophet``) and Auto-ARIMA (``pmdarima``). -This document is for users of the Greykite python library. See :doc:`/gallery/quickstart/0100_simple_forecast` to get started. -For a more complete guide, see the rest of the tutorials in the quick start section. +Many other examples are provided in the quick start section. -Details about each model template are at :doc:`/pages/model_components/0100_introduction`. -You can follow those guide for advanced configuration. +A step-by-step guide into the forecasting process is +at :doc:`/pages/stepbystep/0000_stepbystep`. +You can follow that guide for advanced configuration. diff --git a/docs/pages/miscellaneous/reconcile_forecasts.rst b/docs/pages/miscellaneous/reconcile_forecasts.rst index 3e0ccd6..69fedfd 100644 --- a/docs/pages/miscellaneous/reconcile_forecasts.rst +++ b/docs/pages/miscellaneous/reconcile_forecasts.rst @@ -17,7 +17,7 @@ takes the latter approach. You can use any algorithm to generate the base foreca to reconcile them. This page explains the method details. For usage and examples, -see the `tutorial <../../gallery/tutorials/0600_reconcile_forecasts>`_. +see the tutorial (:doc:`/gallery/quickstart/04_postprocessing/0100_reconcile_forecasts`). Intuition --------- @@ -212,7 +212,7 @@ can still be used to fine tune the adjustment: * Setting :math:`W_{adj}` inversely proportional to the base forecast error for each time series puts greater penalty on adjustments to base forecasts that are already accurate. -See the `tutorial <../../gallery/tutorials/0600_reconcile_forecasts>`_ +See the tutorial (:doc:`/gallery/quickstart/04_postprocessing/0100_reconcile_forecasts`) for details and suggested settings. Related methods diff --git a/docs/pages/model_components/0100_introduction.rst b/docs/pages/model_components/0100_introduction.rst index 71f0ec6..ba7c331 100644 --- a/docs/pages/model_components/0100_introduction.rst +++ b/docs/pages/model_components/0100_introduction.rst @@ -13,8 +13,7 @@ Silverkite is a forecasting algorithm developed by LinkedIn. It works by generating basis functions for growth, seasonality, holidays, etc. These features, along with any regressors you provide, are used to fit the timeseries. -The features can be combined with interaction terms in a flexible and powerful way. A single model -is used for fitting. +The features can be combined with interaction terms in a flexible and powerful way. This approach has the following advantages. @@ -29,6 +28,12 @@ Prophet is a forecasting algorithm developed by Facebook. Details on `Prophet `_. +ARIMA +----- +ARIMA is a classic forecasting algorithm. We use the implementation from ``pmdarima``. + +Details on `ARIMA `_. + model_components ---------------- diff --git a/docs/pages/model_components/0300_seasonality.rst b/docs/pages/model_components/0300_seasonality.rst index df9f81e..61bbdde 100644 --- a/docs/pages/model_components/0300_seasonality.rst +++ b/docs/pages/model_components/0300_seasonality.rst @@ -28,6 +28,9 @@ Options (defaults shown for ``SILVERKITE`` template): `~greykite.algo.forecast.silverkite.forecast_simple_silverkite.forecast_simple_silverkite`. Refer to that function for more details. + auto_seasonality: `bool`, default False + If set to True, will trigger automatic seasonality inferring. + The keys below are ignored unless the value is False to force turn the seasonality off. yearly_seasonality: `str` or `bool` or `int` or a list of such values for grid search, default 'auto' Determines the yearly seasonality 'auto', True, False, or a number for the Fourier order @@ -46,6 +49,10 @@ Options (defaults shown for ``SILVERKITE`` template): For each seasonality, you can choose ``'auto', True, False, or a number for the Fourier order``. +Alternatively, you can choose to use automatic seasonality inferrer, which will infer +all seasonality orders for you. +Simply set ``auto_seasonality=True``, and the seasonality orders will be populated automatically. +For more details, see Seasonality Inferrer in :doc:`/gallery/quickstart/01_exploration/0200_auto_configuration_tools`. .. code-block:: none @@ -101,6 +108,12 @@ Examples: daily_seasonality=False, ) + # Auto seasonality + seasonality = dict( + auto_seasonality=True, # automatically infers all seasonality orders + yearly_seasonality=False, # forces turning yearly seasonality off despite the inferring result + ) + .. note:: diff --git a/docs/pages/model_components/0400_events.rst b/docs/pages/model_components/0400_events.rst index 10f7fa1..4d83741 100644 --- a/docs/pages/model_components/0400_events.rst +++ b/docs/pages/model_components/0400_events.rst @@ -12,7 +12,7 @@ The model assumes the event has similar effect each time it occurs. Holidays -------- -Silverkite provides a standard set of holidays by country (imported from ``pypi:holidays`` and ``pypi:fbprophet``). +Silverkite provides a standard set of holidays by country (imported from ``pypi:holidays-ext``). Each holiday is mapped to a list of calendar dates where it occurs. For modeling, you can choose to extend the holiday window to include days before and after the holiday. A separate effect is modeled for each @@ -213,24 +213,46 @@ To customize this, you will want to see the available holidays. get_available_holiday_lookup_countries() # Filter the full list to your countries of interest - get_available_holiday_lookup_countries(["UnitedStates", "NewZealand", "EuropeanCentralBank"]) + get_available_holiday_lookup_countries(["US", "IN", "EuropeanCentralBank"]) - # Full list for v3.0.0 + # Full list for `holidays-ext` 0.0.7, `holidays` 0.13 >>> get_available_holiday_lookup_countries() - ['AR', 'AT', 'AU', 'Argentina', 'Australia', 'Austria', 'BD', 'BE', 'BG', 'BR', - 'BY', 'Bangladesh', 'Belarus', 'Belgium', 'Brazil', 'Bulgaria', 'CA', 'CH', 'CN', - 'CO', 'CZ', 'Canada', 'China', 'Colombia', 'Croatia', 'Czech', 'Czechia', 'DE', - 'DK', 'Denmark', 'ECB', 'EG', 'ES', 'Egypt', 'England', 'EuropeanCentralBank', - 'FI', 'FRA', 'Finland', 'France', 'Germany', 'HND', 'HR', 'HU', 'Honduras', - 'Hungary', 'ID', 'IE', 'IN', 'IND', 'IT', 'India', 'Indonesia', 'Ireland', - 'IsleOfMan', 'Italy', 'JP', 'Japan', 'LT', 'LU', 'Lithuania', 'Luxembourg', - 'MX', 'MY', 'Malaysia', 'Mexico', 'NL', 'NO', 'NZ', 'Netherlands', 'NewZealand', - 'NorthernIreland', 'Norway', 'PH', 'PK', 'PL', 'PT', 'PTE', 'Pakistan', 'Philippines', - 'Polish', 'Portugal', 'PortugalExt', 'RU', 'Russia', 'SE', 'SI', 'SK', 'Scotland', - 'Slovak', 'Slovenia', 'SouthAfrica', 'Spain', 'Sweden', 'Switzerland', 'TAR', 'TH', - 'TU', 'Thailand', 'Turkey', 'UA', 'UK', 'US', 'Ukraine', 'UnitedKingdom', - 'UnitedStates', 'VN', 'Vietnam', 'Wales', 'ZA'] - + ['ABW', 'AE', 'AGO', 'AO', 'AR', 'ARE', 'ARG', 'AT', 'AU', 'AUS', + 'AUT', 'AW', 'AZ', 'AZE', 'Angola', 'Argentina', 'Aruba', 'Australia', + 'Austria', 'Azerbaijan', 'BD', 'BDI', 'BE', 'BEL', 'BG', 'BGD', 'BI', + 'BLG', 'BLR', 'BR', 'BRA', 'BW', 'BWA', 'BY', 'Bangladesh', 'Belarus', + 'Belgium', 'Botswana', 'Brazil', 'Bulgaria', 'Burundi', 'CA', 'CAN', + 'CH', 'CHE', 'CHL', 'CHN', 'CL', 'CN', 'CO', 'COL', 'CUW', 'CW', 'CZ', + 'CZE', 'Canada', 'Chile', 'China', 'Colombia', 'Croatia', 'Curacao', + 'Czechia', 'DE', 'DEU', 'DJ', 'DJI', 'DK', 'DNK', 'DO', 'DOM', + 'Denmark', 'Djibouti', 'DominicanRepublic', 'ECB', 'EE', 'EG', 'EGY', + 'ES', 'ESP', 'EST', 'ET', 'ETH', 'Egypt', 'England', 'Estonia', + 'Ethiopia', 'EuropeanCentralBank', 'FI', 'FIN', 'FR', 'FRA', 'Finland', + 'France', 'GB', 'GBR', 'GE', 'GEO', 'GR', 'GRC', 'Georgia', 'Germany', + 'Greece', 'HK', 'HKG', 'HN', 'HND', 'HR', 'HRV', 'HU', 'HUN', + 'HolidaySum', 'Honduras', 'HongKong', 'Hungary', 'ID', 'IE', 'IL', + 'IM', 'IN', 'IND', 'IRL', 'IS', 'ISL', 'ISR', 'IT', 'ITA', 'Iceland', + 'India', 'Indonesia', 'Ireland', 'IsleOfMan', 'Israel', 'Italy', 'JAM', + 'JM', 'JP', 'JPN', 'Jamaica', 'Japan', 'KAZ', 'KE', 'KEN', 'KOR', 'KR', + 'KZ', 'Kazakhstan', 'Kenya', 'Korea', 'LS', 'LSO', 'LT', 'LTU', 'LU', + 'LUX', 'LV', 'LVA', 'Latvia', 'Lesotho', 'Lithuania', 'Luxembourg', + 'MA', 'MEX', 'MK', 'MKD', 'MOR', 'MOZ', 'MW', 'MWI', 'MX', 'MY', 'MYS', + 'MZ', 'Malawi', 'Malaysia', 'Mexico', 'Morocco', 'Mozambique', 'NA', + 'NAM', 'NG', 'NGA', 'NI', 'NIC', 'NL', 'NLD', 'NO', 'NOR', 'NZ', 'NZL', + 'Namibia', 'Netherlands', 'NewZealand', 'Nicaragua', 'Nigeria', + 'NorthMacedonia', 'NorthernIreland', 'Norway', 'PE', 'PER', 'PH', 'PK', + 'PL', 'POL', 'PRT', 'PRTE', 'PRY', 'PT', 'PTE', 'PY', 'Pakistan', + 'Paraguay', 'Peru', 'Philippines', 'Poland', 'Portugal', 'PortugalExt', + 'RO', 'ROU', 'RS', 'RU', 'RUS', 'Romania', 'Russia', 'SA', 'SAU', 'SE', + 'SG', 'SGP', 'SI', 'SK', 'SRB', 'SVK', 'SVN', 'SWE', 'SZ', 'SZW', + 'SaudiArabia', 'Scotland', 'Serbia', 'Singapore', 'Slovakia', + 'Slovenia', 'SouthAfrica', 'Spain', 'Swaziland', 'Sweden', + 'Switzerland', 'TAR', 'TH', 'TN', 'TR', 'TUN', 'TUR', 'TW', 'TWN', + 'Taiwan', 'Thailand', 'Tunisia', 'Turkey', 'UA', 'UK', 'UKR', 'URY', + 'US', 'USA', 'UY', 'UZ', 'UZB', 'Ukraine', 'UnitedArabEmirates', + 'UnitedKingdom', 'UnitedStates', 'Uruguay', 'Uzbekistan', 'VE', 'VEN', + 'VN', 'VNM', 'Venezuela', 'Vietnam', 'Wales', 'ZA', 'ZAF', 'ZM', 'ZMB', + 'ZW', 'ZWE', 'Zambia', 'Zimbabwe'] * To check the available ``holidays_to_model_separately`` in those countries, run ``get_available_holidays_across_countries``: @@ -240,7 +262,7 @@ To customize this, you will want to see the available holidays. from greykite.common.features.timeseries_features import get_available_holidays_across_countries # Select your countries - holiday_lookup_countries = ["UnitedStates", "NewZealand", "EuropeanCentralBank"] + holiday_lookup_countries = ["US", "IN", "EuropeanCentralBank"] # List the holidays get_available_holidays_across_countries( countries=holiday_lookup_countries, @@ -253,6 +275,27 @@ To customize this, you will want to see the available holidays. sub-daily holiday effects. For more information, see :doc:`/pages/model_components/0600_custom`. +Auto holiday +~~~~~~~~~~~~ + +Silverkite models support automatically inferring significant holidays and generate holiday configurations. +It utilizes the `~greykite.algo.common.holiday_inferrer.HolidayInferrer` method to infer holidays. +For more details, see Holiday Inferrer in :doc:`/gallery/quickstart/01_exploration/0200_auto_configuration_tools`. + +It's easy to use auto holiday in model components. +In the event dictionary, specify ``auto_holiday = True``, +and the model will automatically pull significant holidays or neighboring days from ``holiday_lookup_countries`` +by checking their individual effects from the training data. +All other parameters will be ignored except ``daily_event_df_dict``, which will be +added to any inferred significant holiday and neighboring day events. + +.. code-block:: python + + events=dict( + auto_holiday=True, + holiday_lookup_countries=["US"] + ) + Prophet ^^^^^^^ @@ -264,7 +307,7 @@ Options: Holiday/events configuration dictionary with the following optional keys: holiday_lookup_countries: `list` [`str`] or "auto" or None, optional. - default ("auto") uses default list of countries with large contribution to Internet traffic. + default ("auto") uses a default list of countries with a good coverage of global holidays. If None or an empty list, no holidays are modeled. Must include all countries, for which you want to model holidays. Grid search is not supported. diff --git a/docs/pages/model_components/0500_changepoints.rst b/docs/pages/model_components/0500_changepoints.rst index 349f66f..f9a687c 100644 --- a/docs/pages/model_components/0500_changepoints.rst +++ b/docs/pages/model_components/0500_changepoints.rst @@ -13,7 +13,7 @@ Together, growth and changepoints define the overall trend. Seasonality changepoints allow you to specify changes in the seasonality shapes. A quickstart example for automatic trend changepoint detection in Silverkite can be -found at :doc:`/gallery/quickstart/0200_changepoint_detection` +found at :doc:`/gallery/quickstart/01_exploration/0100_changepoint_detection` By default, there are no changepoints. @@ -284,6 +284,27 @@ Other usage specify changes in seasonality (e.g increasing over time). +Auto growth +^^^^^^^^^^^ + +The Silverkite model supports automatically setting the growth configuration. +Although automatic changepoint detection is already set by ``method = "auto"``, +there are still parameters that need to be specified. +The "auto" growth will automatically configure the growth function and +the automatic changepoint detection parameters by checking the data and forecast configurations. + +To use the auto growth option, simply specify ``auto_growth = True`` in the ``changepoints`` dictionary. +The auto growth functionality will override the specified growth function and trend changepoint detection +parameters. However, you can specify custom changepoints parameters in ``changepoints_dict`` +(``dates``, ``combine_changepoint_min_distance`` and ``keep_detected``), +so that these custom changepoints will be added to any detected changepoints. + +.. code-block:: python + + changepoints=dict( + auto_growth=True + ) + .. _seasonality-changepoints: Seasonality changepoints diff --git a/docs/pages/model_components/0600_custom.rst b/docs/pages/model_components/0600_custom.rst index 3f83984..f9f017a 100644 --- a/docs/pages/model_components/0600_custom.rst +++ b/docs/pages/model_components/0600_custom.rst @@ -27,28 +27,36 @@ Parameters unique to the Silverkite algorithm are included under ``model_compone Fit algorithm ------------- -Silverkite abstracts feature creation from model fitting. First, Silverkite generates features -for forecasting, using time-series domain knowledge. Then, any standard algorithm can be applied +Silverkite abstracts feature generation from model fitting. First, Silverkite generates features +for forecasting using time-series domain knowledge. Then, any standard algorithm can be applied for fitting. -Silverkite supports the following algorithms from scikit-learn and statsmodels: +Silverkite supports many fit algorithms from ``scikit-learn`` and ``statsmodels``, as +well as our own fast quantile regression implementation. +Here are a few important ones: .. csv-table:: Silverkite fitting algorithms - :widths: 25 25 25 - :header: "fit_algorithm", "class", "notes" + :widths: 25 25 50 + :header: "fit_algorithm", "implementation", "notes" - "linear", `statsmodels.regression.linear_model.OLS`, "More stable than `sklearn.linear_model.LinearRegression`" - "elastic_net", `~sklearn.linear_model.ElasticNetCV`, "" - "ridge", `~sklearn.linear_model.RidgeCV`, "" + "ridge", `~sklearn.linear_model.RidgeCV`, "Default alpha = np.logspace(-5, 5, 30)" "lasso", `~sklearn.linear_model.LassoCV`, "" - "sgd", `~sklearn.linear_model.SGDRegressor` , "Default penalty = 'l2', alpha = 1e-4" - "lars", `~sklearn.linear_model.LarsCV`, "" - "lasso_lars", `~sklearn.linear_model.LassoLarsCV`, "" - "rf", `~sklearn.ensemble.RandomForestRegressor`, "Tree methods cannot capture growth" - "gradient_boosting", `~sklearn.ensemble.GradientBoostingRegressor` , "Supports quantile loss, tree methods cannot capture growth" + "elastic_net", `~sklearn.linear_model.ElasticNetCV`, "" + "linear", `~statsmodels.regression.linear_model.OLS`, "" + "quantile_regression", `~greykite.algo.common.l1_quantile_regression.QuantileRegression`, "Default quantile=0.5, alpha=0" + +.. note:: -You can select the algorithm via ``fit_algorithm`` and set its initialization parameters -via ``fit_algorithm_params``. + For mean forecasts, ``"ridge"`` or ``"linear"`` are recommended. + ``"ridge"`` is preferred when there are many features. + + For quantile prediction, ``"quantile_regression"`` is recommended. + + ``"sgd"`` is often unstable. Tree-based methods (``"rf"``, ``"gradient_boosting"``) + are generally not good at projecting growth into the future. + +Here is the full list of supported fit algorithms. You can select the algorithm via +``fit_algorithm`` and set its initialization parameters via ``fit_algorithm_params``. .. code-block:: none @@ -74,13 +82,14 @@ via ``fit_algorithm_params``. - "lasso_lars" : `sklearn.linear_model.LassoLarsCV` - "rf" : `sklearn.ensemble.RandomForestRegressor` - "gradient_boosting" : `sklearn.ensemble.GradientBoostingRegressor` + - "quantile_regression" : `greykite.algo.common.l1_quantile_regression.QuantileRegression` See `~greykite.algo.common.ml_models.fit_model_via_design_matrix` - for the sklearn and statsmodels classes that implement these methods, and their parameters. + for the sklearn and statsmodels classes that implement these methods, and their default parameters. "linear" is the same as "statsmodels_ols", because `statsmodels.regression.linear_model.OLS` is more stable than `sklearn.linear_model.LinearRegression`. - ``"fit_algorithm_params"`` : `dict` or None, default None (ridge penalty with alpha=1e-4) + ``"fit_algorithm_params"`` : `dict` or None, default None Parameters passed to the requested fit algorithm. If None, uses the defaults in `~greykite.algo.common.ml_models.fit_model_via_design_matrix`. @@ -98,35 +107,21 @@ Examples: fit_algorithm_dict=dict( fit_algorithm="ridge", fit_algorithm_params={ - "alphas": 20 + "alphas": np.logspace(-5, 5, 30) } ) ) custom = dict( fit_algorithm_dict=dict( - fit_algorithm="lasso_lars", + fit_algorithm="quantile_regression", fit_algorithm_params={ - "max_n_alphas": 100, - "eps": 1e-2, - "cv": 2 + "quantile": 0.5, + "alpha": 1, } ) ) - # Example using `sgd`. Note that `sgd` is often unstable. - # Consider using `ridge`, `lasso`, `elastic_net` instead. - custom = dict( - fit_algorithm_dict=dict( - fit_algorithm="sgd", - fit_algorithm_params=dict( - penalty="elasticnet", - alpha=0.01, - l1_ratio=0.2 - ) - ) - ) - # Grid search is possible custom = dict( fit_algorithm_dict=[ @@ -136,18 +131,12 @@ Examples: dict( fit_algorithm="ridge", fit_algorithm_params={ - "alphas": 20 + "alphas": np.logspace(-5, 5, 30) } ), ] ) -.. note:: - - "linear" is a good starting point. Sometimes the fit can be numerically unstable - if you request holidays that don't appear in your dataset. In that case, try - "ridge" or "sgd". - Interactions ------------ @@ -462,7 +451,7 @@ and regularization is used. normalize_method : `str` or None, default None The normalization method for the feature matrix. - Available values are "statistical" and "min_max". + Available values are "statistical", "zero_to_one" and "minus_half_to_half". Examples: @@ -472,9 +461,10 @@ Examples: normalize_method="statistical" ) custom = dict( - normalize_method="min_max" + normalize_method="zero_to_one" ) The ``statistical`` method removes the "mean" and divides by "std" for each column. -The ``min_max`` method removes the "min" and divides by the "max - min" +The ``zero_to_one`` method removes the "min" and divides by the "max - min" +The ````minus_half_to_half```` method removes the "(min + max)/2" and divides by the "max - min" for each column. For details, see `~greykite.common.features.normalize.normalize_df`. diff --git a/docs/pages/model_components/0700_regressors.rst b/docs/pages/model_components/0700_regressors.rst index f593b2d..5114556 100644 --- a/docs/pages/model_components/0700_regressors.rst +++ b/docs/pages/model_components/0700_regressors.rst @@ -14,7 +14,7 @@ on forecasted weather conditions. Silverkite ---------- -Examples: +Examples for SILVERKITE: .. code-block:: python @@ -36,6 +36,35 @@ Examples: ] ) +.. note:: + If you use the low-level model template SK, it expects a different way to specify regressors. + The low-level interface Silverkite does not expect the ``regressors.regressor_cols`` variable. + Instead, please add any regressor columns to ``custom.extra_pred_cols``. + +Examples for SK: + +.. code-block:: python + + # For input data with 3 regressors. + # Input data columns: ["time", "value", "gdp", "weather", "population"] + custom=dict( + extra_pred_cols=["gdp", "weather", "population"] + ) + + # No regressors (default) + custom=dict( + extra_pred_cols=None + ) + + # Grid search is possible + custom=dict( + extra_pred_cols=[ + ["gdp", "weather", "population"], + ["gdp", "weather"], + None + ] + ) + You can specify lagged regressors using ``model_components.lagged_regressors``. For each regressor column, provide the list of lags and aggregated lags to include, or use the "auto" setting to have Silverkite choose for you. diff --git a/docs/pages/stepbystep/0100_choose_model.rst b/docs/pages/stepbystep/0100_choose_model.rst index b71bb4e..00ac6a1 100644 --- a/docs/pages/stepbystep/0100_choose_model.rst +++ b/docs/pages/stepbystep/0100_choose_model.rst @@ -1,54 +1,64 @@ Choose a Model ============== -Greykite offers two forecasting models: -the Prophet model and the Silverkite model. -This page explains your options. +Greykite offers a few forecasting models: Silverkite, Prophet, and ARIMA. +This page provides an overview. .. csv-table:: high-level comparison - :widths: 20 35 35 - :header: "", "PROPHET", "SILVERKITE" + :widths: 16 28 28 28 + :header: "", "SILVERKITE", "PROPHET", "ARIMA" - "speed", "slower", "**faster**" - "forecast accuracy (default)", "good", "good" - "forecast accuracy (*customized*)", "limited", "**high**" - "prediction interval accuracy", "*TBD*", "*TBD*" - "interpretability", "good (additive model)", "good (additive model)" - "ease of use", "good", "good" - "API", "similar to ``sklearn``", "uses ``sklearn``" - "fit", "Bayesian", "ridge, elastic net, boosted trees, etc." + "speed", "**fast**", "slow", "**fast**" + "forecast accuracy (default)", "decent", "decent", "decent" + "forecast accuracy (*customized*)", "**very good**", "good", "good" + "interpretability", "**good**", "**good**", "decent" + "ease of use", "good", "good", "**very good**" + "API", "``sklearn``", "similar to ``sklearn``", "similar to ``sklearn``" -Both models have the similar customization options. Differences are **bolded** below. +Like Prophet, Silverkite includes intepretable terms for growth, +seasonality, holidays, trend changepoints, and regressors. +Silverkite also supports autoregression, seasonality changepoints, +easy-to-use interaction terms, quantile loss, and custom fit algorithms. +This makes Silverkite flexible to capture different time series patterns. -.. csv-table:: customization options - :header: "", "PROPHET", "SILVERKITE" - - "automatic defaults", "yes", "yes" - "growth", "linear, **logistic**", "linear, sqrt, quadratic, any combination, **custom**" - "seasonality", "daily, weekly, yearly, custom", "daily, weekly, monthly, quarterly, yearly" - "holidays", "specify countries, with window", "specify by name or country, with window; or custom events" - "trend changepoints", "yes", "yes" - "seasonality changepoints", "no", "**yes**" - "regressors", "yes", "yes" - "autoregression", "limited, via regressors", "full support, coming soon" - "interaction terms", "build it yourself (regressor)", "**model formula** terms, or as regressor" - "extras", "**prior scale** (bayesian)", "**fitting algorithm**" - "loss function", "MSE", "MSE, **Quantile loss** (with ``gradient_boosting`` fitting algorithm)" - "prediction intervals", "yes", "yes" +.. we use '|' before all entries in the table to make the font sizes consistent -.. note:: When to use the Prophet model? +.. csv-table:: customization options + :header: "", "SILVERKITE", "PROPHET" - * If it works better for your dataset - * If you like Bayesian models - * If you need logistic growth with changing capacity over time + "automatic defaults", "| yes", "| yes" + "growth", "| linear, sqrt, quadratic, + | any combination, **custom**", "| linear, **logistic**" + "seasonality", "| daily, weekly, monthly, + | quarterly, yearly", "| daily, weekly, yearly, custom" + "holidays", "| specify names or countries, + | with window; or custom events", "| specify countries, with window" + "regressors", "| yes", "| yes" + "trend changepoints", "| yes", "| yes" + "seasonality changepoints", "| **yes**", "| no" + "autoregression", "| **yes**", "| limited + | (via regressors)" + "interaction terms", "| **yes** + | (via model formula or regressors)", "| limited + | (via regressors)" + "loss function", "| MSE, **Quantile loss**", "| MSE" + "fit algorithm", "| **custom** + | (ridge, quantile regression, etc.)", "| fixed + | (Bayesian formulation)" .. note:: When to use the Silverkite model? - * If it works better for your dataset (e.g. b/c of custom growth, interaction - terms, seasonality changepoints). - * If speed is important. - * If you want to forecast a quantile, not the mean. + * If both speed and interpretability are important + * If you need flexible tuning options to achieve high accuracy + * If you need to forecast a quantile + +.. note:: When to use the Prophet model? + + * If you need logistic growth with changing capacity over time + * If speed is not as important -.. note:: +.. note:: When to use the ARIMA model? - We use Prophet 0.5 (`Prophet documentation `_.) + * If you want to try a classic algorithm that is different from the other two + * If you want to quickly establish an accuracy baseline to assess forecast difficulty + * If interpretability is not as important diff --git a/docs/pages/stepbystep/0200_choose_template.rst b/docs/pages/stepbystep/0200_choose_template.rst index 444c0cb..a30d42f 100644 --- a/docs/pages/stepbystep/0200_choose_template.rst +++ b/docs/pages/stepbystep/0200_choose_template.rst @@ -1,43 +1,71 @@ Choose a Model Template ======================= -Model templates provide default model parameters -and allow you to customize them in a more organized way. -Greykite offers various templates for the two forecasting -models: Silverkite and Prophet. +Greykite offers model templates for Silverkite, Prophet, ARIMA, +and lag-based forecasts (such as week-over-week). +Model templates provide default parameters for these algorithms. -.. note:: - - If possible, try all the templates with default parameters. Tune a few of the main parameters, - then focus on the one that looks most promising for your dataset. - - You can use the same forecaster - (:class:`~greykite.framework.templates.forecaster.Forecaster`) - to run different templates and compare the results. +You can use the same forecaster +(:class:`~greykite.framework.templates.forecaster.Forecaster`) +to run different algorithms and compare the results. - That said, there are some clear differences between templates, and this cheatsheet - can help you find the right one for your problem. +We recommend starting with the ``"AUTO"`` model template, which +automatically selects an appropriate Silverkite model based on +the timeseries, forecast horizon, and evaluation configs. -See valid ``model_template`` names in -`~greykite.framework.templates.model_templates.ModelTemplateEnum`. -The model templates can be classified into three categories: +See `~greykite.framework.templates.model_templates.ModelTemplateEnum` +for valid ``model_template`` names. +The model templates can be classified into a few categories: -* The ``SILVERKITE`` category of model templates provides a high-level interface to the - Silverkite model. This category of templates includes configurations that are +* The ``SILVERKITE`` category provides a high-level interface to the + Silverkite model. This category of model templates includes configurations that are tailored to various forecast horizons, data frequencies, and data characteristics. It is easy to customize these configurations to try different options. - The model template names are strings starting with ``"SILVERKITE"`` or instances of + The model template names are ``"AUTO"``, strings starting with ``"SILVERKITE"``, or instances of `~greykite.framework.templates.simple_silverkite_template_config.SimpleSilverkiteTemplateOptions`. The class that applies these templates is `~greykite.framework.templates.simple_silverkite_template.SimpleSilverkiteTemplate`. +* The ``"PROPHET"`` model template is used for the Prophet model. + The class that applies this template is + `~greykite.framework.templates.prophet_template.ProphetTemplate`. +* The ``"AUTO_ARIMA"`` model template is used for the ARIMA model. + The class that applies this template is + `~greykite.framework.templates.auto_arima_template.AutoArimaTemplate`. +* The ``"LAG_BASED"`` model template is used for the lag-based model. + This is useful for simple baselines like week-over-week. + The class that applies this template is + `~greykite.framework.templates.lag_based_template.LagBasedTemplate`. + See :doc:`/gallery/templates/0300_lag_forecast` for details. * The ``"SK"`` model template is a low-level interface to the Silverkite model. This model template allows you to change lower-level parameters in Silverkite and is intended for more advanced users. The class that applies this template is `~greykite.framework.templates.silverkite_template.SilverkiteTemplate`. -* The ``"PROPHET"`` model template is used for the Prophet model. - The class that applies this template is - `~greykite.framework.templates.prophet_template.ProphetTemplate`. -A detailed tutorial and listing of available model templates can be found at -:doc:`/gallery/tutorials/0200_templates`. \ No newline at end of file +Greykite also offers multistage templates to fit multiple models sequentially, +fitting each each to the remaining residuals. +The prediction is the sum of the models. +The class that applies this template is +`~greykite.framework.templates.multistage_forecast_template.MultistageForecastTemplate`. +See :doc:`/gallery/templates/0200_multistage_forecast` for details. + +* ``"SILVERKITE_TWO_STAGE"`` is designed to quickly fit a + more granular time series (for example, minute-level), + where a long history is needed to train a good model. +* ``"SILVERKITE_WOW"`` is an enhanced week-over-week estimator that uses Silverkite + to model seasonality, growth and holiday effects first, and then uses week over week + to estimate the residuals. +* ``"MULTISTAGE_EMPTY"`` is a blank multistage template that you can customize for + your own multistage model. + +A detailed tutorial of how to use and customize templates can be found at +:doc:`/gallery/templates/0100_template_overview`. + +.. note:: + + One approach is to try a few templates with default parameters. + After tuning a few of the main parameters, focus on the one that + looks most promising for your dataset. + + Silverkite and its extensions are flexible models that support additional + tuning of interpretable parameters. diff --git a/docs/pages/stepbystep/0300_input.rst b/docs/pages/stepbystep/0300_input.rst index 1d2297b..015d107 100644 --- a/docs/pages/stepbystep/0300_input.rst +++ b/docs/pages/stepbystep/0300_input.rst @@ -180,7 +180,7 @@ the time series is included in the result. result = forecaster.run_forecast_config( df=df, # input data config=ForecastConfig( - model_template=ModelTemplateEnum.SILVERKITE.name, + model_template=ModelTemplateEnum.AUTO.name, metadata_param=metadata, forecast_horizon=30, coverage=0.95 @@ -276,8 +276,8 @@ For example: # anomaly applies to. anomaly_df = pd.DataFrame({ # start and end date are inclusive - cst.START_DATE_COL: ["2018-07-15", "2018-07-13"], # inclusive - cst.END_DATE_COL: ["2018-07-15", "2018-07-14"], # inclusive + cst.START_TIME_COL: ["2018-07-15", "2018-07-13"], # inclusive + cst.END_TIME_COL: ["2018-07-15", "2018-07-14"], # inclusive cst.ADJUSTMENT_DELTA_COL: [-27, np.nan], cst.METRIC_COL: ["y", "regressor3"] }) @@ -345,7 +345,7 @@ For example, look at weekly averages. iplot(fig) For a more detailed examination, including automatic changepoint detection, -see :doc:`/gallery/quickstart/0200_changepoint_detection`. +see :doc:`/gallery/quickstart/01_exploration/0100_changepoint_detection`. Check seasonality ~~~~~~~~~~~~~~~~~ @@ -398,4 +398,4 @@ To see other features to group by: see :py:func:`~greykite.common.features.timeseries_features.build_time_features_df`. For a more detailed examination using a more powerful -plotting function, see :doc:`/gallery/quickstart/0300_seasonality`. +plotting function, see :doc:`/gallery/quickstart/01_exploration/0300_seasonality_plots`. diff --git a/docs/pages/stepbystep/0400_configuration.rst b/docs/pages/stepbystep/0400_configuration.rst index 380e65d..0f49aea 100644 --- a/docs/pages/stepbystep/0400_configuration.rst +++ b/docs/pages/stepbystep/0400_configuration.rst @@ -181,9 +181,9 @@ The attributes are: to forecast as well as any numeric regressors. ``"anomaly_df"`` : `pandas.DataFrame` Adjustments to correct the anomalies. - ``"start_date_col"``: `str`, default START_DATE_COL + ``"start_time_col"``: `str`, default START_TIME_COL Start date column in ``anomaly_df``. - ``"end_date_col"``: `str`, default END_DATE_COL + ``"end_time_col"``: `str`, default END_TIME_COL End date column in ``anomaly_df``. ``"adjustment_delta_col"``: `str` or None, default None Impact column in ``anomaly_df``. @@ -692,4 +692,4 @@ Optional. Whether to multiple models spanning the horizon and combine their pred This may improve forecast quality when forecast horizon > 1 and autoregression or lagged regressors are used. -See :doc:`/gallery/quickstart/0600_forecast_one_by_one`. +See :doc:`/gallery/templates/0400_forecast_one_by_one`. diff --git a/docs/pages/stepbystep/0500_output.rst b/docs/pages/stepbystep/0500_output.rst index fbea739..fd92276 100644 --- a/docs/pages/stepbystep/0500_output.rst +++ b/docs/pages/stepbystep/0500_output.rst @@ -238,7 +238,7 @@ Model ``model`` is a `sklearn.pipeline.Pipeline` object. It was fit to the full dataset, with the best parameters selected via CV. This model was used to generate ``forecast``. You can use it to extract -fitted model information (:doc:`/gallery/quickstart/0400_model_summary`) +fitted model information (:doc:`/gallery/quickstart/02_interpretability/0100_model_summary`) or make another forecast (:doc:`/gallery/quickstart/0100_simple_forecast`). .. code-block:: python diff --git a/greykite/algo/changepoint/adalasso/auto_changepoint_params.py b/greykite/algo/changepoint/adalasso/auto_changepoint_params.py new file mode 100644 index 0000000..495a2bb --- /dev/null +++ b/greykite/algo/changepoint/adalasso/auto_changepoint_params.py @@ -0,0 +1,369 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Kaixu Yang +"""Automatically populates changepoint detection parameters from input data.""" + +from datetime import timedelta +from typing import Optional + +import numpy as np +import pandas as pd +from pandas.tseries.frequencies import to_offset + +from greykite.algo.common.seasonality_inferrer import SeasonalityInferConfig +from greykite.algo.common.seasonality_inferrer import SeasonalityInferrer +from greykite.algo.common.seasonality_inferrer import TrendAdjustMethodEnum +from greykite.common.constants import TIME_COL +from greykite.common.constants import VALUE_COL + + +def get_changepoint_resample_freq( + n_points: int, + min_increment: timedelta, + min_num_points_after_agg: int = 100) -> Optional[str]: + """Gets the changepoint detection resample frequency parameter. + + Parameters + ---------- + n_points : `int` + The number of data points in the time series. + min_increment : `datetime.timedelta` + The minimum increment between time series points. + min_num_points_after_agg : `int`, default 100 + The minimum number of observations required after aggregation. + + Returns + ------- + resample_freq : `str` or None + The resample frequency. + Will be one of "D", "3D" and "7D". + If None, resample will be skipped. + """ + # When ``min_increment`` is at least 7 days, + # the data is considered at least weekly data. + # In this case, we don't do aggregation. + if min_increment >= timedelta(days=7): + # Returning None for this case. + return None + + # From now on the data is sub-weekly. + # The candidates of ``resample_freq`` are "7D", "3D" and "D". + # We use the longest aggregation frequency that has at least + # ``min_num_points_after_agg`` points after aggregation. + # Currently, we do not support sub-daily aggregation frequency, + # because it is not a common case. + # We also do not recommend based on detection result for speed purpose. + data_length = n_points * min_increment + if data_length >= timedelta(days=7 * min_num_points_after_agg): + resample_freq = "7D" + elif data_length >= timedelta(days=3 * min_num_points_after_agg): + resample_freq = "3D" + else: + resample_freq = "D" + + return resample_freq + + +def get_yearly_seasonality_order( + df: pd.DataFrame, + time_col: str, + value_col: str, + resample_freq: str) -> int: + """Infers the yearly seasonality order for changepoint detection. + + Parameters + ---------- + df : `pandas.DataFrame` + The input timeseris. + time_col : `str` + The column name for timestamps in ``df``. + value_col : `str` + The column name for values in ``df``. + resample_freq : `str` + The aggregation frequency string in changepoint detection configuration. + + Returns + ------- + yearly_seasonality_order : `int` + The inferred yearly seasonality with the best BIC score. + """ + model = SeasonalityInferrer() + result = model.infer_fourier_series_order( + df=df, + time_col=time_col, + value_col=value_col, + configs=[ + SeasonalityInferConfig( + seas_name="yearly", + col_name="toy", + period=1.0, + max_order=30, + adjust_trend_method=TrendAdjustMethodEnum.seasonal_average.name, + adjust_trend_param=dict(trend_average_col="year"), + fit_algorithm="ridge", + offset=0, + tolerance=0.0, + aggregation_period=resample_freq, + criterion="bic", + plotting=False + ) + ] + ) + return result["best_orders"]["yearly"] + + +def get_potential_changepoint_n( + n_points: int, + total_increment: timedelta, + resample_freq: str, + yearly_seasonality_order: int, + cap: int = 100) -> int: + """Gets the number of potential changepoints for changepoint detection. + + Parameters + ---------- + n_points : `int` + The number of data points in the time series. + total_increment : `datetime.timedelta` + The total time span of the input time series. + resample_freq : `str` + The resample frequency used in changepoint detection. + yearly_seasonality_order : `int` + The yearly seasonality order used in changepoint detection. + cap : `int`, default 100 + The maximum number of potential changepoints. + + Returns + ------- + potential_changepoint_n : `int` + The number of potential changepoints used in changepoint detection. + """ + try: + # The ``resample_freq`` is one of "D", "3D" and "7D". + n_points_after_agg = np.floor(total_increment / to_offset(resample_freq).delta) + except AttributeError: + # The ``resample_freq`` is None or other freq that is at least "W". + n_points_after_agg = n_points + # Sets number of potential changepoints to be at most + # aggregated data length - # seasonality features - 1 (intercept term) for estimability. + # Here we ignore dropping potential changepoints from the end. + # If we use the function above to infer aggregation frequency, + # there will be enough potential changepoints. + n_changepoints = max(0, n_points_after_agg - 2 * yearly_seasonality_order - 1) + # Caps the number of potential changepoints for speed purpose. + n_changepoints = min(n_changepoints, cap) + return n_changepoints + + +def get_no_changepoint_distance_from_end( + min_increment: timedelta, + forecast_horizon: int, + min_num_points_after_last_changepoint: int = 1) -> str: + """Gets the distance from end of time series where no changepoints will be placed. + + Parameters + ---------- + min_increment : `datetime.timedelta` + The minimum increment between time series points. + forecast_horizon : `int` + The forecast horizon. + min_num_points_after_last_changepoint : `int`, default 1 + The minimum number of data points after the last potential changepoint. + + Returns + ------- + no_changepoint_distance_from_end : `str` + A string indicating the period from the end of the time series where no + potential changepoints will be placed. + """ + min_increment_in_days = min_increment.days + min_forecast_horizon_in_days = (min_increment * forecast_horizon).days + if min_forecast_horizon_in_days < 1: + min_forecast_horizon_in_days = 1 + # Minimum distance must be at least ``min_num_points_after_last_changepoint``. + min_distance_days = min_increment_in_days * min_num_points_after_last_changepoint + # We add extra constraints according to the data frequency, + # and some special constraints for the commonly seen data frequencies. + if min_increment_in_days >= 365: + # At least yearly data, distance is at least 2 * forecast horizon. + min_distance_days = max(min_distance_days, min_forecast_horizon_in_days * 2) + if min_increment_in_days == 365: + # Exactly yearly data, between 3 years and 20 years. + min_distance_days = max(min_distance_days, 3 * 365) + min_distance_days = min(min_distance_days, 20 * 366) + elif min_increment_in_days >= 28: + # Between monthly and yearly data, distance is between 3 * forecast horizon and 6 years. + min_distance_days = max(min_distance_days, min_forecast_horizon_in_days * 3) + min_distance_days = min(min_distance_days, 6 * 366) + if min_increment_in_days == 90: + # Exactly quarterly data, at least 4 quarters. + min_distance_days = max(min_distance_days, 4 * 90) + elif min_increment_in_days == 28: + # Exactly monthly data, at least 3 months. + min_distance_days = max(min_distance_days, 3 * 28) + else: + # Sub-monthly data, distance is at least 4 * forecast horizon. + min_distance_days = max(min_distance_days, min_forecast_horizon_in_days * 4) + if min_increment_in_days == 7: + # Weekly data, between 8 weeks and 104 weeks (2 years). + min_distance_days = max(min_distance_days, 8 * 7) + min_distance_days = min(min_distance_days, 104 * 7) + elif min_increment_in_days == 1: + # Daily data, between 30 days and 1 year. + min_distance_days = max(min_distance_days, 30) + min_distance_days = min(min_distance_days, 365) + elif min_increment_in_days < 1: + # Sub-daily data, between 14 days and 1 year. + min_distance_days = max(min_distance_days, 14) + min_distance_days = min(min_distance_days, 365) + + no_changepoint_distance_from_end = f"{min_distance_days}D" + return no_changepoint_distance_from_end + + +def get_actual_changepoint_min_distance( + min_increment: timedelta) -> str: + """Gets the minimum distance between detected changepoints. + + Parameters + ---------- + min_increment : `datetime.timedelta` + The minimum increment between time series points. + + Returns + ------- + actual_changepoint_min_distance : `str` + The minimum distance between detected changepoints. + """ + min_distance = min_increment.days * 2 # At most every two data points. + if min_increment < timedelta(days=1): + min_distance = max(min_distance, 14) # At least 14 days for sub-daily data. + elif min_increment <= timedelta(days=7): + min_distance = max(min_distance, 30) # At least 30 days for daily to weekly data. + + actual_changepoint_min_distance = f"{min_distance}D" + return actual_changepoint_min_distance + + +def get_regularization_strength() -> float: + """Gets the regularization strength. + + The regularization strength typically won't affect the result too much, + if set in a reasonable range (0.4-0.7). + Here we explicitly set it to 0.6, + which works well in most cases. + Setting it to None will trigger cross-validation, + but has risk to select too many changepoints. + """ + return 0.6 + + +def generate_trend_changepoint_detection_params( + df: pd.DataFrame, + forecast_horizon: int, + time_col: str = TIME_COL, + value_col: str = VALUE_COL, + yearly_seasonality_order: Optional[int] = None) -> Optional[dict]: + """Automatically generates trend changepoint detection parameters + based on the input data and forecast horizon. + + Parameters + ---------- + df : `pandas.DataFrame` + The input time series. + forecast_horizon : `int` + The forecast horizon. + time_col : `str`, default TIME_COL + The column name for timestamps in ``df``. + value_col : `str`, default VALUE_COL` + The column name for time series values in ``df``. + yearly_seasonality_order : `int` or None, default None + The yearly seasonality Fourier order. + If a known good order is given, it will be used. + Otherwise, it will be inferred from the algorithm. + + Returns + ------- + params : `dict` [`str`, any] + The generated trend changepoint detection parameters. + """ + df = df.copy() + df[time_col] = pd.to_datetime(df[time_col]) + total_increment = df[time_col].max() - df[time_col].min() + + # Auto changepoints is not active if training data is too short. + # In such cases, autoregression should be used. + if total_increment < timedelta(days=90): + return None + + n_points = len(df) + min_increment = min((df[time_col] - df[time_col].shift(1)).dropna()) + + # Infers ``resample_freq``. + resample_freq = get_changepoint_resample_freq( + n_points=n_points, + min_increment=min_increment + ) + + # Infers ``yearly_seasonality_order``. + if yearly_seasonality_order is None: + yearly_seasonality_order = get_yearly_seasonality_order( + df=df, + time_col=time_col, + value_col=value_col, + resample_freq=resample_freq + ) + elif yearly_seasonality_order < 0: + raise ValueError(f"Yearly seasonality order must be a non-negative integer, " + f"found {yearly_seasonality_order}.") + + # Infers ``potential_changepoint_n``. + potential_changepoint_n = get_potential_changepoint_n( + n_points=n_points, + total_increment=total_increment, + resample_freq=resample_freq, + yearly_seasonality_order=yearly_seasonality_order, + cap=100 + ) + + # Infers ``no_changepoint_distance_from_end``. + no_changepoint_distance_from_end = get_no_changepoint_distance_from_end( + min_increment=min_increment, + forecast_horizon=forecast_horizon, + min_num_points_after_last_changepoint=4 + ) + + # Infers ``actual_changepoint_min_distance``. + actual_changepoint_min_distance = get_actual_changepoint_min_distance( + min_increment=min_increment + ) + + # Infers ``regularization_strength``. + regularization_strength = get_regularization_strength() + + return dict( + yearly_seasonality_order=yearly_seasonality_order, + resample_freq=resample_freq, + regularization_strength=regularization_strength, + actual_changepoint_min_distance=actual_changepoint_min_distance, + potential_changepoint_n=potential_changepoint_n, + no_changepoint_distance_from_end=no_changepoint_distance_from_end + ) diff --git a/greykite/algo/changepoint/adalasso/changepoint_detector.py b/greykite/algo/changepoint/adalasso/changepoint_detector.py index 073c439..231ea5c 100644 --- a/greykite/algo/changepoint/adalasso/changepoint_detector.py +++ b/greykite/algo/changepoint/adalasso/changepoint_detector.py @@ -48,6 +48,7 @@ from greykite.algo.changepoint.adalasso.changepoints_utils import get_trend_changes_from_adaptive_lasso from greykite.algo.changepoint.adalasso.changepoints_utils import get_yearly_seasonality_changepoint_dates_from_freq from greykite.algo.changepoint.adalasso.changepoints_utils import plot_change +from greykite.common.constants import TimeFeaturesEnum from greykite.common.features.timeseries_features import get_evenly_spaced_changepoints_dates from greykite.common.logging import LoggingLevelEnum from greykite.common.logging import log_message @@ -148,10 +149,12 @@ def find_trend_changepoints( actual_changepoint_min_distance="30D", potential_changepoint_distance=None, potential_changepoint_n=100, + potential_changepoint_n_max=None, no_changepoint_distance_from_begin=None, no_changepoint_proportion_from_begin=0.0, no_changepoint_distance_from_end=None, - no_changepoint_proportion_from_end=0.0): + no_changepoint_proportion_from_end=0.0, + fast_trend_estimation=True): """Finds trend change points automatically by adaptive lasso. The algorithm does an aggregation with a user-defined frequency, defaults daily. @@ -203,9 +206,10 @@ def find_trend_changepoints( Note that if you use `str` as input, the maximal supported unit is day, i.e., you might use "200D" but not "12M" or "1Y". - resample_freq : `DateOffset`, `Timedelta` or `str`, default "D". + resample_freq : `DateOffset`, `Timedelta`, `str` or None, default "D". The frequency to aggregate data. Coarser aggregation leads to fitting longer term trends. + If None, no aggregation will be done. trend_estimator : `str` in ["ridge", "lasso" or "ols"], default "ridge". The estimator to estimate trend. The estimated trend is only for plotting purposes. 'ols' is not recommended when ``yearly_seasonality_order`` is specified other than 0, @@ -234,6 +238,12 @@ def find_trend_changepoints( potential_changepoint_n : `int`, default 100 Number of change points to be evenly distributed, recommended 1-2 per month, based on the training data length. + potential_changepoint_n_max : `int` or None, default None + The maximum number of potential changepoints. + This parameter is effective when user specifies ``potential_changepoint_distance``, + and the number of potential changepoints in the training data is more than ``potential_changepoint_n_max``, + then it is equivalent to specifying ``potential_changepoint_n = potential_changepoint_n_max``, + and ignoring ``potential_changepoint_distance``. no_changepoint_distance_from_begin : `DateOffset`, `Timedelta`, `str` or None, default None The length of time from the beginning of training data, within which no change point will be placed. If provided, will override the parameter ``no_changepoint_proportion_from_begin``. @@ -254,6 +264,10 @@ def find_trend_changepoints( ``potential_changepoint_n`` change points will be placed evenly over the whole training period, however, change points that are located within the last ``no_changepoint_proportion_from_end`` proportion of training period will not be used for change point detection. + fast_trend_estimation : `bool`, default True + If True, the trend estimation is not refitted on the original data, + but is a linear interpolation of the fitted trend from the resampled time series. + If False, the trend estimation is refitted on the original data. Return ------ @@ -314,20 +328,36 @@ def find_trend_changepoints( check_freq_unit_at_most_day(potential_changepoint_distance, "potential_changepoint_distance") data_length = pd.to_datetime(df[time_col].iloc[-1]) - pd.to_datetime(df[time_col].iloc[0]) potential_changepoint_n = data_length // to_offset(potential_changepoint_distance).delta + if potential_changepoint_n_max is not None: + if potential_changepoint_n_max <= 0: + raise ValueError("potential_changepoint_n_max must be a positive integer.") + if potential_changepoint_n > potential_changepoint_n_max: + log_message( + message=f"Number of potential changepoints is capped by 'potential_changepoint_n_max' " + f"as {potential_changepoint_n_max}. The 'potential_changepoint_distance' " + f"{potential_changepoint_distance} is ignored. " + f"The original number of changepoints was {potential_changepoint_n}.", + level=LoggingLevelEnum.INFO + ) + potential_changepoint_n = potential_changepoint_n_max if regularization_strength is not None and (regularization_strength < 0 or regularization_strength > 1): raise ValueError("regularization_strength must be between 0.0 and 1.0.") + df = df.copy() self.trend_potential_changepoint_n = potential_changepoint_n self.time_col = time_col self.value_col = value_col - self.original_df = df.copy() + self.original_df = df # Resamples df to get a coarser granularity to get rid of shorter seasonality. # The try except below speeds up unnecessary datetime transformation. - try: - df_resample = df.resample(resample_freq, on=time_col).mean().reset_index() - except TypeError: - df = df.copy() + if resample_freq is not None: + try: + df_resample = df.resample(resample_freq, on=time_col).mean().reset_index() + except TypeError: + df[time_col] = pd.to_datetime(df[time_col]) + df_resample = df.resample(resample_freq, on=time_col).mean().reset_index() + else: df[time_col] = pd.to_datetime(df[time_col]) - df_resample = df.resample(resample_freq, on=time_col).mean().reset_index() + df_resample = df.copy() # The ``df.resample`` function creates NA when the original df has a missing observation # or its value is NA. # The estimation algorithm does not allow NA, so we drop those rows. @@ -372,7 +402,7 @@ def find_trend_changepoints( method="custom", dates=yearly_seasonality_changepoint_dates), fs_components_df=pd.DataFrame({ - "name": ["conti_year"], + "name": [TimeFeaturesEnum.conti_year.value], "period": [1.0], "order": [yearly_seasonality_order], "seas_names": ["yearly"]}) @@ -460,12 +490,34 @@ def find_trend_changepoints( "dates": trend_changepoints } # Computes trend estimates for seasonality use. - trend_estimation = estimate_trend_with_detected_changepoints( - df=df, - time_col=time_col, - value_col=value_col, - changepoints=trend_changepoints - ) + if fast_trend_estimation: + # Fast calculation of trend estimation. + # Do not fit trend again on the original df. + # This is much faster when the original df has small frequencies. + # Uses linear interpolation on the trend fitted with the resampled df. + trend_estimation = np.matmul( + trend_df.values[:, :(len(trend_changepoints) + 1)], + trend_model.coef_[:(len(trend_changepoints) + 1)] + ) + trend_model.intercept_ + trend_estimation = pd.DataFrame({ + time_col: df_resample[time_col], + "trend": trend_estimation + }) + trend_estimation = trend_estimation.merge( + df[[time_col]], + on=time_col, + how="right" + ) + trend_estimation["trend"].interpolate(inplace=True) + trend_estimation.index = df[time_col] + trend_estimation = trend_estimation["trend"] + else: + trend_estimation = estimate_trend_with_detected_changepoints( + df=df, + time_col=time_col, + value_col=value_col, + changepoints=trend_changepoints + ) self.trend_estimation = trend_estimation result = { "trend_feature_df": trend_df, @@ -482,7 +534,10 @@ def find_seasonality_changepoints( time_col, value_col, seasonality_components_df=pd.DataFrame({ - "name": ["tod", "tow", "conti_year"], + "name": [ + TimeFeaturesEnum.tod.value, + TimeFeaturesEnum.tow.value, + TimeFeaturesEnum.conti_year.value], "period": [24.0, 7.0, 1.0], "order": [3, 3, 5], "seas_names": ["daily", "weekly", "yearly"]}), @@ -1024,6 +1079,7 @@ def get_changepoints_dict(df, time_col, value_col, changepoints_dict): "actual_changepoint_min_distance", "potential_changepoint_distance", "potential_changepoint_n", + "potential_changepoint_n_max", "no_changepoint_distance_from_begin", "no_changepoint_proportion_from_end", "no_changepoint_distance_from_end", diff --git a/greykite/algo/changepoint/adalasso/changepoints_utils.py b/greykite/algo/changepoint/adalasso/changepoints_utils.py index 4e8d41b..e984894 100644 --- a/greykite/algo/changepoint/adalasso/changepoints_utils.py +++ b/greykite/algo/changepoint/adalasso/changepoints_utils.py @@ -35,6 +35,7 @@ from sklearn.linear_model import RidgeCV from greykite.common.constants import CHANGEPOINT_COL_PREFIX +from greykite.common.constants import TimeFeaturesEnum from greykite.common.features.timeseries_features import add_time_features_df from greykite.common.features.timeseries_features import build_time_features_df from greykite.common.features.timeseries_features import fourier_series_multi_fcn @@ -142,7 +143,7 @@ def build_trend_feature_df_with_changes( changepoint_features_df = get_changepoint_features( features_df, changepoint_values, - continuous_time_col="ct1", + continuous_time_col=TimeFeaturesEnum.ct1.value, growth_func=growth_func, changepoint_dates=changepoint_dates) changepoint_features_df.index = pd.to_datetime(df[time_col]) @@ -155,7 +156,10 @@ def build_seasonality_feature_df_with_changes( origin_for_time_vars=None, changepoints_dict=None, fs_components_df=pd.DataFrame({ - "name": ["tod", "tow", "toy"], + "name": [ + TimeFeaturesEnum.tod.value, + TimeFeaturesEnum.tow.value, + TimeFeaturesEnum.toy.value], "period": [24.0, 7.0, 1.0], "order": [3, 3, 5], "seas_names": ["daily", "weekly", "yearly"]})): @@ -1142,7 +1146,7 @@ def estimate_trend_with_detected_changepoints( df=df, time_col=time_col, fs_components_df=pd.DataFrame({ - "name": ["conti_year"], + "name": [TimeFeaturesEnum.conti_year.value], "period": [1.0], "order": [yearly_seasonality_order], "seas_names": ["yearly"]}) diff --git a/greykite/algo/common/col_name_utils.py b/greykite/algo/common/col_name_utils.py index 21240bd..d89f6a4 100644 --- a/greykite/algo/common/col_name_utils.py +++ b/greykite/algo/common/col_name_utils.py @@ -62,7 +62,7 @@ def simplify_time_features(name): it will be simplified to "str_dow_2-Tue". If the original name is like "str_dow[T.7-Sun]", it will be simplified to "str_dow_7-Sun". If the original name is like "toy", it will be kept as it is. - If any ``cst.TIME_FEATURES`` is not in the name, the original name will be returned. + If any ``cst.TimeFeaturesEnum`` is not in the name, the original name will be returned. Parameters ---------- @@ -74,7 +74,7 @@ def simplify_time_features(name): simplified_name : `str` The simplified name. """ - if any([x in name for x in cst.TIME_FEATURES]): + if any([x in name for x in cst.TimeFeaturesEnum.__dict__["_member_names_"]]): result = re.search(r"(.*)\[T.(.*)\]", name) if result is not None: name = result.group(1) @@ -85,7 +85,7 @@ def simplify_time_features(name): name = name_result.group(1) else: level = "" - if name == "is_weekend": # is_weekend only has two levels + if name == cst.TimeFeaturesEnum.is_weekend.value: # is_weekend only has two levels level = "" name = name + level return name @@ -176,7 +176,7 @@ def add_category_cols(coef_summary, pred_category): Intercept or not. "is_time_feature" : 0 or 1 Time features or not. - Time features belong to `~greykite.common.constants.TIME_FEATURES`. + Time features belong to `~greykite.common.constants.TimeFeaturesEnum`. "is_event" : 0 or 1 Event features or not. Event features have `~greykite.common.constants.EVENT_PREFIX`. @@ -217,7 +217,7 @@ def add_category_cols(coef_summary, pred_category): return coef_summary -def create_pred_category(pred_cols, extra_pred_cols): +def create_pred_category(pred_cols, extra_pred_cols, df_cols): """Creates a dictionary of predictor categories. The keys are categories, and the values are the corresponding @@ -233,6 +233,10 @@ def create_pred_category(pred_cols, extra_pred_cols): In ``SilverkiteEstimator``, this is the ``extra_pred_cols``. In ``SimpleSilverkiteEstimator``, this is the combination of ``regressor_cols`` and ``extra_pred_cols``. + df_cols : `list` [ `str` ] + The extra columns that are present in the input df. + Columns that are in ``df_cols`` are not considered for categories other than regressors. + Columns are considered as regressors only if they are in ``df_cols``. Returns ------- @@ -244,6 +248,18 @@ def create_pred_category(pred_cols, extra_pred_cols): if extra_pred_cols is None: extra_pred_cols = [] extra_pred_cols = list(set(extra_pred_cols)) # might have duplicates + # SimpleSilverkiteEstimator and SilverkiteEstimator have different ways to specify + # regressors and lagged regressors. The ``extra_pred_cols`` in this function + # should have a super set of such columns. + # Regressor columns are defined as columns that are in + # ``df_cols`` and that are present either in ``extra_pred_cols`` directly + # or via interaction terms. + # Because all columns in ``regressor_cols`` are present in ``df_cols``, + # these columns are not categorized to any other category. + regressor_cols = [ + col for col in df_cols + if col in [c for term in extra_pred_cols for c in term.split(":")] + ] pred_category = { "intercept": [col for col in pred_cols if re.search(INTERCEPT, col)], # Time feature names could be included in seasonality features. @@ -256,55 +272,47 @@ def create_pred_category(pred_cols, extra_pred_cols): # This keeps "ct1:is_weekend" and "ct1:cos1_ct1_yearly" # and excludes "is_weekend:cos1_ct1_yearly". "time_features": [col for col in pred_cols - if (re.search(":", col) is None - and - re.search("|".join(cst.TIME_FEATURES), col) - and - re.search(cst.SEASONALITY_REGEX, col) is None) - or - (re.search(":", col) - and - any([re.search("|".join(cst.TIME_FEATURES), subcol) - and - re.search(cst.SEASONALITY_REGEX, subcol) is None - for subcol in col.split(":")])) - ], - "event_features": [col for col in pred_cols if cst.EVENT_PREFIX in col], - # the same logic as time features for trend features - "trend_features": [col for col in pred_cols - if (re.search(":", col) is None + if ((re.search(":", col) is None and - re.search(cst.TREND_REGEX, col) + re.search("|".join(cst.TimeFeaturesEnum.__dict__["_member_names_"]), col) and re.search(cst.SEASONALITY_REGEX, col) is None) - or - (re.search(":", col) - and - any([re.search(cst.TREND_REGEX, subcol) - and - re.search(cst.SEASONALITY_REGEX, subcol) is None - for subcol in col.split(":")])) + or + (re.search(":", col) + and + any([re.search("|".join(cst.TimeFeaturesEnum.__dict__["_member_names_"]), subcol) + and + re.search(cst.SEASONALITY_REGEX, subcol) is None + for subcol in col.split(":")]))) + and col not in regressor_cols + ], + "event_features": [col for col in pred_cols if cst.EVENT_PREFIX in col + and col not in regressor_cols], + # the same logic as time features for trend features + "trend_features": [col for col in pred_cols + if ((re.search(":", col) is None + and + re.search(cst.TREND_REGEX, col) + and + re.search(cst.SEASONALITY_REGEX, col) is None) + or + (re.search(":", col) + and + any([re.search(cst.TREND_REGEX, subcol) + and + re.search(cst.SEASONALITY_REGEX, subcol) is None + for subcol in col.split(":")]))) + and col not in regressor_cols ], - "seasonality_features": [col for col in pred_cols if re.search(cst.SEASONALITY_REGEX, col)], - "lag_features": [col for col in pred_cols if re.search(cst.LAG_REGEX, col)], + "seasonality_features": [col for col in pred_cols if re.search(cst.SEASONALITY_REGEX, col) + and col not in regressor_cols], + "lag_features": [col for col in pred_cols if re.search(cst.LAG_REGEX, col) + and col not in regressor_cols], # only the supplied extra_pred_col that are also in pred_cols - "regressor_features": [col for col in pred_cols if col in extra_pred_cols], + "regressor_features": [col for col in pred_cols if col in regressor_cols + or any([x in regressor_cols for x in col.split(":")])], "interaction_features": [col for col in pred_cols if re.search(":", col)] } - # removes the regressor_features that are in the other categories - time_series_features = [] - for category in pred_category: - if category not in ["regressor_features", "interaction_features"]: - time_series_features += pred_category[category] - pred_category["regressor_features"] = [x for x in pred_category["regressor_features"] - if (re.search(":", x) is None - and - x not in time_series_features) - or - (re.search(":", x) - and - any([subx not in time_series_features - for subx in x.split(":")]))] return pred_category @@ -344,7 +352,7 @@ def filter_coef_summary( Intercept or not. is_time_feature : `bool` or `None`, default `None` Time features or not. - Time features belong to `~greykite.common.constants.TIME_FEATURES`. + Time features belong to `~greykite.common.constants.TimeFeaturesEnum`. is_event : `bool` or `None`, default `None` Event features or not. Event features have `~greykite.common.constants.EVENT_PREFIX`. diff --git a/greykite/algo/common/holiday_inferrer.py b/greykite/algo/common/holiday_inferrer.py new file mode 100644 index 0000000..f669911 --- /dev/null +++ b/greykite/algo/common/holiday_inferrer.py @@ -0,0 +1,904 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Kaixu Yang +"""Automatically infers significant holidays.""" + +import datetime +from datetime import timedelta +from typing import Dict +from typing import List +from typing import Optional +from typing import Set +from typing import Tuple +from typing import Union + +import numpy as np +import pandas as pd +from holidays_ext.get_holidays import get_holiday_df +from plotly import graph_objs as go +from plotly.subplots import make_subplots + +from greykite.common.constants import EVENT_DF_DATE_COL +from greykite.common.constants import EVENT_DF_LABEL_COL +from greykite.common.constants import EVENT_INDICATOR +from greykite.common.constants import TIME_COL +from greykite.common.constants import VALUE_COL +from greykite.common.logging import LoggingLevelEnum +from greykite.common.logging import log_message + + +HOLIDAY_POSITIVE_GROUP_NAME = "Holiday_positive_group" +HOLIDAY_NEGATIVE_GROUP_NAME = "Holiday_negative_group" +INFERRED_GROUPED_POSITIVE_HOLIDAYS_KEY = "together_holidays_positive" +INFERRED_GROUPED_NEGATIVE_HOLIDAYS_KEY = "together_holidays_negative" +INFERRED_INDEPENDENT_HOLIDAYS_KEY = "independent_holidays" + + +class HolidayInferrer: + """Implements methods to automatically infer holiday effects. + + The class works for daily and sub-daily data. + Sub-daily data is aggregated into daily data. + It pulls holiday candidates from `pypi:holidays-ext`, + and adds a pre-specified number of days before/after the holiday candidates + as the whole holiday candidates pool. + Every day in the candidate pool is compared with a pre-defined baseline imputed from surrounding days + (e.g. the average of -7 and +7 days) + and a score is generated to indicate deviation. + The score is averaged if a holiday has multiple occurrences through the timeseries period. + The holidays are ranked according to the magnitudes of the scores. + Holidays are classified into: + + - model independently + - model together + - do not model + + according to their score magnitudes. + For example, if the sum of the absolute scores is 1000, + and the threshold for independent holidays is 0.8, + the method keeps adding holidays to the independent modeling list + from the largest magnitude until the sum reaches 1000 x 0.8 = 800. + Then it continues to count the together modeling list. + + Attributes + ---------- + baseline_offsets : `list` [`int`] or None + The offsets in days to calculate baselines. + post_search_days : `int` or None + The number of days after each holiday to be counted as candidates. + pre_search_days : `int` or None + The number of days before each holiday to be counted as candidates. + independent_holiday_thres : `float` or None + A certain proportion of the total holiday effects that are allocated for holidays + that are modeled independently. For example, 0.8 means the holidays that contribute + to the first 80% of the holiday effects are modeled independently. + together_holiday_thres : `float` or None + A certain proportion of the total holiday effects that are allocated for holidays + that are modeled together. For example, if ``independent_holiday_thres`` is 0.8 and + ``together_holiday_thres`` is 0.9, then after the first 80% of the holiday effects + are counted, the rest starts to be allocated for the holidays that are modeled together + until the cum sum exceeds 0.9. + extra_years : `int`, default 2 + Extra years after ``self.year_end`` to pull holidays in ``self.country_holiday_df``. + This can be used to cover the forecast periods. + df : `pandas.DataFrame` or None + The timeseries after daily aggregation. + time_col : `str` or None + The column name for timestamps in ``df``. + value_col : `str` or None + The column name for values in ``df``. + year_start : `int` or None + The year of the first timeseries observation in ``df``. + year_end : `int` or None + The year of the last timeseries observation in ``df``. + ts : `set` [`datetime`] or None + The existing timestamps in ``df`` for fast look up. + country_holiday_df : `pandas.DataFrame` or None + The holidays between ``year_start`` and ``year_end``. + This is the output from `pypi:holidays-ext`. + Duplicates are dropped. + Observed holidays are merged. + holidays : `list` [`str`] or None + A list of holidays in ``country_holiday_df``. + score_result : `dict` [`str`, `list` [`float`]] or None + The scores from comparing holidays and their baselines. + The keys are holidays. + The values are a list of the scores for each occurrence. + score_result_avg : `dict` [`str`, `float`] or None + The scores from ``score_result`` where the values are averaged. + result : `dict` [`str`, any] + The output of the model. Includes: + + - "scores": `dict` [`str`, `list` [`float`]] + The ``score_result`` from ``self._get_scores_for_holidays``. + - "country_holiday_df": `pandas.DataFrame` + The ``country_holiday_df`` from ``pypi:holidays_ext``. + - "independent_holidays": `list` [`tuple` [`str`, `str`]] + The holidays to be modeled independently. Each item is in (country, holiday) format. + - "together_holidays_positive": `list` [`tuple` [`str`, `str`]] + The holidays with positive effects to be modeled together. Each item is in (country, holiday) format. + - "together_holidays_negative": `list` [`tuple` [`str`, `str`]] + The holidays with negative effects to be modeled together. Each item is in (country, holiday) format. + - "fig": `plotly.graph_objs.Figure` + The visualization if activated. + """ + + def __init__(self): + # Parameters + self.baseline_offsets: Optional[List[int]] = None + self.post_search_days: Optional[int] = None + self.pre_search_days: Optional[int] = None + self.independent_holiday_thres: Optional[float] = None + self.together_holiday_thres: Optional[float] = None + self.extra_years: Optional[int] = None + # Data set info + self.df: Optional[pd.DataFrame] = None + self.time_col: Optional[str] = None + self.value_col: Optional[str] = None + self.year_start: Optional[int] = None + self.year_end: Optional[int] = None + self.ts: Optional[Set[datetime.date]] = None + # Derived results + self.country_holiday_df: Optional[pd.DataFrame] = None + self.holidays: Optional[List[str]] = None + self.score_result: Optional[Dict[str, List[float]]] = None + self.score_result_avg: Optional[Dict[str, float]] = None + self.result: Optional[dict] = None + + def infer_holidays( + self, + df: pd.DataFrame, + time_col: str = TIME_COL, + value_col: str = VALUE_COL, + countries: List[str] = ("US",), + pre_search_days: int = 2, + post_search_days: int = 2, + baseline_offsets: List[int] = (-7, 7), + plot: bool = False, + independent_holiday_thres: float = 0.8, + together_holiday_thres: float = 0.99, + extra_years: int = 2) -> Optional[Dict[str, any]]: + """Infers significant holidays and holiday configurations. + + The class works for daily and sub-daily data. + Sub-daily data is aggregated into daily data. + It pulls holiday candidates from `pypi:holidays-ext`, + and adds a pre-specified number of days before/after the holiday candidates + as the whole holiday candidates pool. + Every day in the candidate pool is compared with a pre-defined baseline imputed from surrounding days + (e.g. the average of -7 and +7 days) + and a score is generated to indicate deviation. + The score is averaged if a holiday has multiple occurrences through the timeseries period. + The holidays are ranked according to the magnitudes of the scores. + Holidays are classified into: + + - model independently + - model together + - do not model + + according to their score magnitudes. + For example, if the sum of the absolute scores is 1000, + and the threshold for independent holidays is 0.8, + the method keeps adding holidays to the independent modeling list + from the largest magnitude until the sum reaches 1000 x 0.8 = 800. + Then it continues to count the together modeling list. + + Parameters + ---------- + df : `pd.DataFrame` + The input timeseries. + time_col : `str`, default `TIME_COL` + The column name for timestamps in ``df``. + value_col : `str`, default `VALUE_COL` + The column name for values in ``df``. + countries : `list` [`str`], default ("UnitedStates",) + A list of countries to look up holiday candidates. + Available countries can be listed with + ``holidays_ext.get_holidays.get_available_holiday_lookup_countries()``. + Two-character country names are preferred. + pre_search_days : `int`, default 2 + The number of days to include as holidays candidates before each holiday. + post_search_days : `int`, default 2 + The number of days to include as holidays candidates after each holiday. + baseline_offsets : `list` [`int`], default (-7, 7) + The offsets in days as a baseline to compare with each holiday. + plot : `bool`, default False + Whether to generate visualization. + independent_holiday_thres : `float`, default 0.8 + A certain proportion of the total holiday effects that are allocated for holidays + that are modeled independently. For example, 0.8 means the holidays that contribute + to the first 80% of the holiday effects are modeled independently. + together_holiday_thres : `float`, default 0.99 + A certain proportion of the total holiday effects that are allocated for holidays + that are modeled together. For example, if ``independent_holiday_thres`` is 0.8 and + ``together_holiday_thres`` is 0.9, then after the first 80% of the holiday effects + are counted, the rest starts to be allocated for the holidays that are modeled together + until the cum sum exceeds 0.9. + extra_years : `int`, default 2 + Extra years after ``self.year_end`` to pull holidays in ``self.country_holiday_df``. + This can be used to cover the forecast periods. + + Returns + ------- + result : `dict` [`str`, any] or None + A dictionary with the following keys: + + - "scores": `dict` [`str`, `list` [`float`]] + The ``score_result`` from ``self._get_scores_for_holidays``. + - "country_holiday_df": `pandas.DataFrame` + The ``country_holiday_df`` from ``pypi:holidays_ext``. + - "independent_holidays": `list` [`tuple` [`str`, `str`]] + The holidays to be modeled independently. Each item is in (country, holiday) format. + - "together_holidays_positive": `list` [`tuple` [`str`, `str`]] + The holidays with positive effects to be modeled together. + Each item is in (country, holiday) format. + - "together_holidays_negative": `list` [`tuple` [`str`, `str`]] + The holidays with negative effects to be modeled together. + Each item is in (country, holiday) format. + - "fig": `plotly.graph_objs.Figure` + The visualization if activated. + + """ + # Sets model parameters. + self.baseline_offsets = baseline_offsets + if post_search_days < 0 or pre_search_days < 0: + raise ValueError("Both 'post_search_days' and 'pre_search_days' must be non-negative integers.") + self.post_search_days = post_search_days + self.pre_search_days = pre_search_days + if not 0 <= independent_holiday_thres <= together_holiday_thres <= 1: + raise ValueError("Both 'independent_holiday_thres' and 'together_holiday_thres' must be between " + "0 and 1 (inclusive).") + self.independent_holiday_thres = independent_holiday_thres + self.together_holiday_thres = together_holiday_thres + if extra_years < 1: + # At least 1 year for completeness. + raise ValueError("The parameter 'extra_years' must be a positive integer.") + self.extra_years = extra_years + + # Pre-processes data. + df = df.copy() + df[time_col] = pd.to_datetime(df[time_col]) + min_increment = min((df[time_col] - df[time_col].shift(1)).dropna()) + # Holidays is not activated for frequencies greater than daily. + if min_increment > timedelta(days=1): + log_message( + message="Data frequency is greater than daily, " + "holiday inferring is skipped.", + level=LoggingLevelEnum.INFO + ) + return None + + # Holidays are daily events. + # If data frequency is sub-daily, + # we aggregate into daily. + if min_increment < timedelta(days=1): + df = df.resample("D", on=time_col).sum().reset_index(drop=False) + df[time_col] = df[time_col].dt.date + + # From now on, data is in daily frequency. + # Sets data attributes. + self.year_start = df[time_col].min().year + self.year_end = df[time_col].max().year + self.ts = set(df[time_col]) + self.df = df + self.time_col = time_col + self.value_col = value_col + + # Gets holiday candidates. + self.country_holiday_df, self.holidays = self._get_candidate_holidays(countries=countries) + # Gets scores for holidays. + self.score_result = self._get_scores_for_holidays() + # Gets the average scores over multiple occurrences for each holiday. + self.score_result_avg = self._get_averaged_scores() + # Gets significant holidays. + self.result = self._infer_holidays() + # Makes plots if needed. + if plot: + self.result["fig"] = self._plot() + else: + self.result["fig"] = None + + return self.result + + def _infer_holidays(self) -> Dict[str, any]: + """When the scores are computed, + calculates the contributions and classifies holidays into: + + - model independently + - model together + - do not model + + Returns + ------- + result : `dict` [`str`, any] + A dictionary with the following keys: + + - "scores": `dict` [`str`, `list` [`float`]] + The ``score_result`` from ``self._get_scores_for_holidays``. + - "country_holiday_df": `pandas.DataFrame` + The ``country_holiday_df`` from ``pypi:holidays_ext``. + - "independent_holidays": `list` [`tuple` [`str`, `str`]] + The holidays to be modeled independently. Each item is in (country, holiday) format. + - "together_holidays_positive": `list` [`tuple` [`str`, `str`]] + The holidays with positive effects to be modeled together. + Each item is in (country, holiday) format. + - "together_holidays_negative": `list` [`tuple` [`str`, `str`]] + The holidays with negative effects to be modeled together. + Each item is in (country, holiday) format. + """ + independent_holidays, together_holidays_positive, together_holidays_negative = self._get_significant_holidays() + return { + "scores": self.score_result, + "country_holiday_df": self.country_holiday_df, + INFERRED_INDEPENDENT_HOLIDAYS_KEY: independent_holidays, + INFERRED_GROUPED_POSITIVE_HOLIDAYS_KEY: together_holidays_positive, + INFERRED_GROUPED_NEGATIVE_HOLIDAYS_KEY: together_holidays_negative + } + + def _get_candidate_holidays( + self, + countries: List[str]) -> (pd.DataFrame, List[str]): + """Gets the candidate holidays from a list of countries. + Uses `pypi:holidays-ext`. + Duplicates are dropped. + Observed holidays are renamed to original holidays + and corresponding original holidays in the same years are removed. + + Parameters + ---------- + countries : `list` [`str`] + A list of countries to look up candidate holidays. + + Returns + ------- + result : `tuple` + Includes: + + country_holiday_df : `pandas.DataFrame` + The holidays between ``year_start`` and ``year_end``. + This is the output from `pypi:holidays-ext`. + Duplicates are dropped. + Observed holidays are merged. + holidays : `list` [`str`] + A list of holidays in ``country_holiday_df``. + The holidays are in the format of "{country_name}_{holiday_name}". + + """ + country_holiday_df = get_holiday_df( + country_list=countries, + years=list(range(self.year_start, self.year_end + self.extra_years)) + ) + # Drops duplications. + country_holiday_df.drop_duplicates(keep="first", subset=["ts"], inplace=True) + + # Handles observed holidays. + # If observed holiday and original holiday are both listed in the same year, + # the observed holiday will be renamed to the original holiday + # and the original holiday in the same year will be removed. + + # Sub-df that contains observed holidays only. + observed_df = country_holiday_df[country_holiday_df["holiday"].str[-10:] == "(Observed)"] + # Row indices to rename. + rows_to_rename = observed_df.index.tolist() + # Date-holiday tuple to remove. + # ":-11" truncates the " (Observed)" suffix. + # This is used to identify rows to remove. + date_holiday_to_remove = [(row[1]["ts"], row[1]["holiday"][:-11]) for row in observed_df.iterrows()] + # Row indices to remove. + # For each (date, holiday) tuple, look up the match in ``country_holiday_df`` and record the row indices. + # The match happens when the holiday name matches and the time diff is at most 3 days. + rows_to_remove = [idx for date, holiday in date_holiday_to_remove + for idx in country_holiday_df[ + (abs((pd.DatetimeIndex(country_holiday_df["ts"]) - date).days) <= 3) & + (country_holiday_df["holiday"] == holiday)].index.tolist()] + # Renames and removes. + country_holiday_df.loc[rows_to_rename, "holiday"] = country_holiday_df.loc[ + rows_to_rename, "holiday"].str[:-11] + country_holiday_df.loc[rows_to_rename, "country_holiday"] = country_holiday_df.loc[ + rows_to_rename, "country_holiday"].str[:-11] + country_holiday_df.drop( + rows_to_remove, + axis=0, + inplace=True + ) + country_holiday_df.reset_index(drop=True, inplace=True) + + holidays = country_holiday_df["country_holiday"].unique().tolist() + return country_holiday_df, holidays + + @staticmethod + def _transform_country_holidays( + country_holidays: List[Union[str, Tuple[str, str]]]) -> List[Union[Tuple[str, str], str]]: + """Decouples a list of {country}_{holiday} names into a list of (country, holiday) tuple + or the other way around, depending on the input type. + + Parameters + ---------- + country_holidays : `list` [`str` or `tuple` [`str`, `str`]] + One of: + + - A list of country-holiday strings of the format {country}_{holiday}. + The country part is not expected to have "_". + - A list of (country, holiday) tuples. + + + Returns + ------- + country_holiday_list : `list` [`tuple` [`str`, `str`] or `str`] + A list of (country, holiday) tuples or a list of {country}_{holiday} strings, + depending on the input type. + """ + country_holiday_list = [] + for country_holiday in country_holidays: + if isinstance(country_holiday, str): + split = country_holiday.split("_") + country = split[0] + holiday = "_".join(split[1:]) + country_holiday_list.append((country, holiday)) + elif isinstance(country_holiday, tuple) and len(country_holiday) == 2: + country_holiday_item = f"{country_holiday[0]}_{country_holiday[1]}" + country_holiday_list.append(country_holiday_item) + else: + raise ValueError("Every item in ``country_holidays`` must be a string or a length-2 tuple.") + return country_holiday_list + + def _get_score_for_dates( + self, + event_dates: List[pd.Timestamp]) -> List[float]: + """Gets the score for each day in ``event_dates``. + The score is defined as the observation on the day minus the baseline, + which is the average of the ``self.baseline_offsets`` offset observations. + + Parameters + ---------- + event_dates : `list` [`pandas.Timestamp`] + The timestamps for a single event. + + Returns + ------- + scores : `list` [`float`] + The scores for a list of occurrences of an event. + """ + scores = [] + for date in event_dates: + # Calculates the dates for baseline. + baseline_dates = [] + for offset in self.baseline_offsets: + new_date = date + timedelta(days=offset) + counter = 1 + # If a baseline date falls on another holiday, it is moving further. + # But the total iterations cannot exceed 3. + while new_date in event_dates and counter < 3: + counter += 1 + new_date += timedelta(days=offset) + baseline_dates.append(new_date) + # Calculates the average of the baseline observations. + baseline = self.df[self.df[self.time_col].isin(baseline_dates)][self.value_col].mean() + # Calculates the score for the current occurrence. + score = self.df[self.df[self.time_col] == date][self.value_col].values[0] - baseline + scores.append(score) + return scores + + def _get_scores_for_holidays(self) -> Dict[str, List[float]]: + """Calculates the scores for a list of events, each with multiple occurrences. + + Returns + ------- + result : `dict` [`str`, `list` [`float`]] + A dictionary with keys being the holiday names and values + being the scores for all occurrences of the holiday. + """ + result = {} + for holiday in self.holidays: + # Gets all occurrences of the holiday + holiday_dates = self.country_holiday_df[ + self.country_holiday_df["country_holiday"] == holiday]["ts"].tolist() + # Iterates over pre/post days to get the scores + for i in range(-self.pre_search_days, self.post_search_days + 1): + event_dates = [(date + timedelta(days=1) * i).date() for date in holiday_dates] + event_dates = [date for date in event_dates if date in self.ts] + score = self._get_score_for_dates( + event_dates=event_dates, + ) + result[f"{holiday}_{'{0:+}'.format(i)}"] = score # format is with +/- signs + return result + + def _get_averaged_scores(self) -> Dict[str, float]: + """Calculates the average score for each event date. + + Returns + ------- + result : `dict` [`str`, `float`] + A dictionary with keys being the holiday names and values + being the average scores. + """ + result = {} + for holiday, score in self.score_result.items(): + result[holiday] = np.nanmean(score) + return result + + def _get_significant_holidays(self) -> (List[str], List[str], List[str]): + """Classifies holidays into model independently, model together + and do not model according to their scores. + + Returns + ------- + result : `tuple` + A result tuple including: + + - "independent_holidays": `list` [`tuple` [`str`, `str`]] + The holidays to be modeled independently. Each item is in (country, holiday) format. + - "together_holidays_positive": `list` [`tuple` [`str`, `str`]] + The holidays with positive effects to be modeled together. + Each item is in (country, holiday) format. + - "together_holidays_negative": `list` [`tuple` [`str`, `str`]] + The holidays with negative effects to be modeled together. + Each item is in (country, holiday) format. + + """ + # Calculates the total holiday deviations. + total_changes = np.nansum(np.abs(list(self.score_result_avg.values()))) + independent_holiday_thres = self.independent_holiday_thres * total_changes + together_holiday_thres = self.together_holiday_thres * total_changes + # Sorts the holidays by their magnitudes. + ranked_effects = sorted(self.score_result_avg.items(), key=lambda x: abs(x[1]), reverse=True) + # Iterates over the sorted holidays until it reaches the thresholds. + cum_effect = 0 # cumulative holiday deviations so far + idx = 0 # index for the current holiday + independent_holidays = [] # stores holidays to be modeled independently + together_holidays_positive = [] # stores holidays with positive effects to be modeled together + together_holidays_negative = [] # stores holidays with negative effects to be modeled together + # Starts adding independent holidays until threshold + while cum_effect < independent_holiday_thres and idx < len(ranked_effects): + if np.isfinite(ranked_effects[idx][1]): + independent_holidays.append(ranked_effects[idx][0]) + cum_effect += abs(ranked_effects[idx][1]) + idx += 1 + # Starts adding together holidays until threshold + while cum_effect < together_holiday_thres and idx < len(ranked_effects): + if np.isfinite(ranked_effects[idx][1]): + if ranked_effects[idx][1] > 0: + together_holidays_positive.append(ranked_effects[idx][0]) + elif ranked_effects[idx][1] < 0: + together_holidays_negative.append(ranked_effects[idx][0]) + cum_effect += abs(ranked_effects[idx][1]) + idx += 1 + return (self._transform_country_holidays(independent_holidays), + self._transform_country_holidays(together_holidays_positive), + self._transform_country_holidays(together_holidays_negative)) + + def _plot(self) -> go.Figure: + """Makes a plot that includes the following two subplots: + + - Bar chart for holiday effects grouped by holidays ordered by their holiday effects. + - Bar chart for holiday effects and their classifications + ranked by their effects. + + Returns + ------- + fig : `plotly.graph_objs` + The figure object. + """ + # Makes the plot. + fig = make_subplots( + rows=2, + cols=1, + subplot_titles=[ + "Inferred holiday effects grouped by holiday", + "Inferred holiday effects grouped by effects" + ], + vertical_spacing=0.4 + ) + # Adds the subplot: holiday effects grouped by holidays. + # Gets all holidays and their scores. + holidays = [] + scores = [] + for holiday, score in self.score_result_avg.items(): + holidays.append(holiday) + scores.append(score) + # Removes the pre/post numbers of days from the end of the holiday names. + # This is used to make the plot grouped by holidays. + holidays_without_plus_minus = list(set(["_".join(holiday.split("_")[:-1]) for holiday in holidays])) + # Sorts holidays according to their effects. + holidays_without_plus_minus = sorted( + holidays_without_plus_minus, + key=lambda x: abs(self.score_result_avg[f"{x}_+0"]), + reverse=True) + # Iterates over each holiday + i day to plot the bars. + for i in range(-self.pre_search_days, self.post_search_days + 1): + if i == 0: + name = "holiday" + elif abs(i) == 1: + name = f"holiday {'{0:+}'.format(i)} day" + else: + name = f"holiday {'{0:+}'.format(i)} days" + # Gets the list of holiday names with the current +/- day. + holidays_with_plus_minus = [key + f"_{'{0:+}'.format(i)}" for key in holidays_without_plus_minus] + # Gets the corresponding scores for the current +/- day. + current_values = [scores[idx] for idx in [ + holidays.index(holiday) for holiday in holidays_with_plus_minus]] + # Adds to the plot. + fig.add_trace( + go.Bar( + # Truncates the text for better view. + x=[holiday[:30] for holiday in holidays_without_plus_minus], + y=current_values, + name=name, + legendgroup=1 + ), + row=1, + col=1 + ) + # Adds the subplot: holiday effects grouped by effects. + # Sorts holidays by their effect magnitude. + ranked_holidays, ranked_scores = list(zip( + *sorted(self.score_result_avg.items(), key=lambda x: abs(x[1]), reverse=True))) + # Adds to the plot. + fig.add_trace( + go.Bar( + # Truncates the text for better view. + x=["_".join(holiday.split("_")[:-1])[:30] + holiday.split("_")[-1] for holiday in ranked_holidays], + y=ranked_scores, + legendgroup=2, + name="holidays" + ), + row=2, + col=1 + ) + # Adds vertical regions to indicate the classification of the holidays. + start = -0.5 # start of bar chart x axis + independent_holidays_end = start + len(self.result[INFERRED_INDEPENDENT_HOLIDAYS_KEY]) + together_holiday_end = (independent_holidays_end + len(self.result[INFERRED_GROUPED_POSITIVE_HOLIDAYS_KEY]) + + len(self.result[INFERRED_GROUPED_NEGATIVE_HOLIDAYS_KEY])) + end = start + len(holidays) + fig.add_vrect( + x0=start, + x1=independent_holidays_end, + annotation_text="model independently", + annotation_position="top left", + opacity=0.15, + fillcolor="green", + line_width=0, + row=2, + col=1 + ) + fig.add_vrect( + x0=independent_holidays_end, + x1=together_holiday_end, + annotation_text="model together", + annotation_position="top left", + opacity=0.15, + fillcolor="purple", + line_width=0, + row=2, + col=1 + ) + fig.add_vrect( + x0=together_holiday_end, + x1=end, + annotation_text="do not model", + annotation_position="top left", + opacity=0.15, + fillcolor="yellow", + line_width=0, + row=2, + col=1 + ) + fig.add_vline( + x=independent_holidays_end, + line=dict(color="black"), + line_width=1, + row=2, + col=1 + ) + fig.add_vline( + x=together_holiday_end, + line=dict(color="black"), + line_width=1, + row=2, + col=1 + ) + # Adjusts layouts. + fig.update_layout( + height=1000, + title="Inferred holiday effects", + legend_tracegroupgap=360, + ) + fig.update_xaxes( + tickangle=90, + title="Holidays", + row=1, + col=1 + ) + fig.update_yaxes( + title="Effect", + row=1, + col=1 + ) + fig.update_xaxes( + tickangle=90, + title="Holidays", + row=2, + col=1 + ) + fig.update_yaxes( + title="Effect", + row=2, + col=1 + ) + return fig + + def _get_event_df_for_single_event( + self, + holiday: Tuple[str, str], + country_holiday_df: pd.DataFrame) -> pd.DataFrame: + """Gets the event df for a single holiday. + An event df has the format: + + pd.DataFrame({ + "date": ["2020-09-01", "2021-09-01"], + "event_name": "is_event" + }) + + Parameters + ---------- + holiday : `tuple` [`str`, `str`] + A tuple of length 2. + The first element is the country name. + The second element has the format of f"{holiday}_{x}", + where "x" is a signed integer acting as a neighboring operator. + For example, ("US", "Christmas Day_+1") means the day after + every US's Christmas Day. + This is consistent with the output from ``self.infer_holidays``. + country_holiday_df : `pandas.DataFrame` + The dataframe that contains the country/holiday/dates information + for holidays. Must cover the periods need in training/forecasting + for all holidays. + This has the same format as ``self.country_holiday_df``. + + Returns + ------- + event_df : `pandas.DataFrame` + The event df for a single holiday in the format of + + pd.DataFrame({ + "date": ["2020-12-24", "2021-12-24"], + "event_name": "US_Christmas Day_minus_1" + }) + """ + # Splits holiday into country name, holiday name and neighboring offset days. + country = holiday[0] + holiday_split = holiday[1].split("_") + holiday_name = "_".join(holiday_split[:-1]) + neighboring_offset = int(holiday_split[-1]) + # Gets holiday dates from ``country_holiday_df``. + holiday_dates = country_holiday_df[ + (country_holiday_df["country"] == country) & + (country_holiday_df["holiday"] == holiday_name)]["ts"].tolist() + holiday_dates = [date + timedelta(days=neighboring_offset) for date in holiday_dates] + # Constructs the event df. + # The holiday name matches the column names + # constructed from `SimpleSilverkiteForecast`'s holiday generating functions. + if neighboring_offset < 0: + holiday_name_adj = f"{country}_{holiday_name}_minus_{abs(neighboring_offset)}" + elif neighboring_offset == 0: + holiday_name_adj = f"{country}_{holiday_name}" + else: + holiday_name_adj = f"{country}_{holiday_name}_plus_{neighboring_offset}" + holiday_name_adj = holiday_name_adj.replace("'", "") # Single quote conflicts patsy formula. + event_df = pd.DataFrame({ + EVENT_DF_DATE_COL: holiday_dates, + EVENT_DF_LABEL_COL: holiday_name_adj + }) + + return event_df + + def generate_daily_event_dict( + self, + country_holiday_df: Optional[pd.DataFrame] = None, + holiday_result: Optional[Dict[str, List[Tuple[str, str]]]] = None) -> Dict[str, pd.DataFrame]: + """Generates daily event dict for all holidays inferred. + The daily event dict will contain: + + - Single events for every holiday or holiday neighboring day + that is to be modeled independently. + - A single event for all holiday or holiday neighboring days + with positive effects that are modeled together. + - A single event for all holiday or holiday neighboring days + with negative effects that are modeled together. + + Parameters + ---------- + country_holiday_df : `pandas.DataFrame` or None, default None + The dataframe that contains the country/holiday/dates information + for holidays. Must cover the periods need in training/forecasting + for all holidays. + This has the same format as ``self.country_holiday_df``. + If None, it pulls from ``self.country_holiday_df``. + holiday_result : `dict` [`str`, `list` [`tuple` [`str`, `str`]]] or None, default None + A dictionary with the following keys: + + - INFERRED_INDEPENDENT_HOLIDAYS_KEY + - INFERRED_GROUPED_POSITIVE_HOLIDAYS_KEY + - INFERRED_GROUPED_NEGATIVE_HOLIDAYS_KEY + + Each key's value is a list of length-2 tuples of the format (country, holiday). + This format is the output of ``self.infer_holidays``. + If None, it pulls from ``self.result``. + + Returns + ------- + daily_event_dict : `dict` + The daily event dict that is consumable by + `~greykite.algo.forecast.silverkite.forecast_simple_silverkite.SimpleSilverkiteForecast` or + `~greykite.algo.forecast.silverkite.forecast_silverkite.SilverkiteForecast`. + The keys are the event names. + The values are dataframes with the event dates. + """ + daily_event_dict = {} + # Gets default parameters. + if country_holiday_df is None: + country_holiday_df = self.country_holiday_df + if holiday_result is None: + holiday_result = self.result + if country_holiday_df is None or holiday_result is None: + raise ValueError("Both 'country_holiday_df' and 'holidays' must be given. " + "Alternatively, you can run 'infer_holidays' first and " + "they will be pulled automatically.") + + # Gets independent holidays. + independent_holidays = holiday_result.get(INFERRED_INDEPENDENT_HOLIDAYS_KEY, []) + for holiday in independent_holidays: + event_df = self._get_event_df_for_single_event( + holiday=holiday, + country_holiday_df=country_holiday_df + ) + if event_df.shape[0] > 0: + event_name = event_df[EVENT_DF_LABEL_COL].iloc[0] + daily_event_dict[event_name] = event_df + + # Gets positive together holidays. + together_holidays_positive = holiday_result.get(INFERRED_GROUPED_POSITIVE_HOLIDAYS_KEY, []) + event_df = pd.DataFrame() + for holiday in together_holidays_positive: + event_df_temp = self._get_event_df_for_single_event( + holiday=holiday, + country_holiday_df=country_holiday_df + ) + event_df = pd.concat([event_df, event_df_temp], axis=0) + if event_df.shape[0] > 0: + event_df[EVENT_DF_LABEL_COL] = EVENT_INDICATOR + daily_event_dict[HOLIDAY_POSITIVE_GROUP_NAME] = event_df.drop_duplicates(subset=[EVENT_DF_DATE_COL]).reset_index(drop=True) + + # Gets negative together holidays. + together_holidays_negative = holiday_result.get(INFERRED_GROUPED_NEGATIVE_HOLIDAYS_KEY, []) + event_df = pd.DataFrame() + for holiday in together_holidays_negative: + event_df_temp = self._get_event_df_for_single_event( + holiday=holiday, + country_holiday_df=country_holiday_df + ) + event_df = pd.concat([event_df, event_df_temp], axis=0) + if event_df.shape[0] > 0: + event_df[EVENT_DF_LABEL_COL] = EVENT_INDICATOR + daily_event_dict[HOLIDAY_NEGATIVE_GROUP_NAME] = event_df.drop_duplicates(subset=[EVENT_DF_DATE_COL]).reset_index(drop=True) + + return daily_event_dict diff --git a/greykite/algo/common/l1_quantile_regression.py b/greykite/algo/common/l1_quantile_regression.py new file mode 100644 index 0000000..47f0935 --- /dev/null +++ b/greykite/algo/common/l1_quantile_regression.py @@ -0,0 +1,368 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Kaixu Yang +"""Implements Quantile Regression, Weighted Quantile Regression, +L1-norm Regularized Quantile Regression, +Adaptive L1-norm Regularized Quantile Regression. +""" + +from __future__ import annotations + +from typing import Dict +from typing import Optional + +import cvxpy as cp +import numpy as np +import pandas as pd +from sklearn.base import BaseEstimator +from sklearn.base import RegressorMixin + +from greykite.algo.common.partial_regularize_regression import constant_col_finder +from greykite.common.logging import LoggingLevelEnum +from greykite.common.logging import log_message + + +def ordinary_quantile_regression( + x: np.array, + y: np.array, + q: float, + sample_weight: Optional[np.array] = None, + max_iter: int = 200, + tol: float = 1e-2) -> np.array: + """Implements the quantile regression without penalty terms. + Supports sample weight. + + Applies the iterative re-weighted least square (IRLS) algorithm + to solve the quantile regression without regularization. Minimizes + + beta = argmin 1/n * sum {w_i * [(1 - q) * (y_i - x_i^T beta)_- + q * (y_i - x_i^T beta)_+]} + + This works for singular matrix and supports sample weights, while statsmodels does not. + Please make sure the design matrix has an intercept as intercept is very important to quantile regression. + + Parameters + ---------- + x : `numpy.array` + The design matrix. + y : `numpy.array` + The response vector. + q : `float` between 0.0 and 1.0 + The quantile of the response to model. + sample_weight : `numpy.array` or None, default None + The sample weight in the loss function. + max_iter : int, default 200 + The maximum number of iterations. + tol : float, default 1e-2 + The tolerance to stop the algorithm. + + Returns + ------- + beta : numpy.array + The estimated coefficients. + """ + # Uses IRLS to solve the problem. + n, p = x.shape + if sample_weight is None: + sample_weight = np.ones(n) + # Minimum constant for denominator to prevent from dividing by zero. + delta = 1e-6 + beta = np.zeros(p) + for i in range(max_iter): + eta = x @ beta + eps = np.abs(y - eta) + # Re-weights. + left = np.where(y < eta, q, 1 - q) / sample_weight + right = np.where(eps > delta, eps, delta) + s = (left * right).reshape(-1, 1) + # Solves with formula. + # Multiplies weights to x first to speed up. + x_l = x / s + beta_new = np.linalg.pinv(x_l.T @ x) @ (x_l.T @ y) + err = (np.abs(beta_new - beta) / np.abs(beta)).max() + beta = beta_new + if err < tol: + break + if i == max_iter - 1: + log_message( + message=f"Max number of iterations reached. " + f"Deviation is {err}. " + f"Consider increasing max_iter.", + level=LoggingLevelEnum.WARNING + ) + + return beta + + +def l1_quantile_regression( + x: np.array, + y: np.array, + q: float, + alpha: float, + sample_weight: Optional[np.array] = None, + feature_weight: Optional[np.array] = None, + include_intercept: bool = True) -> Dict[str, any]: + """Implements the quantile regression with penalty terms. + Supports sample weight and feature weights in penalty. + + This is solved with linear programming formulation: + + min c^Tx s.t. ax<=b + + where x is [beta+, beta-, alpha+, alpha-, (y-alpha-X beta)+, (y-alpha-X beta)-]. + Please make sure the design matrix is normalized. + + Parameters + ---------- + x : `numpy.array` + The design matrix. + y : `numpy.array` + The response vector. + q : `float` between 0.0 and 1.0 + The quantile of the response to model. + alpha : `float` + The regularization parameter. + sample_weight : `numpy.array` or None, default None + The sample weight in the loss function. + feature_weight : `numpy.array` or None, default None + The feature weight in the penalty term. + This parameter enables adaptive L1 norm regularization. + include_intercept : `bool`, default True + Whether to include intercept. + If True, will fit an intercept separately and drop any degenerate columns. + False is not recommended because intercept is very useful in distinguishing the quantiles + (it shifts the predictions up and down). + + Returns + ------- + coefs : `dict` [`str`, any] + The coefficients dictionary with the following elements: + intercept : `float` + The intercept. + beta : `numpy.array` + The estimated coefficients. + + """ + n, p = x.shape + if sample_weight is None: + sample_weight = np.ones(n) + if feature_weight is None: + feature_weight = np.ones(p) + # Linear coefficients. + c = [alpha * feature_weight, alpha * feature_weight] + if include_intercept: + c += [np.zeros(2)] + c += [q * sample_weight, (1 - q) * sample_weight] + c = np.concatenate(c, axis=0) + # Variable. + var_size = 2*p + 2*n + 2*include_intercept + var = cp.Variable(var_size) + # Equality constraint coefficients. + x_vec = [x, -x] + if include_intercept: + x_vec += [np.ones([n, 1]), -np.ones([n, 1])] + x_vec += [np.eye(n), -np.eye(n)] + x_vec = np.concatenate(x_vec, axis=1) + # The problem. + prob = cp.Problem(cp.Minimize(c.T @ var), + [var >= 0, x_vec @ var == y]) + prob.solve() + + # Gets the results. + if include_intercept: + intercept = var.value[2 * p] - var.value[2 * p + 1] + else: + intercept = 0 + coef = var.value[:p] - var.value[p: 2 * p] + return { + "intercept": intercept, + "coef": coef + } + + +class QuantileRegression(RegressorMixin, BaseEstimator): + """Implements the quantile regression model. + + Supports weighted sample, l1 regularization + and weighted l1 regularization. + These options can be configured to support different use cases. + For example, specifying quantile to be 0.5 and sample weight to be the + inverse absolute value of response minimizes the MAPE. + """ + + def __init__( + self, + quantile: float = 0.9, + alpha: float = 0.001, + sample_weight: Optional[np.typing.ArrayLike] = None, + feature_weight: Optional[np.typing.ArrayLike] = None, + max_iter: int = 100, + tol: float = 1e-2, + fit_intercept: bool = True): + self.quantile = quantile + self.alpha = alpha + self.sample_weight = sample_weight + self.feature_weight = feature_weight + self.max_iter = max_iter + self.tol = tol + self.fit_intercept = fit_intercept + + # Parameters, set by ``fit`` method. + self.n = None + self.p = None + self.constant_cols = None # Detected degenerate columns. + self.nonconstant_cols = None # Detected non-degenerate columns. + self.intercept_ = None + self.coef_ = None + + def _process_input( + self, + x: np.typing.ArrayLike, + y: np.typing.ArrayLike) -> [np.array, np.array]: + """Checks validity of input. + + Parameters + ---------- + x : `numpy.array`, `pandas.DataFrame` or `pandas.Series` + The design matrix. + y : `numpy.array`, `pandas.DataFrame` or `pandas.Series` + The response vector. + + Returns + ------- + x : `numpy.array` + The processed x. + y : `numpy.array` + The processed y. + """ + # Type conversion and value checks. + if isinstance(x, (pd.DataFrame, pd.Series)): + x = x.values + if isinstance(y, (pd.DataFrame, pd.Series)): + y = y.values + if len(y.shape) > 1: + log_message( + message=f"A column-vector y was passed when a 1d array was expected. " + f"Please change the shape of y to (n_samples,), " + f"for example using ravel().", + level=LoggingLevelEnum.WARNING + ) + y = y.ravel() + self.n, self.p = x.shape + if y.shape[0] != self.n: + raise ValueError(f"The shapes of x and y do not match. " + f"x has {self.n} observations while y has " + f"{y.shape[0]} observations.") + if self.quantile < 0 or self.quantile > 1: + raise ValueError(f"Quantile q must be between 0.0 and 1.0, found {self.quantile}.") + if self.sample_weight is None: + self.sample_weight = np.ones(self.n) + else: + self.sample_weight = np.array(self.sample_weight).ravel() + if self.sample_weight.shape[0] != self.n: + raise ValueError(f"The length of sample weight must match the number of observations" + f" {self.n}, but found {self.sample_weight.shape[0]}.") + if self.feature_weight is None: + self.feature_weight = np.ones(self.p) + else: + self.feature_weight = np.array(self.feature_weight).ravel() + if self.feature_weight.shape[0] != self.p: + raise ValueError(f"The length of feature weight must match the number of features" + f" {self.p}, but found {self.feature_weight.shape[0]}.") + if self.max_iter <= 0: + raise ValueError(f"max_iter must be a positive integer, found {self.max_iter}.") + if self.tol <= 0: + raise ValueError(f"tol must be a positive number, found {self.tol}.") + + # Handles intercept and degenerate columns. + # If ``self.fit_intercept`` is True, + # the degenerate columns are dropped. + # It will append an intercept column for the alpha = 0 case. + # For the alpha > 0 case, the intercept is fitted separately. + if self.fit_intercept: + self.constant_cols = constant_col_finder(x) + self.nonconstant_cols = [i for i in range(self.p) if i not in self.constant_cols] + if self.alpha == 0: + x = np.concatenate([np.ones([self.n, 1]), x[:, self.nonconstant_cols]], axis=1) + return x, y + + def fit( + self, + X: np.typing.ArrayLike, + y: np.typing.ArrayLike) -> QuantileRegression: + """Fits the quantile regression model. + + Parameters + ---------- + X : `numpy.array`, `pandas.DataFrame` or `pandas.Series` + The design matrix. + y : `numpy.array`, `pandas.DataFrame` or `pandas.Series` + The response vector. + + Returns + ------- + self + """ + x, y = self._process_input(X, y) + + # Unregularized version. Solved with IRLS. + if self.alpha == 0: + beta = ordinary_quantile_regression( + x=x, + y=y, + q=self.quantile, + sample_weight=self.sample_weight, + max_iter=self.max_iter, + tol=self.tol + ) + if self.fit_intercept: + self.intercept_ = beta[0] + self.coef_ = np.zeros(self.p) + self.coef_[self.nonconstant_cols] = beta[1:] + else: + self.intercept_ = 0 + self.coef_ = beta + else: + coefs = l1_quantile_regression( + x=x, + y=y, + q=self.quantile, + alpha=self.alpha, + sample_weight=self.sample_weight, + feature_weight=self.feature_weight, + include_intercept=self.fit_intercept + ) + self.intercept_ = coefs["intercept"] + self.coef_ = coefs["coef"] + return self + + def predict( + self, + X: np.typing.ArrayLike) -> np.array: + """Makes prediction for a given x. + + Parameters + ---------- + X : `numpy.array`, `pandas.DataFrame` or `pandas.Series` + The design matrix used for prediction. + """ + if X.shape[1] != self.p: + raise ValueError(f"The predict X should have {self.p} columns, but found {X.shape[1]}.") + return self.intercept_ + X @ self.coef_ diff --git a/greykite/algo/common/ml_models.py b/greykite/algo/common/ml_models.py index 8736945..58a4afc 100644 --- a/greykite/algo/common/ml_models.py +++ b/greykite/algo/common/ml_models.py @@ -42,14 +42,16 @@ from sklearn.linear_model import RidgeCV from sklearn.linear_model import SGDRegressor +from greykite.algo.common.l1_quantile_regression import QuantileRegression from greykite.algo.uncertainty.conditional.conf_interval import conf_interval from greykite.algo.uncertainty.conditional.conf_interval import predict_ci -from greykite.common.constants import ERR_STD_COL +from greykite.common.constants import RESIDUAL_COL from greykite.common.constants import R2_null_model_score from greykite.common.evaluation import calc_pred_err from greykite.common.evaluation import r2_null_model_score from greykite.common.features.normalize import normalize_df from greykite.common.python_utils import group_strs_with_regex_patterns +from greykite.common.viz.timeseries_plotting import plot_multivariate matplotlib.use("agg") # noqa: E402 @@ -68,7 +70,7 @@ def design_mat_from_formula( and builds the design matrix (x_mat) :param df: pd.DataFrame - A data frame with the response vector (y) and the feature columns (x_mat) + A dataframe with the response vector (y) and the feature columns (x_mat) :param model_formula_str: str A formula string e.g. "y~x1+x2+x3*x4". This is similar to R formulas. @@ -147,6 +149,7 @@ def fit_model_via_design_matrix( - ``"lasso_lars"`` : `sklearn.linear_model.LassoLarsCV` - ``"rf"`` : `sklearn.ensemble.RandomForestRegressor` - ``"gradient_boosting"`` : `sklearn.ensemble.GradientBoostingRegressor` + - ``"quantile_regression"`` : `~greykite.algo.common.l1_quantile_regression.QuantileRegression` See `~greykite.algo.common.ml_models.fit_model_via_design_matrix` for the sklearn and statsmodels classes that implement these methods, and their parameters. @@ -183,7 +186,8 @@ def fit_model_via_design_matrix( "lars": LarsCV, "lasso_lars": LassoLarsCV, "rf": RandomForestRegressor, - "gradient_boosting": GradientBoostingRegressor # only method that supports quantile loss + "gradient_boosting": GradientBoostingRegressor, + "quantile_regression": QuantileRegression } # for our purposes, we may want different defaults from those provided in the classes @@ -195,13 +199,14 @@ def fit_model_via_design_matrix( "statsmodels_glm": dict(family=sm.families.Gamma()), # default is gamma distribution "linear": dict(), "elastic_net": dict(cv=5), - "ridge": dict(cv=5, alphas=np.logspace(-5, 5, 100)), # by default RidgeCV only has 3 candidate alphas, not enough + "ridge": dict(cv=5, alphas=np.logspace(-5, 5, 30)), # by default RidgeCV only has 3 candidate alphas, not enough "lasso": dict(cv=5), "sgd": dict(), "lars": dict(cv=5), "lasso_lars": dict(cv=5), "rf": dict(n_estimators=100), - "gradient_boosting": dict() + "gradient_boosting": dict(), + "quantile_regression": dict(quantile=0.5, alpha=0) # unregularized version modeling median } # Re-standardizes the weights so that they sum up to data length @@ -266,7 +271,7 @@ def fit_ml_model( min_admissible_value=None, max_admissible_value=None, uncertainty_dict=None, - normalize_method="min_max", + normalize_method="zero_to_one", regression_weight_col=None): """Fits predictive ML (machine learning) models to continuous response vector (given in ``y_col``) @@ -313,10 +318,11 @@ def fit_ml_model( A dictionary of parameters needed for the ``uncertainty_method`` requested - normalize_method : `str` or None, default "min_max" + normalize_method : `str` or None, default "zero_to_one" If a string is provided, it will be used as the normalization method in `~greykite.common.features.normalize.normalize_df`, passed via - the argument ``method``. Available options are: "min_max", "statistical". + the argument ``method``. + Available options are: "zero_to_one", "statistical", "minus_half_to_half", "zero_at_origin". If None, no normalization will be performed. See that function for more details. regression_weight_col : `str` or None, default None @@ -328,10 +334,20 @@ def fit_ml_model( trained_model : `dict` Trained model dictionary with keys: - ``"ml_model"`` : A trained model with predict method - ``"uncertainty_model"`` : `dict` + - "y" : response values + - "x_design_info" : design matrix information + - "ml_model" : A trained model with predict method + - "uncertainty_model" : `dict` The returned uncertainty_model dict from `~greykite.algo.uncertainty.conditional.conf_interval.conf_interval`. + - "ml_model_summary": model summary + - "y_col" : response columns + - "x_mat ": design matrix + - "min_admissible_value" : minimum acceptable value + - "max_admissible_value" : maximum acceptable value + - "normalize_df_func" : normalization function + - "regression_weight_col" : regression weight column + """ # build model matrices @@ -342,6 +358,8 @@ def fit_ml_model( pred_cols=pred_cols) y = res["y"] + y_mean = np.mean(y) + y_std = np.std(y) x_mat = res["x_mat"] y_col = res["y_col"] x_design_info = res["x_design_info"] @@ -396,7 +414,7 @@ def fit_ml_model( new_x_mat[cols] = normalize_df_func(new_x_mat[cols]) new_x_mat = new_x_mat.fillna(value=0) new_df[f"{y_col}_pred"] = ml_model.predict(new_x_mat) - new_df["fit_residual"] = new_df[y_col] - new_df[f"{y_col}_pred"] + new_df[RESIDUAL_COL] = new_df[y_col] - new_df[f"{y_col}_pred"] # re-assign some param defaults for function conf_interval # with values best suited to this case @@ -408,8 +426,8 @@ def fit_ml_model( conf_interval_params.update(uncertainty_dict["params"]) uncertainty_model = conf_interval( df=new_df, - value_col=y_col, - residual_col="fit_residual", + distribution_col=RESIDUAL_COL, + offset_col=y_col, min_admissible_value=min_admissible_value, max_admissible_value=max_admissible_value, **conf_interval_params) @@ -431,6 +449,9 @@ def fit_ml_model( "coef": coefs}) trained_model = { + "y": y, + "y_mean": y_mean, + "y_std": y_std, "x_design_info": x_design_info, "ml_model": ml_model, "uncertainty_model": uncertainty_model, @@ -547,15 +568,9 @@ def predict_ml_with_uncertainty( pred_df_with_uncertainty = predict_ci( fut_df, trained_model["uncertainty_model"]) - # add uncertainty column to df - pred_df_with_uncertainty.reset_index(drop=True, inplace=True) - fut_df.reset_index(drop=True, inplace=True) - fut_df[f"{y_col}_quantile_summary"] = ( - pred_df_with_uncertainty[f"{y_col}_quantile_summary"]) - fut_df[ERR_STD_COL] = pred_df_with_uncertainty[ERR_STD_COL] return { - "fut_df": fut_df, + "fut_df": pred_df_with_uncertainty, "x_mat": x_mat} @@ -573,7 +588,7 @@ def fit_ml_model_with_evaluation( min_admissible_value=None, max_admissible_value=None, uncertainty_dict=None, - normalize_method="min_max", + normalize_method="zero_to_one", regression_weight_col=None): """Fits prediction models to continuous response vector (y) and report results. @@ -630,10 +645,11 @@ def fit_ml_model_with_evaluation( A dictionary of parameters needed for the ``uncertainty_method`` requested - normalize_method : `str` or None, default "min_max" + normalize_method : `str` or None, default "zero_to_one" If a string is provided, it will be used as the normalization method in `~greykite.common.features.normalize.normalize_df`, passed via - the argument ``method``. Available options are: "min_max", "statistical". + the argument ``method``. + Available options are: "zero_to_one", "statistical", "minus_half_to_half", "zero_at_origin". If None, no normalization will be performed. See that function for more details. regression_weight_col : `str` or None, default None @@ -824,11 +840,15 @@ def plt_pred(): def breakdown_regression_based_prediction( - ml_model, + trained_model, x_mat, grouping_regex_patterns_dict, - add_intercept_group=True, - remainder_group_name="OTHER"): + remainder_group_name="OTHER", + center_components=False, + denominator=None, + index_values=None, + index_col="index_col", + plt_title="prediction breakdown"): """Given a regression based ML model (``ml_model``) and a design matrix (``x_mat``), and a string based grouping rule (``grouping_regex_patterns_dict``) for the design matrix columnns, constructs a dataframe with columns corresponding @@ -838,37 +858,76 @@ def breakdown_regression_based_prediction( Parameters ---------- - ml_model : `sklearn.base.BaseEstimator` - sklearn ML estimator/model of various form. - We require this object to have ``.coef_`` and ``.intercept`` attributes. + trained_model : `dict` + A trained machine-learning model which includes items: + + - ml_model : `sklearn.base.BaseEstimator` + sklearn ML estimator/model of various form. + We require this object to have ``.coef_`` and ``.intercept`` attributes. + - y_mean : `float` + Observed mean of the response + - y_std : `float` + Observed standard deviation of the response + x_mat :`pandas.DataFrame` Design matrix of the regression model grouping_regex_patterns_dict : `dict` {`str`: `str`} A dictionary with group names as keys and regexes as values. This dictinary is used to partition the columns into various groups - add_intercept_group : `bool`, default True - Determines if a group should be created to include the intercept value. - This is helpful to be set to be True if we like the breakdown to sum up - to the predictions. remainder_group_name : `str`, default "OTHER" In case some columns are left and not assigned to any groups, a group with this name will be added to breakdown dataframe and includes the weighted some of the remaining columns. + center_components : `bool`, default False + It determines if components should be centered at their mean and the mean + be added to the intercept. More concretely, if a componet is "x" then it will + be mapped to "x - mean(x)"; and "mean(x)" will be added to the intercept so + that the sum of the components remains the same. + denominator : `str`, default None + If not None, it will specify a way to divide the components. There are + two options implemented: + + - "abs_y_mean" : `float` + The absolute value of the observed mean of the response + - "y_std" : `float` + The standard deviation of the observed response + + This will be useful if we want to make the components scale free. + Dividing by the absolute mean value of the response, is particularly + useful to understand how much impact each component has for an average + response. + + index_values : `list`, default None + The values added as index which can of any types that can be used for + plotting the x axis in plotly eg `int` or `datetime`. + This is useful for plotting or if later this data to be joined + with other data. For example in forecasting context timestamps can be added. + index_col : `str`, default "index_col" + The name of the added column to breakdown data to keep track of index + plt_title : `str`, default "prediction breakdown" + The title of generated plot Returns ------- result : `dict` A dictionary with the following keys. - - "breakdown_df" :`pandas.DataFrame` - A dataframe which includes the sums for each group + - "breakdown_df" : `pandas.DataFrame` + A dataframe which includes the sums for each group / component + - "breakdown_df_with_index_col" : `pandas.DataFrame` + Same as ``breakdown_df`` with an added column to keep track of index + - "breakdown_fig" : `plotly.graph_objs._figure.Figure` + plotly plot overlaying various components - "column_grouping_result" : `dict` A dictionary which includes information for the generated groups. See `~greykite.common.python_utils.group_strs_with_regex_patterns` for more details. """ + if index_values is not None: + assert len(index_values) == len(x_mat), "the number of indices must match the size of data" + ml_model = trained_model["ml_model"] # The dataframe which includes the group sums breakdown_df = pd.DataFrame() ml_model_coef = ml_model.coef_ @@ -877,15 +936,12 @@ def breakdown_regression_based_prediction( data_len = len(x_mat) cols = list(x_mat.columns) - if add_intercept_group: - breakdown_df["Intercept"] = np.repeat(intercept, data_len) - if "Intercept" in cols: - breakdown_df["Intercept"] += x_mat_weighted["Intercept"] + breakdown_df["Intercept"] = np.repeat(intercept, data_len) + if "Intercept" in cols: + breakdown_df["Intercept"] += x_mat_weighted["Intercept"] # If Intercept appear in the columns, we remove it - # Note that this column was utilized and added to intercept, - # if ``add_intercept_group`` is true. - # And it is not needed anymore in regardless of ``add_intercept_group`` value. + # Note that this column was utilized and added to intercept if "Intercept" in cols: del x_mat_weighted["Intercept"] cols.remove("Intercept") @@ -911,8 +967,41 @@ def breakdown_regression_based_prediction( if len(remainder) != 0: breakdown_df[remainder_group_name] = x_mat_weighted[remainder].sum(axis=1) + group_names.append(remainder_group_name) + + if center_components: + for col in group_names: + col_mean = breakdown_df[col].mean() + breakdown_df[col] += -col_mean + breakdown_df["Intercept"] += col_mean + + if denominator == "abs_y_mean": + d = abs(trained_model["y_mean"]) + elif denominator == "y_std": + d = trained_model["y_std"] + elif denominator is None: + d = 1.0 + else: + raise NotImplementedError(f"{denominator} is not an admissable denominator") + + for col in group_names + ["Intercept"]: + breakdown_df[col] /= d + + if index_values is None: + index_values = range(len(breakdown_df)) + + breakdown_df_with_index_col = breakdown_df.copy() + breakdown_df_with_index_col[index_col] = index_values + + breakdown_fig = plot_multivariate( + df=breakdown_df_with_index_col, + x_col=index_col, + title=plt_title, + ylabel="component") return { "breakdown_df": breakdown_df, + "breakdown_df_with_index_col": breakdown_df_with_index_col, + "breakdown_fig": breakdown_fig, "column_grouping_result": column_grouping_result } diff --git a/greykite/algo/common/model_summary.py b/greykite/algo/common/model_summary.py index f33dbc6..6b79b9f 100644 --- a/greykite/algo/common/model_summary.py +++ b/greykite/algo/common/model_summary.py @@ -60,6 +60,8 @@ class ModelSummary: info_dict : `dict` The model summary dictionary, output of `~greykite.algo.common.model_summary.ModelSummary._get_summary` + html_str : `str` + An html formatting of the string representation of the model summary. """ def __init__( @@ -85,6 +87,7 @@ def __init__( self.ml_model = ml_model self.max_colwidth = max_colwidth self.info_dict = self._get_summary() + self.html_str = f"

{self.__str__()}
" def __str__(self): """print method. @@ -149,7 +152,7 @@ def get_coef_summary( Intercept or not. is_time_feature : `bool` or `None`, default `None` Time features or not. - Time features belong to `~greykite.common.constants.TIME_FEATURES`. + Time features belong to `~greykite.common.constants.TimeFeaturesEnum`. is_event : `bool` or `None`, default `None` Event features or not. Event features have `~greykite.common.constants.EVENT_PREFIX`. diff --git a/greykite/algo/common/seasonality_inferrer.py b/greykite/algo/common/seasonality_inferrer.py new file mode 100644 index 0000000..798e8df --- /dev/null +++ b/greykite/algo/common/seasonality_inferrer.py @@ -0,0 +1,1046 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Kaixu Yang +"""Automatically infers seasonality Fourier series orders.""" + +from dataclasses import dataclass +from enum import Enum +from typing import List +from typing import Optional + +import numpy as np +import pandas as pd +from plotly import graph_objs as go +from plotly.colors import DEFAULT_PLOTLY_COLORS +from plotly.subplots import make_subplots +from sklearn.linear_model import LinearRegression +from sklearn.linear_model import RidgeCV +from sklearn.linear_model import SGDRegressor + +from greykite.common.constants import TIME_COL +from greykite.common.constants import VALUE_COL +from greykite.common.constants import TimeFeaturesEnum +from greykite.common.features.timeseries_features import add_time_features_df +from greykite.common.features.timeseries_features import fourier_series_multi_fcn +from greykite.common.features.timeseries_features import get_default_origin_for_time_vars + + +class TrendAdjustMethodEnum(Enum): + """The methods that are available for adjusting trend in + `~greykite.algo.common.seasonality_inferrer.SeasonalityInferrer.infer_fourier_series_order`. + """ + seasonal_average = "seasonal_average" + """Calculates the average within each seasonal period and removes it.""" + overall_average = "overall_average" + """Calculates the average of the whole timeseries and removes it.""" + spline_fit = "spline_fit" + """Fits a spline with no knots (polynomial) with a certain degree and removes it.""" + none = "none" + """Does not adjust trend.""" + + +@dataclass +class SeasonalityInferConfig: + """A dataclass to pass the parameters for + `~greykite.algo.common.seasonality_inferrer.SeasonalityInferrer.infer_fourier_series_order`. + + Attributes + ---------- + seas_name : `str` + Required. + The seasonality component name. + Will be used to distinguish the results. + col_name : `str` + Required. + The column name used to generate seasonality Fourier series. + Must be in ``df`` or can be generated by + `~greykite.common.features.timeseries_features.build_time_features_df`. + See `~greykite.common.features.timeseries_features.fourier_series_multi_func`. + period : `float` + Required. + The period corresponding to ``col_name``. + See `~greykite.common.features.timeseries_features.fourier_series_multi_func`. + max_order : `int` + Required. + The maximum Fourier series order to fit. + adjust_trend_method : `str` or None, default "seasonal_average" + The method used to adjust trend. + Supported methods are in `AdjustTrendMethodEnum`. + None values are default to "seasonal_average" with subtracting yearly average as the default. + adjust_trend_param : `dict` or None, default None + Additional parameters for adjusting the trend. + For valid options, see + `~greykite.algo.common.seasonality_inferrer.SeasonalityInferrer._adjust_trend`. + fit_algorithm : `str` or None, default "ridge" + The algorithm used to fit the seasonality. + Supported algorithms are "linear", "ridge" and "sgd". + None values are default to "ridge". + plotting : `bool` or None, default False + Whether to generate plots. + If True, the returned dictionary will have plot via the "fig" key. + Can turn this off to speed up the process. + None values are default to False. + tolerance : `float` or None, default 0.0 + A tolerance on the criterion to allow a smaller order. + For example, if AIC's minimum is 100 and ``tolerance`` is 0.1, + then the function will find the smallest order that has AIC less than or equal to 110. + None values are default to 0.0. + aggregation_period : `str` or None, default None + The aggregation period before fitting the Fourier series. + Having aggregation to eliminate shorter seasonal periods may help get more accurate orders. + But also making sure the number of observations after aggregation is sufficient. + None corresponds to no aggregation. + offset : `int` or None, default 0 + The offset order to be added to the inferred orders. + The order after adding offset can not be negative. + criterion : `str` or None, default "bic" + The criterion to pick the most appropriate orders. + Supported criteria are "aic" and "bic". + None values are default to "bic". + """ + seas_name: str + col_name: str + period: float + max_order: int + adjust_trend_method: str = TrendAdjustMethodEnum.seasonal_average.name + adjust_trend_param: Optional[dict] = None + fit_algorithm: str = "ridge" + tolerance: float = 0.0 + plotting: bool = False + aggregation_period: Optional[str] = None + offset: int = 0 + criterion: str = "bic" + + +class SeasonalityInferrer: + """A class to infer appropriate Fourier series orders in different + seasonality components. + + The method allows users to: + + - optionally remove the trend with different methods. + Available methods are in `TrendAdjustMethodEnum`. + - optionally do an aggregation. + - fits the seasonality component with different Fourier series orders. + - calculates the AIC/BIC of the fits. + - choose the most appropriate order with AIC or BIC and an optional tolerance. + - plot the investigations. + + Attributes + ---------- + df : `pandas.DataFrame` or None + The input timeseries. + time_col : `str` or None + The column name for timestamps in ``df``. + value_col : `str` or None + The column name for values in ``df``. + fourier_series_orders : `dict` or None + The inferred Fourier series orders. + The keys are the seasonality component names. + The values are the inferred best orders according to the config. + df_features : `pandas.DataFrame` or None + The cached dataframe with time features. + Building this df is slow for large dataset. + We cache it the first time we build it for subsequent uses. + """ + + def __init__(self): + # Set by inputs and preprocessing. + self.df: Optional[pd.DataFrame] = None + self.time_col: Optional[str] = None + self.value_col: Optional[str] = None + # Set by inferrer. + self.fourier_series_orders: Optional[dict] = None + self.df_features: Optional[pd.DataFrame] = None + + FITTED_TREND_COL = "FITTED_TREND" + + def infer_fourier_series_order( + self, + df: pd.DataFrame, + configs: List[SeasonalityInferConfig], + time_col: str = TIME_COL, + value_col: str = VALUE_COL, + adjust_trend_method: Optional[str] = None, + adjust_trend_param: Optional[dict] = None, + fit_algorithm: Optional[str] = None, + tolerance: Optional[float] = None, + plotting: Optional[bool] = None, + aggregation_period: Optional[str] = None, + offset: Optional[int] = None, + criterion: Optional[str] = None) -> dict: + """Infers the most appropriate Fourier series order. + Can infer multiple seasonality components with multiple configs at the same time. + The configurations for each component are passed as a list of + `~greykite.algo.common.seasonality_inferrer.SeasonalityInferConfig` object. + To override a parameter for all configs, pass it via this function's parameter. + + For each seasonality component, + the method first does an optional trend removal via grouped average or spline fit. + For example, for yearly seasonality, one option is to remove the average of each year + from the time series. + The seasonality pattern is clearer and dominates after the trend removal. + + Next it does an optional aggregation to emphasize the current seasonality. + For example, for yearly seasonality, it can do a weekly aggregation so that + the weekly seasonality won't be mixed when modeling yearly seasonality. + + Then it fits seasonality model using Fourier series with orders up to a certain max_order, + and computes the AIC/BIC of the models. + + The final order will be selected based on the criterion with a tolerance adjustment. + A pre-specified offset can also be added to the selected order for adjustment. + + Parameters + ---------- + df : `pandas.DataFrame` + The input timeseries. + configs : `list` [`SeasonalityInferConfig`] + A list of `~greykite.algo.common.seasonality_inferrer.SeasonalityInferConfig` + objects. Each element corresponds to the config for a seasonality component. + For example, if you would like to infer seasonality orders for yearly seasonality and + weekly seasonality, you need to provide a list of two configs. + time_col : `str` + The column name for timestamps in ``df``. + value_col : `str` + The column name for values in ``df``. + adjust_trend_method : `str` or None, default None + The methods used to adjust trend. + Supported methods are in `AdjustTrendMethodEnum`. + If not None, value is used to override all configs. + adjust_trend_param : `dict` or None, default None + Additional parameters for adjusting trend. + For valid options, see + `~greykite.algo.common.seasonality_inferrer.SeasonalityInferrer._adjust_trend`. + If not None, value is used to override all configs. + fit_algorithm : `str` or None, default None + The algorithms used to fit the seasonality. + Supported algorithms are "linear", "ridge" and "sgd". + If not None, value is used to override all configs. + plotting : `bool` or None, default None + Whether to generate plots. + If True, the returned dictionary will have plot via the "fig" key. + Can turn this off to speed up the process. + If not None, value is used to override all configs. + tolerance : `float` or None, default None + A tolerance on the criterion to allow a smaller order. + For example, if AIC's minimum is 100 and ``tolerance`` is 0.1, + then the function will find the smallest order that has AIC less than or equal to 110. + If not None, value is used to override all configs. + aggregation_period : `str` or None, default None + The aggregation periods before fitting the Fourier series. + Having aggregation to eliminate shorter seasonal periods may help get more accurate orders. + But also make sure the number of observations after aggregation is sufficient. + (At least 2 * max_order + 1 to have a unique solution for the regression problem) + If not None, value is used to override all configs. + offset : `int` or None, default None + The offset order to be added to the inferred orders. + The orders after applying offsets can not be negative. + If not None, value is used to override all configs. + criterion : `str` or None, default None + The criteria to pick the most appropriate orders. + If not None, value is used to override all configs. + + Returns + ------- + result : `dict` + The result dictionary with the following keys: + + - "result": a list of result dictionaries from the inferring methods. + The keys are: + + - "seas_name": the seasonality name. + - "orders": the Fourier series orders fitted. + - "aics": the fitted AICs. + - "bics": the fitted BICs. + - "best_aic_order": the order corresponding to the best feasible AIC. + - "best_bic_order": the order corresponding to the best feasible BIC. + - "fig": the diagnostic figure. + + - "best_orders": a dictionary of seasonality component names and their + inferred Fourier series orders. + """ + # Checks and processes the input parameters. + configs = self._process_params( + configs=configs, + adjust_trend_method=adjust_trend_method, + adjust_trend_param=adjust_trend_param, + fit_algorithm=fit_algorithm, + tolerance=tolerance, + plotting=plotting, + aggregation_period=aggregation_period, + offset=offset, + criterion=criterion + ) + # Sets class attributes. + self.df = df.copy() + self.df[time_col] = pd.to_datetime(self.df[time_col]) + self.time_col = time_col + self.value_col = value_col + self.df_features = None # resets ``df_features`` for every new call. + # Iteratively infer the Fourier series order for each component. + result = [] + for config in configs: + # Adjusts the trend and does aggregation. + df_adj = self._process_df( + df=self.df, + time_col=time_col, + value_col=value_col, + adjust_trend_method=config.adjust_trend_method, + adjust_trend_params=config.adjust_trend_param, + aggregation_period=config.aggregation_period + ) + # Infers the seasonality Fourier series order. + seasonality_result = self._gets_seasonality_fitting_metrics( + df=df_adj, + time_col=time_col, + value_col=value_col, + seas_name=config.seas_name, + col_name=config.col_name, + period=config.period, + max_order=config.max_order, + fit_algorithm=config.fit_algorithm, + plotting=config.plotting, + tolerance=config.tolerance, + offset=config.offset + ) + result.append(seasonality_result) + + # Calculates best orders according to the criteria. + best_orders = { + config.seas_name: result[i]["best_aic_order"] + if config.criterion == "aic" + else result[i]["best_bic_order"] + for i, config in enumerate(configs) + } + + self.fourier_series_orders = best_orders + + return { + "result": result, + "best_orders": best_orders + } + + def _process_params( + self, + configs: List[SeasonalityInferConfig], + adjust_trend_method: Optional[str], + adjust_trend_param: Optional[dict], + fit_algorithm: Optional[str], + tolerance: Optional[float], + plotting: Optional[bool], + aggregation_period: Optional[str], + offset: Optional[int], + criterion: Optional[str]) -> List[SeasonalityInferConfig]: + """Checks and overrides the input parameters, and makes sure the values are valid. + + Parameters + ---------- + configs : `list` [`SeasonalityInferConfig`] + A list of `~greykite.algo.common.seasonality_inferrer.SeasonalityInferConfig` + objects. Each element corresponds to the config for a seasonality component. + For example, if you would like to infer seasonality orders for yearly seasonality and + weekly seasonality, you need to provide a list of two configs. + adjust_trend_method : `str` or None, default None + The methods used to adjust trend. + Supported methods are in `AdjustTrendMethodEnum`. + If not None, value is used to override all configs. + adjust_trend_param : `dict` or None, default None + Additional parameters for adjusting trend. + For valid options, see + `~greykite.algo.common.seasonality_inferrer.SeasonalityInferrer._adjust_trend`. + If not None, value is used to override all configs. + fit_algorithm : `str` or None, default None + The algorithms used to fit the seasonality. + Supported algorithms are "linear", "ridge" and "sgd". + If not None, value is used to override all configs. + plotting : `bool` or None, default None + Whether to generate plots. + If True, the returned dictionary will have plot via the "fig" key. + Can turn this off to speed up the process. + If not None, value is used to override all configs. + tolerance : `float` or None, default None + A tolerance on the criterion to allow a smaller order. + For example, if AIC's minimum is 100 and ``tolerance`` is 0.1, + then the function will find the smallest order that has AIC less than or equal to 110. + If not None, value is used to override all configs. + aggregation_period : `str` or None, default None + The aggregation periods before fitting the Fourier series. + Having aggregation to eliminate shorter seasonal periods may help get more accurate orders. + But also make sure the number of observations after aggregation is sufficient. + (At least 2 * max_order + 1 to have a unique solution for the regression problem) + If not None, value is used to override all configs. + offset : `int` or None, default None + The offset order to be added to the inferred orders. + The orders after applying offsets can not be negative. + If not None, value is used to override all configs. + criterion : `str` or None, default None + The criteria to pick the most appropriate orders. + If not None, value is used to override all configs. + + Returns + ------- + configs : `list` [`SeasonalityInferConfig`] + A list of `~greykite.algo.common.seasonality_inferrer.SeasonalityInferConfig` + objects. The values are checked and overridden if needed. + """ + # For each of the optional parameters, + # checks the value is valid, + # overrides the value is needed, + # and fills the None values with defaults. + for (param_name, override_value, default_value, allowed_values) in ( + ("adjust_trend_method", adjust_trend_method, + TrendAdjustMethodEnum.seasonal_average.name, + TrendAdjustMethodEnum.__dict__["_member_names_"]), + ("adjust_trend_param", adjust_trend_param, None, None), + ("fit_algorithm", fit_algorithm, "ridge", ["ridge", "linear", "sgd"]), + ("tolerance", tolerance, 0.0, None), + ("plotting", plotting, False, [True, False]), + ("aggregation_period", aggregation_period, None, None), + ("offset", offset, 0, None), + ("criterion", criterion, "bic", ["aic", "bic"])): + configs = self._apply_default_value( + configs=configs, + param_name=param_name, + override_value=override_value, + default_value=default_value, + allowed_values=allowed_values + ) + return configs + + @staticmethod + def _apply_default_value( + configs: List[SeasonalityInferConfig], + param_name: str, + override_value: any, + default_value: any, + allowed_values: Optional[List[any]] = None) -> List[SeasonalityInferConfig]: + """For the corresponding parameter in each config in ``configs``, + replaces `None` with default values; + overrides all values if ``override_value`` is not `None`; + checks the final values are in ``allowed_values`` if the latter is not `None`. + + Parameters + ---------- + configs : `list` [`SeasonalityInferConfig`] + A list of `~greykite.algo.common.seasonality_inferrer.SeasonalityInferConfig` + objects. Each element corresponds to the config for a seasonality component. + For example, if you would like to infer seasonality orders for yearly seasonality and + weekly seasonality, you need to provide a list of two configs. + param_name : `str` + The name of the parameter. + Will be used in error message. + default_value : `any` + The default value to replace None. + allowed_values : `any`, `list` [`any`] or None, default None + The list of valid values. + If any given value is not valid, an error will be raised. + Leave as None to skip checking. + + Returns + ------- + configs : `list` [`SeasonalityInferConfig`] + A list of `~greykite.algo.common.seasonality_inferrer.SeasonalityInferConfig` + objects. The values are checked and overridden if needed. + """ + # Checks if ``override_value`` is given but not valid. + if override_value is not None and allowed_values is not None and override_value not in allowed_values: + raise ValueError(f"The parameter '{param_name}' has value {override_value}, " + f"which is not valid. Valid values are '{allowed_values}'.") + + # If the ``override_value`` is provided and valid, + # overrides the parameter in all configs. + if override_value is not None: + for config in configs: + setattr(config, param_name, override_value) + return configs + + # If ``override_value`` is None, + # checks the validity of each config's parameter and + # fills None with default value. + for config in configs: + param = getattr(config, param_name) + if param is None: + setattr(config, param_name, default_value) + elif allowed_values is not None and param not in allowed_values: + raise ValueError(f"The parameter '{param_name}' in SeasonalityInferConfig has value {param}, " + f"which is not valid. Valid values are '{allowed_values}'.") + return configs + + def _adjust_trend( + self, + df: pd.DataFrame, + time_col: str = TIME_COL, + value_col: str = VALUE_COL, + method: str = TrendAdjustMethodEnum.seasonal_average.name, + trend_average_col: str = "year", + spline_fit_degree: int = 1) -> pd.DataFrame: + """Adjusts the time series by removing trend. + + There methods to remove trend from time series are listed in + `~greykite.algo.common.seasonality_inferrer.TrendAdjustMethodEnum`. + The methods are: + + - "seasonal_average" : subtracts the average from each seasonal period. + - "overall_average" : subtracts the overall average. + - "spline_fit" : fits the trend using a spline with no knots up to a certain degree (poly). + + Parameters + ---------- + df : `pandas.DataFrame` + The input time series. + time_col : `str`, default ``TIME_COL`` + The column name for timestamps in ``df``. + value_col : `str`, default ``VALUE_COL`` + The column name for values in ``df``. + method : `str`, default `~greykite.algo.common.seasonality_inferrer.TrendAdjustMethodEnum.seasonal_average.name` + The adjustment method. Must be a method specified in + `~greykite.algo.common.seasonality_inferrer.TrendAdjustMethodEnum`. + trend_average_col : `str`, default "year" + The column name that specifies the categories of calculating seasonal mean. + Suggested columns are "year", "year_quarter", "year_month", etc. + Has no effect if ``method`` is not + `~greykite.algo.common.seasonality_inferrer.TrendAdjustMethodEnum.seasonal_average.name`. + Must be provided in ``df`` or be generated by + `~greykite.common.features.timeseries_features import build_time_features_df`. + spline_fit_degree : `int`, default 1 + The degree of spline to fit the trend. + Has no effect if ``method`` is not + `~greykite.algo.common.seasonality_inferrer.TrendAdjustMethodEnum.spline_fit.name`. + + Returns + ------- + df : `pandas.DataFrame` + A copy of the original df but with the ``value_col`` subtracting trend + and an extra column indicating the fitted trend. + The ``value_col`` will have mean zero if trend is adjusted. + """ + # Checks if the method is valid. + if method not in TrendAdjustMethodEnum.__dict__["_member_names_"]: + raise ValueError(f"The trend adjust method '{method}' is not a valid name. " + f"Available methods are {TrendAdjustMethodEnum.__dict__['_member_names_']}.") + df = df.copy() + # Subtracts the overall time series average. + if method == TrendAdjustMethodEnum.overall_average.name: + df[self.FITTED_TREND_COL] = df[value_col].mean() + + # Subtracts the seasonal average within each seasonal period. + if method == TrendAdjustMethodEnum.seasonal_average.name: + df_cols = list(df.columns) + if trend_average_col not in df.columns: + if trend_average_col in TimeFeaturesEnum.__dict__["_member_names_"]: + if self.df_features is None: + df = add_time_features_df( + df=df, + time_col=time_col, + conti_year_origin=get_default_origin_for_time_vars( + df=df, + time_col=time_col + ) + ) + self.df_features = df.copy() + else: + df = self.df_features.copy() + else: + raise ValueError(f"The trend_average_col '{trend_average_col}' is neither found in df " + f"'{list(df.columns)}' nor in the built time features " + f"'{TimeFeaturesEnum.__dict__['_member_names_']}'.") + df_seasonal_average = (df[[value_col, trend_average_col]] + .groupby(trend_average_col) + .mean() + .reset_index(drop=False) + .rename(columns={value_col: self.FITTED_TREND_COL})) + df = df.merge(df_seasonal_average, on=trend_average_col) + df = df[df_cols + [self.FITTED_TREND_COL]] + + # Subtracts the fitted trend. + if method == TrendAdjustMethodEnum.spline_fit.name: + if spline_fit_degree < 1: + raise ValueError(f"Spline degree has be to a positive integer, " + f"but found {spline_fit_degree}.") + df_features = add_time_features_df( + df=df, + time_col=time_col, + conti_year_origin=get_default_origin_for_time_vars( + df=df, + time_col=time_col + ) + ) + df_fit = df_features[[value_col, TimeFeaturesEnum.ct1.name]] + fit_cols = [TimeFeaturesEnum.ct1.name] + for degree in range(2, int(spline_fit_degree) + 1): + df_fit[f"ct{degree}"] = df_fit[TimeFeaturesEnum.ct1.name] ** degree + fit_cols.append(f"ct{degree}") + model = SGDRegressor() + model.fit(df_fit[fit_cols], df_fit[value_col]) + df[self.FITTED_TREND_COL] = model.predict(df_fit[fit_cols]) + + df[value_col] -= df[self.FITTED_TREND_COL] + return df + + def _process_df( + self, + df: pd.DataFrame, + time_col: str, + value_col: str, + adjust_trend_method: Optional[str], + adjust_trend_params: Optional[dict], + aggregation_period: Optional[str]) -> pd.DataFrame: + """Does pre-processing which includes: + + - adjust trend (optional) + - aggregation (optional) + + Parameters + ---------- + df : `pandas.DataFrame` + The input time series. + time_col : `str` + The column name for timestamps in ``df``. + value_col : `str` + The column name for values in ``df``. + adjust_trend_method : `str` or None + The adjustment method. Must be a method specified in + `~greykite.algo.common.seasonality_inferrer.TrendAdjustMethodEnum`. + adjust_trend_params : `dict` or None + Additional parameters for `self._adjust_trend`. + aggregation_period : `str` or None + The aggregation period after adjusting the trend. + + Returns + ------- + df_adj : `pandas.DataFrame` + The df with trend removed. + """ + if adjust_trend_method is not None: + if adjust_trend_params is None: + adjust_trend_params = {} + df_adj = self._adjust_trend( + df=df, + time_col=time_col, + value_col=value_col, + method=adjust_trend_method, + **adjust_trend_params + ) + else: + df_adj = df.copy() + + if aggregation_period is not None: + df_adj = df_adj.resample(aggregation_period, on=time_col).mean().reset_index(drop=False) + return df_adj + + def _gets_seasonality_fitting_metrics( + self, + df: pd.DataFrame, + time_col: str, + value_col: str, + seas_name: str, + col_name: str, + period: float, + max_order: int, + fit_algorithm: str = "ridge", + plotting: bool = False, + tolerance: float = 0.0, + offset: int = 0) -> dict: + """Fits the seasonality with Fourier series and find the best order according to a criterion. + + Parameters + ---------- + df : `pandas.DataFrame` + The input time series after trend adjustment. + time_col : `str` + The column name for timestamps in ``df``. + value_col : `str` + The column name for values in ``df``. + seas_name : `str` + The name for the seasonality component. + col_name : `str` + The column name for the column used to build Fourier series. + Must be in ``df`` or can be generated by + `~greykite.common.features.timeseries_features.build_time_features_df`. + See `~greykite.common.features.timeseries_features.fourier_series_multi_func`. + period : `float` + The period corresponding to ``col_name``. + See `~greykite.common.features.timeseries_features.fourier_series_multi_func`. + max_order : `int` + The maximum Fourier series order to fit. + fit_algorithm : `str`, default "ridge" + The algorithm used to fit the seasonality. + Supported algorithms are "linear", "ridge" and "sgd". + plotting : `bool`, default False + Whether to generate plots. + If True, the returned dictionary will have plot via the "fig" key. + Can turn this off to speed up the process. + tolerance : `float`, default 0.0 + A tolerance on the criterion to allow a smaller order. + For example, if AIC's minimum is 100 and ``tolerance`` is 0.1, + then the function will find the smallest order that has AIC less than or equal to 110. + offset : `int`, default 0 + The offset to be added to the best orders. + + Returns + ------- + result : `dict` + A result dictionary with the following keys: + + - "seas_name": the seasonality name. + - "orders": the Fourier series orders fitted. + - "aics": the fitted AICs. + - "bics": the fitted BICs. + - "best_aic_order": the order corresponding to the best feasible AIC. + - "best_bic_order": the order corresponding to the best feasible BIC. + - "fig": the diagnostic figure. + + """ + # Checks inputs. + if col_name not in df.columns and col_name not in TimeFeaturesEnum.__dict__["_member_names_"]: + raise ValueError(f"The column name '{col_name}' is not found in ``df`` or time features.") + if max_order <= 0 or int(max_order) != max_order: + raise ValueError(f"The max order must be a positive integer, found {max_order}.") + models = { + "ridge": RidgeCV, + "linear": LinearRegression, + "sgd": SGDRegressor + } + if fit_algorithm not in models: + raise ValueError(f"The fit_algorithm '{fit_algorithm}' is not supported. " + f"Must be one of {list(models.keys())}.") + model_class = models[fit_algorithm] + + if tolerance < 0: + raise ValueError(f"The tolerance percentage must be non-negative, found {tolerance}.") + + # Generates Fourier series. + fourier_func = fourier_series_multi_fcn( + col_names=[col_name], + periods=[period], + orders=[max_order], + seas_names=[seas_name] + ) + if col_name not in df.columns: + df = add_time_features_df( + df=df, + time_col=time_col, + conti_year_origin=get_default_origin_for_time_vars( + df=df, + time_col=time_col + ) + ) + seasonality_df = fourier_func(df)["df"] + df_features = pd.concat([ + df[[value_col]].reset_index(drop=True), + seasonality_df.reset_index(drop=True) + ], axis=1) + df_features.dropna(inplace=True) # In case ``df_features`` has NANs and fit fails. + + # Fits the models and calculates the metrics. + # Defines a function to fit seasonality model for a single order. + # This is later used with the `map` method to fast calculate the AIC/BICs for + # all orders. + # See https://wiki.python.org/moin/PythonSpeed/PerformanceTips#Loops + def fit_seasonality_model(order: int) -> (float, float): + """A function to take a single order and fit + the seasonality model. Then it calculates the AIC/BIC of the model. + + Parameters + ---------- + order : `int` + The Fourier series order. + + Returns + ------- + result : `tuple` + (AIC, BIC) score for the model. + """ + model = model_class() + features = [ + col for col in df_features.columns + if col != value_col + # After split, the 1st element is sin{order} or cos{order}. + # Takes the order to compare with the current order. + and int(col.split("_")[0][3:]) <= order + ] + model.fit(df_features[features], df_features[value_col]) + pred = model.predict(df_features[features]) + mse = np.mean((df_features[value_col] - pred) ** 2) + # The number of features in the current model is "2 * order". + # In the i.i.d. Gaussian case, the -2 * loglikelihood reduces to n * log(MSE). + aic = 2 * 2 * order + len(df_features) * np.log(mse) + bic = np.log(len(df_features)) * 2 * order + len(df_features) * np.log(mse) + return aic, bic + + # Uses `map` to fast calculate the AIC/BICs. + orders = list(range(1, max_order + 1)) + abics = list(map(fit_seasonality_model, orders)) + aics = [abic[0] for abic in abics] + bics = [abic[1] for abic in abics] + + min_aic = min(aics) + min_bic = min(bics) + + # If a tolerance is allowed, the search will sacrifice some criterion + # to use a smaller order of Fourier series. + if tolerance > 0: + aic_tol = min_aic + abs(min_aic) * tolerance + bic_tol = min_bic + abs(min_bic) * tolerance + # Eligible criteria are those that are less than or equal to the tolerance. + # The original minimums are guaranteed to be in the lists. + eligible_aics = [aic for aic in aics if aic <= aic_tol] + eligible_bics = [bic for bic in bics if bic <= bic_tol] + # The first element is guaranteed to have order no greater than the original minimum. + min_aic = eligible_aics[0] + min_bic = eligible_bics[0] + + best_aic_order = max(orders[aics.index(min_aic)] + offset, 0) + best_bic_order = max(orders[bics.index(min_bic)] + offset, 0) + + # Gets the optional plot. + fig = None + if plotting: + fig = self._make_plot( + df=df, + df_features=df_features, + model_class=model_class, + time_col=time_col, + value_col=value_col, + orders=orders, + aics=aics, + bics=bics, + best_aic_order=best_aic_order, + best_bic_order=best_bic_order + ) + + return { + "seas_name": seas_name, + "orders": orders, + "aics": aics, + "bics": bics, + "best_aic_order": best_aic_order, + "best_bic_order": best_bic_order, + "fig": fig + } + + def _make_plot( + self, + df: pd.DataFrame, + df_features: pd.DataFrame, + model_class: any, + time_col: str, + value_col: str, + orders: List[int], + aics: List[float], + bics: List[float], + best_aic_order: int, + best_bic_order: int) -> go.Figure: + """Makes a figure that contains 2-3 subplots. + The subplots are: + + - AIC/BIC vs. Fourier series orders. + - De-trended and aggregated time series vs fitted curves with best AIC/BICs. + - (Optional) the original time series, the fitted trend and the de-trended and aggregated + time series. + + Parameters + ---------- + df : `pandas.DataFrame` + The input time series after de-trend and aggregation. + df_features : `pandas.DataFrame` + The time series with seasonality features generated. + model_class : `any` + The class type for the model to fit the seasonality curve. + time_col : `str` + The column name for timestamps in ``df``. + value_col : `str` + The column name for values in ``df``. + orders : `list` [`int`] + The orders used in calculating ``aics`` and ``bics``. + aics : `list` [`float`] + The AICs corresponding to ``orders``. + bics : `list` [`float`] + The BICs corresponding to ``orders``. + best_aic_order : `int` + The best AIC order. + best_bic_order : `int + The best BIC order. + + Returns + ------- + fig : `plotly.graph_object.Figure` + The figure object. + """ + rows = 2 + subtitles = ( + "Criteria vs. Fourier series orders", + "Fitted seasonality on best orders" + ) + # If both original df and trend adjusted df are available, + # we include the trend adjustment visualization, too. + if (self.df is not None and time_col in self.df + and value_col in self.df and self.FITTED_TREND_COL in df): + rows += 1 + subtitles += ( + "Original time series and detrended/aggregated time series", + ) + fig = make_subplots( + rows=rows, + cols=1, + subplot_titles=subtitles, + vertical_spacing=0.1 + ) + # Adds metric plot. + metrics = { + "AIC": [aics, best_aic_order, "dash"], + "BIC": [bics, best_bic_order, None] + } + for i, (metric, value) in enumerate(metrics.items()): + fig.add_trace( + go.Scatter( + x=orders, + y=value[0], + name=metric, + mode="lines", + showlegend=True, + line=dict(color=DEFAULT_PLOTLY_COLORS[i], dash=value[2]) + ), + row=1, + col=1 + ) + fig.add_vline( + x=value[1], + name=f"best_{metric}_order", + line=dict(color=DEFAULT_PLOTLY_COLORS[i], dash=value[2]) + ) + # Adds fit plot. + fig.add_trace( + go.Scatter( + x=df[time_col], + y=df[value_col], + name="Timeseries", + showlegend=True, + line=dict(color="black") + ), + row=2, + col=1 + ) + best_orders = { + "best_AIC_order_fit": best_aic_order, + "best_BIC_order_fit": best_bic_order + } + for i, (name, order) in enumerate(best_orders.items()): + model = model_class() + features = [ + col for col in df_features.columns + if col != value_col + # After split, the 1st element is sin{order} or cos{order}. + # Takes the order to compare with the current order. + and int(col.split("_")[0][3:]) <= order + ] + if order > 0: + model.fit(df_features[features], df_features[value_col]) + pred = model.predict(df_features[features]) + else: + pred = np.repeat([df_features[value_col].mean()], len(df_features)) + fig.add_trace( + go.Scatter( + x=df[time_col], + y=pred, + name=name, + mode="lines", + showlegend=True, + line=dict(color=DEFAULT_PLOTLY_COLORS[2 + i]) + ), + row=2, + col=1 + ) + + # Adds trend adjustment plot. + if rows == 3: + fig.add_trace( + go.Scatter( + x=self.df[time_col], + y=self.df[value_col], + name="Original time series", + mode="lines", + showlegend=True + ), + row=3, + col=1 + ) + fig.add_trace( + go.Scatter( + x=df[time_col], + y=df[value_col], + name="Detrend/aggregated time series", + mode="lines", + showlegend=True, + line=dict(color="black") + ), + row=3, + col=1 + ) + fig.add_trace( + go.Scatter( + x=df[time_col], + y=df[self.FITTED_TREND_COL], + name="Fitted trend", + mode="lines", + showlegend=True + ), + row=3, + col=1 + ) + + fig.update_xaxes( + title_text="Fourier series order", + row=1, + col=1 + ) + fig.update_xaxes( + title_text="Timestamp", + row=2, + col=1 + ) + fig.update_yaxes( + title_text="Criteria", + row=1, + col=1 + ) + fig.update_yaxes( + title_text="Timeseries", + row=2, + col=1 + ) + if rows == 3: + fig.update_xaxes( + title_text="Timestamp", + row=3, + col=1 + ) + fig.update_yaxes( + title_text="Timeseries", + row=3, + col=1 + ) + fig.update_layout( + title_text="Inferred seasonality Fourier series orders", + height=1000 + ) + return fig diff --git a/greykite/algo/forecast/silverkite/auto_config.py b/greykite/algo/forecast/silverkite/auto_config.py new file mode 100644 index 0000000..18add6b --- /dev/null +++ b/greykite/algo/forecast/silverkite/auto_config.py @@ -0,0 +1,322 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Kaixu Yang +"""Automatically populates parameters based on input time series.""" + +from datetime import timedelta +from typing import Dict +from typing import List +from typing import Optional + +import numpy as np +import pandas as pd + +from greykite.algo.changepoint.adalasso.auto_changepoint_params import generate_trend_changepoint_detection_params +from greykite.algo.common.holiday_inferrer import HolidayInferrer +from greykite.algo.common.seasonality_inferrer import SeasonalityInferConfig +from greykite.algo.common.seasonality_inferrer import SeasonalityInferrer +from greykite.algo.common.seasonality_inferrer import TrendAdjustMethodEnum +from greykite.common.constants import GrowthColEnum +from greykite.common.constants import TimeFeaturesEnum + + +def get_auto_seasonality( + df: pd.DataFrame, + time_col: str, + value_col: str, + yearly_seasonality: bool = True, + quarterly_seasonality: bool = True, + monthly_seasonality: bool = True, + weekly_seasonality: bool = True, + daily_seasonality: bool = True): + """Automatically infers the following seasonality Fourier series orders: + + - yearly seasonality + - quarterly seasonality + - monthly seasonality + - weekly seasonality + - daily seasonality + + The inferring is done with `~greykite.algo.common.seasonality_inferrer.SeasonalityInferrer`. + + Parameters + ---------- + df : `pandas.DataFrame` + The input time series. + time_col : `str` + The column name for timestamps in ``df``. + value_col : `str` + The column name for values in ``df``. + yearly_seasonality : `bool`, default True + If False, the yearly seasonality order will be forced to be zero + regardless of the inferring result. + quarterly_seasonality : `bool`, default True + If False, the quarterly seasonality order will be forced to be zero + regardless of the inferring result. + monthly_seasonality : `bool`, default True + If False, the monthly seasonality order will be forced to be zero + regardless of the inferring result. + weekly_seasonality : `bool`, default True + If False, the weekly seasonality order will be forced to be zero + regardless of the inferring result. + daily_seasonality : `bool`, default True + If False, the daily seasonality order will be forced to be zero + regardless of the inferring result. + + Returns + ------- + result : `dict` + A dictionary with the keys being: + + - "yearly_seasonality" + - "quarterly_seasonality" + - "monthly_seasonality" + - "weekly_seasonality" + - "daily_seasonality" + + and values being the corresponding inferred Fourier series orders. + """ + result = dict() + seasonalities = ["yearly_seasonality", "quarterly_seasonality", "monthly_seasonality", + "weekly_seasonality", "daily_seasonality"] + seasonality_defaults = [yearly_seasonality, quarterly_seasonality, monthly_seasonality, + weekly_seasonality, daily_seasonality] + # Iterate through the five seasonality frequencies. + # Frequencies that are less than or equal to the data frequency will have order 0. + df = df.copy() + df[time_col] = pd.to_datetime(df[time_col]) + min_increment = min((df[time_col] - df[time_col].shift(1)).dropna()) + # Yearly seasonality/quarterly seasonality is activated when data is at most weekly. + # For monthly data, it will not return yearly seasonality but will try to use "C(month)". + configs = [] + if min_increment <= timedelta(days=7): + yearly_config = SeasonalityInferConfig( + seas_name="yearly", + col_name=TimeFeaturesEnum.toy.name, + period=1.0, + max_order=30, + adjust_trend_param=dict( + trend_average_col=TimeFeaturesEnum.year.name + ), + aggregation_period="W" + ) + quarterly_config = SeasonalityInferConfig( + seas_name="quarterly", + col_name=TimeFeaturesEnum.toq.name, + period=1.0, + max_order=10, + adjust_trend_param=dict( + trend_average_col=TimeFeaturesEnum.year_quarter.name + ), + aggregation_period="W" + ) + configs += [yearly_config, quarterly_config] + # Monthly/weekly seasonality is activated when data is at most daily. + if min_increment <= timedelta(days=1): + monthly_config = SeasonalityInferConfig( + seas_name="monthly", + col_name=TimeFeaturesEnum.tom.name, + period=1.0, + max_order=10, + adjust_trend_param=dict( + trend_average_col=TimeFeaturesEnum.year_month.name + ), + aggregation_period="D" + ) + weekly_config = SeasonalityInferConfig( + seas_name="weekly", + col_name=TimeFeaturesEnum.tow.name, + period=7.0, + max_order=5, + adjust_trend_param=dict( + trend_average_col=TimeFeaturesEnum.year_woy_iso.name + ), + aggregation_period=None + ) + configs += [monthly_config, weekly_config] + # Daily seasonality is activated when data is at most hourly. + if min_increment <= timedelta(hours=1): + daily_config = SeasonalityInferConfig( + seas_name="daily", + col_name=TimeFeaturesEnum.tod.name, + period=24.0, + max_order=15, + adjust_trend_param=dict( + trend_average_col=TimeFeaturesEnum.year_woy_dow_iso.name + ), + aggregation_period=None + ) + configs += [daily_config] + + # Infers seasonality orders. + seasonality_inferrer = SeasonalityInferrer() + seasonality_result = seasonality_inferrer.infer_fourier_series_order( + df=df, + time_col=time_col, + value_col=value_col, + configs=configs, + adjust_trend_method=TrendAdjustMethodEnum.seasonal_average.name, + fit_algorithm="ridge", + tolerance=0.0, + plotting=False, + offset=0, + criterion="bic" + ) + + # Transforms seasonality infer results to dictionary. + for seasonality, default in zip(seasonalities, seasonality_defaults): + # Seasonalities are named like "yearly_seasonality" while the keys in the result are like "yearly". + # If a seasonality is not found in the result, the default is 0. + if default is not False: + result[seasonality] = seasonality_result["best_orders"].get(seasonality.split("_")[0], 0) + else: + result[seasonality] = 0 + + return result + + +def get_auto_growth( + df: pd.DataFrame, + time_col: str, + value_col: str, + forecast_horizon: int, + changepoints_dict_override: Optional[dict] = None): + """Automatically gets the parameters for growth. + + Parameters + ---------- + df : `pandas.DataFrame` + The input time series. + time_col : `str` + The column name for timestamps in ``df``. + value_col : `str` + The column name for values in ``df``. + forecast_horizon : `int` + The forecast horizon. + changepoints_dict_override : `dict` or None, default None + The changepoints configuration. + If the following customized dates related keys are given, + they will be copied to the final configuration: + + - "dates" + - "combine_changepoint_min_distance" + - "keep_detected" + + Returns + ------- + result : `dict` + A dictionary with the following keys: + + - "growth_term": `str` + The growth term. + - "changepoints_dict": `dict` + The changepoints configuration used for automatic changepoint detection. + + """ + # Gets the growth and changepoints configurations. + growth_term = GrowthColEnum.linear.name + trend_changepoints_param = generate_trend_changepoint_detection_params( + df=df, + forecast_horizon=forecast_horizon, + time_col=time_col, + value_col=value_col + ) + trend_changepoints_param["method"] = "auto" + # Inherits the user specified dates. + if changepoints_dict_override is not None and changepoints_dict_override.get("method", None) != "custom": + for key in ["dates", "combine_changepoint_min_distance", "keep_detected"]: + if key in changepoints_dict_override: + trend_changepoints_param[key] = changepoints_dict_override[key] + return dict( + growth_term=growth_term, + changepoints_dict=trend_changepoints_param + ) + + +def get_auto_holidays( + df: pd.DataFrame, + time_col: str, + value_col: str, + countries: List[str] = ("UnitedStates", "India", "UnitedKingdom"), + forecast_horizon: Optional[int] = None, + daily_event_dict_override: Optional[Dict[str, pd.DataFrame]] = None): + """Automatically infers significant holidays and their neighboring days. + + Parameters + ---------- + df : `pandas.DataFrame` + The input time series. + time_col : `str` + The column name for timestamps in ``df``. + value_col : `str` + The column name for values in ``df``. + countries : `list` [`str`], default ("UnitedStates", "India", "UnitedKingdom") + A list of countries to look up holidays. + forecast_horizon : `int` or None, default None + The forecast horizon used to calculate the years needed to populate holidays. + daily_event_dict_override : `dict` [`str`, `pandas.DataFrame`] or None, default None + The daily event dict passed to the configuration. + When auto holiday is activated, + the entries in ``daily_event_dict`` will be added + to the holidays' ``daily_event_dict``. + + Returns + ------- + daily_event_dict : `dict` [`str`, `pandas.DataFrame`] + A dictionary with the keys being the event names + and values being the dataframes including 2 columns: + + - EVENT_DF_DATE_COL : the events' occurrence dates. + - EVENT_DF_LABEL_COL : the events' names. + + """ + # Calculates the number of extra years needed to cover the forecast period. + if forecast_horizon and forecast_horizon > 0: + timestamps = pd.to_datetime(df[time_col]) + min_increment = min((timestamps - timestamps.shift(1)).dropna()) + min_increment_in_days = min_increment / timedelta(days=1) + forecast_horizon_in_days = min_increment_in_days * forecast_horizon + extra_years = int(np.ceil(forecast_horizon_in_days / 366)) + 2 # +2 in case of incomplete years + else: + extra_years = 3 + # Automatically infers holidays. + hi = HolidayInferrer() + result = hi.infer_holidays( + df=df, + time_col=time_col, + value_col=value_col, + countries=countries, + pre_search_days=2, + post_search_days=2, + baseline_offsets=[-7, 7], + plot=False, + independent_holiday_thres=0.85, + together_holiday_thres=0.95, + extra_years=extra_years + ) + if result is None: + # This happens when data is super-daily. + holiday_dict = {} + else: + holiday_dict = hi.generate_daily_event_dict() + if daily_event_dict_override is None: + daily_event_dict_override = {} + # Updates the result with pre-specified daily events. + holiday_dict.update(daily_event_dict_override) + return holiday_dict diff --git a/greykite/algo/forecast/silverkite/constants/silverkite_component.py b/greykite/algo/forecast/silverkite/constants/silverkite_component.py index 8747425..d0225cf 100644 --- a/greykite/algo/forecast/silverkite/constants/silverkite_component.py +++ b/greykite/algo/forecast/silverkite/constants/silverkite_component.py @@ -19,6 +19,8 @@ from enum import Enum from typing import Type +from greykite.common.constants import TimeFeaturesEnum + @dataclass class SilverkiteComponent: @@ -34,27 +36,27 @@ class SilverkiteComponentsEnum(Enum): """Defines groupby time feature, xlabel and ylabel for Silverkite Component Plots.""" DAILY_SEASONALITY: SilverkiteComponent = SilverkiteComponent( - groupby_time_feature="tod", + groupby_time_feature=TimeFeaturesEnum.tod.value, xlabel="Hour of day", ylabel="daily") WEEKLY_SEASONALITY: SilverkiteComponent = SilverkiteComponent( - groupby_time_feature="tow", + groupby_time_feature=TimeFeaturesEnum.tow.value, xlabel="Day of week", ylabel="weekly") MONTHLY_SEASONALITY: SilverkiteComponent = SilverkiteComponent( - groupby_time_feature="tom", + groupby_time_feature=TimeFeaturesEnum.tom.value, xlabel="Time of month", ylabel="monthly") QUARTERLY_SEASONALITY: SilverkiteComponent = SilverkiteComponent( - groupby_time_feature="toq", + groupby_time_feature=TimeFeaturesEnum.toq.value, xlabel="Time of quarter", ylabel="quarterly") YEARLY_SEASONALITY: SilverkiteComponent = SilverkiteComponent( - groupby_time_feature="toy", + groupby_time_feature=TimeFeaturesEnum.toy.value, xlabel="Time of year", ylabel="yearly") diff --git a/greykite/algo/forecast/silverkite/constants/silverkite_seasonality.py b/greykite/algo/forecast/silverkite/constants/silverkite_seasonality.py index 806e049..be7f6eb 100644 --- a/greykite/algo/forecast/silverkite/constants/silverkite_seasonality.py +++ b/greykite/algo/forecast/silverkite/constants/silverkite_seasonality.py @@ -19,6 +19,7 @@ from enum import Enum from typing import Type +from greykite.common.constants import TimeFeaturesEnum from greykite.common.enums import TimeEnum @@ -49,7 +50,7 @@ class SilverkiteSeasonalityEnum(Enum): """ DAILY_SEASONALITY: SilverkiteSeasonality = SilverkiteSeasonality( - name="tod", + name=TimeFeaturesEnum.tod.value, period=24.0, order=12, seas_names="daily", @@ -59,7 +60,7 @@ class SilverkiteSeasonalityEnum(Enum): """ WEEKLY_SEASONALITY: SilverkiteSeasonality = SilverkiteSeasonality( - name="tow", + name=TimeFeaturesEnum.tow.value, period=7.0, order=4, seas_names="weekly", @@ -69,7 +70,7 @@ class SilverkiteSeasonalityEnum(Enum): """ MONTHLY_SEASONALITY: SilverkiteSeasonality = SilverkiteSeasonality( - name="tom", + name=TimeFeaturesEnum.tom.value, period=1.0, order=2, seas_names="monthly", @@ -77,7 +78,7 @@ class SilverkiteSeasonalityEnum(Enum): """``tom`` is 0-1 time of month (tom granularity based on input data, up to daily level).""" QUARTERLY_SEASONALITY: SilverkiteSeasonality = SilverkiteSeasonality( - name="toq", + name=TimeFeaturesEnum.toq.value, period=1.0, order=5, seas_names="quarterly", @@ -88,7 +89,7 @@ class SilverkiteSeasonalityEnum(Enum): """ YEARLY_SEASONALITY: SilverkiteSeasonality = SilverkiteSeasonality( - name="ct1", + name=TimeFeaturesEnum.ct1.value, period=1.0, order=15, seas_names="yearly", diff --git a/greykite/algo/forecast/silverkite/forecast_silverkite.py b/greykite/algo/forecast/silverkite/forecast_silverkite.py index b849773..2cfb24e 100644 --- a/greykite/algo/forecast/silverkite/forecast_silverkite.py +++ b/greykite/algo/forecast/silverkite/forecast_silverkite.py @@ -38,14 +38,16 @@ from greykite.algo.forecast.silverkite.constants.silverkite_constant import default_silverkite_constant from greykite.algo.forecast.silverkite.constants.silverkite_seasonality import SilverkiteSeasonalityEnum from greykite.algo.forecast.silverkite.constants.silverkite_seasonality import SilverkiteSeasonalityEnumMixin +from greykite.algo.forecast.silverkite.forecast_silverkite_helper import get_fourier_feature_col_names from greykite.algo.forecast.silverkite.forecast_silverkite_helper import get_similar_lag from greykite.common.constants import CHANGEPOINT_COL_PREFIX from greykite.common.constants import ERR_STD_COL +from greykite.common.constants import QUANTILE_SUMMARY_COL from greykite.common.constants import SEASONALITY_REGEX +from greykite.common.constants import TimeFeaturesEnum from greykite.common.enums import TimeEnum from greykite.common.features.timeseries_features import add_daily_events from greykite.common.features.timeseries_features import add_time_features_df -from greykite.common.features.timeseries_features import build_time_features_df from greykite.common.features.timeseries_features import fourier_series_multi_fcn from greykite.common.features.timeseries_features import get_changepoint_dates_from_changepoints_dict from greykite.common.features.timeseries_features import get_changepoint_features @@ -96,7 +98,10 @@ def forecast( fit_algorithm_params=None, daily_event_df_dict=None, fs_components_df=pd.DataFrame({ - "name": ["tod", "tow", "toy"], + "name": [ + TimeFeaturesEnum.tod.value, + TimeFeaturesEnum.tow.value, + TimeFeaturesEnum.toy.value], "period": [24.0, 7.0, 1.0], "order": [3, 3, 5], "seas_names": ["daily", "weekly", "yearly"]}), @@ -115,7 +120,8 @@ def forecast( regression_weight_col=None, forecast_horizon=None, simulation_based=False, - simulation_num=10): + simulation_num=10, + fast_simulation=False): """A function for forecasting. It captures growth, seasonality, holidays and other patterns. See "Capturing the time-dependence in the precipitation process for @@ -428,7 +434,8 @@ def forecast( normalize_method : `str` or None, default None If a string is provided, it will be used as the normalization method in `~greykite.common.features.normalize.normalize_df`, passed via - the argument ``method``. Available options are: "min_max", "statistical". + the argument ``method``. + Available options are: "zero_to_one", "statistical", "minus_half_to_half", "zero_at_origin". If None, no normalization will be performed. See that function for more details. adjust_anomalous_dict : `dict` or None, default None @@ -482,6 +489,13 @@ def forecast( simulation_num : `int`, default 10 The number of simulations for when simulations are used for generating forecasts and prediction intervals. + fast_simulation: `bool`, default False + Deterimes if fast simulations are to be used. This only impacts models + which include auto-regression. This method will only generate one simulation + without any error being added and then add the error using the volatility + model. The advantage is a major boost in speed during inference and the + disadvantage is potentially less accurate prediction intervals. + Returns ------- @@ -601,6 +615,9 @@ def forecast( num_training_points = df.shape[0] adjust_anomalous_info = None + if simulation_num is not None: + assert simulation_num > 0, "simulation number must be a natural number" + if past_df is not None: if past_df.shape[0] == 0: past_df = None @@ -657,7 +674,7 @@ def forecast( forecast_horizon_in_days = inferred_freq_in_days * forecast_horizon if extra_pred_cols is None: - extra_pred_cols = ["ct1"] # linear in time + extra_pred_cols = [TimeFeaturesEnum.ct1.value] # linear in time # Makes sure the ``train_test_thresh`` is within the data last_time_available = max(df[time_col]) @@ -744,12 +761,12 @@ def forecast( seas_names=fs_components_df.get("seas_names") ) # Determines fourier series column names for use in "build_features" - # to save computation, only need a few rows are needed - time_features_example_df = build_time_features_df( - df[time_col][:2], - conti_year_origin=origin_for_time_vars) - fs = fs_func(time_features_example_df) - fs_cols = fs["cols"] + fs_cols = get_fourier_feature_col_names( + df=df, + time_col=time_col, + fs_func=fs_func, + conti_year_origin=origin_for_time_vars + ) # Removes fs_cols with perfect or almost perfect collinearity for OLS. # For example, yearly seasonality with order 4 and quarterly seasonality with order 1, and etc. if fit_algorithm in ["linear", "statsmodels_wls", "statsmodels_gls"]: @@ -1014,6 +1031,7 @@ def forecast( trained_model["forecast_horizon_in_timedelta"] = forecast_horizon_in_timedelta trained_model["simulation_based"] = simulation_based trained_model["simulation_num"] = simulation_num + trained_model["fast_simulation"] = fast_simulation return trained_model @@ -1056,9 +1074,11 @@ def predict_no_sim( The same as input dataframe with an added column for the response. If value_col already appears in ``fut_df``, it will be over-written. If ``uncertainty_dict`` is provided as input, - it will also contain a ``{value_col}_quantile_summary`` column. + it will also contain a ``QUANTILE_SUMMARY_COL`` column. - "x_mat": `pandas.DataFrame` Design matrix of the predictive machine-learning model + - "features_df": `pandas.DataFrame` + The features dataframe used for prediction. """ fut_df = fut_df.copy() @@ -1076,13 +1096,28 @@ def predict_no_sim( "or it was not long enough to calculate all necessery lags " f"which is equal to `max_lag_order`={max_lag_order}") - if max_lagged_regressor_order is not None and (past_df is None or past_df.shape[0] < max_lagged_regressor_order): + if max_lagged_regressor_order is not None and ( + past_df is None or past_df.shape[0] < max_lagged_regressor_order): warnings.warn( "The lagged regressor data had to be interpolated at predict time." "`past_df` was either not passed to `predict_silverkite` " "or it was not long enough to calculate all necessery lags " f"which is equal to `max_lagged_regressor_order`={max_lagged_regressor_order}") + # This is the overall maximum lag order + max_order = None + if max_lag_order is not None and max_lagged_regressor_order is not None: + max_order = np.max([ + max_lag_order, + max_lagged_regressor_order]) + elif max_lag_order is not None: + max_order = max_lag_order + elif max_lagged_regressor_order is not None: + max_order = max_lagged_regressor_order + # We only keep the rows needed in ``past_df`` + if past_df is not None and max_order is not None and len(past_df) > max_order: + past_df = past_df.tail(max_order).reset_index(drop=True) + # adds extra regressors if provided if new_external_regressor_df is None or regressors_ready: features_df_fut = fut_df @@ -1125,7 +1160,7 @@ def predict_no_sim( if phase == "predict": # If phase is predict, we do not allow using ``value_col``. # The AR lags should be enough since otherwise one would use ``predict_via_sim``. - df = pd.DataFrame({value_col: [np.nan]*fut_df.shape[0]}) + df = pd.DataFrame({value_col: [np.nan] * fut_df.shape[0]}) df.index = fut_df.index else: # If phase is fit, we keep the values in ``value_col``. @@ -1187,7 +1222,7 @@ def predict_no_sim( x_mat = pred_res["x_mat"] else: # predictions are stored to ``value_col`` - # quantiles are stored to ``f"{value_col}_quantile_summary"`` + # quantiles are stored to ``QUANTILE_SUMMARY_COL`` pred_res = predict_ml_with_uncertainty( fut_df=features_df_fut, trained_model=trained_model) @@ -1195,13 +1230,14 @@ def predict_no_sim( x_mat = pred_res["x_mat"] # Makes sure to return only necessary columns - potential_forecast_cols = [time_col, value_col, f"{value_col}_quantile_summary", ERR_STD_COL] + potential_forecast_cols = [time_col, value_col, QUANTILE_SUMMARY_COL, ERR_STD_COL] existing_forecast_cols = [col for col in potential_forecast_cols if col in fut_df.columns] fut_df = fut_df[existing_forecast_cols] return { "fut_df": fut_df, - "x_mat": x_mat} + "x_mat": x_mat, + "features_df": features_df_fut} def predict_n_no_sim( self, @@ -1240,7 +1276,7 @@ def predict_n_no_sim( The same as input dataframe with an added column for the response. If value_col already appears in ``fut_df``, it will be over-written. If ``uncertainty_dict`` is provided as input, - it will also contain a ``{value_col}_quantile_summary`` column. + it will also contain a ``QUANTILE_SUMMARY_COL`` column. - "x_mat": `pandas.DataFrame` Design matrix of the predictive machine-learning model @@ -1302,28 +1338,46 @@ def simulate( The same as input dataframe with an added column for the response. If value_col already appears in ``fut_df``, it will be over-written. If ``uncertainty_dict`` is provided as input, - it will also contain a ``{value_col}_quantile_summary`` column. + it will also contain a ``QUANTILE_SUMMARY_COL`` column. Here are the expected columns: (1) A time column with the column name being ``trained_model["time_col"]`` (2) The predicted response in ``value_col`` column. - (3) Quantile summary response in ``f"{value_col}_quantile_summary`` column. + (3) Quantile summary response in ``QUANTILE_SUMMARY_COL`` column. This column only appears if the model includes uncertainty. (4) Error std in `ERR_STD_COL` column. This column only appears if the model includes uncertainty. - "x_mat": `pandas.DataFrame` Design matrix of the predictive machine-learning model + - "features_df": `pandas.DataFrame` + The features dataframe used for prediction. """ - n = fut_df.shape[0] + n = len(fut_df) past_df_sim = None if past_df is None else past_df.copy() - fut_df = fut_df.copy() + fut_df = fut_df.reset_index(drop=True) fut_df_sim = fut_df.copy() time_col = trained_model["time_col"] value_col = trained_model["value_col"] fut_df_sim[value_col] = np.nan fut_df_sim = fut_df_sim.astype({value_col: "float64"}) + max_lag_order = trained_model["max_lag_order"] + max_lagged_regressor_order = trained_model["max_lagged_regressor_order"] + # overall maximum lag order + max_order = None + if max_lag_order is not None and max_lagged_regressor_order is not None: + max_order = np.max([ + max_lag_order, + max_lagged_regressor_order]) + elif max_lag_order is not None: + max_order = max_lag_order + elif max_lagged_regressor_order is not None: + max_order = max_lagged_regressor_order + + # Only need to keep the last relevant rows to calculate AR terms + if past_df_sim is not None and max_order is not None and len(past_df_sim) > max_order: + past_df_sim = past_df_sim.tail(max_order) # adds the other features if time_features_ready is not True: @@ -1348,8 +1402,10 @@ def simulate( sort=False) x_mat_list = [] + features_df_list = [] for i in range(n): fut_df_sub = fut_df.iloc[[i]].reset_index(drop=True) + assert len(fut_df_sub) == 1, "the subset dataframe must have only one row" pred_res = self.predict_no_sim( fut_df=fut_df_sub, @@ -1360,8 +1416,13 @@ def simulate( regressors_ready=True) fut_df_sub = pred_res["fut_df"] + # we expect the returned prediction will have only one row + assert len(fut_df_sub) == 1 + x_mat = pred_res["x_mat"] + features_df = pred_res["features_df"] x_mat_list.append(x_mat) + features_df_list.append(features_df) fut_df_sim.at[i, value_col] = fut_df_sub[value_col].values[0] @@ -1372,15 +1433,18 @@ def simulate( loc=0.0, scale=scale) fut_df_sim.at[i, value_col] = ( - fut_df_sub[value_col].values[0] - + err) + fut_df_sub[value_col].values[0] + + err) else: raise ValueError( "Error is requested via ``include_err = True``. " f"However the std column ({ERR_STD_COL}) " "does not appear in the prediction") - past_df_increment = fut_df_sim[[value_col]] + # we get the last prediction value and concat that to the end of + # ``past_df`` + past_df_increment = fut_df_sub[[value_col]] + assert len(past_df_increment) == 1 if past_df_sim is None: past_df_sim = past_df_increment else: @@ -1389,15 +1453,29 @@ def simulate( axis=0, sort=False) + # Only need to keep the last relevant rows to calculate AR terms + if past_df_sim is not None and max_order is not None and len(past_df_sim) > max_order: + past_df_sim = past_df_sim.tail(max_order) + past_df_sim = past_df_sim.reset_index(drop=True) + x_mat = pd.concat( x_mat_list, axis=0, ignore_index=True, # The index does not matter as we simply want to stack up the data sort=False) + assert len(x_mat) == len(fut_df), "The design matrix size (number of rows) used in simulation must have same size as the input" + + features_df = pd.concat( + features_df_list, + axis=0, + ignore_index=True, # The index does not matter as we simply want to stack up the data + sort=False) + assert len(features_df) == len(fut_df), "The features data size (number of rows) used in simulation must have same size as the input" return { "sim_df": fut_df_sim[[time_col, value_col]], - "x_mat": x_mat} + "x_mat": x_mat, + "features_df": features_df} def simulate_multi( self, @@ -1421,7 +1499,7 @@ def simulate_multi( simulation_num : `int` The number of simulated series, (each of which have the same number of rows as ``fut_df``) - to be stacked up row-wise. + to be stacked up row-wise. This number must be larger than zero. past_df : `pandas.DataFrame`, optional A data frame with past values if autoregressive methods are called via ``autoreg_dict`` parameter of ``greykite.algo.forecast.silverkite.SilverkiteForecast.py``. @@ -1451,6 +1529,7 @@ def simulate_multi( Note that the all copies will be the same except for the case where auto-regression is utilized. """ + assert simulation_num > 0, "simulation number has to be a natural number." if include_err is None: include_err = trained_model["uncertainty_dict"] is not None @@ -1498,9 +1577,9 @@ def one_sim_func(label): sim_df = sim_res["sim_df"] x_mat = sim_res["x_mat"] sim_df["sim_label"] = label - # ``x_mat`` does not necessarily have an index column - # we keet track of the original index, to be able to aggregate - # across simulations later + # ``x_mat`` does not necessarily have an index column. + # We keep track of the original index, to be able to aggregate + # across simulations later. x_mat["original_row_index"] = range(len(fut_df)) return { @@ -1571,12 +1650,12 @@ def predict_via_sim( The same as input dataframe with an added column for the response. If value_col already appears in ``fut_df``, it will be over-written. If ``uncertainty_dict`` is provided as input, - it will also contain a ``{value_col}_quantile_summary`` column. + it will also contain a ``QUANTILE_SUMMARY_COL`` column. Here are the expected columns: (1) A time column with the column name being ``trained_model["time_col"]`` (2) The predicted response in ``value_col`` column. - (3) Quantile summary response in ``f"{value_col}_quantile_summary`` column. + (3) Quantile summary response in ``QUANTILE_SUMMARY_COL`` column. This column only appears if the model includes uncertainty. (4) Error std in `ERR_STD_COL` column. This column only appears if the model includes uncertainty. @@ -1623,7 +1702,7 @@ def quantile_summary(x): agg_df.columns = [ time_col, value_col, - f"{value_col}_quantile_summary", + QUANTILE_SUMMARY_COL, ERR_STD_COL] # When there is no uncertainty dict, the uncertainty columns are NA. @@ -1644,6 +1723,97 @@ def quantile_summary(x): "fut_df": agg_df, "x_mat": x_mat} + def predict_via_sim_fast( + self, + fut_df, + trained_model, + past_df=None, + new_external_regressor_df=None): + """Performs predictions and calculates uncertainty using + one simulation of future and calculate the error separately + (not relying on multiple simulations). Due to this the prediction + intervals well into future will be narrower than ``predict_via_sim`` + and therefore less accurate. However there will be a major speed gain + which might be important in some use cases. + + Parameters + ---------- + fut_df : `pandas.DataFrame` + The data frame which includes the timestamps for prediction + and possibly regressors. + trained_model : `dict` + A fitted silverkite model which is the output of ``self.forecast``. + past_df : `pandas.DataFrame` or None, default None + A data frame with past values if autoregressive methods are called + via ``autoreg_dict`` parameter of ``greykite.algo.forecast.silverkite.SilverkiteForecast.py`` + new_external_regressor_df: `pandas.DataFrame` or None, default None + Contains the regressors not already included in ``fut_df``. + + Returns + ------- + result: `dict` + A dictionary with following items + + - "fut_df": `pandas.DataFrame` + The same as input dataframe with an added column for the response. + If value_col already appears in ``fut_df``, it will be over-written. + If ``uncertainty_dict`` is provided as input, + it will also contain a ``QUANTILE_SUMMARY_COL`` column. + Here are the expected columns: + + (1) A time column with the column name being ``trained_model["time_col"]`` + (2) The predicted response in ``value_col`` column. + (3) Quantile summary response in ``QUANTILE_SUMMARY_COL`` column. + This column only appears if the model includes uncertainty. + (4) Error std in `ERR_STD_COL` column. + This column only appears if the model includes uncertainty. + + - "x_mat": `pandas.DataFrame` + Design matrix of the predictive machine-learning model + - "features_df": `pandas.DataFrame` + The features dataframe used for prediction. + + """ + fut_df = fut_df.copy() + time_col = trained_model["time_col"] + value_col = trained_model["value_col"] + + # We only simulate one series without using any error during simulations + sim_res = self.simulate( + fut_df=fut_df, + trained_model=trained_model, + past_df=past_df, + new_external_regressor_df=new_external_regressor_df, + include_err=False) + x_mat = sim_res["x_mat"] + features_df = sim_res["features_df"] + + if trained_model["uncertainty_dict"] is None: + # predictions are stored to ``value_col`` + pred_res = predict_ml( + fut_df=features_df, + trained_model=trained_model) + fut_df = pred_res["fut_df"] + x_mat = pred_res["x_mat"] + else: + # predictions are stored to ``value_col`` + # quantiles are stored to ``QUANTILE_SUMMARY_COL`` + pred_res = predict_ml_with_uncertainty( + fut_df=features_df, + trained_model=trained_model) + fut_df = pred_res["fut_df"] + x_mat = pred_res["x_mat"] + + # Makes sure to return only necessary columns + potential_forecast_cols = [time_col, value_col, QUANTILE_SUMMARY_COL, ERR_STD_COL] + existing_forecast_cols = [col for col in potential_forecast_cols if col in fut_df.columns] + fut_df = fut_df[existing_forecast_cols] + + return { + "fut_df": fut_df, + "x_mat": x_mat, + "features_df": features_df} + def predict_n_via_sim( self, fut_time_num, @@ -1651,12 +1821,16 @@ def predict_n_via_sim( freq, new_external_regressor_df=None, simulation_num=10, + fast_simulation=False, include_err=None): """This is the forecast function which can be used to forecast. - This function's predictions are constructed using multiple simulations - from the fitted series. - The ``past_df`` to use in ``predict_silverkite_via_sim`` is set to - be the training data which is available in ``trained_model``. + This function's predictions are constructed using simulations + from the fitted series. This supports both ``predict_silverkite_via_sim`` + and ````predict_silverkite_via_sim_fast`` depending on value of the + passed argument ``fast_simulation``. + + The ``past_df`` is set to be the training data which is available + in ``trained_model``. It accepts extra regressors (``extra_pred_cols``) originally in ``df`` via ``new_external_regressor_df``. @@ -1673,12 +1847,19 @@ def predict_n_via_sim( Contains the extra regressors if specified. simulation_num : `int`, optional, default 10 The number of simulated series to be used in prediction. + fast_simulation: `bool`, default False + Deterimes if fast simulations are to be used. This only impacts models + which include auto-regression. This method will only generate one simulation + without any error being added and then add the error using the volatility + model. The advantage is a major boost in speed during inference and the + disadvantage is potentially less accurate prediction intervals. include_err : `bool`, optional, default None Boolean to determine if errors are to be incorporated in the simulations. If None, it will be set to True if uncertainty is passed to the model and otherwise will be set to False Returns + ------- result: `dict` A dictionary with following items @@ -1686,12 +1867,12 @@ def predict_n_via_sim( The same as input dataframe with an added column for the response. If value_col already appears in ``fut_df``, it will be over-written. If ``uncertainty_dict`` is provided as input, - it will also contain a ``{value_col}_quantile_summary`` column. + it will also contain a ``QUANTILE_SUMMARY_COL`` column. Here are the expected columns: (1) A time column with the column name being ``trained_model["time_col"]`` (2) The predicted response in ``value_col`` column. - (3) Quantile summary response in ``f"{value_col}_quantile_summary`` column. + (3) Quantile summary response in ``QUANTILE_SUMMARY_COL`` column. This column only appears if the model includes uncertainty. (4) Error std in `ERR_STD_COL` column. This column only appears if the model includes uncertainty. @@ -1721,6 +1902,13 @@ def predict_n_via_sim( past_df = trained_model["df"][[value_col]].reset_index(drop=True) + if fast_simulation: + return self.predict_via_sim_fast( + fut_df=fut_df, + trained_model=trained_model, + past_df=past_df, # observed data used for training the model + new_external_regressor_df=new_external_regressor_df) + return self.predict_via_sim( fut_df=fut_df, trained_model=trained_model, @@ -1738,6 +1926,8 @@ def predict( new_external_regressor_df=None, include_err=None, force_no_sim=False, + simulation_num=None, + fast_simulation=None, na_fill_func=lambda s: s.interpolate().bfill().ffill()): """Performs predictions using silverkite model. It determines if the prediction should be simulation-based or not and then @@ -1790,6 +1980,17 @@ def predict( In this case, the potential non-available lags will be imputed. Most users should not set this to True as the consequences could be hard to quantify. + simulation_num : `int` or None, default None + The number of simulations for when simulations are used for generating + forecasts and prediction intervals. If None, it will be inferred from + the model (``trained_model``). + fast_simulation: `bool` or None, default None + Deterimes if fast simulations are to be used. This only impacts models + which include auto-regression. This method will only generate one simulation + without any error being added and then add the error using the volatility + model. The advantage is a major boost in speed during inference and the + disadvantage is potentially less accurate prediction intervals. + If None, it will be inferred from the model (``trained_model``). na_fill_func : callable (`pd.DataFrame` -> `pd.DataFrame`) default:: @@ -1813,12 +2014,12 @@ def predict( The same as input dataframe with an added column for the response. If value_col already appears in ``fut_df``, it will be over-written. If ``uncertainty_dict`` is provided as input, - it will also contain a ``{value_col}_quantile_summary`` column. + it will also contain a ``QUANTILE_SUMMARY_COL`` column. Here are the expected columns: (1) A time column with the column name being ``trained_model["time_col"]`` (2) The predicted response in ``value_col`` column. - (3) Quantile summary response in ``f"{value_col}_quantile_summary`` column. + (3) Quantile summary response in ``QUANTILE_SUMMARY_COL`` column. This column only appears if the model includes uncertainty. (4) Error std in `ERR_STD_COL` column. This column only appears if the model includes uncertainty. @@ -1832,7 +2033,12 @@ def predict( value_col = trained_model["value_col"] min_lag_order = trained_model["min_lag_order"] max_lag_order = trained_model["max_lag_order"] - simulation_num = trained_model["simulation_num"] + + if simulation_num is None: + simulation_num = trained_model["simulation_num"] + + if fast_simulation is None: + fast_simulation = trained_model["fast_simulation"] if freq is None: freq = trained_model["freq"] @@ -1931,11 +2137,25 @@ def predict( # From here we assume model has autoregression, # because otherwise we would have returned above. - # Raises a warning if imputation is needed. - if ( - past_df[past_df[time_col] >= fut_df[time_col].min() - to_offset( - freq) * max_lag_order].isna().sum().sum() > 0 - or past_df[time_col].min() > fut_df[time_col].min() - to_offset(freq) * max_lag_order): + # Checks if imputation is needed. + # Writes to log message if imputation is needed for debugging purposes. + # This happens when + # (1) ``past_df`` is too short and does not cover the earliest lag needed. + # (2) ``past_df`` has missing values. + past_df_sufficient = True + # The check happens when ``freq`` is not None. + # We made sure ``freq`` is not None before but wanna add a safeguard. + if freq is not None: + pred_min_ts = fut_df[time_col].min() # the prediction period's minimum timestamp + past_df_min_ts = past_df[time_col].min() # the past df's minimum timestamp + lag_min_ts_needed = pred_min_ts - to_offset(freq) * max_lag_order # the minimum timestamp needed (max lag) + # Checks (1) if ``past_df`` covers the period after ``lag_min_ts_needed``. + past_df_sufficient = past_df_sufficient and (past_df_min_ts <= lag_min_ts_needed) + if past_df_sufficient: + # Checks (2) if ``past_df`` has any missing value after ``lag_min_ts_needed`` + past_df_after_min_ts = past_df[past_df[time_col] >= lag_min_ts_needed] + past_df_sufficient = past_df_sufficient and (past_df_after_min_ts[value_col].isna().sum() == 0) + if not past_df_sufficient: log_message( message="``past_df`` is not sufficient, imputation is performed when creating autoregression terms.", level=LoggingLevelEnum.DEBUG) @@ -1977,7 +2197,7 @@ def predict( on=time_col, how="left" ) - # Imputation will be done during `self.predict_no_sim` if ``past_df_before_min_timestamp`` + # Imputation will be done during ``self.predict_no_sim`` if ``past_df_before_min_timestamp`` # does not have sufficient AR terms. pred_res = self.predict_no_sim( fut_df=fut_df_before_training, @@ -1993,7 +2213,7 @@ def predict( fitted_df = trained_model["fitted_df"] fitted_x_mat = trained_model["x_mat"] - potential_forecast_cols = [time_col, value_col, f"{value_col}_quantile_summary", ERR_STD_COL] + potential_forecast_cols = [time_col, value_col, QUANTILE_SUMMARY_COL, ERR_STD_COL] existing_forecast_cols = [col for col in potential_forecast_cols if col in fitted_df.columns] fitted_df = fitted_df[existing_forecast_cols] @@ -2027,7 +2247,8 @@ def predict( # The future timestamps need to be predicted # There are two cases: either simulations are needed or not # This is decided as follows: - simulations_not_used = (not has_autoreg_structure) or force_no_sim or (inferred_forecast_horizon <= min_lag_order) + simulations_not_used = (not has_autoreg_structure) or force_no_sim or ( + inferred_forecast_horizon <= min_lag_order) # ``new_external_regressor_df`` will be passed as None # since it is already included in ``fut_df``. @@ -2047,6 +2268,14 @@ def predict( regressors_ready=True) fut_df0 = pred_res["fut_df"] x_mat0 = pred_res["x_mat"] + elif fast_simulation: + pred_res = self.predict_via_sim_fast( + fut_df=fut_df_after_training_expanded, + trained_model=trained_model, + past_df=past_df, + new_external_regressor_df=None) + fut_df0 = pred_res["fut_df"] + x_mat0 = pred_res["x_mat"] else: pred_res = self.predict_via_sim( fut_df=fut_df_after_training_expanded, @@ -2058,6 +2287,7 @@ def predict( fut_df0 = pred_res["fut_df"] x_mat0 = pred_res["x_mat"] fut_df0 = fut_df0[index_after_training_original] + x_mat0 = x_mat0[index_after_training_original] fut_df_list.append(fut_df0.reset_index(drop=True)) x_mat_list.append(x_mat0) @@ -2074,11 +2304,13 @@ def predict( sort=False) # Makes sure to return only necessary columns - potential_forecast_cols = [time_col, value_col, f"{value_col}_quantile_summary", ERR_STD_COL] + potential_forecast_cols = [time_col, value_col, QUANTILE_SUMMARY_COL, ERR_STD_COL] existing_forecast_cols = [col for col in potential_forecast_cols if col in fut_df_final.columns] fut_df_final = fut_df_final[existing_forecast_cols] - assert fut_df.shape[0] == fut_df_final.shape[0] + # Expects the created data has same size as the passed ``fut_df`` + assert len(fut_df_final) == len(fut_df), "The generated data at predict phase must have same length as input ``fut_df``" + assert len(x_mat_final) == len(fut_df), "The generated data at predict phase must have same length as input ``fut_df``" return { "fut_df": fut_df_final, @@ -2096,6 +2328,8 @@ def predict_n( new_external_regressor_df=None, include_err=None, force_no_sim=False, + simulation_num=None, + fast_simulation=None, na_fill_func=lambda s: s.interpolate().bfill().ffill()): """This is the forecast function which can be used to forecast a number of periods into the future. @@ -2118,6 +2352,13 @@ def predict_n( Contains the extra regressors if specified. simulation_num : `int`, optional, default 10 The number of simulated series to be used in prediction. + fast_simulation: `bool` or None, default None + Deterimes if fast simulations are to be used. This only impacts models + which include auto-regression. This method will only generate one simulation + without any error being added and then add the error using the volatility + model. The advantage is a major boost in speed during inference and the + disadvantage is potentially less accurate prediction intervals. + If None, it will be inferred from the model (``trained_model``). include_err : `bool` or None, default None Boolean to determine if errors are to be incorporated in the simulations. If None, it will be set to True if uncertainty is passed to the model and @@ -2146,12 +2387,12 @@ def predict_n( The same as input dataframe with an added column for the response. If value_col already appears in ``fut_df``, it will be over-written. If ``uncertainty_dict`` is provided as input, - it will also contain a ``{value_col}_quantile_summary`` column. + it will also contain a ``QUANTILE_SUMMARY_COL`` column. Here are the expected columns: (1) A time column with the column name being ``trained_model["time_col"]`` (2) The predicted response in ``value_col`` column. - (3) Quantile summary response in ``f"{value_col}_quantile_summary`` column. + (3) Quantile summary response in ``QUANTILE_SUMMARY_COL`` column. This column only appears if the model includes uncertainty. (4) Error std in `ERR_STD_COL` column. This column only appears if the model includes uncertainty. @@ -2177,6 +2418,8 @@ def predict_n( new_external_regressor_df=new_external_regressor_df, include_err=include_err, force_no_sim=force_no_sim, + simulation_num=simulation_num, + fast_simulation=fast_simulation, na_fill_func=na_fill_func) def partition_fut_df( @@ -2315,8 +2558,8 @@ def partition_fut_df( index_before_training = (fut_df[time_col] < training_start_timestamp) index_within_training = ( - (fut_df[time_col] >= training_start_timestamp) & - (fut_df[time_col] <= training_end_timestamp)) + (fut_df[time_col] >= training_start_timestamp) & + (fut_df[time_col] <= training_end_timestamp)) index_after_training = (fut_df[time_col] > training_end_timestamp) fut_df_before_training = fut_df[index_before_training] @@ -2366,9 +2609,9 @@ def partition_fut_df( # Imputes the missing values fut_df_expanded = na_fill_func(fut_df_expanded) index = ( - [False]*fut_df_within_training.shape[0] + - [True]*fut_df_gap.shape[0] + - [False]*fut_df_after_training.shape[0]) + [False] * fut_df_within_training.shape[0] + + [True] * fut_df_gap.shape[0] + + [False] * fut_df_after_training.shape[0]) fut_df_gap = fut_df_expanded[index].copy() inferred_forecast_horizon = fut_df_after_training.shape[0] @@ -2378,7 +2621,7 @@ def partition_fut_df( # Creates an expanded dataframe which includes the missing times # between the end of training and the forecast period fut_df_after_training_expanded = fut_df_after_training - index_after_training_original = [True]*fut_df_after_training.shape[0] + index_after_training_original = [True] * fut_df_after_training.shape[0] if fut_df_gap is not None: fut_df_after_training_expanded = pd.concat( [fut_df_gap, fut_df_after_training], @@ -2386,8 +2629,8 @@ def partition_fut_df( ignore_index=True, sort=False) index_after_training_original = ( - [False] * fut_df_gap.shape[0] + - [True] * fut_df_after_training.shape[0]) + [False] * fut_df_gap.shape[0] + + [True] * fut_df_after_training.shape[0]) forecast_partition_summary = { "len_before_training": fut_df_before_training.shape[0], @@ -2679,12 +2922,7 @@ def autoreg_func(df: pd.DataFrame, past_df: pd.DataFrame) -> f"`past_df` columns: {list(past_df.columns)}") autoreg_data = autoreg_func(df=df, past_df=past_df) - - # we concat the dataframes returned by `autoreg_func`, one by one - autoreg_df = None - for key, value in autoreg_data.items(): - if value is not None: - autoreg_df = pd.concat([autoreg_df, value], axis=1, sort=False) + autoreg_df = pd.concat(autoreg_data.values(), axis=1, sort=False) # Preserves the original index of `df` autoreg_df.index = df.index @@ -2841,25 +3079,27 @@ def __get_default_autoreg_dict( if simulation_based: orders = [1, 2, 3] # 1st, 2nd, 3rd time lags if similar_lag is not None: - interval_list = [(1, similar_lag), (similar_lag+1, similar_lag*2)] # weekly average of last week, and weekly average of two weeks ago + interval_list = [(1, similar_lag), ( + similar_lag + 1, + similar_lag * 2)] # weekly average of last week, and weekly average of two weeks ago orders_list = [[ - similar_lag, # (i) same week day in a week which is 7 days prior - similar_lag*2, # (ii) same week day a week before (i) - similar_lag*3]] # (iii) same week day in a week before (ii) + similar_lag, # (i) same week day in a week which is 7 days prior + similar_lag * 2, # (ii) same week day a week before (i) + similar_lag * 3]] # (iii) same week day in a week before (ii) else: # non-simulation-based case if forecast_horizon_in_days <= 30: - orders = [forecast_horizon, forecast_horizon+1, forecast_horizon+2] + orders = [forecast_horizon, forecast_horizon + 1, forecast_horizon + 2] if similar_lag is not None: interval_list = [ - (forecast_horizon, forecast_horizon+similar_lag-1), - (forecast_horizon + similar_lag, forecast_horizon+similar_lag*2-1)] + (forecast_horizon, forecast_horizon + similar_lag - 1), + (forecast_horizon + similar_lag, forecast_horizon + similar_lag * 2 - 1)] # The following will induce an average between three lags on the same time of week orders_list = [[ - proper_order, # (i) same time in week, in a week which is ``proper_order`` times prior - proper_order + similar_lag, # (ii) same time in a week before (i) - proper_order + similar_lag*2]] # (iii) same time in a week before (ii) + proper_order, # (i) same time in week, in a week which is ``proper_order`` times prior + proper_order + similar_lag, # (ii) same time in a week before (i) + proper_order + similar_lag * 2]] # (iii) same time in a week before (ii) if forecast_horizon_in_days <= 30: autoreg_dict = {} @@ -2949,13 +3189,13 @@ def __get_default_lagged_regressor_dict( if similar_lag is not None: interval_list = [ - (forecast_horizon, forecast_horizon+similar_lag-1)] + (forecast_horizon, forecast_horizon + similar_lag - 1)] # The following will induce an average between three lags on the same time of week orders_list = [[ - proper_order, # (i) same time in week, in a week which is ``proper_order`` times prior - proper_order + similar_lag, # (ii) same time in a week before (i) - proper_order + similar_lag*2]] # (iii) same time in a week before (ii) + proper_order, # (i) same time in week, in a week which is ``proper_order`` times prior + proper_order + similar_lag, # (ii) same time in a week before (i) + proper_order + similar_lag * 2]] # (iii) same time in a week before (ii) if forecast_horizon_in_days <= 30: lag_reg_dict = {} @@ -3008,7 +3248,7 @@ def __normalize_changepoint_values( if normalize_df_func is None: return changepoint_values if continuous_time_col is None: - continuous_time_col = "ct1" + continuous_time_col = TimeFeaturesEnum.ct1.value new_df = pd.DataFrame(np.zeros([len(changepoint_values), len(pred_cols)])) new_df.columns = pred_cols new_df[continuous_time_col] = changepoint_values @@ -3062,13 +3302,13 @@ def __remove_fourier_col_with_collinearity(self, fs_cols): # Removes redundant quarterly seasonality with yearly seasonality. for i in range(4, max_yearly_order + 1, 4): - removed_cols += [col for col in quarterly_cols if f"sin{i//4}_" in col or f"cos{i//4}_" in col] + removed_cols += [col for col in quarterly_cols if f"sin{i // 4}_" in col or f"cos{i // 4}_" in col] # Removes redundant monthly seasonality with yearly seasonality. for i in range(12, max_yearly_order + 1, 12): - removed_cols += [col for col in monthly_cols if f"sin{i//12}_" in col or f"cos{i//12}_" in col] + removed_cols += [col for col in monthly_cols if f"sin{i // 12}_" in col or f"cos{i // 12}_" in col] # Removes redundant monthly seasonality with quarterly seasonality. for i in range(3, max_quarterly_order + 1, 3): - removed_cols += [col for col in monthly_cols if f"sin{i//3}_" in col or f"cos{i//3}_" in col] + removed_cols += [col for col in monthly_cols if f"sin{i // 3}_" in col or f"cos{i // 3}_" in col] # Adds columns for weekly seasonality. # Removes higher order cosine terms because order k and order period - k have the same cosine columns. diff --git a/greykite/algo/forecast/silverkite/forecast_silverkite_helper.py b/greykite/algo/forecast/silverkite/forecast_silverkite_helper.py index 81d8666..f8c6193 100644 --- a/greykite/algo/forecast/silverkite/forecast_silverkite_helper.py +++ b/greykite/algo/forecast/silverkite/forecast_silverkite_helper.py @@ -25,8 +25,15 @@ import math import warnings +from typing import List +from typing import Optional +import pandas as pd + +from greykite.common.constants import TimeFeaturesEnum from greykite.common.enums import SimpleTimeFrequencyEnum +from greykite.common.features.timeseries_features import build_time_features_df +from greykite.common.features.timeseries_features import get_default_origin_for_time_vars def get_similar_lag(freq_in_days): @@ -123,7 +130,7 @@ def get_default_changepoints_dict( changepoints_dict = { "method": "uniform", "n_changepoints": changepoint_num, - "continuous_time_col": "ct1", + "continuous_time_col": TimeFeaturesEnum.ct1.value, "growth_func": lambda x: x} elif changepoints_method == "auto": @@ -281,7 +288,7 @@ def get_silverkite_uncertainty_dict( uncertainty_dict = { "uncertainty_method": "simple_conditional_residuals", "params": { - "conditional_cols": ["dow_hr"], + "conditional_cols": [TimeFeaturesEnum.dow_hr.value], "quantiles": [0.025, 0.975], "quantile_estimation_method": "normal_fit", "sample_size_thresh": 5, @@ -306,3 +313,40 @@ def get_silverkite_uncertainty_dict( uncertainty_dict["params"]["quantiles"] = [q1, q2] return uncertainty_dict + + +def get_fourier_feature_col_names( + df: pd.DataFrame, + time_col: str, + fs_func: callable, + conti_year_origin: Optional[int] = None) -> List[str]: + """Gets the Fourier feature column names. + + Parameters + ---------- + df : `pandas.DataFrame` + The input data. + time_col : `str` + The column name for timestamps in ``df``. + fs_func : callable + The function to generate Fourier features. + conti_year_origin : `int` or None, default None + The continuous year origin. + If None, will be inferred from time column. + The names do not depend on this parameter though. + + Returns + ------- + col_names : `list` [`str`] + The list of Fourier feature column names. + """ + if conti_year_origin is None: + conti_year_origin = get_default_origin_for_time_vars( + df=df, + time_col=time_col + ) + time_features_example_df = build_time_features_df( + df[time_col][:2], + conti_year_origin=conti_year_origin) + fs = fs_func(time_features_example_df) + return fs["cols"] diff --git a/greykite/algo/forecast/silverkite/forecast_simple_silverkite.py b/greykite/algo/forecast/silverkite/forecast_simple_silverkite.py index b516f9c..415c937 100644 --- a/greykite/algo/forecast/silverkite/forecast_simple_silverkite.py +++ b/greykite/algo/forecast/silverkite/forecast_simple_silverkite.py @@ -29,6 +29,9 @@ import pandas as pd from greykite.algo.changepoint.adalasso.changepoint_detector import get_changepoints_dict +from greykite.algo.forecast.silverkite.auto_config import get_auto_growth +from greykite.algo.forecast.silverkite.auto_config import get_auto_holidays +from greykite.algo.forecast.silverkite.auto_config import get_auto_seasonality from greykite.algo.forecast.silverkite.constants.silverkite_column import SilverkiteColumn from greykite.algo.forecast.silverkite.constants.silverkite_constant import SilverkiteConstant from greykite.algo.forecast.silverkite.constants.silverkite_constant import default_silverkite_constant @@ -40,7 +43,7 @@ from greykite.algo.forecast.silverkite.forecast_simple_silverkite_helper import get_event_pred_cols from greykite.algo.forecast.silverkite.forecast_simple_silverkite_helper import patsy_categorical_term from greykite.common import constants as cst -from greykite.common.constants import GROWTH_COL_ALIAS +from greykite.common.constants import GrowthColEnum from greykite.common.enums import SimpleTimeFrequencyEnum from greykite.common.enums import TimeEnum from greykite.common.features.timeseries_features import get_available_holidays_across_countries @@ -57,11 +60,13 @@ class SimpleSilverkiteForecast(SilverkiteForecast): Provides an alternative interface with simplified configuration parameters. Produces the same trained model output and uses the same predict functions. """ + def __init__( self, constants: SilverkiteConstant = default_silverkite_constant): super().__init__(constants=constants) - self._silverkite_time_frequency_enum: Type[SilverkiteTimeFrequencyEnum] = constants.get_silverkite_time_frequency_enum() + self._silverkite_time_frequency_enum: Type[ + SilverkiteTimeFrequencyEnum] = constants.get_silverkite_time_frequency_enum() self._silverkite_holiday: Type[SilverkiteHoliday] = constants.get_silverkite_holiday() self._silverkite_column: Type[SilverkiteColumn] = constants.get_silverkite_column() @@ -78,13 +83,16 @@ def convert_params( training_fraction: Optional[float] = 0.9, fit_algorithm: str = "ridge", fit_algorithm_params: Optional[Dict] = None, + auto_holiday: bool = False, holidays_to_model_separately: Optional[Union[str, List[str]]] = "auto", holiday_lookup_countries: Optional[Union[str, List[str]]] = "auto", holiday_pre_num_days: int = 2, holiday_post_num_days: int = 2, holiday_pre_post_num_dict: Optional[Dict] = None, daily_event_df_dict: Optional[Dict] = None, + auto_growth: bool = False, changepoints_dict: Optional[Dict] = None, + auto_seasonality: bool = False, yearly_seasonality: Union[bool, str, int] = "auto", quarterly_seasonality: Union[bool, str, int] = "auto", monthly_seasonality: Union[bool, str, int] = "auto", @@ -100,7 +108,7 @@ def convert_params( max_admissible_value: Optional[float] = None, uncertainty_dict: Optional[Dict] = None, normalize_method: Optional[str] = None, - growth_term: Optional[str] = "linear", + growth_term: Optional[str] = cst.GrowthColEnum.linear.name, regressor_cols: Optional[List[str]] = None, feature_sets_enabled: Optional[Union[bool, str, Dict[str, Optional[Union[bool, str]]]]] = "auto", extra_pred_cols: Optional[List[str]] = None, @@ -108,7 +116,8 @@ def convert_params( explicit_pred_cols: Optional[List[str]] = None, regression_weight_col: Optional[str] = None, simulation_based: Optional[bool] = False, - simulation_num: int = 10): + simulation_num: int = 10, + fast_simulation: bool = False): """Converts parameters of :func:`~greykite.algo.forecast.silverkite.forecast_simple_silverkite` into those of :func:`~greykite.algo.forecast.forecast_silverkite.SilverkiteForecast::forecast`. @@ -218,6 +227,18 @@ def convert_params( fit_algorithm_params : `dict` or None, optional, default None Parameters passed to the requested fit_algorithm. If None, uses the defaults in `~greykite.algo.common.ml_models.fit_model_via_design_matrix`. + auto_holiday : `bool`, default False + Whether to automatically infer holiday configuration based on the input timeseries. + The candidate lookup countries are specified by ``holiday_lookup_countries``. + If True, the following parameters will be ignored: + + * "holidays_to_model_separately" + * "holiday_pre_num_days" + * "holiday_post_num_days" + * "holiday_pre_post_num_dict" + + For details, see `~greykite.algo.common.holiday_inferrer.HolidayInferrer`. + Extra events specified in ``daily_event_df_dict`` will be added to the inferred holidays. holiday_lookup_countries : `list` [`str`] or "auto" or None, optional, default "auto" The countries that contain the holidays you intend to model (``holidays_to_model_separately``). @@ -331,6 +352,19 @@ def convert_params( Note: Do not use `~greykite.common.constants.EVENT_DEFAULT` in the second column. This is reserved to indicate dates that do not correspond to an event. + auto_growth : `bool`, default False + Whether to automatically infer growth configuration. + If True, the growth term and automatically changepoint detection configuration + will be inferred from input timeseries, + and the following parameters will be ignored: + + * "growth_term" + * "changepoints_dict" (Except parameters that controls how custom changepoint + are combined with automatically detected changepoints. These parameters include + "dates", "combine_changepoint_min_distance" and "keep_detected".) + + For detail, see + `~greykite.algo.changepoint.adalasso.auto_changepoint_params.generate_trend_changepoint_detection_params`. changepoints_dict : `dict` or None, optional, default None Specifies the changepoint configuration. @@ -372,6 +406,21 @@ def convert_params( "custom_changepoint_dates", "min_distance" and "keep_detected" in `~greykite.algo.changepoint.adalasso.changepoints_utils.combine_detected_and_custom_trend_changepoints`. + auto_seasonality : `bool`, default False + Whether to automatically infer seasonality orders. + If True, the seasonality orders will be automatically inferred from input timeseries + and the following parameters will be ignored unless the value is ``False``: + + * "yearly_seasonality" + * "quarterly_seasonality" + * "monthly_seasonality" + * "weekly_seasonality" + * "daily_seasonality" + + If any of the above parameter's value is ``False``, + the corresponding seasonality order will be forced to be zero, + regardless of the inferring result. + For detail, see `~greykite.algo.common.seasonality_inferrer.SeasonalityInferrer`. yearly_seasonality : `str` or `bool` or `int` Determines the yearly seasonality. 'auto', True, False, or a number for the Fourier order @@ -474,12 +523,14 @@ def convert_params( normalize_method : `str` or None, default None If a string is provided, it will be used as the normalization method in `~greykite.common.features.normalize.normalize_df`, passed via - the argument ``method``. Available options are: "min_max", "statistical". + the argument ``method``. + Available options are: "zero_to_one", "statistical", "minus_half_to_half", "zero_at_origin". If None, no normalization will be performed. See that function for more details. growth_term : `str` or None, optional, default "ct1" How to model the growth. Valid options are {"linear", "quadratic", "sqrt", "cuberoot"}. + See `~greykite.common.constants.GrowthColEnum`. regressor_cols : `list` [`str`] or None, optional, default None The columns in ``df`` to use as regressors. These must be provided during prediction as well. @@ -552,6 +603,12 @@ def convert_params( simulation_num : `int`, default 10 The number of simulations for when simulations are used for generating forecasts and prediction intervals. + fast_simulation: `bool`, default False + Deterimes if fast simulations are to be used. This only impacts models + which include auto-regression. This method will only generate one simulation + without any error being added and then add the error using the volatility + model. The advantage is a major boost in speed during inference and the + disadvantage is potentially less accurate prediction intervals. Returns @@ -591,13 +648,27 @@ def convert_params( origin_for_time_vars = time_properties["origin_for_time_vars"] # Specifies seasonality (added to ``extra_pred_cols`` by `SilverkiteForecast::forecast`) - seasonality_dict = { - "yearly_seasonality": yearly_seasonality, - "quarterly_seasonality": quarterly_seasonality, - "monthly_seasonality": monthly_seasonality, - "weekly_seasonality": weekly_seasonality, - "daily_seasonality": daily_seasonality, - } + # Seasonality orders are automatically inferred if ``auto_seasonality`` is True, + # and they are pulled from configuration if False. + if auto_seasonality: + seasonality_dict = get_auto_seasonality( + df=df, + time_col=time_col, + value_col=value_col, + yearly_seasonality=(yearly_seasonality is not False), + quarterly_seasonality=(quarterly_seasonality is not False), + monthly_seasonality=(monthly_seasonality is not False), + weekly_seasonality=(weekly_seasonality is not False), + daily_seasonality=(daily_seasonality is not False) + ) + else: + seasonality_dict = { + "yearly_seasonality": yearly_seasonality, + "quarterly_seasonality": quarterly_seasonality, + "monthly_seasonality": monthly_seasonality, + "weekly_seasonality": weekly_seasonality, + "daily_seasonality": daily_seasonality, + } fs_components_df = self.__get_silverkite_seasonality( simple_freq=time_properties["simple_freq"].name, @@ -605,21 +676,38 @@ def convert_params( seasonality=seasonality_dict) # Specifies growth (via ``extra_pred_cols``) + # The ``growth_term`` and ``changepoints_dict`` are automatically inferred + # and overridden if ``auto_growth`` is True. + if auto_growth: + growth_result = get_auto_growth( + df=df, + time_col=time_col, + value_col=value_col, + forecast_horizon=forecast_horizon, + changepoints_dict_override=changepoints_dict + ) + growth_term = growth_result["growth_term"] + changepoints_dict = growth_result["changepoints_dict"] growth_term_formula = None if growth_term is not None: - growth_term_formula = GROWTH_COL_ALIAS[growth_term] + growth_term_formula = GrowthColEnum[growth_term].value extra_pred_cols += [growth_term_formula] # Specifies events (via ``daily_event_df_dict``, ``extra_pred_cols``). # Constant daily effect. holiday_df_dict = self.__get_silverkite_holidays( + auto_holiday=auto_holiday, holiday_lookup_countries=holiday_lookup_countries, holidays_to_model_separately=holidays_to_model_separately, start_year=time_properties["start_year"], end_year=time_properties["end_year"], pre_num=holiday_pre_num_days, post_num=holiday_post_num_days, - pre_post_num_dict=holiday_pre_post_num_dict) + pre_post_num_dict=holiday_pre_post_num_dict, + df=df, + time_col=time_col, + value_col=value_col, + forecast_horizon=forecast_horizon) if holiday_df_dict is not None: # Adds holidays to the user-specified events, # giving preference to user events @@ -687,33 +775,34 @@ def convert_params( # the parameters to call ``SilverkiteForecast::forecast`` # parameters that are directly passed through are noted below parameters = dict( - df=df, # pass-through - time_col=time_col, # pass-through - value_col=value_col, # pass-through + df=df, # pass-through + time_col=time_col, # pass-through + value_col=value_col, # pass-through origin_for_time_vars=origin_for_time_vars, extra_pred_cols=extra_pred_cols, drop_pred_cols=drop_pred_cols, explicit_pred_cols=explicit_pred_cols, - train_test_thresh=train_test_thresh, # pass-through - training_fraction=training_fraction, # pass-through - fit_algorithm=fit_algorithm, # pass-through - fit_algorithm_params=fit_algorithm_params, # pass-through + train_test_thresh=train_test_thresh, # pass-through + training_fraction=training_fraction, # pass-through + fit_algorithm=fit_algorithm, # pass-through + fit_algorithm_params=fit_algorithm_params, # pass-through daily_event_df_dict=daily_event_df_dict, fs_components_df=fs_components_df, - autoreg_dict=autoreg_dict, # pass-through - past_df=past_df, # pass-through - lagged_regressor_dict=lagged_regressor_dict, # pass-through - changepoints_dict=changepoints_dict, # pass-through - seasonality_changepoints_dict=seasonality_changepoints_dict, # pass-through + autoreg_dict=autoreg_dict, # pass-through + past_df=past_df, # pass-through + lagged_regressor_dict=lagged_regressor_dict, # pass-through + changepoints_dict=changepoints_dict, # pass-through + seasonality_changepoints_dict=seasonality_changepoints_dict, # pass-through changepoint_detector=changepoint_detector, - min_admissible_value=min_admissible_value, # pass-through - max_admissible_value=max_admissible_value, # pass-through + min_admissible_value=min_admissible_value, # pass-through + max_admissible_value=max_admissible_value, # pass-through uncertainty_dict=uncertainty_dict, - normalize_method=normalize_method, # pass-through - regression_weight_col=regression_weight_col, # pass-through - forecast_horizon=forecast_horizon, # pass-through - simulation_based=simulation_based, # pass-through - simulation_num=simulation_num # pass-through + normalize_method=normalize_method, # pass-through + regression_weight_col=regression_weight_col, # pass-through + forecast_horizon=forecast_horizon, # pass-through + simulation_based=simulation_based, # pass-through + simulation_num=simulation_num, # pass-through + fast_simulation=fast_simulation # pass-through ) return parameters @@ -1102,7 +1191,8 @@ def __get_feature_sets_terms( :param weekly_seas_interaction_order: int Order on interaction terms with weekly seasonality :param growth_term: Optional[str] - How to model the growth. Valid options are "linear", "quadratic", "sqrt", "cubic", "cuberoot" + How to model the growth. Valid options are "linear", "quadratic", "sqrt", "cubic", "cuberoot". + See `~greykite.common.constants.GrowthColEnum`. :param changepoint_cols: Optional[List[str]] Names of the changepoint feature columns to be generated by `build_silverkite_features` :return: Dict[str, List[str]] @@ -1136,13 +1226,15 @@ def __get_feature_sets_terms( # all possible values of `dow` and `dow_hr` from `build_time_features_df` dow_levels = ["1-Mon", "2-Tue", "3-Wed", "4-Thu", "5-Fri", "6-Sat", "7-Sun"] dow_hr_levels = [f"{day + 1}_{str(hour).zfill(2)}" for day in range(7) for hour in range(24)] - day_of_week = patsy_categorical_term(term="str_dow", levels=dow_levels) - hour_of_week = patsy_categorical_term(term="dow_hr", levels=dow_hr_levels) + day_of_week = patsy_categorical_term(term=cst.TimeFeaturesEnum.str_dow.value, levels=dow_levels) + hour_of_week = patsy_categorical_term(term=cst.TimeFeaturesEnum.dow_hr.value, levels=dow_hr_levels) extra_pred_cols_grouped[self._silverkite_column.COLS_DAY_OF_WEEK] = [day_of_week] extra_pred_cols_grouped[self._silverkite_column.COLS_HOUR_OF_WEEK] = [hour_of_week] - extra_pred_cols_grouped[self._silverkite_column.COLS_TREND_WEEKEND] = [f"is_weekend:{col}" for col in trend_cols] - extra_pred_cols_grouped[self._silverkite_column.COLS_TREND_DAY_OF_WEEK] = [f"{day_of_week}:{col}" for col in trend_cols] + extra_pred_cols_grouped[self._silverkite_column.COLS_TREND_WEEKEND] = [ + f"{cst.TimeFeaturesEnum.is_weekend.value}:{col}" for col in trend_cols] + extra_pred_cols_grouped[self._silverkite_column.COLS_TREND_DAY_OF_WEEK] = [ + f"{day_of_week}:{col}" for col in trend_cols] # allows major holidays to have different daily seasonality # interact with fourier series terms up to fs_daily_interaction_order @@ -1151,7 +1243,8 @@ def __get_feature_sets_terms( if daily_seas_interaction_order > 0: for holiday in self._silverkite_holiday.HOLIDAYS_TO_INTERACT: if daily_event_df_dict is not None and holiday in daily_event_df_dict.keys(): - event_levels = [cst.EVENT_DEFAULT] # reference level for non-event days, added by `add_daily_events` + event_levels = [ + cst.EVENT_DEFAULT] # reference level for non-event days, added by `add_daily_events` # This event's levels event_levels += list(daily_event_df_dict[holiday][cst.EVENT_DF_LABEL_COL].unique()) @@ -1164,13 +1257,14 @@ def __get_feature_sets_terms( fs_seas_name=daily_seasonality.seas_names) extra_pred_cols_grouped[self._silverkite_column.COLS_EVENT_WEEKEND_SEAS] += cols_interact( - static_col=f"is_weekend:{patsy_categorical_term(term=term, levels=event_levels)}", + static_col=f"{cst.TimeFeaturesEnum.is_weekend.value}:" + f"{patsy_categorical_term(term=term, levels=event_levels)}", fs_name=daily_seasonality.name, fs_order=daily_seas_interaction_order, fs_seas_name=daily_seasonality.seas_names) extra_pred_cols_grouped[self._silverkite_column.COLS_WEEKEND_SEAS] = cols_interact( - static_col="is_weekend", + static_col=cst.TimeFeaturesEnum.is_weekend.value, fs_name=daily_seasonality.name, fs_order=daily_seas_interaction_order, fs_seas_name=daily_seasonality.seas_names) @@ -1183,7 +1277,7 @@ def __get_feature_sets_terms( for col in trend_cols: extra_pred_cols_grouped[self._silverkite_column.COLS_TREND_DAILY_SEAS] += cols_interact( - static_col=f"is_weekend:{col}", + static_col=f"{cst.TimeFeaturesEnum.is_weekend.value}:{col}", fs_name=daily_seasonality.name, fs_order=daily_seas_interaction_order, fs_seas_name=daily_seasonality.seas_names) @@ -1200,18 +1294,28 @@ def __get_feature_sets_terms( def __get_silverkite_holidays( self, + auto_holiday=False, holiday_lookup_countries="auto", holidays_to_model_separately="auto", start_year=2015, end_year=2030, pre_num=2, post_num=2, - pre_post_num_dict=None): + pre_post_num_dict=None, + df=None, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + forecast_horizon=None): """Generates holidays dictionary for input to daily_event_df_dict parameter of silverkite model. The main purpose is to provide reasonable defaults for the holiday names and countries Parameters ---------- + auto_holiday : `bool`, default False + If True, the other holiday configurations will be ignored. + An algorithm is used to automatically infer the holiday configuration. + For details, see `~greykite.algo.common.holiday_inferrer.HolidayInferrer`. + If False, the specified holiday configuration will be used to generate holiday features. holiday_lookup_countries : `list` [`str`] or "auto" or None, optional, default "auto" The countries that contain the holidays you intend to model (``holidays_to_model_separately``). @@ -1253,6 +1357,17 @@ def __get_silverkite_holidays( denoting that the "Thanksgiving" ``pre_num`` is 1 and ``post_num`` is 3, and "Labor Day" ``pre_num`` is 1 and ``post_num`` is 2. Holidays not specified use the default given by ``pre_num`` and ``post_num``. + df : `pandas.DataFrame` or None, default None. + The timeseries data needed for automatically inferring holiday configuration. + This is not used when ``auto_holiday`` is False. + time_col : `str`, default `cst.TIME_COL` + The column name for timestamps in ``df``. + This is not used when ``auto_holiday`` is False. + value_col : `str`, default `cst.VALUE_COL` + The column name for values in ``df``. + This is not used when ``auto_holiday`` is False. + forecast_horizon : `int` or None, default None + The forecast horizon, used to calculate the year list for "auto" option. Returns ------- @@ -1277,26 +1392,36 @@ def __get_silverkite_holidays( elif not isinstance(holiday_lookup_countries, (list, tuple)): raise ValueError( f"`holiday_lookup_countries` should be a list, found {holiday_lookup_countries}") - - if holidays_to_model_separately is None: - holidays_to_model_separately = [] - elif holidays_to_model_separately == "auto": - # important holidays - holidays_to_model_separately = self._silverkite_holiday.HOLIDAYS_TO_MODEL_SEPARATELY_AUTO - elif holidays_to_model_separately == self._silverkite_holiday.ALL_HOLIDAYS_IN_COUNTRIES: - holidays_to_model_separately = get_available_holidays_across_countries( + if auto_holiday: + if df is None: + raise ValueError("Automatically inferring holidays is turned on. Dataframe must be provided.") + return get_auto_holidays( + df=df, + time_col=time_col, + value_col=value_col, countries=holiday_lookup_countries, - year_start=start_year - 1, - year_end=end_year + 1) - elif not isinstance(holidays_to_model_separately, (list, tuple)): - raise ValueError( - f"`holidays_to_model_separately` should be a list, found {holidays_to_model_separately}") - - return generate_holiday_events( - countries=holiday_lookup_countries, - holidays_to_model_separately=holidays_to_model_separately, - year_start=start_year - 1, # subtract 1 just in case, to ensure coverage of all holidays - year_end=end_year + 1, # add 1 just in case, to ensure coverage of all holidays - pre_num=pre_num, - post_num=post_num, - pre_post_num_dict=pre_post_num_dict) + forecast_horizon=forecast_horizon, + daily_event_dict_override=None) # ``daily_event_dict`` is handled in `convert_params` with other cases. + else: + if holidays_to_model_separately is None: + holidays_to_model_separately = [] + elif holidays_to_model_separately == "auto": + # important holidays + holidays_to_model_separately = self._silverkite_holiday.HOLIDAYS_TO_MODEL_SEPARATELY_AUTO + elif holidays_to_model_separately == self._silverkite_holiday.ALL_HOLIDAYS_IN_COUNTRIES: + holidays_to_model_separately = get_available_holidays_across_countries( + countries=holiday_lookup_countries, + year_start=start_year - 1, + year_end=end_year + 1) + elif not isinstance(holidays_to_model_separately, (list, tuple)): + raise ValueError( + f"`holidays_to_model_separately` should be a list, found {holidays_to_model_separately}") + + return generate_holiday_events( + countries=holiday_lookup_countries, + holidays_to_model_separately=holidays_to_model_separately, + year_start=start_year - 1, # subtract 1 just in case, to ensure coverage of all holidays + year_end=end_year + 1, # add 1 just in case, to ensure coverage of all holidays + pre_num=pre_num, + post_num=post_num, + pre_post_num_dict=pre_post_num_dict) diff --git a/greykite/algo/uncertainty/conditional/conf_interval.py b/greykite/algo/uncertainty/conditional/conf_interval.py index d8770c5..1d4c56d 100644 --- a/greykite/algo/uncertainty/conditional/conf_interval.py +++ b/greykite/algo/uncertainty/conditional/conf_interval.py @@ -18,7 +18,7 @@ # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# original author: Reza Hosseini +# original author: Reza Hosseini, Sayan Patra """Calculates uncertainty intervals from the conditional empirical distribution of the residual. """ @@ -33,90 +33,75 @@ from greykite.algo.uncertainty.conditional.estimate_distribution import estimate_empirical_distribution from greykite.algo.uncertainty.conditional.normal_quantiles import normal_quantiles_df from greykite.common.constants import ERR_STD_COL +from greykite.common.constants import QUANTILE_SUMMARY_COL def conf_interval( df, - value_col, - residual_col=None, + distribution_col, + offset_col=None, conditional_cols=None, - quantiles=[0.005, 0.025, 0.975, 0.995], + quantiles=(0.005, 0.025, 0.975, 0.995), quantile_estimation_method="normal_fit", sample_size_thresh=5, small_sample_size_method="std_quantiles", small_sample_size_quantile=0.95, min_admissible_value=None, max_admissible_value=None): - """A function to calculate confidence intervals (ci) for values given - in ``value_col`` - for each slice of data (given in ``conditional_cols``) - using approximate distributions estimated via - ``estimate_empirical_distribution``. - The variability of the CI's either come from "value_col" itself or - alternatively come from the ``residual_col`` if provided. - - We allow for calculating as many quantiles as needed (specified by `quantiles`) - as opposed to only two quantiles representing a typical ci interval. - - Two options are available for method of calculation of quantiles for - each slice, - - - for each slice a confidence interval is calculated - simply using empirical quantiles - - using a normal distribution fit. - - There are two main possibilities: - - - ``residual_col`` is not provided and values in value_col are used - directly to calculate quantiles by using the distribution of the - values in each slices - - ``residual_col`` is provided, we calculate quantiles - for the residuals distribution for each slice and then - offset the quantiles by the value given in value_col. - In that case we use a fixed_mean of zero when constructing quantiles - for the residuals. This is done so that our predicted values given - in value_col are not perturbed as they might be coming from a much - more complex fitting model taking into account many more variables - as compared with conditional_cols + """A function to calculate confidence intervals (CI) for values given + in ``distribution_col``. We allow for calculating as many quantiles as + needed (specified by ``quantiles``) as opposed to only two quantiles + representing a typical CI. + + Two methods are available for quantiles calculation for + each slice of data (given in ``conditional_cols``). + - "normal_fit" : CI is calculated using quantiles of a normal + distribution fit. + - "ecdf" : CI is calculated using quantiles of empirical cumulative + distribution function. + + ``offset_col`` is used in the prediction phase to shift the calculated quantiles + appropriately. Parameters ---------- df : `pandas.Dataframe` - The dataframe with the needed columns: + The dataframe with the following columns: - - value_col, - - conditional_cols, - - residual_col (optional column) + - distribution_col, + - conditional_cols (optional), + - offset_col (optional column) - value_col : str + distribution_col : `str` The column containing the values for the variable for which confidence - interval is needed - residual_col : str - If a residual column is given, quantiles will be built for the residual - values and the interval is then offset using the value given in - value_col itself - conditional_cols : `list` [`str`] + interval is needed. + offset_col : `str` or None, default None + The column containing the values by which the computed quantiles for + ``distribution_col`` are shifted. Only used during prediction phase. + If None, quantiles are not shifted. + conditional_cols : `list` [`str`] or None, default None These columns are used to slice the data first then calculate quantiles - for each slice - quantiles : `list` [`float`] + for each slice. + quantiles : `list` [`float`], default (0.005, 0.025, 0.975, 0.995) The quantiles calculated for each slice. These quantiles can be then used to construct the desired CIs. The default values [0.005, 0.025, 0.0975, 0.995] can be used to construct 99 and 95 percent CIs. - quantile_estimation_method : `str` + quantile_estimation_method : `str`, default "normal_fit" There are two options implemented for the quantile estimation method (conditional on slice): - - "normal_fit": it uses the standard deviation of the values in each - slice to compute normal distribution quantiles - - "ecdf": it uses the values directly to calculate sample quantiles + - "normal_fit": Uses the standard deviation of the values in each + slice to compute normal distribution quantiles. + - "ecdf": Uses the empirical cumulative distribution function + to calculate sample quantiles. - sample_size_thresh : int + sample_size_thresh : `int`, default 5 The minimum sample size for each slice where we allow for using the conditional distribution (conditioned on the "conditional_cols" argument). If sample size for that slice is smaller than this, - we fall back to a fallback method - small_sample_size_method : str + we use the fallback method. + small_sample_size_method : `str`, default "std_quantiles" The method to use for slices with small sample size - "std_quantile" method is implemented and it looks at the response @@ -127,23 +112,25 @@ def conf_interval( It assigns that row to act as fall-back for calculating conf intervals. - min_admissible_value : Union[float, double, int] + small_sample_size_quantile : `float`, default 0.95 + Quantile to calculate for small sample size. + min_admissible_value : Union[float, double, int], default None This is the lowest admissible value for the obtained ci limits and any value below this will be mapped back to this value. - max_admissible_value : Union[float, double, int] + max_admissible_value : Union[float, double, int], default None This is the highest admissible value for the obtained ci limits and any higher value will be mapped back to this value. Returns ------- uncertainty_model : `dict` - Dict with following items (main component is the ``predict`` function). + Dictionary with following items (main component is the ``predict`` function). - - "ecdf_df": pandas.DataFrame + - "ecdf_df" : `pandas.DataFrame` ecdf_df generated by "estimate_empirical_distribution" - - "ecdf_df_overall": pandas.DataFrame + - "ecdf_df_overall" : `pandas.DataFrame` ecdf_df_overall generated by "estimate_empirical_distribution" - - "ecdf_df_fallback": pandas.DataFrame + - "ecdf_df_fallback" : `pandas.DataFrame` ecdf_df_fallback, a fall back data to get the CI quantiles when the sample size for that slice is small or that slice is unobserved in that case. @@ -152,60 +139,64 @@ def conf_interval( we use std quantiles to pick a slice which has a std close to that quantile and fall-back to that slice. - otherwise we fallback to "ecdf_overall" - - - "predict": callable - it can apply to new_df and add quantiles - the new column added has the extra column with name - "{value_col}_quantile_summary" - as well as the input slices given in "conditional_cols" - + - "distribution_col" : `str` + Input ``distribution_col`` + - "offset_col": `str` + Input ``offset_col`` + - "quantiles" : `list` [`float`] + Input ``quantiles`` + - "min_admissible_value": `float` + Input ``min_admissible_value`` + - "max_admissible_value": `float` + Input ``max_admissible_value`` + - "conditional_cols": `list` [`str`] + Input ``conditional_cols`` + - "std_col": `str` + The column name with standard deviations. + - "quantile_summary_col": `str` + The column name with computed quantiles. + - "fall_back_for_all": `bool` + Indicates if fallback method should be used for the + whole dataset. """ - is_residual_based = (residual_col is not None) - distribution_col = residual_col if is_residual_based else value_col std_col = f"{distribution_col}_std" sample_size_col = f"{distribution_col}_count" model_dict = estimate_empirical_distribution( df=df, - value_col=distribution_col, + distribution_col=distribution_col, quantile_grid_size=None, quantiles=quantiles, - conditional_cols=conditional_cols) - + conditional_cols=conditional_cols, + remove_conditional_mean=True + ) ecdf_df = model_dict["ecdf_df"] ecdf_df_overall = model_dict["ecdf_df_overall"] - ecdf_df_fallback = ecdf_df_overall.copy() - # two methods are implemented: ecdf; normal_fit. - # we re-assign the quantile_summary_col if - # the quantile_estimation_method is normal_fit + # Two methods are implemented: ecdf; normal_fit. if quantile_estimation_method == "ecdf": - quantile_summary_col = f"{distribution_col}_quantile_summary" + quantile_summary_col = f"{distribution_col}_ecdf_quantile_summary" elif quantile_estimation_method == "normal_fit": - quantile_summary_col = "normal_quantiles" - if is_residual_based: - mean_col = None - fixed_mean = 0.0 - else: - mean_col = value_col - fixed_mean = None - + quantile_summary_col = f"{distribution_col}_normal_quantile_summary" ecdf_df = normal_quantiles_df( df=ecdf_df, std_col=std_col, - mean_col=mean_col, - fixed_mean=fixed_mean, - quantiles=quantiles) - + mean_col=None, + fixed_mean=0.0, + quantiles=quantiles, + quantile_summary_col=quantile_summary_col + ) ecdf_df_fallback = normal_quantiles_df( - df=ecdf_df_fallback, + df=ecdf_df_overall, std_col=std_col, - mean_col=mean_col, - fixed_mean=fixed_mean, - quantiles=quantiles) + mean_col=None, + fixed_mean=0.0, + quantiles=quantiles, + quantile_summary_col=quantile_summary_col + ) else: raise NotImplementedError( - f"CI calculation method {quantile_estimation_method} is not either of: normal_fit; ecdf") + f"CI calculation method {quantile_estimation_method} is not either of: normal_fit; ecdf") # handling slices with small sample size # if a method is provided via the argument "small_sample_size_method" then it is used here @@ -248,93 +239,100 @@ def conf_interval( "ecdf_df": ecdf_df, "ecdf_df_overall": ecdf_df_overall, "ecdf_df_fallback": ecdf_df_fallback, - "value_col": value_col, + "distribution_col": distribution_col, + "offset_col": offset_col, + "quantiles": quantiles, "min_admissible_value": min_admissible_value, "max_admissible_value": max_admissible_value, "conditional_cols": conditional_cols, "std_col": std_col, "quantile_summary_col": quantile_summary_col, - "fall_back_for_all": fall_back_for_all, - "is_residual_based": is_residual_based} + "fall_back_for_all": fall_back_for_all} def predict_ci( new_df, ci_model): - """It applies on a dataframe (``new_df``) and attaches the quantiles needed. + """Predicts the quantiles of the ``offset_col`` (defined in ``ci_model``) in ``new_df``. - :param new_df: pd.Dataframe - A dataframe with ``value_col`` column as mandatory and - ``conditional_cols`` as optional depending on - how the function ``conf_interval`` is called. - :parame ci_model: dict + Parameters + ---------- + new_df : `pd.Dataframe` + Prediction dataframe which minimally includes ``offset_col`` + and ``conditional_cols`` defined in the ``ci_model``. + ci_model : `dict` Returned CI model from ``conf_interval``. - :return: pd.Dataframe + + Returns + ------- + pred_df : `pd.Dataframe` A dataframe which includes ``new_df`` and new columns containing the quantiles. """ ecdf_df = ci_model["ecdf_df"] ecdf_df_fallback = ci_model["ecdf_df_fallback"] - value_col = ci_model["value_col"] + offset_col = ci_model["offset_col"] min_admissible_value = ci_model["min_admissible_value"] max_admissible_value = ci_model["max_admissible_value"] conditional_cols = ci_model["conditional_cols"] std_col = ci_model["std_col"] quantile_summary_col = ci_model["quantile_summary_col"] fall_back_for_all = ci_model["fall_back_for_all"] - is_residual_based = ci_model["is_residual_based"] - # copy ``new_df`` so that input df to predict is not altered - new_df = new_df.copy().reset_index(drop=True) - new_df["temporary_overall_dummy"] = 0 + # Copies ``pred_df`` so that input df to predict is not altered + pred_df = new_df.reset_index(drop=True) + pred_df["temporary_overall_dummy"] = 0 ecdf_df_fallback_dummy = ecdf_df_fallback.copy() ecdf_df_fallback_dummy["temporary_overall_dummy"] = 0 - new_df_fallback = pd.merge( - new_df, + pred_df_fallback = pd.merge( + pred_df, ecdf_df_fallback_dummy, on=["temporary_overall_dummy"], how="left") + del pred_df["temporary_overall_dummy"] + del pred_df_fallback["temporary_overall_dummy"] - if conditional_cols is None or fall_back_for_all: - new_df_conditional = new_df_fallback.copy() + if (conditional_cols is None) or (conditional_cols == []) or fall_back_for_all: + pred_df_conditional = pred_df_fallback.copy() else: - new_df_conditional = pd.merge( - new_df, + pred_df_conditional = pd.merge( + pred_df, ecdf_df, on=conditional_cols, how="left") - del new_df_conditional["temporary_overall_dummy"] - # when we have missing in the grouped case (which can happen if a level + # When we have missing in the grouped case (which can happen if a level # in ``match_cols`` didn't appear in train dataset) # we fall back to the overall case for col in [quantile_summary_col, std_col]: - na_index = new_df_conditional[col].isnull() - new_df_conditional.loc[na_index, col] = ( - new_df_fallback.loc[na_index, col]) - - # offsetting the values in ``value_col`` by residual quantiles - # if ``is_residual_based`` - value_quantile_summary_col = f"{value_col}_quantile_summary" - if is_residual_based: - new_df_conditional[value_quantile_summary_col] = offset_tuple_col( - df=new_df_conditional, - offset_col=value_col, + na_index = pred_df_conditional[col].isnull() + pred_df_conditional.loc[na_index, col] = ( + pred_df_fallback.loc[na_index, col]) + + # offsetting the values in ``distribution_col`` by ``offset_col`` + if offset_col is None: + pred_df_conditional[QUANTILE_SUMMARY_COL] = pred_df_conditional[quantile_summary_col] + else: + pred_df_conditional[QUANTILE_SUMMARY_COL] = offset_tuple_col( + df=pred_df_conditional, + offset_col=offset_col, tuple_col=quantile_summary_col) - new_df_conditional = limit_tuple_col( - df=new_df_conditional, - tuple_col=value_quantile_summary_col, + pred_df_conditional = limit_tuple_col( + df=pred_df_conditional, + tuple_col=QUANTILE_SUMMARY_COL, lower=min_admissible_value, upper=max_admissible_value) - # only returning needed cols - returned_cols = [value_quantile_summary_col, std_col] + # Only returning needed cols + returned_cols = [QUANTILE_SUMMARY_COL, std_col] if conditional_cols is not None: returned_cols = conditional_cols + returned_cols - pred_df = new_df_conditional[returned_cols] - pred_df.rename(columns={std_col: ERR_STD_COL}, inplace=True) + pred_df[returned_cols] = pred_df_conditional[returned_cols] + pred_df.rename(columns={ + std_col: ERR_STD_COL + }, inplace=True) return pred_df diff --git a/greykite/algo/uncertainty/conditional/estimate_distribution.py b/greykite/algo/uncertainty/conditional/estimate_distribution.py index ca27e4b..e160456 100644 --- a/greykite/algo/uncertainty/conditional/estimate_distribution.py +++ b/greykite/algo/uncertainty/conditional/estimate_distribution.py @@ -26,33 +26,54 @@ def estimate_empirical_distribution( df, - value_col, + distribution_col, quantile_grid_size=0.05, - quantiles=None, - conditional_cols=None): - """Estimates an empirical distribution for a given variable in the dataframe (df) "value_col" column + quantiles=(0.025, 0.975), + conditional_cols=None, + remove_conditional_mean=True): + """Estimates the empirical distribution for a given variable in the ``distribution_col`` + of ``df``. The distribution is an approximated quantile function defined on - the quantiles specified in "quantiles" which are values in [0, 1] - The function returns, mean, and standard deviation (std) as well. + the quantiles specified in ``quantiles`` which are values in [0, 1]. + The function returns mean, and standard deviation (std) as well. - :param df: the dataframe which includes the dataframe - :param value_col: the column name for the value column of interest - :param quantile_grid_size: the grid size for the quantiles. - E.g. if grid_size = 0.25 then the quantiles for 0.25, 0.5, 0.75 are calculated - If grid_size = 0.05 then then the quantiles for 0.05, 0.1, ..., 0.90, 0.95 are calculated - :param quantiles: the probability grid for which quantiles are calculated. - If None quantile_grid_size is used to generate a regularly spaced one. - :param conditional_cols: the grouping variables used to condition on + Parameters + ---------- + df : `pandas.DataFrame` + The dataframe with the following columns: - :return: The output consists of a dictionary with two dataframes - (1) first dataframe ("ecdf_df") with columns being - conditional_cols - mean, sd - quantiles (as many as specified in quantiles) - min, max - sample_size (count) for each combination - (2) second dataframe ("ecdf_df_overall") has only one row and returns - the overall mean, sd, quantiles (no conditional_cols), min, max, overall sample size (count) + - distribution_col, + - conditional_cols (optional) + + distribution_col : `str` + The column name for the value column of interest. + quantile_grid_size : `float` or None + The grid size for the quantiles. + E.g. if grid_size = 0.25 then the quantiles for 0.25, 0.5, 0.75 are calculated. + If grid_size = 0.05 then then the quantiles for 0.05, 0.1, ..., 0.90, 0.95 are calculated. + quantiles : `list` [`float`] or None, default (0.025, 0.975) + The probability grid for which quantiles are calculated. + If None, ``quantile_grid_size`` is used to generate a regularly spaced quantile grid. + conditional_cols : `list` [`str`] or None, default None + These columns are used to slice the data first then calculate quantiles + for each slice. + remove_conditional_mean : `bool`, default True + If True, for every slice (defined by ``conditional_cols``), the conditional mean + is removed when calculating quantiles. + + Returns + ------- + model_dict : `dict` + A dictionary consisting two dataframes + + - "ecdf_df" : `pandas.DataFrame` + The dataframe consists of a row for each combination of categories in + ``conditional_cols``. The columns are conditional_cols, {distribution_col}_mean, + {distribution_col}_std, {distribution_col}_ecdf_quantile_summary, + {distribution_col}_min, {distribution_col}_max and {distribution_col}_count (sample size). + - "ecdf_df_overall" : `pandas.DataFrame` + Has only one row with the overall mean, standard deviation, + quantiles (no conditional_cols), min, max, overall sample size (count). """ if quantiles is None: num = int(1.0 / quantile_grid_size - 1.0) @@ -61,26 +82,29 @@ def estimate_empirical_distribution( 1 - quantile_grid_size, num=num) - def quantile_summary(x): - return tuple(np.quantile(a=x, q=quantiles)) + def ecdf_quantile_summary(x): + if remove_conditional_mean: + y = x - np.mean(x) + else: + y = x + return tuple(np.quantile(a=y, q=quantiles)) # Aggregates w.r.t. given columns in conditional_cols - agg_dict = {value_col: [quantile_summary, "min", "mean", "max", "std", "count"]} + agg_dict = {distribution_col: [ecdf_quantile_summary, "min", "mean", "max", "std", "count"]} # Creates an overall distribution by simply aggregating every value column globally. # This is useful for cases where no matching data is available for a given combination of values in conditional_cols ecdf_df_overall = df.groupby([True]*len(df), as_index=False).agg(agg_dict) # Flattens multi-index (result of aggregation) to have flat and descriptive column names. - ecdf_df_overall.columns = [ - f"{value_col}_{x}" for x in ["quantile_summary", "min", "mean", "max", "std", "count"]] - if conditional_cols is None: + ecdf_df_overall.columns = [f"{metric}_{statistics}" if statistics else metric for (metric, statistics) in ecdf_df_overall.columns] + if (conditional_cols is None) or (conditional_cols == []): ecdf_df = ecdf_df_overall else: ecdf_df = df.groupby(conditional_cols, as_index=False).agg(agg_dict) # Flattens multi-index (result of aggregation) to have flat and descriptive column names. - ecdf_df.columns = [f"{a}_{b}" if b else a for (a, b) in ecdf_df.columns] + ecdf_df.columns = [f"{metric}_{statistics}" if statistics else metric for (metric, statistics) in ecdf_df.columns] - model = { + model_dict = { "ecdf_df": ecdf_df, "ecdf_df_overall": ecdf_df_overall} - return model + return model_dict diff --git a/greykite/algo/uncertainty/conditional/normal_quantiles.py b/greykite/algo/uncertainty/conditional/normal_quantiles.py index b519715..b36e9fe 100644 --- a/greykite/algo/uncertainty/conditional/normal_quantiles.py +++ b/greykite/algo/uncertainty/conditional/normal_quantiles.py @@ -29,25 +29,43 @@ def normal_quantiles_df( std_col, mean_col=None, fixed_mean=0.0, - quantiles=(0.025, 0.975)): - """Calculates normal quantiles for each row of dataframe (df) - using available means (either given in "mean_col" or "fixed_mean") and stds ("std_col"). - - :param mean_col: string, the column with the sample means for each row - :param std: string, the column with the sample std for each row - :param sample_size: integer, the sample size of the random sample for the given row - :quantiles: tuple of float/double with values in [0, 1], denoting the desired quantiles + quantiles=(0.025, 0.975), + quantile_summary_col="normal_quantiles"): + """Calculates normal quantiles for each row of ``df`` + using available means (either given in ``mean_col`` or ``fixed_mean``) and + standard deviations (given in ``std_col``). + + Parameters + ---------- + df : `pandas.DataFrame` + A DataFrame containing the standard deviations. + fixed_mean : `float`, default 0 + Fixed sample mean to add to each row of ``df``. + It is only used if ``mean_col`` is None. + mean_col : `str` or None, default None + The column with the sample means for each row of ``df``. + std_col : `str` + The column with the sample std for each row + quantiles : `list` [`float`] + The normal quantiles to be calculated for each row of ``df``. + quantile_summary_col : `str`, default "normal_quantiles" + The column name where the computed quantiles are stored. + + Returns + ------- + df : `pandas.DataFrame` + ``df`` augmented with normal quantiles for each row. """ df = df.copy() if mean_col is None: - df["normal_quantiles"] = df.apply( + df[quantile_summary_col] = df.apply( lambda row: stats.norm.ppf( loc=fixed_mean, scale=row[std_col], q=quantiles), axis=1) else: - df["normal_quantiles"] = df.apply( + df[quantile_summary_col] = df.apply( lambda row: stats.norm.ppf( loc=row[mean_col], scale=row[std_col], diff --git a/greykite/common/aggregation_function_enum.py b/greykite/common/aggregation_function_enum.py new file mode 100644 index 0000000..cc8f717 --- /dev/null +++ b/greykite/common/aggregation_function_enum.py @@ -0,0 +1,41 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Kaixu Yang +"""Defines some aggregation functions.""" + +from enum import Enum +from functools import partial + +import numpy as np + + +class AggregationFunctionEnum(Enum): + """Defines some common aggregation functions that can be retrieved by their names. + + Every function is wrapped with ``partial`` because Enum handles functions differently from values. + Wrapping with ``partial`` allows us to extract the function with variable keys. + """ + mean = partial(np.mean) + median = partial(np.median) + nanmean = partial(np.nanmean) + maximum = partial(np.max) + minimum = partial(np.min) + weighted_average = partial(np.average) diff --git a/greykite/common/compare_two_dfs_on_index.py b/greykite/common/compare_two_dfs_on_index.py new file mode 100644 index 0000000..c656dfe --- /dev/null +++ b/greykite/common/compare_two_dfs_on_index.py @@ -0,0 +1,104 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# author: Reza Hosseini + +import pandas as pd + +from greykite.common.viz.timeseries_plotting import plot_multivariate + + +def compare_two_dfs_on_index( + dfs, + df_labels, + index_col, + diff_cols=None, + relative_diff=False): + """Calculates difference between two dataframes macthed on a given index. + One intended application is to compare breakdown dfs from two related ML models + or same model at different times. However it can be used to compare generic + dataframes as well. + + Parameters + ---------- + dfs: `list` [`pandas.DataFrame`] + A list of two dataframes which includes minimally + - the index column (``index_col``) + - columns which include the values to be compared. + If ``diff_cols`` is passed, we expect them to appear in these dataframes. + df_labels : `list` [`str`] + A list of two strings denoting the label for each ``df`` respectively. + index_col : `str` + The column name of the index column which will be used for joining and + as x axis of the difference plot. + diff_cols : `list` [`str`], default None + A list of columns to be differenced. + Each column represents a variable / component to be compared. + If it is not passed or None, all the columns except for ``index_col`` will + be used. + relative_diff : `bool`, default True + It determines if diff is to be simple diff or relative diff obtained by + dividing the diff by the absolute values of first dataframe for each value column. + + Returns + ------- + result : `dict` + A dictionary with following items: + + - "diff_df": `pandas.DataFrame` + A dataframe which includes the diff for each group / component. + - "diff_fig": `plotly.graph_objs._figure.Figure` + plotly plot overlaying various variable diffs + + """ + assert len(dfs) == 2, "We expect two dataframes." + assert len(df_labels) == 2, "We expect two labels" + assert list(dfs[0].columns) == list(dfs[1].columns), "We expect same column names in both dataframes" + assert index_col in dfs[0].columns, "`index_col` must be found in both dataframes." + assert index_col in dfs[1].columns, "`index_col` must be found in both dataframes." + + diff_df = pd.merge( + dfs[0], + dfs[1], + on=index_col) + + if diff_cols is None: + diff_cols = list(dfs[0].columns) + diff_cols.remove(index_col) + + y_label = "diff" + for col in diff_cols: + diff_df[col] = diff_df[f"{col}_y"] - diff_df[f"{col}_x"] + if relative_diff: + diff_df[col] = diff_df[col] / abs(diff_df[f"{col}_x"]) + y_label = "relative diff" + + diff_df = diff_df[[index_col] + diff_cols] + + diff_fig = plot_multivariate( + df=diff_df, + x_col=index_col, + title=f"change in variables from {df_labels[0]} to {df_labels[1]}", + ylabel=y_label) + + return { + "diff_df": diff_df, + "diff_fig": diff_fig + } diff --git a/greykite/common/constants.py b/greykite/common/constants.py index 01f5d49..a2fc26c 100644 --- a/greykite/common/constants.py +++ b/greykite/common/constants.py @@ -24,6 +24,9 @@ and/or `~greykite.framework`. """ +from enum import Enum + + # The time series data is represented in pandas dataframes # The default column names for the series are given below TIME_COL = "ts" @@ -34,6 +37,8 @@ """The column name representing actual (observed) values""" PREDICTED_COL = "forecast" """The column name representing the predicted values""" +RESIDUAL_COL = "residual" +"""The column name representing the forecast residuals.""" PREDICTED_LOWER_COL = "forecast_lower" """The column name representing upper bounds of prediction interval""" PREDICTED_UPPER_COL = "forecast_upper" @@ -42,6 +47,8 @@ """The column name representing predicted values from null model""" ERR_STD_COL = "err_std" """The column name representing the error standard deviation from models""" +QUANTILE_SUMMARY_COL = "quantile_summary" +"""The column name representing the quantile summary from models""" # Evaluation metrics corresponding to `~greykite.common.evaluation` R2_null_model_score = "R2_null_model_score" @@ -77,9 +84,9 @@ # Column names used by # `~greykite.common.features.adjust_anomalous_data.adjust_anomalous_data` -START_DATE_COL = "start_date" +START_TIME_COL = "start_time" """Start timestamp column name""" -END_DATE_COL = "end_date" +END_TIME_COL = "end_time" """Standard end timestamp column""" ADJUSTMENT_DELTA_COL = "adjustment_delta" """Adjustment column""" @@ -87,34 +94,85 @@ """Column to denote metric of interest""" DIMENSION_COL = "dimension" """Dimension column""" +ANOMALY_COL = "is_anomaly" +"""The default name for the column with the anomaly labels of the time series""" + # Constants related to # `~greykite.common.features.timeseries_features.build_time_features_df`. -GROWTH_COL_ALIAS = { - "linear": "ct1", - "quadratic": "ct2", - "cubic": "ct3", - "sqrt": "ct_sqrt", - "cuberoot": "ct_root3" -} -"""Human-readable names for the growth columns generated by -`~greykite.common.features.timeseries_features.build_time_features_df` -""" -TIME_FEATURES = [ - "datetime", "date", - "year", "year_length", - "quarter", "quarter_start", "quarter_length", - "month", "month_length", - "woy", "doy", "doq", "dom", "dow", - "str_dow", "str_doy", - "hour", "minute", "second", - "year_month", - "year_woy", "month_dom", "year_woy_dow", "woy_dow", "dow_hr", "dow_hr_min", - "tod", "tow", "tom", "toq", "toy", - "conti_year", "is_weekend", "dow_grouped", - "ct1", "ct2", "ct3", "ct_sqrt", "ct_root3"] -"""Time features generated by -`~greykite.common.features.timeseries_features.build_time_features_df`""" + + +class TimeFeaturesEnum(Enum): + """Time features generated by + `~greykite.common.features.timeseries_features.build_time_features_df`. + + The item names are lower-case letters (kept the same as the values) for easier check of existence. + To check if a string s is in this Enum, + use ``s in TimeFeaturesEnum.__dict__["_member_names_"]``. + Direct check of existence ``s in TimeFeaturesEnum`` is deprecated in python 3.8. + """ + # Absolute time features + datetime = "datetime" + date = "date" + year = "year" + year_length = "year_length" + quarter = "quarter" + quarter_start = "quarter_start" + quarter_length = "quarter_length" + month = "month" + month_length = "month_length" + hour = "hour" + minute = "minute" + second = "second" + year_quarter = "year_quarter" + year_month = "year_month" + woy = "woy" + doy = "doy" + doq = "doq" + dom = "dom" + dow = "dow" + str_dow = "str_dow" + str_doy = "str_doy" + is_weekend = "is_weekend" + # Relative time features + year_woy = "year_woy" + month_dom = "month_dom" + year_woy_dow = "year_woy_dow" + woy_dow = "woy_dow" + dow_hr = "dow_hr" + dow_hr_min = "dow_hr_min" + tod = "tod" + tow = "tow" + tom = "tom" + toq = "toq" + toy = "toy" + conti_year = "conti_year" + dow_grouped = "dow_grouped" + # ISO time features + year_iso = "year_iso" + year_woy_iso = "year_woy_iso" + year_woy_dow_iso = "year_woy_dow_iso" + # Continuous time features + ct1 = "ct1" + ct2 = "ct2" + ct3 = "ct3" + ct_sqrt = "ct_sqrt" + ct_root3 = "ct_root3" + + +class GrowthColEnum(Enum): + """Human-readable names for the growth columns generated by + `~greykite.common.features.timeseries_features.build_time_features_df`. + + The names are the human-readable names, and the values are the corresponding + column names generated by `~greykite.common.features.timeseries_features.build_time_features_df`. + """ + linear = TimeFeaturesEnum.ct1.value + quadratic = TimeFeaturesEnum.ct2.value + cubic = TimeFeaturesEnum.ct3.value + sqrt = TimeFeaturesEnum.ct_sqrt.value + cuberoot = TimeFeaturesEnum.ct_root3.value + # Column names used by # `~greykite.common.features.timeseries_lags` diff --git a/greykite/common/data_loader.py b/greykite/common/data_loader.py index 351ae3a..f563cbf 100644 --- a/greykite/common/data_loader.py +++ b/greykite/common/data_loader.py @@ -127,20 +127,20 @@ def get_aggregated_data(df, agg_freq=None, agg_func=None): elif agg_freq and agg_func: df_raw = df[list(agg_func.keys())] df_raw.insert(0, TIME_COL, pd.to_datetime(df[TIME_COL])) - # Aggregate to daily - df_tmp = df_raw.resample("D", on=TIME_COL).agg(agg_func) - df_daily = df_tmp.drop(columns=TIME_COL).reset_index() if TIME_COL in df_tmp.columns else df_tmp.reset_index() - # Aggregate to weekly - df_tmp = df_raw.resample("W-MON", on=TIME_COL).agg(agg_func) - df_weekly = df_tmp.drop(columns=TIME_COL).reset_index() if TIME_COL in df_tmp.columns else df_tmp.reset_index() - # Aggregate to monthly - df_tmp = df_raw.resample("MS", on=TIME_COL).agg(agg_func) - df_monthly = df_tmp.drop(columns=TIME_COL).reset_index() if TIME_COL in df_tmp.columns else df_tmp.reset_index() if agg_freq == "daily": + # Aggregate to daily + df_tmp = df_raw.resample("D", on=TIME_COL).agg(agg_func) + df_daily = df_tmp.drop(columns=TIME_COL).reset_index() if TIME_COL in df_tmp.columns else df_tmp.reset_index() return df_daily elif agg_freq == "weekly": + # Aggregate to weekly + df_tmp = df_raw.resample("W-MON", on=TIME_COL).agg(agg_func) + df_weekly = df_tmp.drop(columns=TIME_COL).reset_index() if TIME_COL in df_tmp.columns else df_tmp.reset_index() return df_weekly elif agg_freq == "monthly": + # Aggregate to monthly + df_tmp = df_raw.resample("MS", on=TIME_COL).agg(agg_func) + df_monthly = df_tmp.drop(columns=TIME_COL).reset_index() if TIME_COL in df_tmp.columns else df_tmp.reset_index() return df_monthly else: warnings.warn("Invalid \"agg_freq\", must be one of \"daily\", \"weekly\" or \"monthly\". " @@ -263,7 +263,7 @@ def load_bikesharing(self, agg_freq=None, agg_func=None): This dataset contains aggregated hourly count of the number of rented bikes. The data also includes weather data: Maximum Daily temperature (tmax); Minimum Daily Temperature (tmin); Precipitation (pn) - The raw bike-sharing data is provided by Capital Bikeshares. + The raw bike-sharing data is provided by Capital Bikeshare. Source: https://www.capitalbikeshare.com/system-data The raw weather data (Baltimore-Washington INTL Airport) https://www.ncdc.noaa.gov/data-access/land-based-station-data @@ -297,6 +297,240 @@ def load_bikesharing(self, agg_freq=None, agg_func=None): df = self.get_df(data_path=data_path, data_name="hourly_bikesharing") return self.get_aggregated_data(df=df, agg_freq=agg_freq, agg_func=agg_func) + def load_solarpower(self, agg_freq=None, agg_func=None): + """Loads the Hourly Solar Power dataset. + + This dataset contains the solar power production of an Australian wind farm + from August 2019 to July 2020, with original frequency 4-second. + We aggregated it to an hourly series and removed any incomplete hours. + Source: https://zenodo.org/record/4656027#.YrpHbuzMLGp + + Below is the dataset attribute information: + + ts : hourly timestamp + y : solar power production in MW (megawatt) + + Parameters + ---------- + agg_freq : `str` or None, default None + Possible values: "daily", "weekly", or "monthly". + If None, data will not be aggregated and will include all columns. + + agg_func : `Dict` [`str`, `str`], default None + A dictionary of the columns to be aggregated and the corresponding aggregating functions. + Possible aggregating functions include "sum", "mean", "median", "max", "min", etc. + An example input can be {"col1":"mean", "col2":"sum"} + If None, data will not be aggregated and will include all columns. + + Returns + ------- + df : `pandas.DataFrame` object with Solar Power data. + Has the following columns: + + "ts" : hourly timestamp + "y" : solar power production in MW (megawatt) + """ + data_path = self.get_data_home(data_dir=None, data_sub_dir="hourly") + df = self.get_df(data_path=data_path, data_name="hourly_solarpower") + return self.get_aggregated_data(df=df, agg_freq=agg_freq, agg_func=agg_func) + + def load_windpower(self, agg_freq=None, agg_func=None): + """Loads the Hourly Wind Power dataset. + + This dataset contains the wind power production of an Australian wind farm + from August 2019 to July 2020, with original frequency 4-second. + We aggregated it to an hourly series and removed any incomplete hours. + Source: https://zenodo.org/record/4656032#.YrpJTezMLGp + + Below is the dataset attribute information: + + ts : hourly timestamp + y : wind power production in MW (megawatt) + + Parameters + ---------- + agg_freq : `str` or None, default None + Possible values: "daily", "weekly", or "monthly". + If None, data will not be aggregated and will include all columns. + + agg_func : `Dict` [`str`, `str`], default None + A dictionary of the columns to be aggregated and the corresponding aggregating functions. + Possible aggregating functions include "sum", "mean", "median", "max", "min", etc. + An example input can be {"col1":"mean", "col2":"sum"} + If None, data will not be aggregated and will include all columns. + + Returns + ------- + df : `pandas.DataFrame` object with Wind Power data. + Has the following columns: + + "ts" : hourly timestamp + "y" : wind power production in MW (megawatt) + """ + data_path = self.get_data_home(data_dir=None, data_sub_dir="hourly") + df = self.get_df(data_path=data_path, data_name="hourly_windpower") + return self.get_aggregated_data(df=df, agg_freq=agg_freq, agg_func=agg_func) + + def load_electricity(self, agg_freq=None, agg_func=None): + """Loads the Hourly Electricity dataset. + + This dataset contains the hourly consumption (in Kilowatt) + of 321 clients from 2012 to 2014 published by Monash. + We aggregated them by taking the average across the 321 clients. + Source: https://zenodo.org/record/4656140#.YrpKtezMJqs + + Below is the dataset attribute information: + + ts : hourly timestamp + y : average electricity consumption in Kilowatt + + Parameters + ---------- + agg_freq : `str` or None, default None + Possible values: "daily", "weekly", or "monthly". + If None, data will not be aggregated and will include all columns. + + agg_func : `Dict` [`str`, `str`], default None + A dictionary of the columns to be aggregated and the corresponding aggregating functions. + Possible aggregating functions include "sum", "mean", "median", "max", "min", etc. + An example input can be {"col1":"mean", "col2":"sum"} + If None, data will not be aggregated and will include all columns. + + Returns + ------- + df : `pandas.DataFrame` object with Electricity data. + Has the following columns: + + "ts" : hourly timestamp + "y" : average electricity consumption in Kilowatt + """ + data_path = self.get_data_home(data_dir=None, data_sub_dir="hourly") + df = self.get_df(data_path=data_path, data_name="hourly_electricity") + return self.get_aggregated_data(df=df, agg_freq=agg_freq, agg_func=agg_func) + + def load_sf_traffic(self, agg_freq=None, agg_func=None): + """Loads the Hourly San Francisco Bay Area Traffic dataset. + + This dataset contains the road occupancy rates (between 0 and 1) + measured by different sensors on San Francisco + Bay area freeways from 2015 to 2016. + Source: https://zenodo.org/record/4656132#.YrpMxuzMLGp + + Below is the dataset attribute information: + + ts : hourly timestamp + y : average occupancy rate + + Parameters + ---------- + agg_freq : `str` or None, default None + Possible values: "daily", "weekly", or "monthly". + If None, data will not be aggregated and will include all columns. + + agg_func : `Dict` [`str`, `str`], default None + A dictionary of the columns to be aggregated and the corresponding aggregating functions. + Possible aggregating functions include "sum", "mean", "median", "max", "min", etc. + An example input can be {"col1":"mean", "col2":"sum"} + If None, data will not be aggregated and will include all columns. + + Returns + ------- + df : `pandas.DataFrame` object with San Francisco Bay Area Traffic data. + Has the following columns: + + "ts" : hourly timestamp + "y" : average occupancy rate + """ + data_path = self.get_data_home(data_dir=None, data_sub_dir="hourly") + df = self.get_df(data_path=data_path, data_name="hourly_sf_traffic") + return self.get_aggregated_data(df=df, agg_freq=agg_freq, agg_func=agg_func) + + def load_bitcoin_transactions(self, agg_freq=None, agg_func=None): + """Loads the Daily Bitcoin Transactions dataset. + + This dataset contains the number of Bitcoin transactions from 2009 to 2021. + The dataset was curated (with missing values filled) by Monash. + Source: https://zenodo.org/record/5122101#.YrpNFuzMLGp + + Below is the dataset attribute information: + + ts : date + y : number of transactions + + Parameters + ---------- + agg_freq : `str` or None, default None + Possible values: "daily", "weekly", or "monthly". + If None, data will not be aggregated and will include all columns. + + agg_func : `Dict` [`str`, `str`], default None + A dictionary of the columns to be aggregated and the corresponding aggregating functions. + Possible aggregating functions include "sum", "mean", "median", "max", "min", etc. + An example input can be {"col1":"mean", "col2":"sum"} + If None, data will not be aggregated and will include all columns. + + Returns + ------- + df : `pandas.DataFrame` object with Bitcoin Transactions data. + Has the following columns: + + "ts" : date + "y" : number of transactions + """ + data_path = self.get_data_home(data_dir=None, data_sub_dir="daily") + df = self.get_df(data_path=data_path, data_name="daily_bitcoin_transactions") + return self.get_aggregated_data(df=df, agg_freq=agg_freq, agg_func=agg_func) + + def load_sunspot(self): + """Loads the Sunspot dataset. + + This dataset contains the number of observed sunspots from 1818 to 2020 + published by Monash. + The original dataset was a daily series, and we aggregate it to a + monthly time series more than 200 years long. + Source: https://zenodo.org/record/4654722#.YrpQ4uzMLGp + + Below is the dataset attribute information: + + ts : month start date + y : average number of sunspots + + Returns + ------- + df : `pandas.DataFrame` object with Sunspot data. + Has the following columns: + + "ts" : date + "y" : average number of sunspots + """ + data_path = self.get_data_home(data_dir=None, data_sub_dir="monthly") + df = self.get_df(data_path=data_path, data_name="monthly_sunspot_monash") + return df + + def load_fred_housing(self): + """Loads the FRED House Supply dataset. + + This dataset contains the monthly house supply in the United States + from 1963 to 2021 obtained from FRED. + Source: https://fred.stlouisfed.org/series/MSACSR + + Below is the dataset attribute information: + + ts : month start date + y : monthly supply of new houses + + Returns + ------- + df : `pandas.DataFrame` object with FRED House Supply data. + Has the following columns: + + "ts" : date + "y" : monthly supply of new houses + """ + data_path = self.get_data_home(data_dir=None, data_sub_dir="monthly") + df = self.get_df(data_path=data_path, data_name="monthly_fred_housing") + return df + def load_beijing_pm(self, agg_freq=None, agg_func=None): """Loads the Beijing Particulate Matter (PM2.5) dataset. https://archive.ics.uci.edu/ml/datasets/Beijing+PM2.5+Data diff --git a/greykite/common/evaluation.py b/greykite/common/evaluation.py index d535743..7b0c945 100644 --- a/greykite/common/evaluation.py +++ b/greykite/common/evaluation.py @@ -155,7 +155,7 @@ def is_not_nan(x): # Keeps these indices in all arrays. Leaves float, int, and None as-is return [array[keep] for array in reference_arrays] + [np.array(array)[keep] if ( - array is not None and not isinstance(array, float) and not isinstance(array, int)) + array is not None and not isinstance(array, (float, int, np.float32))) else array for array in arrays] @@ -344,7 +344,7 @@ def r2_null_model_score( y_pred_null = np.repeat(y_train.mean(), len(y_true)) elif y_pred_null is None: # from test data y_pred_null = np.repeat(y_true.mean(), len(y_true)) - elif isinstance(y_pred_null, float) or isinstance(y_pred_null, int): # constant null model + elif isinstance(y_pred_null, (float, int, np.float32)): # constant null model y_pred_null = np.repeat(y_pred_null, len(y_true)) # otherwise, y_pred_null is an array, used directly diff --git a/greykite/common/features/adjust_anomalous_data.py b/greykite/common/features/adjust_anomalous_data.py index 0efe5f9..03119cf 100644 --- a/greykite/common/features/adjust_anomalous_data.py +++ b/greykite/common/features/adjust_anomalous_data.py @@ -28,8 +28,9 @@ import numpy as np import pandas as pd -from greykite.common.constants import END_DATE_COL -from greykite.common.constants import START_DATE_COL +from greykite.common.constants import ANOMALY_COL +from greykite.common.constants import END_TIME_COL +from greykite.common.constants import START_TIME_COL def adjust_anomalous_data( @@ -37,8 +38,8 @@ def adjust_anomalous_data( time_col, value_col, anomaly_df, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=None, filter_by_dict=None, filter_by_value_col=None, @@ -77,8 +78,8 @@ def adjust_anomalous_data( This dataframe must include these two columns: - - ``start_date_col`` - - ``end_date_col`` + - ``start_time_col`` + - ``end_time_col`` and include @@ -91,8 +92,8 @@ def adjust_anomalous_data( Here is an example:: anomaly_df = pd.DataFrame({ - "start_date": ["1/1/2018", "1/4/2018", "1/8/2018", "1/10/2018"], - "end_date": ["1/2/2018", "1/6/2018", "1/9/2018", "1/10/2018"], + "start_time": ["1/1/2018", "1/4/2018", "1/8/2018", "1/10/2018"], + "end_time": ["1/2/2018", "1/6/2018", "1/9/2018", "1/10/2018"], "adjustment_delta": [np.nan, 3, -5, np.nan], # extra columns for filtering "metric": ["y", "y", "z", "z"], @@ -102,8 +103,8 @@ def adjust_anomalous_data( In the above example, - - "start_date" is the start date of the anomaly, which is provided using the argument ``start_date_col``. - - "end_date" is the end date of the anomaly, which is provided using the argument ``end_date_col``. + - "start_time" is the start date of the anomaly, which is provided using the argument ``start_time_col``. + - "end_time" is the end date of the anomaly, which is provided using the argument ``end_time_col``. - "adjustment_delta" is the column which includes the delta if it is known. The name of this column is provided using the argument ``adjustment_delta_col``. Use `numpy.nan` if the adjustment size is not known, and the adjusted value will be set to `numpy.nan`. @@ -112,11 +113,11 @@ def adjust_anomalous_data( ``filter_by_dict` is used to filter on these columns to get the relevant anomalies for the timeseries represented by ``df[value_col]``. - start_date_col : `str`, default ``START_DATE_COL`` + start_time_col : `str`, default ``START_TIME_COL`` The column name in ``anomaly_df`` representing the start timestamp of the anomalous period, inclusive. The format can be anything that can be parsed by pandas DatetimeIndex. - end_date_col : `str`, default ``END_DATE_COL`` + end_time_col : `str`, default ``END_TIME_COL`` The column name in anomaly_df representing the start timestamp of the anomalous period, inclusive. The format can be anything that can be parsed by pandas DatetimeIndex. @@ -167,13 +168,18 @@ def adjust_anomalous_data( ``value_col`` updated to the adjusted values. - "augmented_df": `pandas.DataFrame` A dataframe identical to the input dataframe ``df``, with - one extra column for the adjusted values: ``f"adjusted_{value_col}"``. + two extra columns + + - ANOMALY_COL: Anomaly labels for the time series. + 1 and 0 indicates anomalous and non-anomalous points, respectively. + - ``f"adjusted_{value_col}"``: Adjusted values. + ``value_col`` retains the original values. This is useful to inspect which values have changed. - """ df = df.copy() augmented_df = df.copy() + augmented_df[ANOMALY_COL] = 0 anomaly_df = anomaly_df.copy() new_value_col = f"adjusted_{value_col}" @@ -215,22 +221,23 @@ def adjust_anomalous_data( augmented_df[new_value_col] = augmented_df[value_col] try: time_values = pd.to_datetime(augmented_df[time_col]) - anomaly_df[start_date_col] = pd.to_datetime(anomaly_df[start_date_col]) - anomaly_df[end_date_col] = pd.to_datetime(anomaly_df[end_date_col]) + anomaly_df[start_time_col] = pd.to_datetime(anomaly_df[start_time_col]) + anomaly_df[end_time_col] = pd.to_datetime(anomaly_df[end_time_col]) except Exception as e: warnings.warn(f"Dates could not be parsed by `pandas.to_datetime`, using string comparison " f"for dates instead. Error message:\n{e}") time_values = augmented_df[time_col].astype(str) - anomaly_df[start_date_col] = anomaly_df[start_date_col].astype(str) - anomaly_df[end_date_col] = anomaly_df[end_date_col].astype(str) + anomaly_df[start_time_col] = anomaly_df[start_time_col].astype(str) + anomaly_df[end_time_col] = anomaly_df[end_time_col].astype(str) for i in range(anomaly_df.shape[0]): row = anomaly_df.iloc[i] - t1 = row[start_date_col] - t2 = row[end_date_col] + t1 = row[start_time_col] + t2 = row[end_time_col] if t2 < t1: raise ValueError( f"End Time: {t2} cannot be before Start Time: {t1}, in ``anomaly_df``.") bool_index = (time_values >= t1) & (time_values <= t2) + augmented_df.loc[bool_index, ANOMALY_COL] = 1 if adjustment_delta_col is not None: delta = row[adjustment_delta_col] diff --git a/greykite/common/features/normalize.py b/greykite/common/features/normalize.py index 5bff96b..e27ec22 100644 --- a/greykite/common/features/normalize.py +++ b/greykite/common/features/normalize.py @@ -33,7 +33,7 @@ def normalize_df( it generates a function which can be applied to original data as well as any future data to normalize using two possible methods. The `"statistical"` method removes the "mean" and divides by "std". - The `"min_max"` method removes the "minimum" and divides by the + The `"zero_to_one"` method removes the "minimum" and divides by the "maximum - minimum". If desired, the function also drops the columns which have only one possible value and can cause issues not only during normalizaton @@ -46,9 +46,15 @@ def normalize_df( Input dataframe which (only) includes numerical values in all columns. method : `str` The method to be used for normalization. - The "statistical" method removes the "mean" and divides by "std" for each column. - The "min_max" method removes the "min" and divides by the "max - min" - for each column. + + - "statistical" method removes the "mean" and divides by "std" for each column. + - "zero_to_one" method removes the "min" and divides by the "max - min" + for each column. + - "minus_half_to_half" method will remove the "(min + max)/2" and divides by the "max - min" + for each column. + - "zero_at_origin" method will remove the first data point and divides by the "max - min" + for each column. + drop_degenerate_cols : `bool`, default True A boolean to determine if columns with only one possible value should be dropped in the normalized dataframe. @@ -79,9 +85,15 @@ def normalize_df( if method == "statistical": subtracted_series = df.mean() denominator_series = df.std() - elif method == "min_max": + elif method == "zero_to_one": subtracted_series = df.min() denominator_series = (df.max() - df.min()) + elif method == "minus_half_to_half": + subtracted_series = (df.min() + df.max()) / 2 + denominator_series = (df.max() - df.min()) + elif method == "zero_at_origin": + subtracted_series = df.iloc[0] + denominator_series = (df.max() - df.min()) else: raise NotImplementedError(f"Method {method} is not implemented") diff --git a/greykite/common/features/timeseries_features.py b/greykite/common/features/timeseries_features.py index 6410884..af7a574 100644 --- a/greykite/common/features/timeseries_features.py +++ b/greykite/common/features/timeseries_features.py @@ -175,6 +175,7 @@ def build_time_features_df(dt, conti_year_origin): second = dt.second # grouped time feature + year_quarter = dt.strftime("%Y-") + quarter.astype(str) # e.g. 2020-1 for March 2020 str_doy = dt.strftime("%Y-%m-%d") # e.g. 2020-03-20 for March 20, 2020 year_month = dt.strftime("%Y-%m") # e.g. 2020-03 for March 2020 month_dom = dt.strftime("%m/%d") # e.g. 02/20 for February 20th @@ -184,6 +185,12 @@ def build_time_features_df(dt, conti_year_origin): dow_hr = dt.strftime("%u_%H") # e.g. 4_09 for 9am on Thursday dow_hr_min = dt.strftime("%u_%H_%M") # e.g. 4_09_10 for 9:10am on Thursday + # iso features https://en.wikipedia.org/wiki/ISO_week_date + # Uses `pd.Index` to avoid overriding the indices in the output df. + year_iso = pd.Index(dt.isocalendar()["year"]) + year_woy_iso = pd.Index(year_iso.astype(str) + "_" + dt.strftime("%V")) + year_woy_dow_iso = pd.Index(year_woy_iso + "_" + dt.isocalendar()["day"].astype(str)) + # derived time features tod = hour + (minute / 60.0) + (second / 3600.0) tow = dow - 1 + (tod / 24.0) @@ -214,45 +221,49 @@ def build_time_features_df(dt, conti_year_origin): # All keys must be added to constants. features_dict = { - "datetime": dt, - "date": date, - "year": year, - "year_length": year_length, - "quarter": quarter, - "quarter_start": quarter_start, - "quarter_length": quarter_length, - "month": month, - "month_length": month_length, - "woy": woy, - "doy": doy, - "doq": doq, - "dom": dom, - "dow": dow, - "str_dow": str_dow, - "str_doy": str_doy, - "hour": hour, - "minute": minute, - "second": second, - "year_month": year_month, - "year_woy": year_woy, - "month_dom": month_dom, - "year_woy_dow": year_woy_dow, - "woy_dow": woy_dow, - "dow_hr": dow_hr, - "dow_hr_min": dow_hr_min, - "tod": tod, - "tow": tow, - "tom": tom, - "toq": toq, - "toy": toy, - "conti_year": conti_year, - "is_weekend": is_weekend, - "dow_grouped": dow_grouped, - "ct1": ct1, - "ct2": ct2, - "ct3": ct3, - "ct_sqrt": ct_sqrt, - "ct_root3": ct_root3, + cst.TimeFeaturesEnum.datetime.value: dt, + cst.TimeFeaturesEnum.date.value: date, + cst.TimeFeaturesEnum.year.value: year, + cst.TimeFeaturesEnum.year_length.value: year_length, + cst.TimeFeaturesEnum.quarter.value: quarter, + cst.TimeFeaturesEnum.quarter_start.value: quarter_start, + cst.TimeFeaturesEnum.quarter_length.value: quarter_length, + cst.TimeFeaturesEnum.month.value: month, + cst.TimeFeaturesEnum.month_length.value: month_length, + cst.TimeFeaturesEnum.woy.value: woy, + cst.TimeFeaturesEnum.doy.value: doy, + cst.TimeFeaturesEnum.doq.value: doq, + cst.TimeFeaturesEnum.dom.value: dom, + cst.TimeFeaturesEnum.dow.value: dow, + cst.TimeFeaturesEnum.str_dow.value: str_dow, + cst.TimeFeaturesEnum.str_doy.value: str_doy, + cst.TimeFeaturesEnum.hour.value: hour, + cst.TimeFeaturesEnum.minute.value: minute, + cst.TimeFeaturesEnum.second.value: second, + cst.TimeFeaturesEnum.year_quarter.value: year_quarter, + cst.TimeFeaturesEnum.year_month.value: year_month, + cst.TimeFeaturesEnum.year_woy.value: year_woy, + cst.TimeFeaturesEnum.month_dom.value: month_dom, + cst.TimeFeaturesEnum.year_woy_dow.value: year_woy_dow, + cst.TimeFeaturesEnum.woy_dow.value: woy_dow, + cst.TimeFeaturesEnum.dow_hr.value: dow_hr, + cst.TimeFeaturesEnum.dow_hr_min.value: dow_hr_min, + cst.TimeFeaturesEnum.year_iso.value: year_iso, + cst.TimeFeaturesEnum.year_woy_iso.value: year_woy_iso, + cst.TimeFeaturesEnum.year_woy_dow_iso.value: year_woy_dow_iso, + cst.TimeFeaturesEnum.tod.value: tod, + cst.TimeFeaturesEnum.tow.value: tow, + cst.TimeFeaturesEnum.tom.value: tom, + cst.TimeFeaturesEnum.toq.value: toq, + cst.TimeFeaturesEnum.toy.value: toy, + cst.TimeFeaturesEnum.conti_year.value: conti_year, + cst.TimeFeaturesEnum.is_weekend.value: is_weekend, + cst.TimeFeaturesEnum.dow_grouped.value: dow_grouped, + cst.TimeFeaturesEnum.ct1.value: ct1, + cst.TimeFeaturesEnum.ct2.value: ct2, + cst.TimeFeaturesEnum.ct3.value: ct3, + cst.TimeFeaturesEnum.ct_sqrt.value: ct_sqrt, + cst.TimeFeaturesEnum.ct_root3.value: ct_root3, } df = pd.DataFrame(features_dict) return df @@ -306,6 +317,12 @@ def get_holidays(countries, year_start, year_end): country_df = pd.DataFrame({ cst.EVENT_DF_DATE_COL: list(holidays.keys()), cst.EVENT_DF_LABEL_COL: list(holidays.values())}) + # Replaces any occurrence of "/" with ", " in order to avoid saving / loading error in + # `~greykite.framework.templates.pickle_utils` because a holiday name can be the key + # of a dictionary that will be used as directory name. + # For example, "Easter Monday [England/Wales/Northern Ireland]" will be casted to + # "Easter Monday [England, Wales, Northern Ireland]". + country_df[cst.EVENT_DF_LABEL_COL] = country_df[cst.EVENT_DF_LABEL_COL].str.replace("/", ", ") country_df[cst.EVENT_DF_DATE_COL] = pd.to_datetime(country_df[cst.EVENT_DF_DATE_COL]) country_holiday_dict[country] = country_df @@ -485,7 +502,7 @@ def add_event_window( def get_evenly_spaced_changepoints_values( df, - continuous_time_col="ct1", + continuous_time_col=cst.TimeFeaturesEnum.ct1.value, n_changepoints=2): """Partitions interval into n_changepoints + 1 segments, placing a changepoint at left endpoint of each segment. @@ -540,7 +557,7 @@ def get_custom_changepoints_values( df, changepoint_dates, time_col=cst.TIME_COL, - continuous_time_col="ct1"): + continuous_time_col=cst.TimeFeaturesEnum.ct1.value): """Returns the values of continuous_time_col at the requested changepoint_dates. @@ -598,7 +615,7 @@ def get_changepoint_string(changepoint_dates): def get_changepoint_features( df, changepoint_values, - continuous_time_col="ct1", + continuous_time_col=cst.TimeFeaturesEnum.ct1.value, growth_func=None, changepoint_dates=None): """Returns features for growth terms with continuous time origins at @@ -646,7 +663,7 @@ def get_changepoint_features( Changepoint features, 0-indexed """ if continuous_time_col is None: - continuous_time_col = "ct1" + continuous_time_col = cst.TimeFeaturesEnum.ct1.value if growth_func is None: def growth_func(x): return x @@ -662,8 +679,7 @@ def growth_func(x): growth_term = np.array([growth_func(max(x, 0)) for x in time_feature]) # growth as a function of time time_feature_ind = time_feature >= 0 # Indicator(t >= c_i), lets changepoint take effect starting at c_i new_col = growth_term * time_feature_ind - new_changepoint = pd.Series(new_col, name=f"{cst.CHANGEPOINT_COL_PREFIX}{i}{time_postfixes[i]}") - changepoint_df = pd.concat([changepoint_df, new_changepoint], axis=1) + changepoint_df[f"{cst.CHANGEPOINT_COL_PREFIX}{i}{time_postfixes[i]}"] = new_col return changepoint_df diff --git a/greykite/common/features/timeseries_impute.py b/greykite/common/features/timeseries_impute.py index 9618cf1..52adeb3 100644 --- a/greykite/common/features/timeseries_impute.py +++ b/greykite/common/features/timeseries_impute.py @@ -29,7 +29,7 @@ def impute_with_lags( df, value_col, orders, - agg_func=np.mean, + agg_func="mean", iter_num=1): """A function to impute timeseries values (given in ``df``) and in ``value_col`` with chosen lagged values or an aggregated of those. @@ -52,9 +52,10 @@ def impute_with_lags( The column name in ``df`` representing the values of the timeseries. orders : list of `int` The lag orders to be used for aggregation. - agg_func : callable, default `np.mean` + agg_func : "mean" or callable, default: "mean" `pandas.Series` -> `float` An aggregation function to aggregate the chosen lags. + If "mean", uses `pandas.DataFrame.mean`. iter_num : `int`, default `1` Maximum number of iterations to impute the series. Each iteration represent an imputation of the series using the provided @@ -82,7 +83,10 @@ def impute_with_lags( def nan_agg_func(x): """To avoid warnings due to aggregation performed on sub-series - with only NAs, we define an internal modified version of ``agg_func`` + with only NAs, we define an internal modified version of ``agg_func``. + + Note that `np.mean` passed to `pandas.DataFrame.apply` ignores NAs and + already has the same effect as `np.nanmean`. """ x = x.dropna() if len(x) == 0: @@ -90,6 +94,8 @@ def nan_agg_func(x): else: return agg_func(x) + safe_agg_func = agg_func if isinstance(agg_func, str) else nan_agg_func + i = 0 while i < iter_num and missing_num > 0: agg_lag_info = build_agg_lag_df( @@ -97,7 +103,7 @@ def nan_agg_func(x): df=df, orders_list=[orders], interval_list=[], - agg_func=nan_agg_func, + agg_func=safe_agg_func, agg_name="avglag") agg_lag_df = agg_lag_info["agg_lag_df"] diff --git a/greykite/common/features/timeseries_lags.py b/greykite/common/features/timeseries_lags.py index e5c6aac..92293b2 100644 --- a/greykite/common/features/timeseries_lags.py +++ b/greykite/common/features/timeseries_lags.py @@ -154,7 +154,7 @@ def build_agg_lag_df( df=None, orders_list=[], interval_list=[], - agg_func=np.mean, + agg_func="mean", agg_name=cst.AGG_LAG_INFIX, max_order=None): """A function which returns a dataframe including aggregated @@ -202,11 +202,12 @@ def build_agg_lag_df( then we construct two "average lagged" variables: avg(t) = (Y(t-1) + Y(t-2) + Y(t-3)) / 3 and avg(t) = (Y(t-8) + Y(t-9) + Y(t-10) + Y(t-11)) / 4 - :param agg_func: callable, default: np.mean + :param agg_func: "mean" or callable, default: "mean" the function used to aggregate the lag orders for each of orders specified in either of order_list or interval_list. Typically this function is an averaging function such as np.mean or np.median but more sophisticated functions are allowed. + If "mean", uses `pandas.DataFrame.mean`. :param agg_name: str, default: "avglag" the aggregate function name used in constructing the column names for the output data frame. @@ -245,9 +246,9 @@ def build_agg_lag_df( if orders_list is None and interval_list is None: raise ValueError( "at least one of 'orders_list' or 'interval_list' must be provided") - # find out which lags we need by finding the maximum lag used - # note that max_order should be usually passed as None (default) - # unless it is pre-calculated before calling this function + # Finds out which lags we need by finding the maximum lag used. + # Note that `max_order` should be usually passed as None (default) + # unless it is pre-calculated before calling this function. if max_order is None: max_order = min_max_lag_order( lag_dict=None, @@ -255,7 +256,7 @@ def build_agg_lag_df( "orders_list": orders_list, "interval_list": interval_list})["max_order"] - # intialize the returned items + # intializes the returned items agg_lag_df = None col_names = [] @@ -277,8 +278,14 @@ def build_agg_lag_df( col_name = f"{value_col}_{agg_name}_{col_suffix}" col_names.append(col_name) if df is not None: - agg_lag_df[col_name] = ( - lag_df.iloc[:, orders_col_index].apply(agg_func, axis=1)) + if agg_func == "mean": + # uses vectorized mean for speed + agg_lag_df[col_name] = ( + lag_df.iloc[:, orders_col_index].mean(axis=1)) + else: + # generic aggregation + agg_lag_df[col_name] = ( + lag_df.iloc[:, orders_col_index].apply(agg_func, axis=1)) for interval in interval_list: if len(interval) != 2: @@ -342,9 +349,10 @@ def build_autoreg_df( A list of tuples each of length 2. Each tuple is used to construct an aggregated lag using all orders within that range See build_agg_lag_df arguments for more details - - "agg_func": func (pd.Dataframe -> pd.Dataframe) + - "agg_func": "mean" or func (pd.Dataframe -> pd.Dataframe) The function used for aggregation in "build_agg_lag_df" - If this key is not passed, the default of "build_agg_lag_df" will be used + If this key is not passed, the default of "build_agg_lag_df" will be used. + If "mean", uses `pandas.DataFrame.mean`. :param series_na_fill_func: (pd.Series -> pd.Series) default: lambda s: s.bfill.ffill() @@ -628,6 +636,7 @@ def build_lags_func_multi(df, past_df=None): """ autoreg_df = None + lag_dfs = [] for value_col, lag_info in multi_autoreg_info.items(): build_lags_func = lag_info["build_lags_func"] res = build_lags_func( @@ -635,12 +644,15 @@ def build_lags_func_multi(df, past_df=None): past_df=past_df) lag_df = res["lag_df"] agg_lag_df = res["agg_lag_df"] - if lag_df is not None or agg_lag_df is not None: - # concatenating the new generated new columns to the result - # dataframe in column-wise fashion - autoreg_df = pd.concat( - [autoreg_df, lag_df, agg_lag_df], - axis=1) + lag_dfs.append(lag_df) + lag_dfs.append(agg_lag_df) + + try: + # Concatenates the columns to the result + # dataframe in column-wise fashion + autoreg_df = pd.concat(lag_dfs, axis=1) + except ValueError: # All objects passed are None + autoreg_df = None return autoreg_df diff --git a/greykite/common/sphinx_plotly.py b/greykite/common/sphinx_plotly.py index 2eb46e8..b0962d6 100644 --- a/greykite/common/sphinx_plotly.py +++ b/greykite/common/sphinx_plotly.py @@ -27,7 +27,7 @@ 1. List of examples_dirs, gallery_dirs 2. Do not render png thumbnail to avoid dependencies -Compatible with plotly 3.10.0. +Compatible with plotly 5.4.0. """ import inspect @@ -76,6 +76,9 @@ def render(self, fig_dict): # Assumes the default image is one level above the .py file try: filename_default_image = Path(filename_root).parents[1].joinpath('default_thumb.png') + if not os.path.exists(filename_default_image): + # the .py file is in a subfolder (sub-gallery) + filename_default_image = Path(filename_root).parents[2].joinpath('default_thumb.png') shutil.copyfile(filename_default_image, filename_png) except FileNotFoundError: warnings.warn(f"Thumbnail not found! Expected default_thumb.png to be " @@ -130,35 +133,12 @@ def plotly_sg_scraper(block, block_vars, gallery_conf, **kwargs): ----- Add this function to the image scrapers """ - # e.g. '/home/user/Documents/greykite/module/docs/gallery/subgallery/images/sphx_glr_plot_mymodule_{0:03}.png' - # where 'gallery/subgallery' is an element specified in gallery_conf["gallery_dirs"]. + examples_dir = os.path.dirname(block_vars["src_file"]) + pngs = sorted(glob(os.path.join(examples_dir, "*.png"))) + htmls = sorted(glob(os.path.join(examples_dir, "*.html"))) image_path_iterator = block_vars["image_path_iterator"] - - # Finds the examples_dirs directory with the files - # to move to the locations specified by image_path_iterator - examples_dirs = gallery_conf["examples_dirs"] - if isinstance(examples_dirs, (list, tuple)): - # Gets `gallery_dirs` item corresponding to the ``image_path_iterator`` - # example: '/home/user/Documents/mp/module/docs/gallery/subgallery' - abs_gallery_path = Path(image_path_iterator.image_path).parents[1] - # example: 'gallery/subgallery' - rel_gallery_path = os.path.relpath(abs_gallery_path, gallery_conf["src_dir"]) - # Maps relative paths in gallery_dirs to those in examples_dirs - gallery_to_examples = dict(zip(gallery_conf["gallery_dirs"], examples_dirs)) - # Gets `example_dirs` item corresponding to the gallery_dirs item - rel_example_path = gallery_to_examples[rel_gallery_path] - # Converts to absolute example path - # `rel_example_path` is the path relative to gallery_conf["src_dir"] - # (/home/user/Documents/mp/module/docs) but the current working directory - # could be /home/user/Documents/mp or something else - abs_example_path = os.path.join(gallery_conf["src_dir"], rel_example_path) - - # Copies files from rel_example_path to the proper location in gallery_dirs - pngs = sorted(glob(os.path.join(abs_example_path, "*.png"))) - htmls = sorted(glob(os.path.join(abs_example_path, "*.html"))) image_names = list() seen = set() - for html, png in zip(htmls, pngs): if png not in seen: seen |= set(png) diff --git a/greykite/common/testing_utils.py b/greykite/common/testing_utils.py index cf16700..accc0c3 100644 --- a/greykite/common/testing_utils.py +++ b/greykite/common/testing_utils.py @@ -28,12 +28,14 @@ import pandas as pd from greykite.common.constants import ADJUSTMENT_DELTA_COL -from greykite.common.constants import END_DATE_COL +from greykite.common.constants import ANOMALY_COL +from greykite.common.constants import END_TIME_COL from greykite.common.constants import EVENT_DF_LABEL_COL from greykite.common.constants import METRIC_COL -from greykite.common.constants import START_DATE_COL +from greykite.common.constants import START_TIME_COL from greykite.common.constants import TIME_COL from greykite.common.constants import VALUE_COL +from greykite.common.constants import TimeFeaturesEnum from greykite.common.features.timeseries_features import add_daily_events from greykite.common.features.timeseries_features import build_time_features_df from greykite.common.features.timeseries_features import fourier_series_multi_fcn @@ -115,10 +117,13 @@ def generate_df_for_tests( dt=df0[TIME_COL], conti_year_origin=conti_year_origin) df = pd.concat([df0, time_df], axis=1) - df["growth"] = growth_coef * (df["ct1"] ** growth_pow) + df["growth"] = growth_coef * (df[TimeFeaturesEnum.ct1.value] ** growth_pow) func = fourier_series_multi_fcn( - col_names=["toy", "tow", "tod"], + col_names=[ + TimeFeaturesEnum.toy.value, + TimeFeaturesEnum.tow.value, + TimeFeaturesEnum.tod.value], periods=[1.0, 7.0, 24.0], orders=[1, 1, 1], seas_names=None) @@ -130,9 +135,9 @@ def generate_df_for_tests( df[VALUE_COL] = ( intercept + df["growth"] - + fs_coefs[0] * df[get_fourier_col_name(1, "tod", function_name="sin")] - + fs_coefs[1] * df[get_fourier_col_name(1, "tow", function_name="sin")] - + fs_coefs[2] * df[get_fourier_col_name(1, "toy", function_name="sin")] + + fs_coefs[0] * df[get_fourier_col_name(1, TimeFeaturesEnum.tod.value, function_name="sin")] + + fs_coefs[1] * df[get_fourier_col_name(1, TimeFeaturesEnum.tow.value, function_name="sin")] + + fs_coefs[2] * df[get_fourier_col_name(1, TimeFeaturesEnum.toy.value, function_name="sin")] + noise_std * np.random.normal(size=df.shape[0])) if autoreg_coefs is not None: @@ -140,8 +145,8 @@ def generate_df_for_tests( k = len(autoreg_coefs) for i in range(k): df["temporary_new_value"] = ( - df["temporary_new_value"] + - autoreg_coefs[i]*df[VALUE_COL].shift(-i)).bfill() + df["temporary_new_value"] + + autoreg_coefs[i]*df[VALUE_COL].shift(-i)).bfill() df[VALUE_COL] = df["temporary_new_value"] del df["temporary_new_value"] @@ -182,9 +187,12 @@ def generate_df_with_holidays(freq, periods): df[VALUE_COL] = ( df[VALUE_COL] - + 2 * (df["events_US"] == "US_holiday") * df[get_fourier_col_name(1, "tod", function_name="sin")] - + 3 * (df["events_US"] == "US_holiday") * df[get_fourier_col_name(1, "tod", function_name="cos")] - + 4 * (df["events_India"] == "India_holiday") * df[get_fourier_col_name(1, "tod", function_name="cos")]) + + 2 * (df["events_US"] == "US_holiday") * df[ + get_fourier_col_name(1, TimeFeaturesEnum.tod.value, function_name="sin")] + + 3 * (df["events_US"] == "US_holiday") * df[ + get_fourier_col_name(1, TimeFeaturesEnum.tod.value, function_name="cos")] + + 4 * (df["events_India"] == "India_holiday") * df[ + get_fourier_col_name(1, TimeFeaturesEnum.tod.value, function_name="cos")]) df = df[[TIME_COL, VALUE_COL]] thresh = datetime.datetime(2019, 8, 1) @@ -251,23 +259,23 @@ def generate_df_with_reg_for_tests( df = result_list["df"] df["regressor1"] = ( df["growth"] - + 4 * df[get_fourier_col_name(1, "tow", function_name="sin")] - - 3 * df[get_fourier_col_name(1, "tod", function_name="sin")] - + 7 * df[get_fourier_col_name(1, "toy", function_name="sin")] + + 4 * df[get_fourier_col_name(1, TimeFeaturesEnum.tow.value, function_name="sin")] + - 3 * df[get_fourier_col_name(1, TimeFeaturesEnum.tod.value, function_name="sin")] + + 7 * df[get_fourier_col_name(1, TimeFeaturesEnum.toy.value, function_name="sin")] - noise_std * np.random.normal(size=df.shape[0])) df["regressor2"] = ( df["growth"] - + 1 * df[get_fourier_col_name(1, "tow", function_name="sin")] - - 2 * df[get_fourier_col_name(1, "tod", function_name="sin")] - + 3 * df[get_fourier_col_name(1, "toy", function_name="sin")] + + 1 * df[get_fourier_col_name(1, TimeFeaturesEnum.tow.value, function_name="sin")] + - 2 * df[get_fourier_col_name(1, TimeFeaturesEnum.tod.value, function_name="sin")] + + 3 * df[get_fourier_col_name(1, TimeFeaturesEnum.toy.value, function_name="sin")] + noise_std * np.random.normal(size=df.shape[0])) df["regressor3"] = ( df["growth"] - + 9 * df[get_fourier_col_name(1, "tow", function_name="sin")] - - 8 * df[get_fourier_col_name(1, "tod", function_name="sin")] - + 5 * df[get_fourier_col_name(1, "toy", function_name="sin")] + + 9 * df[get_fourier_col_name(1, TimeFeaturesEnum.tow.value, function_name="sin")] + - 8 * df[get_fourier_col_name(1, TimeFeaturesEnum.tod.value, function_name="sin")] + + 5 * df[get_fourier_col_name(1, TimeFeaturesEnum.toy.value, function_name="sin")] + noise_std * np.random.normal(size=df.shape[0])) df["regressor_bool"] = np.random.rand(df.shape[0]) > 0.3 @@ -391,11 +399,11 @@ def generate_anomalous_data(periods=10): METRIC_COL: ["y", "y", "z", "z"], "platform": ["MOBILE", "MOBILE", "DESKTOP", "DESKTOP"], "vertical": ["ads", "sales", "ads", "ads"], - START_DATE_COL: ["1/1/2018", "1/4/2018", "1/8/2018", "1/10/2018"], - END_DATE_COL: ["1/2/2018", "1/6/2018", "1/9/2018", "1/10/2018"], + START_TIME_COL: ["1/1/2018", "1/4/2018", "1/8/2018", "1/10/2018"], + END_TIME_COL: ["1/2/2018", "1/6/2018", "1/9/2018", "1/10/2018"], ADJUSTMENT_DELTA_COL: [np.nan, 3., -5., np.nan]}) - for col in ["start_date", "end_date"]: + for col in [START_TIME_COL, END_TIME_COL]: anomaly_df[col] = pd.to_datetime(anomaly_df[col]) return { @@ -411,7 +419,7 @@ def generic_test_adjust_anomalous_data( augmented_df = adj_df_info["augmented_df"] adjusted_df = adj_df_info["adjusted_df"] assert list(adjusted_df.columns) == ["ts", "y", "z"] - assert list(augmented_df.columns) == ["ts", "y", "z", f"adjusted_{value_col}"] + assert list(augmented_df.columns) == ["ts", "y", "z", ANOMALY_COL, f"adjusted_{value_col}"] assert_equal( adjusted_df[value_col], augmented_df[f"adjusted_{value_col}"], diff --git a/greykite/common/time_properties.py b/greykite/common/time_properties.py index 4c34ce3..e513ce3 100644 --- a/greykite/common/time_properties.py +++ b/greykite/common/time_properties.py @@ -263,9 +263,9 @@ def get_canonical_data( to forecast as well as any numeric regressors. ``"anomaly_df"`` : `pandas.DataFrame` Adjustments to correct the anomalies. - ``"start_date_col"``: `str`, default START_DATE_COL + ``"start_time_col"``: `str`, default START_TIME_COL Start date column in ``anomaly_df``. - ``"end_date_col"``: `str`, default END_DATE_COL + ``"end_time_col"``: `str`, default END_TIME_COL End date column in ``anomaly_df``. ``"adjustment_delta_col"``: `str` or None, default None Impact column in ``anomaly_df``. diff --git a/greykite/common/viz/timeseries_annotate.py b/greykite/common/viz/timeseries_annotate.py new file mode 100644 index 0000000..bb1249f --- /dev/null +++ b/greykite/common/viz/timeseries_annotate.py @@ -0,0 +1,346 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Reza Hosseini, Kaixu Yang +"""Plotting functions to add annotations to timseries""" + +import plotly.graph_objects as go + + +def plt_annotate_series( + df, + x_col, + value_col, + label_col, + annotate_labels=None, + keep_cols=None, + fill_cols=None, + title=None): + """A function which plots a values given in ``value_col`` of a dataframe + ``df`` against x-axis values given in ``x_col`` and adds annotations based + on labels in ``label_col``. + + Parameters + ---------- + df : `pandas.DataFrame` + Data frame with ``x_col``, ``value_col`` and ``label_col``. + If ``keep_cols`` is not None ``df`` is supposed to have the columns + in ``keep_cols`` as well. + x_col: `str` + Which column to plot on the x-axis. + value_col : `str` + The column with the values for the series. + label_col : `str` + The column which includes the labels for which we want to annotate the + series given in ``value_col``. + annotate_labels : `List` [`str`] or None, default None + If not None, the annotations will only be added for the labels given in + this list. + keep_cols: `List` [`str`] or None, default None + Extra columns to be plotted if not None. + fill_cols : `List` [ `List` [`str`] ] + Fill between each list of columns in ``fill_cols``. + title : `str` or None, default None + Plot title. If None, default is based on axis labels. + + Returns + ------- + result : `dict` with following items: + + - "fig" : `plotly.graph_objects.Figure` + Interactive plotly graph of ``value_col`` and potentially columns + in specified in ``keep_cols`` (if not None) + in ``df`` against ``x_col`` with added annotations. + + - "df": `pandas.DataFrame` + A dataframe which is an expansion of ``df`` and includes extra columns + with new value columns for each label in ``annotate_labels`` or all labels + if ``annotate_labels`` is None. The new column for each label is NA if + that label is not activated and equals ``value_col`` otherwise. + """ + df = df.copy() + if keep_cols is None: + keep_cols = [] + + y_col_style_dict = {} + # The columns to be filled. They will be handled separately from ``keep_cols``. + all_fill_cols = [] + if fill_cols is not None and len(fill_cols) > 0: + if not isinstance(fill_cols[0], list): + raise ValueError(f"fill_cols must be a list of lists of strings.") + all_fill_cols = [c for c_list in fill_cols for c in c_list] + # Removes a col in keep_cols if it is already in fill_cols. + keep_cols = [col for col in keep_cols if col not in all_fill_cols] + + df = df[[x_col, value_col, label_col] + keep_cols + all_fill_cols] + + if annotate_labels is None: + annotate_labels = df[label_col].unique() + + for col in [value_col] + keep_cols: + y_col_style_dict[col] = { + "mode": "lines" + } + + for label in annotate_labels: + new_col = f"{value_col}_label_{label}" + df[new_col] = df[value_col] + df.loc[~(df[label_col] == label), new_col] = None + y_col_style_dict[new_col] = { + "mode": "markers"} + + y_col_style_dict[value_col] = { + "mode": "lines", + "line": { + "color": "rgba(0, 0, 255, 0.3)", + "dash": "solid"}} + + del df[label_col] + + # Instead of calling plot_multivariate, we make the figure manually to avoid the column order to be + # flipped due to the fact that dictionary is unordered. This may affect the fill between certain columns. + data = [] + # Plots fill_cols first to make them in the bottom layer. + if fill_cols is not None: + first_fill_color = "rgba(142, 215, 246, 0.3)" # blue + + for g, col_list in enumerate(fill_cols): + for i, col in enumerate(col_list): + line = go.Scatter( + x=df[x_col], + y=df[col], + name=col, + legendgroup=f"{g}", + mode="lines", + line=dict(color=(first_fill_color if g == 0 else None)), + fill=("tonexty" if i != 0 else None), + fillcolor=(first_fill_color if g == 0 else None) + ) + data.append(line) + + for column, style_dict in y_col_style_dict.items(): + style_dict = dict( + name=column, + **style_dict + ) + line = go.Scatter( + x=df[x_col], + y=df[column], + **style_dict) + data.append(line) + + layout = go.Layout( + xaxis=dict(title=x_col), + yaxis=dict(title=value_col), + title=title, + title_x=0.5, + showlegend=True, + ) + fig = go.Figure(data=data, layout=layout) + + return { + "fig": fig, + "annotated_df": df} + + +def plt_compare_series_annotations( + df, + x_col, + actual_col, + actual_label_col, + forecast_label_col, + forecast_col=None, + keep_cols=None, + fill_cols=None, + standardize_col=None, + title=None, + x_label=None, + y_label=None): + """A function which plots ``actual_col`` and ``forecast_col`` and well as + ``forecast_lower_col``, ``forecast_upper_col`` with respect to x axis + (often time) given in ``x_col``. Then it annotates: + + - the ``actual_col`` with markers when ``actual_label_col`` is non-zero. + - the ``forecast_col`` with markers when ``forecast_label_col`` is non-zero. + + This will help user to identify where the two annotations are consistent. + + Parameters + ---------- + df : `pandas.DataFrame` + Data frame with all columns used in this function (see arguments passed + ending with "_col"). + x_col: `str` + Which column to plot on the x-axis. + actual_col: `str` + The column in the dataframe which includes the actual values (ground truth). + actual_label_col: `str` + The column which has labels including 0, and will be used to annotate + the values in ``actual_col`` for non-zero values. The non-zero labels + are often considerd anomalies. + forecast_label_col: `str` + The column which has labels including 0, and will be used to annotate + the values in ``forecast_col`` for non-zero values. The non-zero labels + are often considerd anomalies. + forecast_col : `str` or None, default None + The column in the dataframe which includes the forecast values + keep_cols: `List` [`str`] or None, default None + Extra columns to be plotted. The color for these extra columns will be + opaque grey so they do not be the center of attention in the plot. + Often these columns will be model upper and lower bound predictions. + fill_cols: `list` [`list` [`str`] ] or None, default None + Fill between each list of columns in ``fill_cols``. + standardize_col : `str` or `None` + In case we like to standardize all values with respect to a column, that + column name would be passed here. Often ``actual_col`` will be a good + candidate to be used here. + title : `str` or None, default None + Plot title. If None, default is based on axis labels. + x_label : `str` or None, default None + x axis label, if None ``x_col`` will be used. + y_label : `str` or None, default None + y axis label, if None, no label will be used for y-axis. Note that the + legend will include the label for various curves / markers. + + + Returns + ------- + fig : `plotly.graph_objects.Figure` + Interactive plotly graph. + """ + + df = df.copy() + df[f"model_anomaly"] = df[actual_col] + df.loc[df[forecast_label_col].map(float) == 0, f"model_anomaly"] = None + df[f"true_anomaly"] = df[actual_col] + df.loc[df[actual_label_col].map(float) == 0, f"true_anomaly"] = None + + cols = [ + actual_col, + f"model_anomaly", + f"true_anomaly"] + + all_fill_cols = [] + # The columns in fill_cols will be handled separately. + if fill_cols is not None and len(fill_cols) > 0: + if not isinstance(fill_cols[0], list): + raise ValueError(f"fill_cols must be a list of lists of strings.") + all_fill_cols = [c for c_list in fill_cols for c in c_list] + if keep_cols is not None: + # Removes a col in keep_cols if it is already in fill_cols. + keep_cols = [col for col in keep_cols if col not in all_fill_cols] + + if keep_cols is not None: + cols += keep_cols + + if forecast_col is not None: + cols += [forecast_col] + + cols += all_fill_cols + + if standardize_col: + x = df[standardize_col] + for col in cols: + df[col] = df[col] / x + + y_col_style_dict = { + actual_col: { + "mode": "lines", + "line": { + "color": "rgba(0, 255, 0, 0.3)", + "dash": "solid" + } + }, + "true_anomaly": { + "mode": "markers", + "marker": dict( + color="rgba(255, 0, 0, 0.5)", + symbol="square") + }, + "model_anomaly": { + "mode": "markers", + "marker": dict( + color="rgba(0, 0, 255, 0.6)", + symbol="star") + } + } + + if forecast_col is not None: + y_col_style_dict[forecast_col] = { + "mode": "lines", + "line": { + "color": "rgba(0, 0, 255, 0.4)", + "dash": "solid" + } + } + + if keep_cols is not None: + for i in range(len(keep_cols)): + col = keep_cols[i] + # this is to be able to distinguish between the ``keep_cols`` using opacity + opacity = (i + 1) / (len(keep_cols) + 1) + y_col_style_dict[col] = { + "mode": "lines", + "line": { + "color": f"rgba(191, 191, 191, {opacity})", + "dash": "solid"}} + + # Instead of calling plot_multivariate, we make the figure manually to avoid the column order to be + # flipped due to the fact that dictionary is unordered. This may affect the fill between certain columns. + data = [] + # Plots fill_cols first to make them in the bottom layer. + if fill_cols is not None: + first_fill_color = "rgba(142, 215, 246, 0.3)" # blue + + for g, col_list in enumerate(fill_cols): + for i, col in enumerate(col_list): + line = go.Scatter( + x=df[x_col], + y=df[col], + name=col, + legendgroup=f"{g}", + mode="lines", + line=dict(color=(first_fill_color if g == 0 else None)), + fill=("tonexty" if i != 0 else None), + fillcolor=(first_fill_color if g == 0 else None) + ) + data.append(line) + + for column, style_dict in y_col_style_dict.items(): + style_dict = dict( + name=column, + **style_dict + ) + line = go.Scatter( + x=df[x_col], + y=df[column], + **style_dict) + data.append(line) + + layout = go.Layout( + xaxis=dict(title=(x_label if x_label is not None else x_col)), + yaxis=dict(title=(y_label if y_label is not None else None)), + title=title, + title_x=0.5, + showlegend=True, + ) + fig = go.Figure(data=data, layout=layout) + + return fig diff --git a/greykite/data/daily/daily_bitcoin_transactions.csv b/greykite/data/daily/daily_bitcoin_transactions.csv new file mode 100644 index 0000000..60ef270 --- /dev/null +++ b/greykite/data/daily/daily_bitcoin_transactions.csv @@ -0,0 +1,4573 @@ +ts,y +2009-01-12,7.0 +2009-01-13,7.0 +2009-01-14,1.0 +2009-01-15,8.0 +2009-01-16,2.0 +2009-01-17,2.0 +2009-01-18,1.0 +2009-01-19,2.0 +2009-01-20,1.0 +2009-01-21,1.0 +2009-01-22,1.0 +2009-01-23,2.0 +2009-01-24,1.0 +2009-01-25,1.0 +2009-01-26,1.0 +2009-01-27,1.0 +2009-01-28,1.0 +2009-01-29,1.0 +2009-01-30,1.0 +2009-01-31,1.0 +2009-02-01,1.0 +2009-02-02,1.0 +2009-02-03,16.0 +2009-02-04,16.0 +2009-02-05,16.0 +2009-02-06,16.0 +2009-02-07,4.0 +2009-02-08,1.0 +2009-02-09,1.0 +2009-02-10,1.0 +2009-02-11,2.0 +2009-02-12,2.0 +2009-02-13,2.0 +2009-02-14,2.0 +2009-02-15,3.0 +2009-02-16,1.0 +2009-02-17,1.0 +2009-02-18,1.0 +2009-02-19,1.0 +2009-02-20,1.0 +2009-02-21,1.0 +2009-02-22,4.0 +2009-02-23,4.0 +2009-02-24,4.0 +2009-02-25,4.0 +2009-02-26,4.0 +2009-02-27,1.0 +2009-02-28,1.0 +2009-03-01,1.0 +2009-03-02,1.0 +2009-03-03,2.0 +2009-03-04,2.0 +2009-03-05,1.0 +2009-03-06,1.0 +2009-03-07,1.0 +2009-03-08,3.0 +2009-03-09,3.0 +2009-03-10,3.0 +2009-03-11,3.0 +2009-03-12,1.0 +2009-03-13,1.0 +2009-03-14,1.0 +2009-03-15,1.0 +2009-03-16,1.0 +2009-03-17,1.0 +2009-03-18,2.0 +2009-03-19,2.0 +2009-03-20,1.0 +2009-03-21,1.0 +2009-03-22,2.0 +2009-03-23,2.0 +2009-03-24,2.0 +2009-03-25,2.0 +2009-03-26,1.0 +2009-03-27,1.0 +2009-03-28,3.0 +2009-03-29,3.0 +2009-03-30,3.0 +2009-03-31,1.0 +2009-04-01,1.0 +2009-04-02,1.0 +2009-04-03,1.0 +2009-04-04,1.0 +2009-04-05,2.0 +2009-04-06,2.0 +2009-04-07,2.0 +2009-04-08,2.0 +2009-04-09,2.0 +2009-04-10,2.0 +2009-04-11,1.0 +2009-04-12,2.0 +2009-04-13,1.0 +2009-04-14,1.0 +2009-04-15,1.0 +2009-04-16,1.0 +2009-04-17,1.0 +2009-04-18,4.0 +2009-04-19,1.0 +2009-04-20,2.0 +2009-04-21,1.0 +2009-04-22,1.0 +2009-04-23,1.0 +2009-04-24,1.0 +2009-04-25,1.0 +2009-04-26,2.0 +2009-04-27,2.0 +2009-04-28,2.0 +2009-04-29,1.0 +2009-04-30,1.0 +2009-05-01,1.0 +2009-05-02,2.0 +2009-05-03,3.0 +2009-05-04,1.0 +2009-05-05,1.0 +2009-05-06,1.0 +2009-05-07,1.0 +2009-05-08,1.0 +2009-05-09,1.0 +2009-05-10,1.0 +2009-05-11,1.0 +2009-05-12,1.0 +2009-05-13,5.0 +2009-05-14,3.0 +2009-05-15,1.0 +2009-05-16,1.0 +2009-05-17,1.0 +2009-05-18,1.0 +2009-05-19,1.0 +2009-05-20,1.0 +2009-05-21,1.0 +2009-05-22,1.0 +2009-05-23,1.0 +2009-05-24,1.0 +2009-05-25,1.0 +2009-05-26,1.0 +2009-05-27,1.0 +2009-05-28,1.0 +2009-05-29,1.0 +2009-05-30,1.0 +2009-05-31,1.0 +2009-06-01,1.0 +2009-06-02,1.0 +2009-06-03,1.0 +2009-06-04,1.0 +2009-06-05,1.0 +2009-06-06,1.0 +2009-06-07,1.0 +2009-06-08,1.0 +2009-06-09,1.0 +2009-06-10,1.0 +2009-06-11,1.0 +2009-06-12,1.0 +2009-06-13,1.0 +2009-06-14,1.0 +2009-06-15,1.0 +2009-06-16,1.0 +2009-06-17,1.0 +2009-06-18,1.0 +2009-06-19,1.0 +2009-06-20,1.0 +2009-06-21,1.0 +2009-06-22,1.0 +2009-06-23,1.0 +2009-06-24,2.0 +2009-06-25,1.0 +2009-06-26,1.0 +2009-06-27,1.0 +2009-06-28,1.0 +2009-06-29,1.0 +2009-06-30,1.0 +2009-07-01,1.0 +2009-07-02,1.0 +2009-07-03,1.0 +2009-07-04,1.0 +2009-07-05,1.0 +2009-07-06,1.0 +2009-07-07,1.0 +2009-07-08,1.0 +2009-07-09,1.0 +2009-07-10,1.0 +2009-07-11,1.0 +2009-07-12,1.0 +2009-07-13,1.0 +2009-07-14,1.0 +2009-07-15,1.0 +2009-07-16,1.0 +2009-07-17,1.0 +2009-07-18,1.0 +2009-07-19,1.0 +2009-07-20,1.0 +2009-07-21,1.0 +2009-07-22,1.0 +2009-07-23,1.0 +2009-07-24,1.0 +2009-07-25,1.0 +2009-07-26,1.0 +2009-07-27,1.0 +2009-07-28,1.0 +2009-07-29,1.0 +2009-07-30,1.0 +2009-07-31,1.0 +2009-08-01,1.0 +2009-08-02,1.0 +2009-08-03,1.0 +2009-08-04,1.0 +2009-08-05,1.0 +2009-08-06,1.0 +2009-08-07,1.0 +2009-08-08,1.0 +2009-08-09,1.0 +2009-08-10,1.0 +2009-08-11,1.0 +2009-08-12,1.0 +2009-08-13,1.0 +2009-08-14,1.0 +2009-08-15,1.0 +2009-08-16,1.0 +2009-08-17,1.0 +2009-08-18,1.0 +2009-08-19,1.0 +2009-08-20,1.0 +2009-08-21,1.0 +2009-08-22,1.0 +2009-08-23,1.0 +2009-08-24,1.0 +2009-08-25,1.0 +2009-08-26,3.0 +2009-08-27,3.0 +2009-08-28,3.0 +2009-08-29,3.0 +2009-08-30,1.0 +2009-08-31,1.0 +2009-09-01,1.0 +2009-09-02,1.0 +2009-09-03,1.0 +2009-09-04,1.0 +2009-09-05,1.0 +2009-09-06,1.0 +2009-09-07,1.0 +2009-09-08,1.0 +2009-09-09,1.0 +2009-09-10,1.0 +2009-09-11,1.0 +2009-09-12,1.0 +2009-09-13,1.0 +2009-09-14,1.0 +2009-09-15,1.0 +2009-09-16,1.0 +2009-09-17,1.0 +2009-09-18,1.0 +2009-09-19,1.0 +2009-09-20,1.0 +2009-09-21,1.0 +2009-09-22,1.0 +2009-09-23,1.0 +2009-09-24,1.0 +2009-09-25,2.0 +2009-09-26,2.0 +2009-09-27,1.0 +2009-09-28,1.0 +2009-09-29,2.0 +2009-09-30,2.0 +2009-10-01,2.0 +2009-10-02,1.0 +2009-10-03,1.0 +2009-10-04,1.0 +2009-10-05,1.0 +2009-10-06,2.0 +2009-10-07,2.0 +2009-10-08,2.0 +2009-10-09,2.0 +2009-10-10,2.0 +2009-10-11,2.0 +2009-10-12,1.0 +2009-10-13,1.0 +2009-10-14,1.0 +2009-10-15,1.0 +2009-10-16,1.0 +2009-10-17,1.0 +2009-10-18,1.0 +2009-10-19,1.0 +2009-10-20,1.0 +2009-10-21,1.0 +2009-10-22,1.0 +2009-10-23,1.0 +2009-10-24,1.0 +2009-10-25,1.0 +2009-10-26,1.0 +2009-10-27,1.0 +2009-10-28,1.0 +2009-10-29,2.0 +2009-10-30,2.0 +2009-10-31,2.0 +2009-11-01,2.0 +2009-11-02,2.0 +2009-11-03,2.0 +2009-11-04,1.0 +2009-11-05,1.0 +2009-11-06,1.0 +2009-11-07,1.0 +2009-11-08,1.0 +2009-11-09,1.0 +2009-11-10,1.0 +2009-11-11,9.0 +2009-11-12,9.0 +2009-11-13,3.0 +2009-11-14,3.0 +2009-11-15,3.0 +2009-11-16,3.0 +2009-11-17,3.0 +2009-11-18,3.0 +2009-11-19,2.0 +2009-11-20,2.0 +2009-11-21,2.0 +2009-11-22,2.0 +2009-11-23,2.0 +2009-11-24,2.0 +2009-11-25,2.0 +2009-11-26,2.0 +2009-11-27,2.0 +2009-11-28,2.0 +2009-11-29,2.0 +2009-11-30,2.0 +2009-12-01,1.0 +2009-12-02,1.0 +2009-12-03,1.0 +2009-12-04,1.0 +2009-12-05,1.0 +2009-12-06,2.0 +2009-12-07,2.0 +2009-12-08,2.0 +2009-12-09,13.0 +2009-12-10,13.0 +2009-12-11,13.0 +2009-12-12,2.0 +2009-12-13,2.0 +2009-12-14,5.0 +2009-12-15,2.0 +2009-12-16,1.0 +2009-12-17,3.0 +2009-12-18,3.0 +2009-12-19,1.0 +2009-12-20,1.0 +2009-12-21,1.0 +2009-12-22,1.0 +2009-12-23,1.0 +2009-12-24,1.0 +2009-12-25,1.0 +2009-12-26,1.0 +2009-12-27,1.0 +2009-12-28,1.0 +2009-12-29,1.0 +2009-12-30,1.0 +2009-12-31,1.0 +2010-01-01,2.0 +2010-01-02,2.0 +2010-01-03,2.0 +2010-01-04,2.0 +2010-01-05,2.0 +2010-01-06,2.0 +2010-01-07,2.0 +2010-01-08,2.0 +2010-01-09,2.0 +2010-01-10,2.0 +2010-01-11,2.0 +2010-01-12,2.0 +2010-01-13,2.0 +2010-01-14,2.0 +2010-01-15,1.0 +2010-01-16,1.0 +2010-01-17,1.0 +2010-01-18,1.0 +2010-01-19,1.0 +2010-01-20,1.0 +2010-01-21,9.0 +2010-01-22,3.0 +2010-01-23,2.0 +2010-01-24,1.0 +2010-01-25,4.0 +2010-01-26,6.0 +2010-01-27,2.0 +2010-01-28,2.0 +2010-01-29,4.0 +2010-01-30,4.0 +2010-01-31,2.0 +2010-02-01,9.0 +2010-02-02,1.0 +2010-02-03,2.0 +2010-02-04,5.0 +2010-02-05,4.0 +2010-02-06,14.0 +2010-02-07,5.0 +2010-02-08,8.0 +2010-02-09,3.0 +2010-02-10,5.0 +2010-02-11,5.0 +2010-02-12,5.0 +2010-02-13,3.0 +2010-02-14,11.0 +2010-02-15,9.0 +2010-02-16,6.0 +2010-02-17,11.0 +2010-02-18,7.0 +2010-02-19,3.0 +2010-02-20,2.0 +2010-02-21,4.0 +2010-02-22,5.0 +2010-02-23,1.0 +2010-02-24,6.0 +2010-02-25,4.0 +2010-02-26,4.0 +2010-02-27,3.0 +2010-02-28,3.0 +2010-03-01,4.0 +2010-03-02,5.0 +2010-03-03,6.0 +2010-03-04,3.0 +2010-03-05,2.0 +2010-03-06,6.0 +2010-03-07,4.0 +2010-03-08,5.0 +2010-03-09,2.0 +2010-03-10,7.0 +2010-03-11,3.0 +2010-03-12,2.0 +2010-03-13,1.0 +2010-03-14,2.0 +2010-03-15,5.0 +2010-03-16,3.0 +2010-03-17,3.0 +2010-03-18,9.0 +2010-03-19,9.0 +2010-03-20,12.0 +2010-03-21,7.0 +2010-03-22,7.0 +2010-03-23,13.0 +2010-03-24,11.0 +2010-03-25,15.0 +2010-03-26,16.0 +2010-03-27,6.0 +2010-03-28,6.0 +2010-03-29,12.0 +2010-03-30,6.0 +2010-03-31,5.0 +2010-04-01,11.0 +2010-04-02,5.0 +2010-04-03,5.0 +2010-04-04,12.0 +2010-04-05,28.0 +2010-04-06,15.0 +2010-04-07,11.0 +2010-04-08,12.0 +2010-04-09,35.0 +2010-04-10,38.0 +2010-04-11,42.0 +2010-04-12,44.0 +2010-04-13,20.0 +2010-04-14,43.0 +2010-04-15,74.0 +2010-04-16,32.0 +2010-04-17,29.0 +2010-04-18,3106.0 +2010-04-19,44.0 +2010-04-20,38.0 +2010-04-21,32.0 +2010-04-22,40.0 +2010-04-23,50.0 +2010-04-24,34.0 +2010-04-25,47.0 +2010-04-26,47.0 +2010-04-27,53.0 +2010-04-28,47.0 +2010-04-29,33.0 +2010-04-30,26.0 +2010-05-01,27.0 +2010-05-02,25.0 +2010-05-03,29.0 +2010-05-04,41.0 +2010-05-05,25.0 +2010-05-06,28.0 +2010-05-07,26.0 +2010-05-08,28.0 +2010-05-09,40.0 +2010-05-10,29.0 +2010-05-11,19.0 +2010-05-12,32.0 +2010-05-13,39.0 +2010-05-14,30.0 +2010-05-15,22.0 +2010-05-16,20.0 +2010-05-17,35.0 +2010-05-18,55.0 +2010-05-19,43.0 +2010-05-20,34.0 +2010-05-21,59.0 +2010-05-22,31.0 +2010-05-23,98.0 +2010-05-24,62.0 +2010-05-25,44.0 +2010-05-26,64.0 +2010-05-27,75.0 +2010-05-28,54.0 +2010-05-29,55.0 +2010-05-30,51.0 +2010-05-31,52.0 +2010-06-01,48.0 +2010-06-02,47.0 +2010-06-03,83.0 +2010-06-04,48.0 +2010-06-05,45.0 +2010-06-06,52.0 +2010-06-07,52.0 +2010-06-08,63.0 +2010-06-09,52.0 +2010-06-10,57.0 +2010-06-11,79.0 +2010-06-12,78.0 +2010-06-13,67.0 +2010-06-14,96.0 +2010-06-15,85.0 +2010-06-16,50.0 +2010-06-17,58.0 +2010-06-18,43.0 +2010-06-19,64.0 +2010-06-20,43.0 +2010-06-21,88.0 +2010-06-22,71.0 +2010-06-23,70.0 +2010-06-24,71.0 +2010-06-25,60.0 +2010-06-26,42.0 +2010-06-27,56.0 +2010-06-28,78.0 +2010-06-29,95.0 +2010-06-30,91.0 +2010-07-01,73.0 +2010-07-02,74.0 +2010-07-03,74.0 +2010-07-04,58.0 +2010-07-05,73.0 +2010-07-06,39.0 +2010-07-07,62.0 +2010-07-08,72.0 +2010-07-09,69.0 +2010-07-10,42.0 +2010-07-11,174.0 +2010-07-12,1641.0 +2010-07-13,787.0 +2010-07-14,5554.0 +2010-07-15,706.0 +2010-07-16,676.0 +2010-07-17,235.0 +2010-07-18,248.0 +2010-07-19,354.0 +2010-07-20,413.0 +2010-07-21,256.0 +2010-07-22,221.0 +2010-07-23,217.0 +2010-07-24,705.0 +2010-07-25,1592.0 +2010-07-26,224.0 +2010-07-27,260.0 +2010-07-28,1792.0 +2010-07-29,1687.0 +2010-07-30,143.0 +2010-07-31,92.0 +2010-08-01,125.0 +2010-08-02,156.0 +2010-08-03,421.0 +2010-08-04,196.0 +2010-08-05,297.0 +2010-08-06,212.0 +2010-08-07,118.0 +2010-08-08,192.0 +2010-08-09,234.0 +2010-08-10,149.0 +2010-08-11,179.0 +2010-08-12,175.0 +2010-08-13,301.0 +2010-08-14,153.0 +2010-08-15,108.0 +2010-08-16,306.0 +2010-08-17,189.0 +2010-08-18,244.0 +2010-08-19,190.0 +2010-08-20,230.0 +2010-08-21,169.0 +2010-08-22,154.0 +2010-08-23,156.0 +2010-08-24,164.0 +2010-08-25,149.0 +2010-08-26,158.0 +2010-08-27,123.0 +2010-08-28,169.0 +2010-08-29,98.0 +2010-08-30,180.0 +2010-08-31,257.0 +2010-09-01,223.0 +2010-09-02,165.0 +2010-09-03,155.0 +2010-09-04,93.0 +2010-09-05,146.0 +2010-09-06,120.0 +2010-09-07,122.0 +2010-09-08,174.0 +2010-09-09,189.0 +2010-09-10,183.0 +2010-09-11,145.0 +2010-09-12,202.0 +2010-09-13,265.0 +2010-09-14,221.0 +2010-09-15,261.0 +2010-09-16,219.0 +2010-09-17,153.0 +2010-09-18,162.0 +2010-09-19,146.0 +2010-09-20,262.0 +2010-09-21,638.0 +2010-09-22,499.0 +2010-09-23,421.0 +2010-09-24,273.0 +2010-09-25,325.0 +2010-09-26,195.0 +2010-09-27,374.0 +2010-09-28,279.0 +2010-09-29,811.0 +2010-09-30,219.0 +2010-10-01,430.0 +2010-10-02,401.0 +2010-10-03,255.0 +2010-10-04,254.0 +2010-10-05,245.0 +2010-10-06,236.0 +2010-10-07,180.0 +2010-10-08,209.0 +2010-10-09,243.0 +2010-10-10,185.0 +2010-10-11,183.0 +2010-10-12,197.0 +2010-10-13,188.0 +2010-10-14,162.0 +2010-10-15,151.0 +2010-10-16,183.0 +2010-10-17,187.0 +2010-10-18,330.0 +2010-10-19,668.0 +2010-10-20,449.0 +2010-10-21,366.0 +2010-10-22,448.0 +2010-10-23,342.0 +2010-10-24,347.0 +2010-10-25,207.0 +2010-10-26,277.0 +2010-10-27,355.0 +2010-10-28,267.0 +2010-10-29,244.0 +2010-10-30,174.0 +2010-10-31,128.0 +2010-11-01,174.0 +2010-11-02,110.0 +2010-11-03,157.0 +2010-11-04,141.0 +2010-11-05,223.0 +2010-11-06,176.0 +2010-11-07,210.0 +2010-11-08,240.0 +2010-11-09,192.0 +2010-11-10,194.0 +2010-11-11,176.0 +2010-11-12,117.0 +2010-11-13,120.0 +2010-11-14,160.0 +2010-11-15,4671.0 +2010-11-16,8908.0 +2010-11-17,188.0 +2010-11-18,1237.0 +2010-11-19,9482.0 +2010-11-20,9615.0 +2010-11-21,9904.0 +2010-11-22,180.0 +2010-11-23,201.0 +2010-11-24,3759.0 +2010-11-25,4802.0 +2010-11-26,1120.0 +2010-11-27,265.0 +2010-11-28,282.0 +2010-11-29,245.0 +2010-11-30,252.0 +2010-12-01,324.0 +2010-12-02,272.0 +2010-12-03,195.0 +2010-12-04,189.0 +2010-12-05,195.0 +2010-12-06,224.0 +2010-12-07,334.0 +2010-12-08,285.0 +2010-12-09,263.0 +2010-12-10,226.0 +2010-12-11,375.0 +2010-12-12,472.0 +2010-12-13,505.0 +2010-12-14,482.0 +2010-12-15,446.0 +2010-12-16,358.0 +2010-12-17,296.0 +2010-12-18,338.0 +2010-12-19,367.0 +2010-12-20,773.0 +2010-12-21,434.0 +2010-12-22,502.0 +2010-12-23,374.0 +2010-12-24,383.0 +2010-12-25,466.0 +2010-12-26,439.0 +2010-12-27,360.0 +2010-12-28,492.0 +2010-12-29,348.0 +2010-12-30,424.0 +2010-12-31,393.0 +2011-01-01,478.0 +2011-01-02,394.0 +2011-01-03,972.0 +2011-01-04,838.0 +2011-01-05,1156.0 +2011-01-06,553.0 +2011-01-07,856.0 +2011-01-08,1266.0 +2011-01-09,1060.0 +2011-01-10,1150.0 +2011-01-11,1190.0 +2011-01-12,995.0 +2011-01-13,1078.0 +2011-01-14,1081.0 +2011-01-15,805.0 +2011-01-16,757.0 +2011-01-17,649.0 +2011-01-18,677.0 +2011-01-19,748.0 +2011-01-20,738.0 +2011-01-21,992.0 +2011-01-22,1257.0 +2011-01-23,911.0 +2011-01-24,1131.0 +2011-01-25,733.0 +2011-01-26,825.0 +2011-01-27,681.0 +2011-01-28,923.0 +2011-01-29,1186.0 +2011-01-30,2436.0 +2011-01-31,1223.0 +2011-02-01,849.0 +2011-02-02,738.0 +2011-02-03,629.0 +2011-02-04,760.0 +2011-02-05,653.0 +2011-02-06,732.0 +2011-02-07,689.0 +2011-02-08,678.0 +2011-02-09,1035.0 +2011-02-10,1848.0 +2011-02-11,2169.0 +2011-02-12,1716.0 +2011-02-13,1624.0 +2011-02-14,1810.0 +2011-02-15,1999.0 +2011-02-16,1858.0 +2011-02-17,2019.0 +2011-02-18,1844.0 +2011-02-19,1422.0 +2011-02-20,1741.0 +2011-02-21,1776.0 +2011-02-22,1985.0 +2011-02-23,2020.0 +2011-02-24,1902.0 +2011-02-25,1835.0 +2011-02-26,1676.0 +2011-02-27,2025.0 +2011-02-28,1570.0 +2011-03-01,2599.0 +2011-03-02,1841.0 +2011-03-03,3018.0 +2011-03-04,1761.0 +2011-03-05,1771.0 +2011-03-06,1757.0 +2011-03-07,1715.0 +2011-03-08,2253.0 +2011-03-09,1674.0 +2011-03-10,1551.0 +2011-03-11,1754.0 +2011-03-12,2816.0 +2011-03-13,2594.0 +2011-03-14,2531.0 +2011-03-15,2742.0 +2011-03-16,3047.0 +2011-03-17,3226.0 +2011-03-18,2251.0 +2011-03-19,3074.0 +2011-03-20,3939.0 +2011-03-21,5707.0 +2011-03-22,2119.0 +2011-03-23,4413.0 +2011-03-24,2012.0 +2011-03-25,1826.0 +2011-03-26,3197.0 +2011-03-27,2320.0 +2011-03-28,2763.0 +2011-03-29,2555.0 +2011-03-30,1600.0 +2011-03-31,1894.0 +2011-04-01,1403.0 +2011-04-02,1592.0 +2011-04-03,1630.0 +2011-04-04,2131.0 +2011-04-05,1925.0 +2011-04-06,1716.0 +2011-04-07,1530.0 +2011-04-08,1601.0 +2011-04-09,1577.0 +2011-04-10,1571.0 +2011-04-11,1780.0 +2011-04-12,1914.0 +2011-04-13,2177.0 +2011-04-14,2721.0 +2011-04-15,1882.0 +2011-04-16,1981.0 +2011-04-17,2077.0 +2011-04-18,2887.0 +2011-04-19,3444.0 +2011-04-20,2825.0 +2011-04-21,1768.0 +2011-04-22,1921.0 +2011-04-23,2138.0 +2011-04-24,2111.0 +2011-04-25,2400.0 +2011-04-26,3260.0 +2011-04-27,4397.0 +2011-04-28,2871.0 +2011-04-29,3334.0 +2011-04-30,4284.0 +2011-05-01,3770.0 +2011-05-02,2898.0 +2011-05-03,2739.0 +2011-05-04,2603.0 +2011-05-05,3245.0 +2011-05-06,3072.0 +2011-05-07,3673.0 +2011-05-08,2679.0 +2011-05-09,3277.0 +2011-05-10,2968.0 +2011-05-11,2899.0 +2011-05-12,3192.0 +2011-05-13,3857.0 +2011-05-14,4172.0 +2011-05-15,3550.0 +2011-05-16,4102.0 +2011-05-17,4207.0 +2011-05-18,5293.0 +2011-05-19,4492.0 +2011-05-20,4575.0 +2011-05-21,4744.0 +2011-05-22,5030.0 +2011-05-23,5459.0 +2011-05-24,5566.0 +2011-05-25,5951.0 +2011-05-26,6671.0 +2011-05-27,4686.0 +2011-05-28,4858.0 +2011-05-29,4573.0 +2011-05-30,5183.0 +2011-05-31,5913.0 +2011-06-01,6352.0 +2011-06-02,6946.0 +2011-06-03,8239.0 +2011-06-04,8587.0 +2011-06-05,8384.0 +2011-06-06,9470.0 +2011-06-07,8832.0 +2011-06-08,11630.0 +2011-06-09,11954.0 +2011-06-10,11046.0 +2011-06-11,10645.0 +2011-06-12,12207.0 +2011-06-13,11019.0 +2011-06-14,13911.0 +2011-06-15,12326.0 +2011-06-16,12566.0 +2011-06-17,11110.0 +2011-06-18,11366.0 +2011-06-19,11249.0 +2011-06-20,10991.0 +2011-06-21,9451.0 +2011-06-22,11259.0 +2011-06-23,10178.0 +2011-06-24,10706.0 +2011-06-25,9550.0 +2011-06-26,9836.0 +2011-06-27,11582.0 +2011-06-28,10559.0 +2011-06-29,9830.0 +2011-06-30,9445.0 +2011-07-01,10430.0 +2011-07-02,7849.0 +2011-07-03,8199.0 +2011-07-04,9434.0 +2011-07-05,8826.0 +2011-07-06,10362.0 +2011-07-07,9049.0 +2011-07-08,8363.0 +2011-07-09,7702.0 +2011-07-10,8255.0 +2011-07-11,10366.0 +2011-07-12,8006.0 +2011-07-13,9002.0 +2011-07-14,8572.0 +2011-07-15,7836.0 +2011-07-16,8719.0 +2011-07-17,8209.0 +2011-07-18,8806.0 +2011-07-19,9043.0 +2011-07-20,8714.0 +2011-07-21,8011.0 +2011-07-22,8840.0 +2011-07-23,7269.0 +2011-07-24,8053.0 +2011-07-25,9320.0 +2011-07-26,8194.0 +2011-07-27,7821.0 +2011-07-28,7964.0 +2011-07-29,7151.0 +2011-07-30,6057.0 +2011-07-31,7924.0 +2011-08-01,8030.0 +2011-08-02,8663.0 +2011-08-03,7580.0 +2011-08-04,8178.0 +2011-08-05,7220.0 +2011-08-06,6712.0 +2011-08-07,6584.0 +2011-08-08,7131.0 +2011-08-09,9073.0 +2011-08-10,8183.0 +2011-08-11,7459.0 +2011-08-12,7034.0 +2011-08-13,7268.0 +2011-08-14,7339.0 +2011-08-15,8250.0 +2011-08-16,9493.0 +2011-08-17,7586.0 +2011-08-18,7271.0 +2011-08-19,7483.0 +2011-08-20,7039.0 +2011-08-21,7507.0 +2011-08-22,7646.0 +2011-08-23,7122.0 +2011-08-24,7233.0 +2011-08-25,7106.0 +2011-08-26,7274.0 +2011-08-27,6239.0 +2011-08-28,5473.0 +2011-08-29,7956.0 +2011-08-30,7658.0 +2011-08-31,7137.0 +2011-09-01,7074.0 +2011-09-02,6870.0 +2011-09-03,5780.0 +2011-09-04,7124.0 +2011-09-05,6883.0 +2011-09-06,7679.0 +2011-09-07,6954.0 +2011-09-08,6368.0 +2011-09-09,7222.0 +2011-09-10,5860.0 +2011-09-11,6318.0 +2011-09-12,6442.0 +2011-09-13,6377.0 +2011-09-14,6054.0 +2011-09-15,6318.0 +2011-09-16,6090.0 +2011-09-17,5320.0 +2011-09-18,5828.0 +2011-09-19,6526.0 +2011-09-20,8005.0 +2011-09-21,7538.0 +2011-09-22,5991.0 +2011-09-23,6195.0 +2011-09-24,5599.0 +2011-09-25,5585.0 +2011-09-26,5505.0 +2011-09-27,5968.0 +2011-09-28,5870.0 +2011-09-29,5464.0 +2011-09-30,5743.0 +2011-10-01,5231.0 +2011-10-02,4914.0 +2011-10-03,6376.0 +2011-10-04,5697.0 +2011-10-05,5626.0 +2011-10-06,5784.0 +2011-10-07,5536.0 +2011-10-08,5283.0 +2011-10-09,5330.0 +2011-10-10,5759.0 +2011-10-11,5837.0 +2011-10-12,5829.0 +2011-10-13,4887.0 +2011-10-14,5972.0 +2011-10-15,5445.0 +2011-10-16,4862.0 +2011-10-17,5663.0 +2011-10-18,4743.0 +2011-10-19,4997.0 +2011-10-20,4534.0 +2011-10-21,5085.0 +2011-10-22,5016.0 +2011-10-23,5500.0 +2011-10-24,5807.0 +2011-10-25,5097.0 +2011-10-26,5155.0 +2011-10-27,4577.0 +2011-10-28,5013.0 +2011-10-29,5483.0 +2011-10-30,4869.0 +2011-10-31,5051.0 +2011-11-01,5627.0 +2011-11-02,5837.0 +2011-11-03,6128.0 +2011-11-04,6393.0 +2011-11-05,5782.0 +2011-11-06,4890.0 +2011-11-07,5364.0 +2011-11-08,5845.0 +2011-11-09,6287.0 +2011-11-10,6400.0 +2011-11-11,4974.0 +2011-11-12,4984.0 +2011-11-13,5230.0 +2011-11-14,5765.0 +2011-11-15,5941.0 +2011-11-16,5913.0 +2011-11-17,4820.0 +2011-11-18,5036.0 +2011-11-19,4601.0 +2011-11-20,4982.0 +2011-11-21,4652.0 +2011-11-22,5351.0 +2011-11-23,5464.0 +2011-11-24,4905.0 +2011-11-25,5351.0 +2011-11-26,4632.0 +2011-11-27,4947.0 +2011-11-28,5803.0 +2011-11-29,6276.0 +2011-11-30,6695.0 +2011-12-01,6170.0 +2011-12-02,6172.0 +2011-12-03,5479.0 +2011-12-04,5249.0 +2011-12-05,6079.0 +2011-12-06,7807.0 +2011-12-07,5997.0 +2011-12-08,5656.0 +2011-12-09,5441.0 +2011-12-10,5534.0 +2011-12-11,5109.0 +2011-12-12,4735.0 +2011-12-13,5274.0 +2011-12-14,5539.0 +2011-12-15,4738.0 +2011-12-16,5046.0 +2011-12-17,4843.0 +2011-12-18,4488.0 +2011-12-19,5685.0 +2011-12-20,6161.0 +2011-12-21,5428.0 +2011-12-22,5711.0 +2011-12-23,5540.0 +2011-12-24,4513.0 +2011-12-25,5112.0 +2011-12-26,5464.0 +2011-12-27,5066.0 +2011-12-28,4845.0 +2011-12-29,5074.0 +2011-12-30,4909.0 +2011-12-31,4986.0 +2012-01-01,4848.0 +2012-01-02,5259.0 +2012-01-03,5614.0 +2012-01-04,5582.0 +2012-01-05,6847.0 +2012-01-06,6473.0 +2012-01-07,5721.0 +2012-01-08,6241.0 +2012-01-09,5948.0 +2012-01-10,6536.0 +2012-01-11,6986.0 +2012-01-12,6541.0 +2012-01-13,6707.0 +2012-01-14,6657.0 +2012-01-15,6173.0 +2012-01-16,6799.0 +2012-01-17,6595.0 +2012-01-18,6519.0 +2012-01-19,6752.0 +2012-01-20,6635.0 +2012-01-21,6202.0 +2012-01-22,5189.0 +2012-01-23,5930.0 +2012-01-24,7129.0 +2012-01-25,7813.0 +2012-01-26,6460.0 +2012-01-27,6196.0 +2012-01-28,5765.0 +2012-01-29,6259.0 +2012-01-30,5981.0 +2012-01-31,6775.0 +2012-02-01,6361.0 +2012-02-02,7005.0 +2012-02-03,6892.0 +2012-02-04,7080.0 +2012-02-05,6632.0 +2012-02-06,5990.0 +2012-02-07,6875.0 +2012-02-08,6879.0 +2012-02-09,7343.0 +2012-02-10,8318.0 +2012-02-11,7529.0 +2012-02-12,6872.0 +2012-02-13,7855.0 +2012-02-14,9351.0 +2012-02-15,9203.0 +2012-02-16,9399.0 +2012-02-17,6626.0 +2012-02-18,6345.0 +2012-02-19,5800.0 +2012-02-20,6199.0 +2012-02-21,6291.0 +2012-02-22,7035.0 +2012-02-23,7848.0 +2012-02-24,6781.0 +2012-02-25,6141.0 +2012-02-26,5671.0 +2012-02-27,6581.0 +2012-02-28,6565.0 +2012-02-29,6540.0 +2012-03-01,6660.0 +2012-03-02,7511.0 +2012-03-03,5074.0 +2012-03-04,6454.0 +2012-03-05,6834.0 +2012-03-06,6231.0 +2012-03-07,6481.0 +2012-03-08,6481.0 +2012-03-09,6334.0 +2012-03-10,5205.0 +2012-03-11,5089.0 +2012-03-12,5975.0 +2012-03-13,7235.0 +2012-03-14,6758.0 +2012-03-15,6163.0 +2012-03-16,6782.0 +2012-03-17,6706.0 +2012-03-18,5879.0 +2012-03-19,6509.0 +2012-03-20,6674.0 +2012-03-21,6842.0 +2012-03-22,6429.0 +2012-03-23,6030.0 +2012-03-24,6191.0 +2012-03-25,6055.0 +2012-03-26,6468.0 +2012-03-27,6510.0 +2012-03-28,7089.0 +2012-03-29,7377.0 +2012-03-30,6674.0 +2012-03-31,6022.0 +2012-04-01,5421.0 +2012-04-02,6356.0 +2012-04-03,7606.0 +2012-04-04,7006.0 +2012-04-05,6911.0 +2012-04-06,6563.0 +2012-04-07,5951.0 +2012-04-08,5765.0 +2012-04-09,6471.0 +2012-04-10,8321.0 +2012-04-11,7717.0 +2012-04-12,8163.0 +2012-04-13,6918.0 +2012-04-14,7888.0 +2012-04-15,7264.0 +2012-04-16,8427.0 +2012-04-17,7670.0 +2012-04-18,8450.0 +2012-04-19,7743.0 +2012-04-20,8131.0 +2012-04-21,7047.0 +2012-04-22,6214.0 +2012-04-23,6969.0 +2012-04-24,7522.0 +2012-04-25,7430.0 +2012-04-26,9944.0 +2012-04-27,7060.0 +2012-04-28,7275.0 +2012-04-29,7550.0 +2012-04-30,9234.0 +2012-05-01,10038.0 +2012-05-02,9828.0 +2012-05-03,13845.0 +2012-05-04,13937.0 +2012-05-05,12831.0 +2012-05-06,10986.0 +2012-05-07,18077.0 +2012-05-08,17543.0 +2012-05-09,17079.0 +2012-05-10,11653.0 +2012-05-11,18918.0 +2012-05-12,18198.0 +2012-05-13,14597.0 +2012-05-14,28210.0 +2012-05-15,22105.0 +2012-05-16,17957.0 +2012-05-17,16819.0 +2012-05-18,24336.0 +2012-05-19,35255.0 +2012-05-20,31322.0 +2012-05-21,31478.0 +2012-05-22,23365.0 +2012-05-23,27302.0 +2012-05-24,26464.0 +2012-05-25,28878.0 +2012-05-26,23137.0 +2012-05-27,26288.0 +2012-05-28,29746.0 +2012-05-29,29690.0 +2012-05-30,25449.0 +2012-05-31,20875.0 +2012-06-01,26917.0 +2012-06-02,12640.0 +2012-06-03,33448.0 +2012-06-04,45783.0 +2012-06-05,44217.0 +2012-06-06,15784.0 +2012-06-07,33064.0 +2012-06-08,23756.0 +2012-06-09,32879.0 +2012-06-10,40555.0 +2012-06-11,32391.0 +2012-06-12,18087.0 +2012-06-13,56644.0 +2012-06-14,61782.0 +2012-06-15,54827.0 +2012-06-16,43126.0 +2012-06-17,43745.0 +2012-06-18,38896.0 +2012-06-19,35815.0 +2012-06-20,32101.0 +2012-06-21,26646.0 +2012-06-22,23427.0 +2012-06-23,22139.0 +2012-06-24,22261.0 +2012-06-25,28559.0 +2012-06-26,30086.0 +2012-06-27,30712.0 +2012-06-28,26385.0 +2012-06-29,22731.0 +2012-06-30,22486.0 +2012-07-01,19134.0 +2012-07-02,24995.0 +2012-07-03,22507.0 +2012-07-04,23014.0 +2012-07-05,21499.0 +2012-07-06,23761.0 +2012-07-07,25449.0 +2012-07-08,20646.0 +2012-07-09,24966.0 +2012-07-10,34930.0 +2012-07-11,31116.0 +2012-07-12,24153.0 +2012-07-13,24393.0 +2012-07-14,22626.0 +2012-07-15,26205.0 +2012-07-16,31229.0 +2012-07-17,35029.0 +2012-07-18,32433.0 +2012-07-19,30900.0 +2012-07-20,36646.0 +2012-07-21,34452.0 +2012-07-22,34705.0 +2012-07-23,32557.0 +2012-07-24,28208.0 +2012-07-25,27167.0 +2012-07-26,30538.0 +2012-07-27,26977.0 +2012-07-28,35077.0 +2012-07-29,34317.0 +2012-07-30,34219.0 +2012-07-31,41377.0 +2012-08-01,30404.0 +2012-08-02,33046.0 +2012-08-03,27618.0 +2012-08-04,28854.0 +2012-08-05,33144.0 +2012-08-06,35260.0 +2012-08-07,29439.0 +2012-08-08,40002.0 +2012-08-09,29772.0 +2012-08-10,28219.0 +2012-08-11,32971.0 +2012-08-12,34477.0 +2012-08-13,48712.0 +2012-08-14,34349.0 +2012-08-15,52802.0 +2012-08-16,46323.0 +2012-08-17,40416.0 +2012-08-18,37011.0 +2012-08-19,36769.0 +2012-08-20,35663.0 +2012-08-21,42242.0 +2012-08-22,37718.0 +2012-08-23,31653.0 +2012-08-24,32127.0 +2012-08-25,33301.0 +2012-08-26,29341.0 +2012-08-27,32951.0 +2012-08-28,29687.0 +2012-08-29,34041.0 +2012-08-30,33760.0 +2012-08-31,40484.0 +2012-09-01,40613.0 +2012-09-02,33424.0 +2012-09-03,38081.0 +2012-09-04,39793.0 +2012-09-05,40955.0 +2012-09-06,42619.0 +2012-09-07,33315.0 +2012-09-08,31028.0 +2012-09-09,31305.0 +2012-09-10,33482.0 +2012-09-11,38080.0 +2012-09-12,27941.0 +2012-09-13,28895.0 +2012-09-14,35956.0 +2012-09-15,27104.0 +2012-09-16,28254.0 +2012-09-17,24278.0 +2012-09-18,32654.0 +2012-09-19,32090.0 +2012-09-20,31130.0 +2012-09-21,30178.0 +2012-09-22,21857.0 +2012-09-23,27841.0 +2012-09-24,29037.0 +2012-09-25,24038.0 +2012-09-26,32273.0 +2012-09-27,28186.0 +2012-09-28,32610.0 +2012-09-29,23824.0 +2012-09-30,20509.0 +2012-10-01,24596.0 +2012-10-02,32732.0 +2012-10-03,26536.0 +2012-10-04,32484.0 +2012-10-05,36235.0 +2012-10-06,32517.0 +2012-10-07,34601.0 +2012-10-08,38033.0 +2012-10-09,35308.0 +2012-10-10,31077.0 +2012-10-11,27546.0 +2012-10-12,28544.0 +2012-10-13,32942.0 +2012-10-14,27287.0 +2012-10-15,30829.0 +2012-10-16,34378.0 +2012-10-17,31671.0 +2012-10-18,28100.0 +2012-10-19,25218.0 +2012-10-20,30284.0 +2012-10-21,40672.0 +2012-10-22,42997.0 +2012-10-23,31901.0 +2012-10-24,32032.0 +2012-10-25,26855.0 +2012-10-26,21762.0 +2012-10-27,16138.0 +2012-10-28,17799.0 +2012-10-29,21342.0 +2012-10-30,30604.0 +2012-10-31,27611.0 +2012-11-01,23501.0 +2012-11-02,28847.0 +2012-11-03,23753.0 +2012-11-04,24147.0 +2012-11-05,32024.0 +2012-11-06,31851.0 +2012-11-07,36323.0 +2012-11-08,32261.0 +2012-11-09,25005.0 +2012-11-10,26965.0 +2012-11-11,23408.0 +2012-11-12,23771.0 +2012-11-13,26991.0 +2012-11-14,29758.0 +2012-11-15,37468.0 +2012-11-16,39301.0 +2012-11-17,32398.0 +2012-11-18,33990.0 +2012-11-19,36777.0 +2012-11-20,36711.0 +2012-11-21,38914.0 +2012-11-22,30756.0 +2012-11-23,32184.0 +2012-11-24,29567.0 +2012-11-25,36590.0 +2012-11-26,35741.0 +2012-11-27,27484.0 +2012-11-28,37084.0 +2012-11-29,37257.0 +2012-11-30,29633.0 +2012-12-01,33325.0 +2012-12-02,20463.0 +2012-12-03,21512.0 +2012-12-04,32244.0 +2012-12-05,33622.0 +2012-12-06,37026.0 +2012-12-07,32016.0 +2012-12-08,33036.0 +2012-12-09,31933.0 +2012-12-10,36078.0 +2012-12-11,36635.0 +2012-12-12,36606.0 +2012-12-13,42384.0 +2012-12-14,38908.0 +2012-12-15,32249.0 +2012-12-16,35365.0 +2012-12-17,40906.0 +2012-12-18,49687.0 +2012-12-19,44623.0 +2012-12-20,35816.0 +2012-12-21,44454.0 +2012-12-22,51105.0 +2012-12-23,36616.0 +2012-12-24,35979.0 +2012-12-25,28619.0 +2012-12-26,36432.0 +2012-12-27,43631.0 +2012-12-28,46936.0 +2012-12-29,37966.0 +2012-12-30,45281.0 +2012-12-31,29906.0 +2013-01-01,31734.0 +2013-01-02,39280.0 +2013-01-03,42147.0 +2013-01-04,48436.0 +2013-01-05,39455.0 +2013-01-06,32881.0 +2013-01-07,40120.0 +2013-01-08,38491.0 +2013-01-09,43060.0 +2013-01-10,52392.0 +2013-01-11,52632.0 +2013-01-12,45549.0 +2013-01-13,49308.0 +2013-01-14,44403.0 +2013-01-15,44901.0 +2013-01-16,53498.0 +2013-01-17,47989.0 +2013-01-18,49018.0 +2013-01-19,56016.0 +2013-01-20,41241.0 +2013-01-21,40309.0 +2013-01-22,43608.0 +2013-01-23,46552.0 +2013-01-24,46065.0 +2013-01-25,48374.0 +2013-01-26,52210.0 +2013-01-27,55262.0 +2013-01-28,52033.0 +2013-01-29,51545.0 +2013-01-30,41066.0 +2013-01-31,51440.0 +2013-02-01,59235.0 +2013-02-02,54312.0 +2013-02-03,60978.0 +2013-02-04,54841.0 +2013-02-05,53253.0 +2013-02-06,42409.0 +2013-02-07,61083.0 +2013-02-08,60770.0 +2013-02-09,57607.0 +2013-02-10,56282.0 +2013-02-11,57435.0 +2013-02-12,58412.0 +2013-02-13,58919.0 +2013-02-14,50777.0 +2013-02-15,55468.0 +2013-02-16,51244.0 +2013-02-17,49447.0 +2013-02-18,50213.0 +2013-02-19,54360.0 +2013-02-20,59555.0 +2013-02-21,55740.0 +2013-02-22,62001.0 +2013-02-23,57722.0 +2013-02-24,57008.0 +2013-02-25,66940.0 +2013-02-26,63272.0 +2013-02-27,60756.0 +2013-02-28,62853.0 +2013-03-01,64383.0 +2013-03-02,55680.0 +2013-03-03,54298.0 +2013-03-04,63865.0 +2013-03-05,56729.0 +2013-03-06,62605.0 +2013-03-07,66610.0 +2013-03-08,55697.0 +2013-03-09,55377.0 +2013-03-10,73661.0 +2013-03-11,59125.0 +2013-03-12,48349.0 +2013-03-13,56533.0 +2013-03-14,57890.0 +2013-03-15,62604.0 +2013-03-16,34012.0 +2013-03-17,35139.0 +2013-03-18,43295.0 +2013-03-19,45938.0 +2013-03-20,46065.0 +2013-03-21,55346.0 +2013-03-22,60355.0 +2013-03-23,52697.0 +2013-03-24,51146.0 +2013-03-25,48849.0 +2013-03-26,48910.0 +2013-03-27,53076.0 +2013-03-28,60806.0 +2013-03-29,62085.0 +2013-03-30,59023.0 +2013-03-31,43817.0 +2013-04-01,52572.0 +2013-04-02,63095.0 +2013-04-03,63766.0 +2013-04-04,66738.0 +2013-04-05,61215.0 +2013-04-06,51555.0 +2013-04-07,63377.0 +2013-04-08,61525.0 +2013-04-09,66803.0 +2013-04-10,63690.0 +2013-04-11,68247.0 +2013-04-12,58517.0 +2013-04-13,53350.0 +2013-04-14,55318.0 +2013-04-15,54332.0 +2013-04-16,67608.0 +2013-04-17,56535.0 +2013-04-18,46484.0 +2013-04-19,59391.0 +2013-04-20,48148.0 +2013-04-21,44048.0 +2013-04-22,47041.0 +2013-04-23,61500.0 +2013-04-24,64861.0 +2013-04-25,62394.0 +2013-04-26,55093.0 +2013-04-27,44222.0 +2013-04-28,41702.0 +2013-04-29,51602.0 +2013-04-30,47450.0 +2013-05-01,55176.0 +2013-05-02,55295.0 +2013-05-03,51275.0 +2013-05-04,50102.0 +2013-05-05,50167.0 +2013-05-06,53174.0 +2013-05-07,56567.0 +2013-05-08,50274.0 +2013-05-09,66610.0 +2013-05-10,67709.0 +2013-05-11,73220.0 +2013-05-12,65260.0 +2013-05-13,60824.0 +2013-05-14,66316.0 +2013-05-15,64030.0 +2013-05-16,61010.0 +2013-05-17,58570.0 +2013-05-18,52066.0 +2013-05-19,47664.0 +2013-05-20,48692.0 +2013-05-21,53791.0 +2013-05-22,51834.0 +2013-05-23,59615.0 +2013-05-24,55232.0 +2013-05-25,51115.0 +2013-05-26,40559.0 +2013-05-27,52582.0 +2013-05-28,56912.0 +2013-05-29,54892.0 +2013-05-30,57247.0 +2013-05-31,54171.0 +2013-06-01,54098.0 +2013-06-02,49748.0 +2013-06-03,55661.0 +2013-06-04,57409.0 +2013-06-05,56376.0 +2013-06-06,54457.0 +2013-06-07,52027.0 +2013-06-08,48037.0 +2013-06-09,44312.0 +2013-06-10,44826.0 +2013-06-11,49483.0 +2013-06-12,45704.0 +2013-06-13,43007.0 +2013-06-14,49992.0 +2013-06-15,35653.0 +2013-06-16,42781.0 +2013-06-17,45798.0 +2013-06-18,45877.0 +2013-06-19,46895.0 +2013-06-20,52361.0 +2013-06-21,46859.0 +2013-06-22,44418.0 +2013-06-23,38342.0 +2013-06-24,44095.0 +2013-06-25,44472.0 +2013-06-26,45453.0 +2013-06-27,45961.0 +2013-06-28,49383.0 +2013-06-29,36376.0 +2013-06-30,30800.0 +2013-07-01,38971.0 +2013-07-02,39497.0 +2013-07-03,35347.0 +2013-07-04,35127.0 +2013-07-05,36851.0 +2013-07-06,33185.0 +2013-07-07,30170.0 +2013-07-08,39437.0 +2013-07-09,40647.0 +2013-07-10,39043.0 +2013-07-11,43260.0 +2013-07-12,48106.0 +2013-07-13,37813.0 +2013-07-14,34761.0 +2013-07-15,36590.0 +2013-07-16,39228.0 +2013-07-17,40459.0 +2013-07-18,41009.0 +2013-07-19,36588.0 +2013-07-20,33516.0 +2013-07-21,35257.0 +2013-07-22,39814.0 +2013-07-23,38291.0 +2013-07-24,42202.0 +2013-07-25,42384.0 +2013-07-26,37209.0 +2013-07-27,36711.0 +2013-07-28,37134.0 +2013-07-29,41634.0 +2013-07-30,41936.0 +2013-07-31,49334.0 +2013-08-01,50727.0 +2013-08-02,51489.0 +2013-08-03,45576.0 +2013-08-04,42767.0 +2013-08-05,50812.0 +2013-08-06,54179.0 +2013-08-07,57420.0 +2013-08-08,57817.0 +2013-08-09,49463.0 +2013-08-10,51485.0 +2013-08-11,38206.0 +2013-08-12,50012.0 +2013-08-13,52897.0 +2013-08-14,51492.0 +2013-08-15,57959.0 +2013-08-16,70951.0 +2013-08-17,56356.0 +2013-08-18,56203.0 +2013-08-19,71137.0 +2013-08-20,63038.0 +2013-08-21,60335.0 +2013-08-22,66596.0 +2013-08-23,54999.0 +2013-08-24,51634.0 +2013-08-25,44296.0 +2013-08-26,55927.0 +2013-08-27,62018.0 +2013-08-28,64569.0 +2013-08-29,58803.0 +2013-08-30,62398.0 +2013-08-31,47282.0 +2013-09-01,46377.0 +2013-09-02,51051.0 +2013-09-03,51969.0 +2013-09-04,52816.0 +2013-09-05,60551.0 +2013-09-06,60665.0 +2013-09-07,51822.0 +2013-09-08,46295.0 +2013-09-09,57473.0 +2013-09-10,53092.0 +2013-09-11,49010.0 +2013-09-12,52087.0 +2013-09-13,44630.0 +2013-09-14,43342.0 +2013-09-15,53491.0 +2013-09-16,51731.0 +2013-09-17,67752.0 +2013-09-18,60386.0 +2013-09-19,59625.0 +2013-09-20,58794.0 +2013-09-21,52309.0 +2013-09-22,50700.0 +2013-09-23,65118.0 +2013-09-24,62380.0 +2013-09-25,54342.0 +2013-09-26,57383.0 +2013-09-27,46742.0 +2013-09-28,42403.0 +2013-09-29,41011.0 +2013-09-30,46993.0 +2013-10-01,56984.0 +2013-10-02,61773.0 +2013-10-03,59352.0 +2013-10-04,51760.0 +2013-10-05,45260.0 +2013-10-06,42672.0 +2013-10-07,44391.0 +2013-10-08,44970.0 +2013-10-09,50494.0 +2013-10-10,56661.0 +2013-10-11,51737.0 +2013-10-12,49260.0 +2013-10-13,51083.0 +2013-10-14,57202.0 +2013-10-15,55566.0 +2013-10-16,50616.0 +2013-10-17,46703.0 +2013-10-18,59469.0 +2013-10-19,55088.0 +2013-10-20,49219.0 +2013-10-21,60240.0 +2013-10-22,64803.0 +2013-10-23,55093.0 +2013-10-24,63419.0 +2013-10-25,57236.0 +2013-10-26,47565.0 +2013-10-27,43512.0 +2013-10-28,50929.0 +2013-10-29,49770.0 +2013-10-30,48251.0 +2013-10-31,57970.0 +2013-11-01,45163.0 +2013-11-02,38979.0 +2013-11-03,35755.0 +2013-11-04,45328.0 +2013-11-05,51423.0 +2013-11-06,54845.0 +2013-11-07,60391.0 +2013-11-08,59089.0 +2013-11-09,55056.0 +2013-11-10,57367.0 +2013-11-11,57218.0 +2013-11-12,58106.0 +2013-11-13,64702.0 +2013-11-14,69230.0 +2013-11-15,60748.0 +2013-11-16,46981.0 +2013-11-17,51137.0 +2013-11-18,78876.0 +2013-11-19,92746.0 +2013-11-20,77394.0 +2013-11-21,71672.0 +2013-11-22,76775.0 +2013-11-23,72375.0 +2013-11-24,60693.0 +2013-11-25,71620.0 +2013-11-26,83224.0 +2013-11-27,95358.0 +2013-11-28,98740.0 +2013-11-29,89911.0 +2013-11-30,75014.0 +2013-12-01,71947.0 +2013-12-02,75411.0 +2013-12-03,77467.0 +2013-12-04,79453.0 +2013-12-05,83113.0 +2013-12-06,71891.0 +2013-12-07,67517.0 +2013-12-08,47282.0 +2013-12-09,63449.0 +2013-12-10,67431.0 +2013-12-11,67140.0 +2013-12-12,58056.0 +2013-12-13,59941.0 +2013-12-14,53859.0 +2013-12-15,52131.0 +2013-12-16,69181.0 +2013-12-17,67537.0 +2013-12-18,81311.0 +2013-12-19,70052.0 +2013-12-20,64905.0 +2013-12-21,55922.0 +2013-12-22,52728.0 +2013-12-23,54096.0 +2013-12-24,55696.0 +2013-12-25,55266.0 +2013-12-26,51096.0 +2013-12-27,52490.0 +2013-12-28,47859.0 +2013-12-29,51157.0 +2013-12-30,55440.0 +2013-12-31,48663.0 +2014-01-01,42865.0 +2014-01-02,54636.0 +2014-01-03,60819.0 +2014-01-04,51911.0 +2014-01-05,58469.0 +2014-01-06,67172.0 +2014-01-07,62734.0 +2014-01-08,61246.0 +2014-01-09,58824.0 +2014-01-10,53979.0 +2014-01-11,55646.0 +2014-01-12,50330.0 +2014-01-13,53292.0 +2014-01-14,57216.0 +2014-01-15,61428.0 +2014-01-16,56518.0 +2014-01-17,58874.0 +2014-01-18,51399.0 +2014-01-19,47836.0 +2014-01-20,62808.0 +2014-01-21,72411.0 +2014-01-22,65643.0 +2014-01-23,63399.0 +2014-01-24,65411.0 +2014-01-25,53699.0 +2014-01-26,53430.0 +2014-01-27,64200.0 +2014-01-28,65608.0 +2014-01-29,59530.0 +2014-01-30,60623.0 +2014-01-31,60085.0 +2014-02-01,54649.0 +2014-02-02,52297.0 +2014-02-03,57419.0 +2014-02-04,69627.0 +2014-02-05,67361.0 +2014-02-06,69978.0 +2014-02-07,70359.0 +2014-02-08,64827.0 +2014-02-09,56441.0 +2014-02-10,66694.0 +2014-02-11,67065.0 +2014-02-12,61948.0 +2014-02-13,67161.0 +2014-02-14,74698.0 +2014-02-15,61709.0 +2014-02-16,57336.0 +2014-02-17,60698.0 +2014-02-18,65245.0 +2014-02-19,69942.0 +2014-02-20,70967.0 +2014-02-21,69238.0 +2014-02-22,58493.0 +2014-02-23,59906.0 +2014-02-24,73605.0 +2014-02-25,79921.0 +2014-02-26,72992.0 +2014-02-27,70671.0 +2014-02-28,70109.0 +2014-03-01,63258.0 +2014-03-02,56495.0 +2014-03-03,81116.0 +2014-03-04,84451.0 +2014-03-05,72236.0 +2014-03-06,70354.0 +2014-03-07,72179.0 +2014-03-08,64422.0 +2014-03-09,61982.0 +2014-03-10,70735.0 +2014-03-11,76036.0 +2014-03-12,76157.0 +2014-03-13,72643.0 +2014-03-14,70482.0 +2014-03-15,60143.0 +2014-03-16,59161.0 +2014-03-17,66235.0 +2014-03-18,53996.0 +2014-03-19,73644.0 +2014-03-20,70825.0 +2014-03-21,72905.0 +2014-03-22,66503.0 +2014-03-23,57597.0 +2014-03-24,70795.0 +2014-03-25,71726.0 +2014-03-26,68156.0 +2014-03-27,71546.0 +2014-03-28,66905.0 +2014-03-29,53095.0 +2014-03-30,56713.0 +2014-03-31,64862.0 +2014-04-01,63965.0 +2014-04-02,66716.0 +2014-04-03,66820.0 +2014-04-04,65497.0 +2014-04-05,55624.0 +2014-04-06,49859.0 +2014-04-07,65659.0 +2014-04-08,67707.0 +2014-04-09,64992.0 +2014-04-10,67872.0 +2014-04-11,65563.0 +2014-04-12,47579.0 +2014-04-13,50981.0 +2014-04-14,70026.0 +2014-04-15,72627.0 +2014-04-16,68435.0 +2014-04-17,65021.0 +2014-04-18,56836.0 +2014-04-19,53356.0 +2014-04-20,48865.0 +2014-04-21,57939.0 +2014-04-22,77888.0 +2014-04-23,73789.0 +2014-04-24,72543.0 +2014-04-25,72468.0 +2014-04-26,52012.0 +2014-04-27,52452.0 +2014-04-28,64394.0 +2014-04-29,64886.0 +2014-04-30,63501.0 +2014-05-01,59482.0 +2014-05-02,59820.0 +2014-05-03,54015.0 +2014-05-04,51618.0 +2014-05-05,67638.0 +2014-05-06,77034.0 +2014-05-07,69666.0 +2014-05-08,68770.0 +2014-05-09,66123.0 +2014-05-10,56237.0 +2014-05-11,52438.0 +2014-05-12,74254.0 +2014-05-13,69195.0 +2014-05-14,69658.0 +2014-05-15,74722.0 +2014-05-16,65181.0 +2014-05-17,53338.0 +2014-05-18,49740.0 +2014-05-19,63926.0 +2014-05-20,71343.0 +2014-05-21,68730.0 +2014-05-22,73171.0 +2014-05-23,72645.0 +2014-05-24,52718.0 +2014-05-25,57405.0 +2014-05-26,66849.0 +2014-05-27,68388.0 +2014-05-28,72169.0 +2014-05-29,65221.0 +2014-05-30,64960.0 +2014-05-31,52025.0 +2014-06-01,55047.0 +2014-06-02,64241.0 +2014-06-03,69517.0 +2014-06-04,64873.0 +2014-06-05,66793.0 +2014-06-06,62203.0 +2014-06-07,51055.0 +2014-06-08,48172.0 +2014-06-09,59719.0 +2014-06-10,63149.0 +2014-06-11,62681.0 +2014-06-12,64572.0 +2014-06-13,64576.0 +2014-06-14,53418.0 +2014-06-15,53726.0 +2014-06-16,68074.0 +2014-06-17,69893.0 +2014-06-18,63730.0 +2014-06-19,62287.0 +2014-06-20,57195.0 +2014-06-21,50987.0 +2014-06-22,49924.0 +2014-06-23,60040.0 +2014-06-24,64695.0 +2014-06-25,64210.0 +2014-06-26,61261.0 +2014-06-27,62769.0 +2014-06-28,54210.0 +2014-06-29,48937.0 +2014-06-30,70099.0 +2014-07-01,69310.0 +2014-07-02,66591.0 +2014-07-03,62710.0 +2014-07-04,59328.0 +2014-07-05,49802.0 +2014-07-06,51997.0 +2014-07-07,64536.0 +2014-07-08,69967.0 +2014-07-09,68352.0 +2014-07-10,64456.0 +2014-07-11,58921.0 +2014-07-12,53297.0 +2014-07-13,52257.0 +2014-07-14,62626.0 +2014-07-15,72157.0 +2014-07-16,65427.0 +2014-07-17,66061.0 +2014-07-18,63890.0 +2014-07-19,59376.0 +2014-07-20,51846.0 +2014-07-21,64035.0 +2014-07-22,66716.0 +2014-07-23,66737.0 +2014-07-24,66133.0 +2014-07-25,61335.0 +2014-07-26,56199.0 +2014-07-27,51838.0 +2014-07-28,64594.0 +2014-07-29,61458.0 +2014-07-30,65981.0 +2014-07-31,69607.0 +2014-08-01,67758.0 +2014-08-02,54826.0 +2014-08-03,53467.0 +2014-08-04,67719.0 +2014-08-05,72688.0 +2014-08-06,80238.0 +2014-08-07,69753.0 +2014-08-08,68139.0 +2014-08-09,60417.0 +2014-08-10,57736.0 +2014-08-11,75393.0 +2014-08-12,76808.0 +2014-08-13,75593.0 +2014-08-14,78902.0 +2014-08-15,73028.0 +2014-08-16,67816.0 +2014-08-17,60053.0 +2014-08-18,72560.0 +2014-08-19,74554.0 +2014-08-20,73673.0 +2014-08-21,72999.0 +2014-08-22,66841.0 +2014-08-23,57431.0 +2014-08-24,56549.0 +2014-08-25,69757.0 +2014-08-26,72487.0 +2014-08-27,74412.0 +2014-08-28,68455.0 +2014-08-29,68444.0 +2014-08-30,61032.0 +2014-08-31,57567.0 +2014-09-01,70247.0 +2014-09-02,71762.0 +2014-09-03,71699.0 +2014-09-04,70652.0 +2014-09-05,67893.0 +2014-09-06,63190.0 +2014-09-07,60197.0 +2014-09-08,75622.0 +2014-09-09,81666.0 +2014-09-10,72401.0 +2014-09-11,65856.0 +2014-09-12,68230.0 +2014-09-13,61065.0 +2014-09-14,67497.0 +2014-09-15,78508.0 +2014-09-16,87063.0 +2014-09-17,80119.0 +2014-09-18,77185.0 +2014-09-19,69266.0 +2014-09-20,63306.0 +2014-09-21,59636.0 +2014-09-22,72900.0 +2014-09-23,77133.0 +2014-09-24,74818.0 +2014-09-25,78351.0 +2014-09-26,72421.0 +2014-09-27,63004.0 +2014-09-28,62310.0 +2014-09-29,77787.0 +2014-09-30,77853.0 +2014-10-01,78624.0 +2014-10-02,71948.0 +2014-10-03,74948.0 +2014-10-04,66478.0 +2014-10-05,67161.0 +2014-10-06,77888.0 +2014-10-07,78935.0 +2014-10-08,78674.0 +2014-10-09,82641.0 +2014-10-10,80903.0 +2014-10-11,64876.0 +2014-10-12,63361.0 +2014-10-13,77787.0 +2014-10-14,81232.0 +2014-10-15,76106.0 +2014-10-16,75589.0 +2014-10-17,70697.0 +2014-10-18,66313.0 +2014-10-19,63122.0 +2014-10-20,82563.0 +2014-10-21,81498.0 +2014-10-22,79828.0 +2014-10-23,80487.0 +2014-10-24,77747.0 +2014-10-25,72360.0 +2014-10-26,70637.0 +2014-10-27,83818.0 +2014-10-28,87842.0 +2014-10-29,93512.0 +2014-10-30,92452.0 +2014-10-31,85515.0 +2014-11-01,69432.0 +2014-11-02,77015.0 +2014-11-03,90182.0 +2014-11-04,87455.0 +2014-11-05,89322.0 +2014-11-06,94142.0 +2014-11-07,83807.0 +2014-11-08,72564.0 +2014-11-09,72062.0 +2014-11-10,88847.0 +2014-11-11,85489.0 +2014-11-12,95432.0 +2014-11-13,92813.0 +2014-11-14,86153.0 +2014-11-15,73102.0 +2014-11-16,75859.0 +2014-11-17,88210.0 +2014-11-18,87370.0 +2014-11-19,85130.0 +2014-11-20,89250.0 +2014-11-21,82052.0 +2014-11-22,74571.0 +2014-11-23,77141.0 +2014-11-24,85660.0 +2014-11-25,86002.0 +2014-11-26,84974.0 +2014-11-27,84541.0 +2014-11-28,85764.0 +2014-11-29,78941.0 +2014-11-30,84853.0 +2014-12-01,97493.0 +2014-12-02,99269.0 +2014-12-03,99232.0 +2014-12-04,98202.0 +2014-12-05,90744.0 +2014-12-06,81093.0 +2014-12-07,74666.0 +2014-12-08,90583.0 +2014-12-09,90078.0 +2014-12-10,88655.0 +2014-12-11,83857.0 +2014-12-12,81156.0 +2014-12-13,76061.0 +2014-12-14,79562.0 +2014-12-15,94318.0 +2014-12-16,100921.0 +2014-12-17,98316.0 +2014-12-18,95078.0 +2014-12-19,95268.0 +2014-12-20,86767.0 +2014-12-21,78831.0 +2014-12-22,96347.0 +2014-12-23,99319.0 +2014-12-24,82194.0 +2014-12-25,67760.0 +2014-12-26,76046.0 +2014-12-27,76662.0 +2014-12-28,75546.0 +2014-12-29,83283.0 +2014-12-30,84894.0 +2014-12-31,77259.0 +2015-01-01,59179.0 +2015-01-02,79122.0 +2015-01-03,82065.0 +2015-01-04,85522.0 +2015-01-05,95429.0 +2015-01-06,87663.0 +2015-01-07,89776.0 +2015-01-08,106985.0 +2015-01-09,102135.0 +2015-01-10,104727.0 +2015-01-11,90475.0 +2015-01-12,98827.0 +2015-01-13,102182.0 +2015-01-14,104620.0 +2015-01-15,120239.0 +2015-01-16,104560.0 +2015-01-17,90361.0 +2015-01-18,83033.0 +2015-01-19,98341.0 +2015-01-20,98807.0 +2015-01-21,96810.0 +2015-01-22,93563.0 +2015-01-23,91887.0 +2015-01-24,83431.0 +2015-01-25,86433.0 +2015-01-26,108054.0 +2015-01-27,99244.0 +2015-01-28,85068.0 +2015-01-29,90715.0 +2015-01-30,81061.0 +2015-01-31,86146.0 +2015-02-01,78839.0 +2015-02-02,85828.0 +2015-02-03,91666.0 +2015-02-04,90655.0 +2015-02-05,86408.0 +2015-02-06,85528.0 +2015-02-07,85540.0 +2015-02-08,82547.0 +2015-02-09,104597.0 +2015-02-10,102831.0 +2015-02-11,96890.0 +2015-02-12,87308.0 +2015-02-13,113514.0 +2015-02-14,98613.0 +2015-02-15,85127.0 +2015-02-16,104475.0 +2015-02-17,102839.0 +2015-02-18,105552.0 +2015-02-19,94386.0 +2015-02-20,98556.0 +2015-02-21,87685.0 +2015-02-22,84791.0 +2015-02-23,101373.0 +2015-02-24,104996.0 +2015-02-25,105235.0 +2015-02-26,100667.0 +2015-02-27,101322.0 +2015-02-28,89490.0 +2015-03-01,88588.0 +2015-03-02,104779.0 +2015-03-03,110823.0 +2015-03-04,98389.0 +2015-03-05,100983.0 +2015-03-06,93721.0 +2015-03-07,91365.0 +2015-03-08,87371.0 +2015-03-09,105392.0 +2015-03-10,105389.0 +2015-03-11,100611.0 +2015-03-12,96964.0 +2015-03-13,95890.0 +2015-03-14,89380.0 +2015-03-15,84791.0 +2015-03-16,105079.0 +2015-03-17,99433.0 +2015-03-18,99454.0 +2015-03-19,106160.0 +2015-03-20,103200.0 +2015-03-21,92685.0 +2015-03-22,90444.0 +2015-03-23,105874.0 +2015-03-24,92754.0 +2015-03-25,96976.0 +2015-03-26,101033.0 +2015-03-27,99320.0 +2015-03-28,87226.0 +2015-03-29,90363.0 +2015-03-30,106213.0 +2015-03-31,114961.0 +2015-04-01,119211.0 +2015-04-02,111904.0 +2015-04-03,104400.0 +2015-04-04,89498.0 +2015-04-05,94875.0 +2015-04-06,107323.0 +2015-04-07,108562.0 +2015-04-08,110626.0 +2015-04-09,116487.0 +2015-04-10,112674.0 +2015-04-11,99289.0 +2015-04-12,86871.0 +2015-04-13,115251.0 +2015-04-14,110001.0 +2015-04-15,107484.0 +2015-04-16,98908.0 +2015-04-17,102629.0 +2015-04-18,97563.0 +2015-04-19,90989.0 +2015-04-20,116592.0 +2015-04-21,112349.0 +2015-04-22,111726.0 +2015-04-23,109708.0 +2015-04-24,108652.0 +2015-04-25,98302.0 +2015-04-26,92855.0 +2015-04-27,113638.0 +2015-04-28,113040.0 +2015-04-29,117133.0 +2015-04-30,112824.0 +2015-05-01,99412.0 +2015-05-02,94955.0 +2015-05-03,84461.0 +2015-05-04,103872.0 +2015-05-05,115194.0 +2015-05-06,111572.0 +2015-05-07,110984.0 +2015-05-08,108995.0 +2015-05-09,94587.0 +2015-05-10,89280.0 +2015-05-11,111216.0 +2015-05-12,109951.0 +2015-05-13,108696.0 +2015-05-14,101430.0 +2015-05-15,105013.0 +2015-05-16,90554.0 +2015-05-17,86991.0 +2015-05-18,98434.0 +2015-05-19,107216.0 +2015-05-20,106743.0 +2015-05-21,98147.0 +2015-05-22,102632.0 +2015-05-23,86167.0 +2015-05-24,93898.0 +2015-05-25,105945.0 +2015-05-26,108240.0 +2015-05-27,107951.0 +2015-05-28,110848.0 +2015-05-29,123898.0 +2015-05-30,127665.0 +2015-05-31,98636.0 +2015-06-01,128564.0 +2015-06-02,128057.0 +2015-06-03,127458.0 +2015-06-04,118205.0 +2015-06-05,110063.0 +2015-06-06,92518.0 +2015-06-07,83478.0 +2015-06-08,108016.0 +2015-06-09,121487.0 +2015-06-10,131110.0 +2015-06-11,120489.0 +2015-06-12,126803.0 +2015-06-13,105684.0 +2015-06-14,102888.0 +2015-06-15,129245.0 +2015-06-16,121423.0 +2015-06-17,132964.0 +2015-06-18,124773.0 +2015-06-19,125075.0 +2015-06-20,101878.0 +2015-06-21,96530.0 +2015-06-22,119192.0 +2015-06-23,125420.0 +2015-06-24,112937.0 +2015-06-25,111316.0 +2015-06-26,116278.0 +2015-06-27,105875.0 +2015-06-28,99004.0 +2015-06-29,124040.0 +2015-06-30,155724.0 +2015-07-01,143977.0 +2015-07-02,141999.0 +2015-07-03,129558.0 +2015-07-04,104430.0 +2015-07-05,114942.0 +2015-07-06,173889.0 +2015-07-07,190613.0 +2015-07-08,201586.0 +2015-07-09,191030.0 +2015-07-10,192866.0 +2015-07-11,186052.0 +2015-07-12,208550.0 +2015-07-13,159547.0 +2015-07-14,122474.0 +2015-07-15,115417.0 +2015-07-16,114253.0 +2015-07-17,116759.0 +2015-07-18,130546.0 +2015-07-19,120735.0 +2015-07-20,125102.0 +2015-07-21,133658.0 +2015-07-22,131105.0 +2015-07-23,109480.0 +2015-07-24,109749.0 +2015-07-25,100390.0 +2015-07-26,92632.0 +2015-07-27,115077.0 +2015-07-28,118214.0 +2015-07-29,143048.0 +2015-07-30,122807.0 +2015-07-31,147352.0 +2015-08-01,147326.0 +2015-08-02,103449.0 +2015-08-03,119687.0 +2015-08-04,132411.0 +2015-08-05,133625.0 +2015-08-06,134695.0 +2015-08-07,111208.0 +2015-08-08,101351.0 +2015-08-09,90392.0 +2015-08-10,116674.0 +2015-08-11,114579.0 +2015-08-12,117772.0 +2015-08-13,117360.0 +2015-08-14,111113.0 +2015-08-15,94807.0 +2015-08-16,89360.0 +2015-08-17,114902.0 +2015-08-18,119657.0 +2015-08-19,119995.0 +2015-08-20,118080.0 +2015-08-21,113627.0 +2015-08-22,105507.0 +2015-08-23,94395.0 +2015-08-24,125213.0 +2015-08-25,121838.0 +2015-08-26,122691.0 +2015-08-27,119942.0 +2015-08-28,120230.0 +2015-08-29,107329.0 +2015-08-30,98189.0 +2015-08-31,127103.0 +2015-09-01,130256.0 +2015-09-02,149906.0 +2015-09-03,128536.0 +2015-09-04,103817.0 +2015-09-05,124071.0 +2015-09-06,106149.0 +2015-09-07,125315.0 +2015-09-08,125243.0 +2015-09-09,126308.0 +2015-09-10,124780.0 +2015-09-11,179844.0 +2015-09-12,137605.0 +2015-09-13,145897.0 +2015-09-14,166563.0 +2015-09-15,162839.0 +2015-09-16,167127.0 +2015-09-17,259135.0 +2015-09-18,161357.0 +2015-09-19,114726.0 +2015-09-20,109030.0 +2015-09-21,131547.0 +2015-09-22,136627.0 +2015-09-23,131242.0 +2015-09-24,125227.0 +2015-09-25,128002.0 +2015-09-26,115475.0 +2015-09-27,108600.0 +2015-09-28,138427.0 +2015-09-29,140490.0 +2015-09-30,139700.0 +2015-10-01,134178.0 +2015-10-02,139608.0 +2015-10-03,119422.0 +2015-10-04,103378.0 +2015-10-05,125395.0 +2015-10-06,144368.0 +2015-10-07,134798.0 +2015-10-08,140208.0 +2015-10-09,114518.0 +2015-10-10,126845.0 +2015-10-11,104404.0 +2015-10-12,134268.0 +2015-10-13,134741.0 +2015-10-14,141833.0 +2015-10-15,153329.0 +2015-10-16,143142.0 +2015-10-17,135775.0 +2015-10-18,119561.0 +2015-10-19,143804.0 +2015-10-20,146221.0 +2015-10-21,150055.0 +2015-10-22,147254.0 +2015-10-23,143319.0 +2015-10-24,139983.0 +2015-10-25,131333.0 +2015-10-26,116236.0 +2015-10-27,153593.0 +2015-10-28,160036.0 +2015-10-29,160911.0 +2015-10-30,166524.0 +2015-10-31,155253.0 +2015-11-01,152335.0 +2015-11-02,171955.0 +2015-11-03,186207.0 +2015-11-04,204043.0 +2015-11-05,182663.0 +2015-11-06,166748.0 +2015-11-07,151345.0 +2015-11-08,132411.0 +2015-11-09,159687.0 +2015-11-10,161816.0 +2015-11-11,158761.0 +2015-11-12,157686.0 +2015-11-13,154667.0 +2015-11-14,150332.0 +2015-11-15,143209.0 +2015-11-16,158143.0 +2015-11-17,156539.0 +2015-11-18,165116.0 +2015-11-19,154347.0 +2015-11-20,155607.0 +2015-11-21,150861.0 +2015-11-22,129487.0 +2015-11-23,145109.0 +2015-11-24,152168.0 +2015-11-25,151713.0 +2015-11-26,164495.0 +2015-11-27,160102.0 +2015-11-28,165522.0 +2015-11-29,129701.0 +2015-11-30,182486.0 +2015-12-01,177945.0 +2015-12-02,183362.0 +2015-12-03,164632.0 +2015-12-04,173433.0 +2015-12-05,186019.0 +2015-12-06,179553.0 +2015-12-07,192683.0 +2015-12-08,195046.0 +2015-12-09,220155.0 +2015-12-10,211820.0 +2015-12-11,210099.0 +2015-12-12,203979.0 +2015-12-13,189772.0 +2015-12-14,231282.0 +2015-12-15,223815.0 +2015-12-16,220257.0 +2015-12-17,216142.0 +2015-12-18,213678.0 +2015-12-19,213719.0 +2015-12-20,193682.0 +2015-12-21,229295.0 +2015-12-22,222567.0 +2015-12-23,220918.0 +2015-12-24,210090.0 +2015-12-25,180221.0 +2015-12-26,179192.0 +2015-12-27,160066.0 +2015-12-28,172978.0 +2015-12-29,184459.0 +2015-12-30,176282.0 +2015-12-31,155220.0 +2016-01-01,123957.0 +2016-01-02,148893.0 +2016-01-03,142463.0 +2016-01-04,181173.0 +2016-01-05,182214.0 +2016-01-06,171949.0 +2016-01-07,190087.0 +2016-01-08,181234.0 +2016-01-09,179817.0 +2016-01-10,161142.0 +2016-01-11,191026.0 +2016-01-12,194704.0 +2016-01-13,187983.0 +2016-01-14,183049.0 +2016-01-15,183520.0 +2016-01-16,191158.0 +2016-01-17,203977.0 +2016-01-18,213732.0 +2016-01-19,186725.0 +2016-01-20,208919.0 +2016-01-21,222606.0 +2016-01-22,213507.0 +2016-01-23,190221.0 +2016-01-24,201254.0 +2016-01-25,221988.0 +2016-01-26,230363.0 +2016-01-27,229522.0 +2016-01-28,224879.0 +2016-01-29,224225.0 +2016-01-30,194607.0 +2016-01-31,175864.0 +2016-02-01,222237.0 +2016-02-02,241542.0 +2016-02-03,191045.0 +2016-02-04,200493.0 +2016-02-05,225300.0 +2016-02-06,223956.0 +2016-02-07,212014.0 +2016-02-08,224607.0 +2016-02-09,231064.0 +2016-02-10,235363.0 +2016-02-11,220742.0 +2016-02-12,202356.0 +2016-02-13,184519.0 +2016-02-14,185922.0 +2016-02-15,220197.0 +2016-02-16,215802.0 +2016-02-17,227080.0 +2016-02-18,212810.0 +2016-02-19,217291.0 +2016-02-20,215578.0 +2016-02-21,206489.0 +2016-02-22,237569.0 +2016-02-23,244612.0 +2016-02-24,224809.0 +2016-02-25,216135.0 +2016-02-26,203495.0 +2016-02-27,182030.0 +2016-02-28,233302.0 +2016-02-29,265187.0 +2016-03-01,276953.0 +2016-03-02,270049.0 +2016-03-03,221517.0 +2016-03-04,207330.0 +2016-03-05,234842.0 +2016-03-06,161591.0 +2016-03-07,183122.0 +2016-03-08,200144.0 +2016-03-09,190220.0 +2016-03-10,188571.0 +2016-03-11,189656.0 +2016-03-12,167869.0 +2016-03-13,149670.0 +2016-03-14,191189.0 +2016-03-15,202265.0 +2016-03-16,211840.0 +2016-03-17,208178.0 +2016-03-18,205886.0 +2016-03-19,177342.0 +2016-03-20,177997.0 +2016-03-21,198867.0 +2016-03-22,205060.0 +2016-03-23,186659.0 +2016-03-24,189947.0 +2016-03-25,172163.0 +2016-03-26,158896.0 +2016-03-27,160125.0 +2016-03-28,195910.0 +2016-03-29,197252.0 +2016-03-30,200881.0 +2016-03-31,206352.0 +2016-04-01,211769.0 +2016-04-02,183364.0 +2016-04-03,178287.0 +2016-04-04,208763.0 +2016-04-05,216021.0 +2016-04-06,219133.0 +2016-04-07,218324.0 +2016-04-08,214047.0 +2016-04-09,196279.0 +2016-04-10,186781.0 +2016-04-11,229887.0 +2016-04-12,240058.0 +2016-04-13,223342.0 +2016-04-14,227764.0 +2016-04-15,212039.0 +2016-04-16,181866.0 +2016-04-17,192270.0 +2016-04-18,220261.0 +2016-04-19,226361.0 +2016-04-20,216615.0 +2016-04-21,212644.0 +2016-04-22,210833.0 +2016-04-23,185072.0 +2016-04-24,183023.0 +2016-04-25,217437.0 +2016-04-26,250593.0 +2016-04-27,239306.0 +2016-04-28,247822.0 +2016-04-29,261726.0 +2016-04-30,215566.0 +2016-05-01,191275.0 +2016-05-02,223628.0 +2016-05-03,235458.0 +2016-05-04,233524.0 +2016-05-05,229418.0 +2016-05-06,233070.0 +2016-05-07,201912.0 +2016-05-08,188857.0 +2016-05-09,226278.0 +2016-05-10,245563.0 +2016-05-11,234279.0 +2016-05-12,228270.0 +2016-05-13,231994.0 +2016-05-14,211136.0 +2016-05-15,200032.0 +2016-05-16,239668.0 +2016-05-17,238485.0 +2016-05-18,234930.0 +2016-05-19,219025.0 +2016-05-20,209247.0 +2016-05-21,191320.0 +2016-05-22,184164.0 +2016-05-23,222574.0 +2016-05-24,246370.0 +2016-05-25,247703.0 +2016-05-26,219956.0 +2016-05-27,215157.0 +2016-05-28,192921.0 +2016-05-29,178595.0 +2016-05-30,211224.0 +2016-05-31,215122.0 +2016-06-01,234241.0 +2016-06-02,230961.0 +2016-06-03,234527.0 +2016-06-04,196546.0 +2016-06-05,189632.0 +2016-06-06,221001.0 +2016-06-07,230876.0 +2016-06-08,229789.0 +2016-06-09,236188.0 +2016-06-10,228223.0 +2016-06-11,213003.0 +2016-06-12,210565.0 +2016-06-13,251193.0 +2016-06-14,246697.0 +2016-06-15,259050.0 +2016-06-16,267721.0 +2016-06-17,253603.0 +2016-06-18,235159.0 +2016-06-19,218121.0 +2016-06-20,249170.0 +2016-06-21,248015.0 +2016-06-22,235512.0 +2016-06-23,241160.0 +2016-06-24,237496.0 +2016-06-25,206757.0 +2016-06-26,181202.0 +2016-06-27,216882.0 +2016-06-28,212459.0 +2016-06-29,223966.0 +2016-06-30,231810.0 +2016-07-01,205646.0 +2016-07-02,198726.0 +2016-07-03,176973.0 +2016-07-04,213749.0 +2016-07-05,214814.0 +2016-07-06,214551.0 +2016-07-07,215411.0 +2016-07-08,210556.0 +2016-07-09,185256.0 +2016-07-10,162452.0 +2016-07-11,217946.0 +2016-07-12,218891.0 +2016-07-13,216374.0 +2016-07-14,217554.0 +2016-07-15,215946.0 +2016-07-16,182035.0 +2016-07-17,170864.0 +2016-07-18,222687.0 +2016-07-19,222018.0 +2016-07-20,227279.0 +2016-07-21,217473.0 +2016-07-22,221275.0 +2016-07-23,195665.0 +2016-07-24,183766.0 +2016-07-25,239584.0 +2016-07-26,237544.0 +2016-07-27,235475.0 +2016-07-28,234727.0 +2016-07-29,231267.0 +2016-07-30,199365.0 +2016-07-31,192100.0 +2016-08-01,224896.0 +2016-08-02,250944.0 +2016-08-03,241616.0 +2016-08-04,231682.0 +2016-08-05,228075.0 +2016-08-06,195503.0 +2016-08-07,192266.0 +2016-08-08,235147.0 +2016-08-09,231276.0 +2016-08-10,244589.0 +2016-08-11,254365.0 +2016-08-12,232824.0 +2016-08-13,214406.0 +2016-08-14,200011.0 +2016-08-15,202750.0 +2016-08-16,254296.0 +2016-08-17,237880.0 +2016-08-18,239387.0 +2016-08-19,245941.0 +2016-08-20,208069.0 +2016-08-21,184741.0 +2016-08-22,228215.0 +2016-08-23,238874.0 +2016-08-24,234978.0 +2016-08-25,233879.0 +2016-08-26,226635.0 +2016-08-27,190954.0 +2016-08-28,174337.0 +2016-08-29,225133.0 +2016-08-30,251838.0 +2016-08-31,225226.0 +2016-09-01,237326.0 +2016-09-02,225703.0 +2016-09-03,182078.0 +2016-09-04,183065.0 +2016-09-05,227543.0 +2016-09-06,231982.0 +2016-09-07,250657.0 +2016-09-08,226862.0 +2016-09-09,220392.0 +2016-09-10,193165.0 +2016-09-11,180227.0 +2016-09-12,208486.0 +2016-09-13,239721.0 +2016-09-14,231644.0 +2016-09-15,233334.0 +2016-09-16,210989.0 +2016-09-17,215366.0 +2016-09-18,191458.0 +2016-09-19,223407.0 +2016-09-20,244164.0 +2016-09-21,239050.0 +2016-09-22,231086.0 +2016-09-23,223051.0 +2016-09-24,208484.0 +2016-09-25,195457.0 +2016-09-26,230616.0 +2016-09-27,240168.0 +2016-09-28,234847.0 +2016-09-29,242587.0 +2016-09-30,250801.0 +2016-10-01,213773.0 +2016-10-02,192542.0 +2016-10-03,258654.0 +2016-10-04,264504.0 +2016-10-05,266644.0 +2016-10-06,274325.0 +2016-10-07,266181.0 +2016-10-08,250503.0 +2016-10-09,210388.0 +2016-10-10,222872.0 +2016-10-11,263426.0 +2016-10-12,233296.0 +2016-10-13,229575.0 +2016-10-14,239588.0 +2016-10-15,210306.0 +2016-10-16,197746.0 +2016-10-17,237107.0 +2016-10-18,251366.0 +2016-10-19,198958.0 +2016-10-20,270246.0 +2016-10-21,265191.0 +2016-10-22,216559.0 +2016-10-23,191434.0 +2016-10-24,226837.0 +2016-10-25,236891.0 +2016-10-26,223178.0 +2016-10-27,326226.0 +2016-10-28,250724.0 +2016-10-29,229540.0 +2016-10-30,207814.0 +2016-10-31,241631.0 +2016-11-01,246506.0 +2016-11-02,268285.0 +2016-11-03,271843.0 +2016-11-04,247927.0 +2016-11-05,238068.0 +2016-11-06,225633.0 +2016-11-07,274135.0 +2016-11-08,295891.0 +2016-11-09,269948.0 +2016-11-10,271206.0 +2016-11-11,254456.0 +2016-11-12,228718.0 +2016-11-13,219515.0 +2016-11-14,270334.0 +2016-11-15,280196.0 +2016-11-16,289618.0 +2016-11-17,277301.0 +2016-11-18,275777.0 +2016-11-19,249618.0 +2016-11-20,243463.0 +2016-11-21,285654.0 +2016-11-22,285501.0 +2016-11-23,276777.0 +2016-11-24,328376.0 +2016-11-25,315235.0 +2016-11-26,277455.0 +2016-11-27,237245.0 +2016-11-28,298366.0 +2016-11-29,289501.0 +2016-11-30,292512.0 +2016-12-01,239536.0 +2016-12-02,315335.0 +2016-12-03,287816.0 +2016-12-04,245502.0 +2016-12-05,277849.0 +2016-12-06,319612.0 +2016-12-07,310580.0 +2016-12-08,282554.0 +2016-12-09,268680.0 +2016-12-10,250109.0 +2016-12-11,229746.0 +2016-12-12,268506.0 +2016-12-13,291579.0 +2016-12-14,286189.0 +2016-12-15,282558.0 +2016-12-16,279228.0 +2016-12-17,237986.0 +2016-12-18,235648.0 +2016-12-19,281978.0 +2016-12-20,296335.0 +2016-12-21,325518.0 +2016-12-22,314485.0 +2016-12-23,304845.0 +2016-12-24,240683.0 +2016-12-25,197199.0 +2016-12-26,244772.0 +2016-12-27,296390.0 +2016-12-28,305230.0 +2016-12-29,304455.0 +2016-12-30,286661.0 +2016-12-31,250125.0 +2017-01-01,180346.0 +2017-01-02,290792.0 +2017-01-03,301500.0 +2017-01-04,328489.0 +2017-01-05,288361.0 +2017-01-06,346244.0 +2017-01-07,281922.0 +2017-01-08,259934.0 +2017-01-09,269811.0 +2017-01-10,323728.0 +2017-01-11,302905.0 +2017-01-12,294953.0 +2017-01-13,272597.0 +2017-01-14,242097.0 +2017-01-15,235832.0 +2017-01-16,267471.0 +2017-01-17,292539.0 +2017-01-18,296950.0 +2017-01-19,300431.0 +2017-01-20,298188.0 +2017-01-21,263381.0 +2017-01-22,236712.0 +2017-01-23,235392.0 +2017-01-24,278028.0 +2017-01-25,304578.0 +2017-01-26,313600.0 +2017-01-27,263162.0 +2017-01-28,246243.0 +2017-01-29,241460.0 +2017-01-30,247264.0 +2017-01-31,307538.0 +2017-02-01,350368.0 +2017-02-02,259402.0 +2017-02-03,323414.0 +2017-02-04,284634.0 +2017-02-05,291942.0 +2017-02-06,229902.0 +2017-02-07,325117.0 +2017-02-08,308170.0 +2017-02-09,346375.0 +2017-02-10,301642.0 +2017-02-11,262547.0 +2017-02-12,237604.0 +2017-02-13,288127.0 +2017-02-14,314915.0 +2017-02-15,294647.0 +2017-02-16,283052.0 +2017-02-17,319616.0 +2017-02-18,285992.0 +2017-02-19,251587.0 +2017-02-20,282580.0 +2017-02-21,278952.0 +2017-02-22,282056.0 +2017-02-23,325763.0 +2017-02-24,343642.0 +2017-02-25,326354.0 +2017-02-26,265025.0 +2017-02-27,284411.0 +2017-02-28,325261.0 +2017-03-01,315739.0 +2017-03-02,329271.0 +2017-03-03,337159.0 +2017-03-04,265648.0 +2017-03-05,280592.0 +2017-03-06,287589.0 +2017-03-07,327749.0 +2017-03-08,296966.0 +2017-03-09,303484.0 +2017-03-10,308326.0 +2017-03-11,280532.0 +2017-03-12,220955.0 +2017-03-13,272934.0 +2017-03-14,310239.0 +2017-03-15,292292.0 +2017-03-16,326881.0 +2017-03-17,292042.0 +2017-03-18,263373.0 +2017-03-19,269171.0 +2017-03-20,276897.0 +2017-03-21,287913.0 +2017-03-22,316434.0 +2017-03-23,287723.0 +2017-03-24,289345.0 +2017-03-25,242842.0 +2017-03-26,219338.0 +2017-03-27,232159.0 +2017-03-28,293846.0 +2017-03-29,283793.0 +2017-03-30,288624.0 +2017-03-31,259268.0 +2017-04-01,255739.0 +2017-04-02,244045.0 +2017-04-03,287965.0 +2017-04-04,255890.0 +2017-04-05,316393.0 +2017-04-06,290318.0 +2017-04-07,295301.0 +2017-04-08,226822.0 +2017-04-09,238127.0 +2017-04-10,273237.0 +2017-04-11,307726.0 +2017-04-12,277951.0 +2017-04-13,228552.0 +2017-04-14,290069.0 +2017-04-15,270555.0 +2017-04-16,211683.0 +2017-04-17,245046.0 +2017-04-18,302945.0 +2017-04-19,309961.0 +2017-04-20,267777.0 +2017-04-21,330187.0 +2017-04-22,268567.0 +2017-04-23,244886.0 +2017-04-24,222547.0 +2017-04-25,325239.0 +2017-04-26,334318.0 +2017-04-27,297737.0 +2017-04-28,305135.0 +2017-04-29,341146.0 +2017-04-30,281338.0 +2017-05-01,294636.0 +2017-05-02,333003.0 +2017-05-03,295017.0 +2017-05-04,354569.0 +2017-05-05,267064.0 +2017-05-06,362854.0 +2017-05-07,315844.0 +2017-05-08,364916.0 +2017-05-09,332724.0 +2017-05-10,311243.0 +2017-05-11,294608.0 +2017-05-12,317544.0 +2017-05-13,329108.0 +2017-05-14,368934.0 +2017-05-15,329059.0 +2017-05-16,233845.0 +2017-05-17,317372.0 +2017-05-18,288762.0 +2017-05-19,319338.0 +2017-05-20,352640.0 +2017-05-21,325910.0 +2017-05-22,327722.0 +2017-05-23,367542.0 +2017-05-24,338488.0 +2017-05-25,349951.0 +2017-05-26,333187.0 +2017-05-27,331746.0 +2017-05-28,307978.0 +2017-05-29,321487.0 +2017-05-30,347782.0 +2017-05-31,321470.0 +2017-06-01,319539.0 +2017-06-02,271393.0 +2017-06-03,305128.0 +2017-06-04,265883.0 +2017-06-05,289766.0 +2017-06-06,297265.0 +2017-06-07,339555.0 +2017-06-08,307212.0 +2017-06-09,282033.0 +2017-06-10,254852.0 +2017-06-11,222746.0 +2017-06-12,268951.0 +2017-06-13,291635.0 +2017-06-14,287504.0 +2017-06-15,290753.0 +2017-06-16,269789.0 +2017-06-17,236409.0 +2017-06-18,209214.0 +2017-06-19,269623.0 +2017-06-20,267926.0 +2017-06-21,280063.0 +2017-06-22,269546.0 +2017-06-23,259778.0 +2017-06-24,226981.0 +2017-06-25,180597.0 +2017-06-26,261764.0 +2017-06-27,259606.0 +2017-06-28,279654.0 +2017-06-29,230934.0 +2017-06-30,267206.0 +2017-07-01,221692.0 +2017-07-02,196351.0 +2017-07-03,253074.0 +2017-07-04,255330.0 +2017-07-05,236859.0 +2017-07-06,224964.0 +2017-07-07,243466.0 +2017-07-08,220670.0 +2017-07-09,187986.0 +2017-07-10,251525.0 +2017-07-11,265586.0 +2017-07-12,256961.0 +2017-07-13,245738.0 +2017-07-14,227764.0 +2017-07-15,221724.0 +2017-07-16,203002.0 +2017-07-17,230167.0 +2017-07-18,260410.0 +2017-07-19,253619.0 +2017-07-20,230037.0 +2017-07-21,268289.0 +2017-07-22,223198.0 +2017-07-23,180859.0 +2017-07-24,239894.0 +2017-07-25,243888.0 +2017-07-26,237706.0 +2017-07-27,225215.0 +2017-07-28,247057.0 +2017-07-29,210977.0 +2017-07-30,183998.0 +2017-07-31,230867.0 +2017-08-01,131726.0 +2017-08-02,209169.0 +2017-08-03,212879.0 +2017-08-04,235613.0 +2017-08-05,239594.0 +2017-08-06,199487.0 +2017-08-07,248849.0 +2017-08-08,275410.0 +2017-08-09,260817.0 +2017-08-10,257831.0 +2017-08-11,283857.0 +2017-08-12,260386.0 +2017-08-13,263162.0 +2017-08-14,255232.0 +2017-08-15,310850.0 +2017-08-16,274736.0 +2017-08-17,347140.0 +2017-08-18,312101.0 +2017-08-19,266681.0 +2017-08-20,210722.0 +2017-08-21,236657.0 +2017-08-22,196194.0 +2017-08-23,315575.0 +2017-08-24,203704.0 +2017-08-25,208068.0 +2017-08-26,226380.0 +2017-08-27,261736.0 +2017-08-28,223642.0 +2017-08-29,280967.0 +2017-08-30,271298.0 +2017-08-31,280561.0 +2017-09-01,283496.0 +2017-09-02,236647.0 +2017-09-03,195135.0 +2017-09-04,269105.0 +2017-09-05,277751.0 +2017-09-06,276063.0 +2017-09-07,256198.0 +2017-09-08,279313.0 +2017-09-09,217721.0 +2017-09-10,193102.0 +2017-09-11,253318.0 +2017-09-12,256042.0 +2017-09-13,263130.0 +2017-09-14,267894.0 +2017-09-15,291899.0 +2017-09-16,228088.0 +2017-09-17,197507.0 +2017-09-18,218077.0 +2017-09-19,282761.0 +2017-09-20,235606.0 +2017-09-21,255081.0 +2017-09-22,227476.0 +2017-09-23,203695.0 +2017-09-24,185132.0 +2017-09-25,226478.0 +2017-09-26,263510.0 +2017-09-27,257814.0 +2017-09-28,275799.0 +2017-09-29,254269.0 +2017-09-30,212540.0 +2017-10-01,203523.0 +2017-10-02,294852.0 +2017-10-03,281949.0 +2017-10-04,232692.0 +2017-10-05,273118.0 +2017-10-06,283540.0 +2017-10-07,231068.0 +2017-10-08,238203.0 +2017-10-09,296785.0 +2017-10-10,302941.0 +2017-10-11,292320.0 +2017-10-12,293011.0 +2017-10-13,309683.0 +2017-10-14,292999.0 +2017-10-15,283278.0 +2017-10-16,314551.0 +2017-10-17,334274.0 +2017-10-18,329428.0 +2017-10-19,356807.0 +2017-10-20,312230.0 +2017-10-21,312104.0 +2017-10-22,288949.0 +2017-10-23,315925.0 +2017-10-24,338707.0 +2017-10-25,317062.0 +2017-10-26,285767.0 +2017-10-27,226990.0 +2017-10-28,227234.0 +2017-10-29,335635.0 +2017-10-30,312620.0 +2017-10-31,276961.0 +2017-11-01,340337.0 +2017-11-02,352186.0 +2017-11-03,274116.0 +2017-11-04,293991.0 +2017-11-05,251587.0 +2017-11-06,270896.0 +2017-11-07,335480.0 +2017-11-08,301202.0 +2017-11-09,341128.0 +2017-11-10,271625.0 +2017-11-11,194554.0 +2017-11-12,185886.0 +2017-11-13,309159.0 +2017-11-14,271867.0 +2017-11-15,321636.0 +2017-11-16,310244.0 +2017-11-17,306450.0 +2017-11-18,270738.0 +2017-11-19,264695.0 +2017-11-20,336029.0 +2017-11-21,370918.0 +2017-11-22,311885.0 +2017-11-23,352050.0 +2017-11-24,305586.0 +2017-11-25,336533.0 +2017-11-26,329524.0 +2017-11-27,379086.0 +2017-11-28,365821.0 +2017-11-29,397917.0 +2017-11-30,384219.0 +2017-12-01,412725.0 +2017-12-02,326193.0 +2017-12-03,352868.0 +2017-12-04,400505.0 +2017-12-05,405531.0 +2017-12-06,443399.0 +2017-12-07,374765.0 +2017-12-08,384936.0 +2017-12-09,403225.0 +2017-12-10,341256.0 +2017-12-11,368427.0 +2017-12-12,372821.0 +2017-12-13,424393.0 +2017-12-14,490459.0 +2017-12-15,405507.0 +2017-12-16,364051.0 +2017-12-17,391725.0 +2017-12-18,394057.0 +2017-12-19,378482.0 +2017-12-20,370141.0 +2017-12-21,335350.0 +2017-12-22,380493.0 +2017-12-23,308072.0 +2017-12-24,279371.0 +2017-12-25,228791.0 +2017-12-26,247298.0 +2017-12-27,307486.0 +2017-12-28,304904.0 +2017-12-29,353659.0 +2017-12-30,344260.0 +2017-12-31,290259.0 +2018-01-01,241601.0 +2018-01-02,340809.0 +2018-01-03,395806.0 +2018-01-04,424840.0 +2018-01-05,342564.0 +2018-01-06,358679.0 +2018-01-07,368025.0 +2018-01-08,345506.0 +2018-01-09,360101.0 +2018-01-10,347227.0 +2018-01-11,337766.0 +2018-01-12,299913.0 +2018-01-13,265586.0 +2018-01-14,234890.0 +2018-01-15,273473.0 +2018-01-16,303566.0 +2018-01-17,315604.0 +2018-01-18,309322.0 +2018-01-19,243454.0 +2018-01-20,240433.0 +2018-01-21,215435.0 +2018-01-22,245395.0 +2018-01-23,271759.0 +2018-01-24,250247.0 +2018-01-25,236422.0 +2018-01-26,220304.0 +2018-01-27,193421.0 +2018-01-28,213288.0 +2018-01-29,232028.0 +2018-01-30,236442.0 +2018-01-31,204159.0 +2018-02-01,257504.0 +2018-02-02,235750.0 +2018-02-03,194733.0 +2018-02-04,173509.0 +2018-02-05,216178.0 +2018-02-06,243950.0 +2018-02-07,213578.0 +2018-02-08,173158.0 +2018-02-09,177725.0 +2018-02-10,181640.0 +2018-02-11,147057.0 +2018-02-12,186752.0 +2018-02-13,182820.0 +2018-02-14,196238.0 +2018-02-15,198052.0 +2018-02-16,187581.0 +2018-02-17,173640.0 +2018-02-18,159333.0 +2018-02-19,187205.0 +2018-02-20,198314.0 +2018-02-21,205032.0 +2018-02-22,183086.0 +2018-02-23,185045.0 +2018-02-24,154389.0 +2018-02-25,144698.0 +2018-02-26,186333.0 +2018-02-27,219464.0 +2018-02-28,189068.0 +2018-03-01,233579.0 +2018-03-02,194917.0 +2018-03-03,176844.0 +2018-03-04,160083.0 +2018-03-05,201289.0 +2018-03-06,205860.0 +2018-03-07,213821.0 +2018-03-08,196260.0 +2018-03-09,198034.0 +2018-03-10,156088.0 +2018-03-11,150731.0 +2018-03-12,188233.0 +2018-03-13,195982.0 +2018-03-14,190898.0 +2018-03-15,206042.0 +2018-03-16,186823.0 +2018-03-17,154347.0 +2018-03-18,164250.0 +2018-03-19,191373.0 +2018-03-20,195041.0 +2018-03-21,194694.0 +2018-03-22,185044.0 +2018-03-23,179685.0 +2018-03-24,156931.0 +2018-03-25,135139.0 +2018-03-26,187700.0 +2018-03-27,186913.0 +2018-03-28,177386.0 +2018-03-29,192259.0 +2018-03-30,185778.0 +2018-03-31,148489.0 +2018-04-01,134967.0 +2018-04-02,168022.0 +2018-04-03,198756.0 +2018-04-04,185563.0 +2018-04-05,181676.0 +2018-04-06,172751.0 +2018-04-07,154459.0 +2018-04-08,138374.0 +2018-04-09,176416.0 +2018-04-10,186251.0 +2018-04-11,183087.0 +2018-04-12,210725.0 +2018-04-13,217117.0 +2018-04-14,161706.0 +2018-04-15,173868.0 +2018-04-16,195965.0 +2018-04-17,201658.0 +2018-04-18,200580.0 +2018-04-19,213345.0 +2018-04-20,207640.0 +2018-04-21,193816.0 +2018-04-22,171710.0 +2018-04-23,226200.0 +2018-04-24,254334.0 +2018-04-25,213032.0 +2018-04-26,216591.0 +2018-04-27,210977.0 +2018-04-28,203553.0 +2018-04-29,180640.0 +2018-04-30,214952.0 +2018-05-01,199801.0 +2018-05-02,212156.0 +2018-05-03,228370.0 +2018-05-04,218931.0 +2018-05-05,202542.0 +2018-05-06,171624.0 +2018-05-07,204913.0 +2018-05-08,217671.0 +2018-05-09,206419.0 +2018-05-10,208807.0 +2018-05-11,213497.0 +2018-05-12,181889.0 +2018-05-13,158646.0 +2018-05-14,209565.0 +2018-05-15,214633.0 +2018-05-16,208284.0 +2018-05-17,192551.0 +2018-05-18,211348.0 +2018-05-19,173120.0 +2018-05-20,158519.0 +2018-05-21,202490.0 +2018-05-22,203186.0 +2018-05-23,223034.0 +2018-05-24,206682.0 +2018-05-25,196005.0 +2018-05-26,158621.0 +2018-05-27,144140.0 +2018-05-28,188907.0 +2018-05-29,204630.0 +2018-05-30,203903.0 +2018-05-31,209356.0 +2018-06-01,205315.0 +2018-06-02,174345.0 +2018-06-03,163280.0 +2018-06-04,209733.0 +2018-06-05,212726.0 +2018-06-06,206270.0 +2018-06-07,207484.0 +2018-06-08,200234.0 +2018-06-09,171163.0 +2018-06-10,179682.0 +2018-06-11,213056.0 +2018-06-12,214450.0 +2018-06-13,211686.0 +2018-06-14,209876.0 +2018-06-15,205708.0 +2018-06-16,158924.0 +2018-06-17,144751.0 +2018-06-18,196141.0 +2018-06-19,191650.0 +2018-06-20,198734.0 +2018-06-21,197943.0 +2018-06-22,203993.0 +2018-06-23,163135.0 +2018-06-24,157851.0 +2018-06-25,200016.0 +2018-06-26,195258.0 +2018-06-27,187980.0 +2018-06-28,187467.0 +2018-06-29,197730.0 +2018-06-30,180924.0 +2018-07-01,156100.0 +2018-07-02,199153.0 +2018-07-03,216631.0 +2018-07-04,206654.0 +2018-07-05,199463.0 +2018-07-06,200833.0 +2018-07-07,170004.0 +2018-07-08,155527.0 +2018-07-09,206410.0 +2018-07-10,215914.0 +2018-07-11,202468.0 +2018-07-12,203394.0 +2018-07-13,207761.0 +2018-07-14,176342.0 +2018-07-15,161018.0 +2018-07-16,207722.0 +2018-07-17,233807.0 +2018-07-18,238595.0 +2018-07-19,224868.0 +2018-07-20,225375.0 +2018-07-21,184666.0 +2018-07-22,166947.0 +2018-07-23,229314.0 +2018-07-24,259199.0 +2018-07-25,250031.0 +2018-07-26,231514.0 +2018-07-27,229230.0 +2018-07-28,188093.0 +2018-07-29,168237.0 +2018-07-30,230790.0 +2018-07-31,242830.0 +2018-08-01,240894.0 +2018-08-02,224720.0 +2018-08-03,229693.0 +2018-08-04,191481.0 +2018-08-05,172021.0 +2018-08-06,218476.0 +2018-08-07,232894.0 +2018-08-08,235154.0 +2018-08-09,222177.0 +2018-08-10,225972.0 +2018-08-11,192268.0 +2018-08-12,164889.0 +2018-08-13,222079.0 +2018-08-14,247486.0 +2018-08-15,245905.0 +2018-08-16,232177.0 +2018-08-17,233642.0 +2018-08-18,190775.0 +2018-08-19,167255.0 +2018-08-20,214833.0 +2018-08-21,217629.0 +2018-08-22,230173.0 +2018-08-23,217203.0 +2018-08-24,219702.0 +2018-08-25,196285.0 +2018-08-26,172574.0 +2018-08-27,223471.0 +2018-08-28,237886.0 +2018-08-29,237369.0 +2018-08-30,231237.0 +2018-08-31,236921.0 +2018-09-01,213180.0 +2018-09-02,187001.0 +2018-09-03,222753.0 +2018-09-04,232139.0 +2018-09-05,246345.0 +2018-09-06,252111.0 +2018-09-07,230638.0 +2018-09-08,204278.0 +2018-09-09,188749.0 +2018-09-10,222731.0 +2018-09-11,237430.0 +2018-09-12,233107.0 +2018-09-13,234061.0 +2018-09-14,223118.0 +2018-09-15,210931.0 +2018-09-16,179344.0 +2018-09-17,240017.0 +2018-09-18,244117.0 +2018-09-19,250881.0 +2018-09-20,253520.0 +2018-09-21,272907.0 +2018-09-22,225382.0 +2018-09-23,200169.0 +2018-09-24,237522.0 +2018-09-25,251944.0 +2018-09-26,243788.0 +2018-09-27,248543.0 +2018-09-28,254085.0 +2018-09-29,218187.0 +2018-09-30,208047.0 +2018-10-01,242662.0 +2018-10-02,244635.0 +2018-10-03,242158.0 +2018-10-04,243007.0 +2018-10-05,244589.0 +2018-10-06,214718.0 +2018-10-07,219589.0 +2018-10-08,247906.0 +2018-10-09,235732.0 +2018-10-10,244801.0 +2018-10-11,262308.0 +2018-10-12,243042.0 +2018-10-13,204956.0 +2018-10-14,191145.0 +2018-10-15,266783.0 +2018-10-16,257832.0 +2018-10-17,260224.0 +2018-10-18,253312.0 +2018-10-19,253684.0 +2018-10-20,227678.0 +2018-10-21,211367.0 +2018-10-22,255169.0 +2018-10-23,253309.0 +2018-10-24,253978.0 +2018-10-25,254462.0 +2018-10-26,252859.0 +2018-10-27,233613.0 +2018-10-28,219720.0 +2018-10-29,269608.0 +2018-10-30,283173.0 +2018-10-31,288120.0 +2018-11-01,281787.0 +2018-11-02,292561.0 +2018-11-03,249403.0 +2018-11-04,226124.0 +2018-11-05,296139.0 +2018-11-06,285323.0 +2018-11-07,293604.0 +2018-11-08,277476.0 +2018-11-09,283769.0 +2018-11-10,252368.0 +2018-11-11,246845.0 +2018-11-12,299866.0 +2018-11-13,279040.0 +2018-11-14,292620.0 +2018-11-15,291398.0 +2018-11-16,282998.0 +2018-11-17,262504.0 +2018-11-18,239680.0 +2018-11-19,267845.0 +2018-11-20,288318.0 +2018-11-21,254837.0 +2018-11-22,265994.0 +2018-11-23,275136.0 +2018-11-24,249874.0 +2018-11-25,239129.0 +2018-11-26,256951.0 +2018-11-27,268402.0 +2018-11-28,254338.0 +2018-11-29,246121.0 +2018-11-30,250056.0 +2018-12-01,241723.0 +2018-12-02,222559.0 +2018-12-03,240538.0 +2018-12-04,270051.0 +2018-12-05,256371.0 +2018-12-06,279519.0 +2018-12-07,253776.0 +2018-12-08,230977.0 +2018-12-09,238441.0 +2018-12-10,258229.0 +2018-12-11,251362.0 +2018-12-12,261303.0 +2018-12-13,268291.0 +2018-12-14,275655.0 +2018-12-15,262730.0 +2018-12-16,226338.0 +2018-12-17,298663.0 +2018-12-18,266117.0 +2018-12-19,302243.0 +2018-12-20,287138.0 +2018-12-21,280448.0 +2018-12-22,251041.0 +2018-12-23,250563.0 +2018-12-24,272145.0 +2018-12-25,264893.0 +2018-12-26,281148.0 +2018-12-27,299846.0 +2018-12-28,308100.0 +2018-12-29,264842.0 +2018-12-30,267463.0 +2018-12-31,259529.0 +2019-01-01,234576.0 +2019-01-02,271545.0 +2019-01-03,290861.0 +2019-01-04,281623.0 +2019-01-05,265029.0 +2019-01-06,258381.0 +2019-01-07,284641.0 +2019-01-08,318355.0 +2019-01-09,318892.0 +2019-01-10,327182.0 +2019-01-11,308224.0 +2019-01-12,281364.0 +2019-01-13,276860.0 +2019-01-14,326536.0 +2019-01-15,302147.0 +2019-01-16,305569.0 +2019-01-17,296568.0 +2019-01-18,305827.0 +2019-01-19,282055.0 +2019-01-20,293961.0 +2019-01-21,315052.0 +2019-01-22,295910.0 +2019-01-23,293348.0 +2019-01-24,307984.0 +2019-01-25,300947.0 +2019-01-26,288135.0 +2019-01-27,276514.0 +2019-01-28,307917.0 +2019-01-29,326016.0 +2019-01-30,321844.0 +2019-01-31,353790.0 +2019-02-01,339183.0 +2019-02-02,321888.0 +2019-02-03,300033.0 +2019-02-04,335141.0 +2019-02-05,353922.0 +2019-02-06,349432.0 +2019-02-07,352872.0 +2019-02-08,335117.0 +2019-02-09,310742.0 +2019-02-10,299469.0 +2019-02-11,315580.0 +2019-02-12,271445.0 +2019-02-13,352498.0 +2019-02-14,354342.0 +2019-02-15,296602.0 +2019-02-16,331987.0 +2019-02-17,327304.0 +2019-02-18,344119.0 +2019-02-19,348086.0 +2019-02-20,314190.0 +2019-02-21,297476.0 +2019-02-22,347677.0 +2019-02-23,328096.0 +2019-02-24,320309.0 +2019-02-25,336491.0 +2019-02-26,366407.0 +2019-02-27,344419.0 +2019-02-28,367677.0 +2019-03-01,354260.0 +2019-03-02,335732.0 +2019-03-03,353537.0 +2019-03-04,304051.0 +2019-03-05,285567.0 +2019-03-06,277735.0 +2019-03-07,282381.0 +2019-03-08,285118.0 +2019-03-09,239354.0 +2019-03-10,212741.0 +2019-03-11,294599.0 +2019-03-12,285510.0 +2019-03-13,285822.0 +2019-03-14,299774.0 +2019-03-15,296817.0 +2019-03-16,262104.0 +2019-03-17,227144.0 +2019-03-18,291344.0 +2019-03-19,304570.0 +2019-03-20,304799.0 +2019-03-21,300569.0 +2019-03-22,298363.0 +2019-03-23,251428.0 +2019-03-24,226016.0 +2019-03-25,322043.0 +2019-03-26,366281.0 +2019-03-27,383037.0 +2019-03-28,393552.0 +2019-03-29,369670.0 +2019-03-30,377644.0 +2019-03-31,381513.0 +2019-04-01,368768.0 +2019-04-02,401350.0 +2019-04-03,360108.0 +2019-04-04,354520.0 +2019-04-05,386932.0 +2019-04-06,359430.0 +2019-04-07,350490.0 +2019-04-08,372269.0 +2019-04-09,345939.0 +2019-04-10,396353.0 +2019-04-11,402645.0 +2019-04-12,376616.0 +2019-04-13,366941.0 +2019-04-14,336908.0 +2019-04-15,381328.0 +2019-04-16,358372.0 +2019-04-17,350599.0 +2019-04-18,382832.0 +2019-04-19,361976.0 +2019-04-20,319709.0 +2019-04-21,390573.0 +2019-04-22,341880.0 +2019-04-23,311637.0 +2019-04-24,404116.0 +2019-04-25,383946.0 +2019-04-26,381058.0 +2019-04-27,358871.0 +2019-04-28,383128.0 +2019-04-29,363044.0 +2019-04-30,346346.0 +2019-05-01,439378.0 +2019-05-02,452462.0 +2019-05-03,382880.0 +2019-05-04,355778.0 +2019-05-05,330603.0 +2019-05-06,378325.0 +2019-05-07,329816.0 +2019-05-08,392929.0 +2019-05-09,361419.0 +2019-05-10,322838.0 +2019-05-11,344827.0 +2019-05-12,338413.0 +2019-05-13,390261.0 +2019-05-14,367218.0 +2019-05-15,368752.0 +2019-05-16,374916.0 +2019-05-17,361503.0 +2019-05-18,359551.0 +2019-05-19,346696.0 +2019-05-20,381421.0 +2019-05-21,380736.0 +2019-05-22,394720.0 +2019-05-23,389185.0 +2019-05-24,373729.0 +2019-05-25,338258.0 +2019-05-26,373907.0 +2019-05-27,399417.0 +2019-05-28,390263.0 +2019-05-29,404981.0 +2019-05-30,376714.0 +2019-05-31,298880.0 +2019-06-01,331941.0 +2019-06-02,300872.0 +2019-06-03,293890.0 +2019-06-04,374609.0 +2019-06-05,372788.0 +2019-06-06,364369.0 +2019-06-07,349853.0 +2019-06-08,294245.0 +2019-06-09,300770.0 +2019-06-10,353472.0 +2019-06-11,340306.0 +2019-06-12,328333.0 +2019-06-13,364222.0 +2019-06-14,364214.0 +2019-06-15,330808.0 +2019-06-16,295124.0 +2019-06-17,320939.0 +2019-06-18,394680.0 +2019-06-19,400855.0 +2019-06-20,329959.0 +2019-06-21,337608.0 +2019-06-22,353934.0 +2019-06-23,379907.0 +2019-06-24,388165.0 +2019-06-25,361239.0 +2019-06-26,399459.0 +2019-06-27,360908.0 +2019-06-28,406931.0 +2019-06-29,356508.0 +2019-06-30,330579.0 +2019-07-01,336719.0 +2019-07-02,373251.0 +2019-07-03,397382.0 +2019-07-04,370537.0 +2019-07-05,378264.0 +2019-07-06,348496.0 +2019-07-07,313120.0 +2019-07-08,378788.0 +2019-07-09,365434.0 +2019-07-10,315535.0 +2019-07-11,325647.0 +2019-07-12,360735.0 +2019-07-13,304404.0 +2019-07-14,303142.0 +2019-07-15,348965.0 +2019-07-16,363175.0 +2019-07-17,324759.0 +2019-07-18,315624.0 +2019-07-19,299773.0 +2019-07-20,322825.0 +2019-07-21,283785.0 +2019-07-22,319241.0 +2019-07-23,320209.0 +2019-07-24,295450.0 +2019-07-25,336386.0 +2019-07-26,319446.0 +2019-07-27,283740.0 +2019-07-28,272799.0 +2019-07-29,333451.0 +2019-07-30,328233.0 +2019-07-31,361166.0 +2019-08-01,335801.0 +2019-08-02,349387.0 +2019-08-03,327415.0 +2019-08-04,298638.0 +2019-08-05,338993.0 +2019-08-06,368187.0 +2019-08-07,370756.0 +2019-08-08,336039.0 +2019-08-09,340978.0 +2019-08-10,303987.0 +2019-08-11,273127.0 +2019-08-12,297313.0 +2019-08-13,370590.0 +2019-08-14,359845.0 +2019-08-15,355487.0 +2019-08-16,323478.0 +2019-08-17,288128.0 +2019-08-18,276239.0 +2019-08-19,330310.0 +2019-08-20,333151.0 +2019-08-21,308672.0 +2019-08-22,322312.0 +2019-08-23,340067.0 +2019-08-24,304321.0 +2019-08-25,288779.0 +2019-08-26,318082.0 +2019-08-27,325849.0 +2019-08-28,341049.0 +2019-08-29,346569.0 +2019-08-30,349040.0 +2019-08-31,342029.0 +2019-09-01,285325.0 +2019-09-02,327099.0 +2019-09-03,370467.0 +2019-09-04,324605.0 +2019-09-05,352245.0 +2019-09-06,365373.0 +2019-09-07,314279.0 +2019-09-08,288330.0 +2019-09-09,316706.0 +2019-09-10,339676.0 +2019-09-11,338092.0 +2019-09-12,335710.0 +2019-09-13,308706.0 +2019-09-14,299739.0 +2019-09-15,273999.0 +2019-09-16,347178.0 +2019-09-17,343630.0 +2019-09-18,363011.0 +2019-09-19,345962.0 +2019-09-20,340778.0 +2019-09-21,335847.0 +2019-09-22,318547.0 +2019-09-23,288035.0 +2019-09-24,353106.0 +2019-09-25,347591.0 +2019-09-26,355604.0 +2019-09-27,303771.0 +2019-09-28,314274.0 +2019-09-29,285406.0 +2019-09-30,311266.0 +2019-10-01,337101.0 +2019-10-02,326409.0 +2019-10-03,326367.0 +2019-10-04,337075.0 +2019-10-05,326525.0 +2019-10-06,277464.0 +2019-10-07,328648.0 +2019-10-08,336192.0 +2019-10-09,310911.0 +2019-10-10,344886.0 +2019-10-11,345269.0 +2019-10-12,301560.0 +2019-10-13,279345.0 +2019-10-14,304331.0 +2019-10-15,339545.0 +2019-10-16,338330.0 +2019-10-17,333955.0 +2019-10-18,339230.0 +2019-10-19,304594.0 +2019-10-20,289650.0 +2019-10-21,351632.0 +2019-10-22,341295.0 +2019-10-23,349152.0 +2019-10-24,303710.0 +2019-10-25,328460.0 +2019-10-26,305582.0 +2019-10-27,256138.0 +2019-10-28,309477.0 +2019-10-29,307820.0 +2019-10-30,314029.0 +2019-10-31,293647.0 +2019-11-01,316057.0 +2019-11-02,284309.0 +2019-11-03,294229.0 +2019-11-04,310847.0 +2019-11-05,332695.0 +2019-11-06,314566.0 +2019-11-07,324352.0 +2019-11-08,311313.0 +2019-11-09,306019.0 +2019-11-10,299546.0 +2019-11-11,326556.0 +2019-11-12,301247.0 +2019-11-13,318810.0 +2019-11-14,349854.0 +2019-11-15,324987.0 +2019-11-16,283320.0 +2019-11-17,264216.0 +2019-11-18,304531.0 +2019-11-19,327483.0 +2019-11-20,320944.0 +2019-11-21,323817.0 +2019-11-22,310407.0 +2019-11-23,306251.0 +2019-11-24,267237.0 +2019-11-25,279345.0 +2019-11-26,321188.0 +2019-11-27,317458.0 +2019-11-28,309460.0 +2019-11-29,311154.0 +2019-11-30,277332.0 +2019-12-01,274482.0 +2019-12-02,314585.0 +2019-12-03,336354.0 +2019-12-04,337117.0 +2019-12-05,311323.0 +2019-12-06,315241.0 +2019-12-07,285129.0 +2019-12-08,278705.0 +2019-12-09,313481.0 +2019-12-10,319916.0 +2019-12-11,291116.0 +2019-12-12,311662.0 +2019-12-13,322736.0 +2019-12-14,293345.0 +2019-12-15,263317.0 +2019-12-16,326928.0 +2019-12-17,319113.0 +2019-12-18,314115.0 +2019-12-19,319398.0 +2019-12-20,332501.0 +2019-12-21,310942.0 +2019-12-22,280901.0 +2019-12-23,304702.0 +2019-12-24,290311.0 +2019-12-25,244538.0 +2019-12-26,295896.0 +2019-12-27,322059.0 +2019-12-28,298138.0 +2019-12-29,279770.0 +2019-12-30,324331.0 +2019-12-31,293302.0 +2020-01-01,251561.0 +2020-01-02,295426.0 +2020-01-03,316348.0 +2020-01-04,287047.0 +2020-01-05,287616.0 +2020-01-06,299011.0 +2020-01-07,343903.0 +2020-01-08,317877.0 +2020-01-09,321900.0 +2020-01-10,330585.0 +2020-01-11,308907.0 +2020-01-12,282985.0 +2020-01-13,291454.0 +2020-01-14,346808.0 +2020-01-15,332507.0 +2020-01-16,325788.0 +2020-01-17,323833.0 +2020-01-18,287105.0 +2020-01-19,283810.0 +2020-01-20,313509.0 +2020-01-21,315057.0 +2020-01-22,328430.0 +2020-01-23,329759.0 +2020-01-24,313735.0 +2020-01-25,285420.0 +2020-01-26,261104.0 +2020-01-27,279111.0 +2020-01-28,339910.0 +2020-01-29,340402.0 +2020-01-30,332402.0 +2020-01-31,334290.0 +2020-02-01,303573.0 +2020-02-02,290736.0 +2020-02-03,330864.0 +2020-02-04,309058.0 +2020-02-05,368445.0 +2020-02-06,315235.0 +2020-02-07,334799.0 +2020-02-08,318224.0 +2020-02-09,316917.0 +2020-02-10,297982.0 +2020-02-11,365435.0 +2020-02-12,344473.0 +2020-02-13,339940.0 +2020-02-14,325943.0 +2020-02-15,322579.0 +2020-02-16,292094.0 +2020-02-17,341334.0 +2020-02-18,328458.0 +2020-02-19,334664.0 +2020-02-20,316500.0 +2020-02-21,338330.0 +2020-02-22,304449.0 +2020-02-23,285437.0 +2020-02-24,328749.0 +2020-02-25,334449.0 +2020-02-26,329831.0 +2020-02-27,338634.0 +2020-02-28,368432.0 +2020-02-29,307388.0 +2020-03-01,309672.0 +2020-03-02,342672.0 +2020-03-03,342171.0 +2020-03-04,358578.0 +2020-03-05,349366.0 +2020-03-06,338228.0 +2020-03-07,313155.0 +2020-03-08,302536.0 +2020-03-09,348061.0 +2020-03-10,329566.0 +2020-03-11,287373.0 +2020-03-12,349827.0 +2020-03-13,276673.0 +2020-03-14,279700.0 +2020-03-15,223111.0 +2020-03-16,270280.0 +2020-03-17,278203.0 +2020-03-18,231154.0 +2020-03-19,265582.0 +2020-03-20,284485.0 +2020-03-21,245772.0 +2020-03-22,209027.0 +2020-03-23,259704.0 +2020-03-24,277999.0 +2020-03-25,218084.0 +2020-03-26,292668.0 +2020-03-27,276391.0 +2020-03-28,240492.0 +2020-03-29,232669.0 +2020-03-30,276681.0 +2020-03-31,290068.0 +2020-04-01,281702.0 +2020-04-02,299023.0 +2020-04-03,278631.0 +2020-04-04,253117.0 +2020-04-05,240084.0 +2020-04-06,280342.0 +2020-04-07,312602.0 +2020-04-08,285811.0 +2020-04-09,286552.0 +2020-04-10,288422.0 +2020-04-11,247693.0 +2020-04-12,228376.0 +2020-04-13,287942.0 +2020-04-14,299223.0 +2020-04-15,310084.0 +2020-04-16,322749.0 +2020-04-17,284095.0 +2020-04-18,288976.0 +2020-04-19,251832.0 +2020-04-20,310649.0 +2020-04-21,310702.0 +2020-04-22,278624.0 +2020-04-23,328903.0 +2020-04-24,319911.0 +2020-04-25,280669.0 +2020-04-26,252696.0 +2020-04-27,311076.0 +2020-04-28,323321.0 +2020-04-29,331256.0 +2020-04-30,321837.0 +2020-05-01,340433.0 +2020-05-02,286625.0 +2020-05-03,281584.0 +2020-05-04,325940.0 +2020-05-05,328917.0 +2020-05-06,333241.0 +2020-05-07,341839.0 +2020-05-08,323488.0 +2020-05-09,312263.0 +2020-05-10,286619.0 +2020-05-11,305682.0 +2020-05-12,345069.0 +2020-05-13,296677.0 +2020-05-14,268636.0 +2020-05-15,310517.0 +2020-05-16,296429.0 +2020-05-17,236706.0 +2020-05-18,273595.0 +2020-05-19,274782.0 +2020-05-20,279922.0 +2020-05-21,298352.0 +2020-05-22,278673.0 +2020-05-23,269111.0 +2020-05-24,214414.0 +2020-05-25,265750.0 +2020-05-26,295658.0 +2020-05-27,292789.0 +2020-05-28,299779.0 +2020-05-29,280833.0 +2020-05-30,285890.0 +2020-05-31,258277.0 +2020-06-01,308178.0 +2020-06-02,303985.0 +2020-06-03,313861.0 +2020-06-04,318134.0 +2020-06-05,326903.0 +2020-06-06,284677.0 +2020-06-07,252209.0 +2020-06-08,317113.0 +2020-06-09,326914.0 +2020-06-10,324999.0 +2020-06-11,332305.0 +2020-06-12,318111.0 +2020-06-13,280023.0 +2020-06-14,275553.0 +2020-06-15,294330.0 +2020-06-16,340367.0 +2020-06-17,333409.0 +2020-06-18,280480.0 +2020-06-19,347293.0 +2020-06-20,283986.0 +2020-06-21,259294.0 +2020-06-22,301253.0 +2020-06-23,355098.0 +2020-06-24,312182.0 +2020-06-25,312042.0 +2020-06-26,330217.0 +2020-06-27,275351.0 +2020-06-28,264759.0 +2020-06-29,315279.0 +2020-06-30,299586.0 +2020-07-01,382408.0 +2020-07-02,339305.0 +2020-07-03,330846.0 +2020-07-04,288490.0 +2020-07-05,273941.0 +2020-07-06,338613.0 +2020-07-07,345814.0 +2020-07-08,347304.0 +2020-07-09,362554.0 +2020-07-10,345835.0 +2020-07-11,306615.0 +2020-07-12,282212.0 +2020-07-13,310080.0 +2020-07-14,359703.0 +2020-07-15,315926.0 +2020-07-16,345713.0 +2020-07-17,293789.0 +2020-07-18,310892.0 +2020-07-19,276962.0 +2020-07-20,309606.0 +2020-07-21,312746.0 +2020-07-22,364648.0 +2020-07-23,336109.0 +2020-07-24,369271.0 +2020-07-25,293741.0 +2020-07-26,298422.0 +2020-07-27,326620.0 +2020-07-28,354597.0 +2020-07-29,346373.0 +2020-07-30,327654.0 +2020-07-31,356753.0 +2020-08-01,296568.0 +2020-08-02,287728.0 +2020-08-03,333591.0 +2020-08-04,328887.0 +2020-08-05,291685.0 +2020-08-06,356456.0 +2020-08-07,326347.0 +2020-08-08,283489.0 +2020-08-09,268246.0 +2020-08-10,308230.0 +2020-08-11,349798.0 +2020-08-12,346248.0 +2020-08-13,325199.0 +2020-08-14,365512.0 +2020-08-15,313604.0 +2020-08-16,284917.0 +2020-08-17,292819.0 +2020-08-18,345896.0 +2020-08-19,333741.0 +2020-08-20,333537.0 +2020-08-21,314142.0 +2020-08-22,311563.0 +2020-08-23,288571.0 +2020-08-24,328984.0 +2020-08-25,304281.0 +2020-08-26,324042.0 +2020-08-27,328028.0 +2020-08-28,352559.0 +2020-08-29,292637.0 +2020-08-30,268987.0 +2020-08-31,302770.0 +2020-09-01,376354.0 +2020-09-02,317305.0 +2020-09-03,310793.0 +2020-09-04,298151.0 +2020-09-05,325382.0 +2020-09-06,262670.0 +2020-09-07,327487.0 +2020-09-08,332513.0 +2020-09-09,314715.0 +2020-09-10,345823.0 +2020-09-11,308185.0 +2020-09-12,299982.0 +2020-09-13,254948.0 +2020-09-14,353844.0 +2020-09-15,332801.0 +2020-09-16,342454.0 +2020-09-17,348403.0 +2020-09-18,324992.0 +2020-09-19,296208.0 +2020-09-20,258953.0 +2020-09-21,297460.0 +2020-09-22,312860.0 +2020-09-23,349796.0 +2020-09-24,316415.0 +2020-09-25,352901.0 +2020-09-26,276012.0 +2020-09-27,259230.0 +2020-09-28,295347.0 +2020-09-29,347555.0 +2020-09-30,351261.0 +2020-10-01,304633.0 +2020-10-02,315307.0 +2020-10-03,310704.0 +2020-10-04,267861.0 +2020-10-05,294846.0 +2020-10-06,317792.0 +2020-10-07,370403.0 +2020-10-08,330065.0 +2020-10-09,339201.0 +2020-10-10,298343.0 +2020-10-11,255956.0 +2020-10-12,314025.0 +2020-10-13,333049.0 +2020-10-14,314392.0 +2020-10-15,340842.0 +2020-10-16,324492.0 +2020-10-17,274912.0 +2020-10-18,231437.0 +2020-10-19,303804.0 +2020-10-20,330419.0 +2020-10-21,311162.0 +2020-10-22,338950.0 +2020-10-23,323738.0 +2020-10-24,306622.0 +2020-10-25,242156.0 +2020-10-26,252384.0 +2020-10-27,251839.0 +2020-10-28,261240.0 +2020-10-29,275962.0 +2020-10-30,268253.0 +2020-10-31,275683.0 +2020-11-01,276155.0 +2020-11-02,224514.0 +2020-11-03,331533.0 +2020-11-04,320538.0 +2020-11-05,318521.0 +2020-11-06,340198.0 +2020-11-07,270755.0 +2020-11-08,242909.0 +2020-11-09,326198.0 +2020-11-10,303123.0 +2020-11-11,322130.0 +2020-11-12,324695.0 +2020-11-13,299901.0 +2020-11-14,273369.0 +2020-11-15,252565.0 +2020-11-16,311317.0 +2020-11-17,347615.0 +2020-11-18,361838.0 +2020-11-19,310924.0 +2020-11-20,347858.0 +2020-11-21,311020.0 +2020-11-22,270951.0 +2020-11-23,297693.0 +2020-11-24,333157.0 +2020-11-25,361835.0 +2020-11-26,323825.0 +2020-11-27,322291.0 +2020-11-28,293795.0 +2020-11-29,263423.0 +2020-11-30,256438.0 +2020-12-01,377916.0 +2020-12-02,326888.0 +2020-12-03,346764.0 +2020-12-04,318750.0 +2020-12-05,282455.0 +2020-12-06,258488.0 +2020-12-07,300756.0 +2020-12-08,330826.0 +2020-12-09,320940.0 +2020-12-10,313519.0 +2020-12-11,304597.0 +2020-12-12,295278.0 +2020-12-13,276004.0 +2020-12-14,314205.0 +2020-12-15,320300.0 +2020-12-16,315074.0 +2020-12-17,309352.0 +2020-12-18,375392.0 +2020-12-19,343378.0 +2020-12-20,281892.0 +2020-12-21,269698.0 +2020-12-22,324020.0 +2020-12-23,338309.0 +2020-12-24,269433.0 +2020-12-25,303757.0 +2020-12-26,273817.0 +2020-12-27,308857.0 +2020-12-28,308823.0 +2020-12-29,336159.0 +2020-12-30,338086.0 +2020-12-31,344752.0 +2021-01-01,257931.0 +2021-01-02,296960.0 +2021-01-03,358958.0 +2021-01-04,373561.0 +2021-01-05,353934.0 +2021-01-06,397207.0 +2021-01-07,401576.0 +2021-01-08,358378.0 +2021-01-09,321250.0 +2021-01-10,331706.0 +2021-01-11,333804.0 +2021-01-12,336479.0 +2021-01-13,319015.0 +2021-01-14,338662.0 +2021-01-15,343847.0 +2021-01-16,308314.0 +2021-01-17,271741.0 +2021-01-18,313671.0 +2021-01-19,324934.0 +2021-01-20,314668.0 +2021-01-21,290625.0 +2021-01-22,323727.0 +2021-01-23,308120.0 +2021-01-24,253832.0 +2021-01-25,308962.0 +2021-01-26,336774.0 +2021-01-27,323411.0 +2021-01-28,325001.0 +2021-01-29,340884.0 +2021-01-30,312177.0 +2021-01-31,290609.0 +2021-02-01,277460.0 +2021-02-02,367682.0 +2021-02-03,344275.0 +2021-02-04,367628.0 +2021-02-05,360372.0 +2021-02-06,333727.0 +2021-02-07,286208.0 +2021-02-08,335061.0 +2021-02-09,359994.0 +2021-02-10,340615.0 +2021-02-11,304610.0 +2021-02-12,343164.0 +2021-02-13,336467.0 +2021-02-14,295280.0 +2021-02-15,311170.0 +2021-02-16,296267.0 +2021-02-17,317528.0 +2021-02-18,316815.0 +2021-02-19,341433.0 +2021-02-20,320329.0 +2021-02-21,271504.0 +2021-02-22,285250.0 +2021-02-23,287757.0 +2021-02-24,357933.0 +2021-02-25,325960.0 +2021-02-26,306277.0 +2021-02-27,320627.0 +2021-02-28,254185.0 +2021-03-01,280355.0 +2021-03-02,338007.0 +2021-03-03,333250.0 +2021-03-04,289503.0 +2021-03-05,317631.0 +2021-03-06,287811.0 +2021-03-07,260593.0 +2021-03-08,291800.0 +2021-03-09,299542.0 +2021-03-10,344539.0 +2021-03-11,291113.0 +2021-03-12,320594.0 +2021-03-13,276929.0 +2021-03-14,307893.0 +2021-03-15,292083.0 +2021-03-16,319344.0 +2021-03-17,295983.0 +2021-03-18,331566.0 +2021-03-19,316032.0 +2021-03-20,286794.0 +2021-03-21,234780.0 +2021-03-22,297259.0 +2021-03-23,314073.0 +2021-03-24,304941.0 +2021-03-25,318408.0 +2021-03-26,293474.0 +2021-03-27,288100.0 +2021-03-28,248446.0 +2021-03-29,303154.0 +2021-03-30,320944.0 +2021-03-31,332592.0 +2021-04-01,311794.0 +2021-04-02,305648.0 +2021-04-03,281586.0 +2021-04-04,245861.0 +2021-04-05,288890.0 +2021-04-06,309421.0 +2021-04-07,321162.0 +2021-04-08,278400.0 +2021-04-09,324568.0 +2021-04-10,298929.0 +2021-04-11,253304.0 +2021-04-12,291225.0 +2021-04-13,310071.0 +2021-04-14,297359.0 +2021-04-15,359268.0 +2021-04-16,219601.0 +2021-04-17,194489.0 +2021-04-18,274611.0 +2021-04-19,208316.0 +2021-04-20,279849.0 +2021-04-21,225920.0 +2021-04-22,274467.0 +2021-04-23,295596.0 +2021-04-24,290545.0 +2021-04-25,240900.0 +2021-04-26,240573.0 +2021-04-27,297967.0 +2021-04-28,276984.0 +2021-04-29,259343.0 +2021-04-30,289244.0 +2021-05-01,262852.0 +2021-05-02,235029.0 +2021-05-03,286830.0 +2021-05-04,300643.0 +2021-05-05,309617.0 +2021-05-06,311210.0 +2021-05-07,307816.0 +2021-05-08,274520.0 +2021-05-09,247680.0 +2021-05-10,303117.0 +2021-05-11,311943.0 +2021-05-12,300280.0 +2021-05-13,276311.0 +2021-05-14,265921.0 +2021-05-15,231976.0 +2021-05-16,219303.0 +2021-05-17,250789.0 +2021-05-18,220918.0 +2021-05-19,263294.0 +2021-05-20,227927.0 +2021-05-21,226241.0 +2021-05-22,223684.0 +2021-05-23,194201.0 +2021-05-24,234629.0 +2021-05-25,233521.0 +2021-05-26,230631.0 +2021-05-27,213918.0 +2021-05-28,218192.0 +2021-05-29,198216.0 +2021-05-30,179651.0 +2021-05-31,226328.0 +2021-06-01,234419.0 +2021-06-02,250423.0 +2021-06-03,255474.0 +2021-06-04,236541.0 +2021-06-05,194449.0 +2021-06-06,185155.0 +2021-06-07,235346.0 +2021-06-08,246757.0 +2021-06-09,210785.0 +2021-06-10,252865.0 +2021-06-11,216397.0 +2021-06-12,222642.0 +2021-06-13,186966.0 +2021-06-14,242281.0 +2021-06-15,241730.0 +2021-06-16,252814.0 +2021-06-17,237595.0 +2021-06-18,222794.0 +2021-06-19,186939.0 +2021-06-20,167144.0 +2021-06-21,204945.0 +2021-06-22,196432.0 +2021-06-23,232603.0 +2021-06-24,233173.0 +2021-06-25,218135.0 +2021-06-26,181539.0 +2021-06-27,121480.0 +2021-06-28,220912.0 +2021-06-29,205526.0 +2021-06-30,215216.0 +2021-07-01,233587.0 +2021-07-02,188478.0 +2021-07-03,237336.0 +2021-07-04,171735.0 +2021-07-05,223628.0 +2021-07-06,228137.0 +2021-07-07,221104.0 +2021-07-08,230580.0 +2021-07-09,227380.0 +2021-07-10,187102.0 +2021-07-11,166019.0 +2021-07-12,220143.0 +2021-07-13,229780.0 +2021-07-14,236047.0 +2021-07-15,226106.0 +2021-07-16,223316.0 +2021-07-17,181904.0 +2021-07-18,160978.0 +2021-07-19,160978.0 diff --git a/greykite/data/hourly/hourly_electricity.csv b/greykite/data/hourly/hourly_electricity.csv new file mode 100644 index 0000000..44054e3 --- /dev/null +++ b/greykite/data/hourly/hourly_electricity.csv @@ -0,0 +1,26305 @@ +ts,y +2012-01-01 00:00:00,1300.576323987539 +2012-01-01 01:00:00,1404.4859813084113 +2012-01-01 02:00:00,1384.3052959501558 +2012-01-01 03:00:00,1325.3457943925234 +2012-01-01 04:00:00,1292.2772585669782 +2012-01-01 05:00:00,1270.404984423676 +2012-01-01 06:00:00,1294.6043613707166 +2012-01-01 07:00:00,1335.8691588785048 +2012-01-01 08:00:00,1351.202492211838 +2012-01-01 09:00:00,1435.342679127726 +2012-01-01 10:00:00,1507.0249221183801 +2012-01-01 11:00:00,1516.5015576323988 +2012-01-01 12:00:00,1698.5327102803737 +2012-01-01 13:00:00,1681.0467289719627 +2012-01-01 14:00:00,1703.423676012461 +2012-01-01 15:00:00,1712.8442367601247 +2012-01-01 16:00:00,1714.3364485981308 +2012-01-01 17:00:00,1810.1931464174454 +2012-01-01 18:00:00,1978.342679127726 +2012-01-01 19:00:00,1978.6791277258567 +2012-01-01 20:00:00,1980.834890965732 +2012-01-01 21:00:00,1945.271028037383 +2012-01-01 22:00:00,1891.6915887850466 +2012-01-01 23:00:00,1727.1869158878505 +2012-01-02 00:00:00,1521.361370716511 +2012-01-02 01:00:00,1324.5576323987539 +2012-01-02 02:00:00,1298.9283489096574 +2012-01-02 03:00:00,1254.1557632398753 +2012-01-02 04:00:00,1242.01246105919 +2012-01-02 05:00:00,1326.9501557632398 +2012-01-02 06:00:00,1533.9034267912773 +2012-01-02 07:00:00,1802.2803738317757 +2012-01-02 08:00:00,1944.6978193146417 +2012-01-02 09:00:00,2366.246105919003 +2012-01-02 10:00:00,2662.8068535825546 +2012-01-02 11:00:00,2777.601246105919 +2012-01-02 12:00:00,2940.457943925234 +2012-01-02 13:00:00,2940.3333333333335 +2012-01-02 14:00:00,2950.504672897196 +2012-01-02 15:00:00,2950.1090342679126 +2012-01-02 16:00:00,3012.1183800623053 +2012-01-02 17:00:00,3111.3489096573207 +2012-01-02 18:00:00,3326.9906542056074 +2012-01-02 19:00:00,3270.221183800623 +2012-01-02 20:00:00,3170.7881619937693 +2012-01-02 21:00:00,3067.4517133956388 +2012-01-02 22:00:00,2711.11214953271 +2012-01-02 23:00:00,2271.4922118380064 +2012-01-03 00:00:00,1756.3177570093458 +2012-01-03 01:00:00,1465.4517133956385 +2012-01-03 02:00:00,1396.778816199377 +2012-01-03 03:00:00,1337.4205607476636 +2012-01-03 04:00:00,1272.1183800623053 +2012-01-03 05:00:00,1321.6292834890967 +2012-01-03 06:00:00,1519.3738317757009 +2012-01-03 07:00:00,1819.9096573208724 +2012-01-03 08:00:00,1936.7320872274142 +2012-01-03 09:00:00,2416.386292834891 +2012-01-03 10:00:00,2696.373831775701 +2012-01-03 11:00:00,2744.5825545171338 +2012-01-03 12:00:00,2853.3956386292834 +2012-01-03 13:00:00,2914.0280373831774 +2012-01-03 14:00:00,2957.1931464174454 +2012-01-03 15:00:00,2902.4392523364486 +2012-01-03 16:00:00,2956.133956386293 +2012-01-03 17:00:00,3104.177570093458 +2012-01-03 18:00:00,3273.8380062305296 +2012-01-03 19:00:00,3259.361370716511 +2012-01-03 20:00:00,3047.2834890965732 +2012-01-03 21:00:00,2928.9345794392525 +2012-01-03 22:00:00,2703.744548286604 +2012-01-03 23:00:00,2254.1495327102803 +2012-01-04 00:00:00,1747.3084112149534 +2012-01-04 01:00:00,1440.9127725856697 +2012-01-04 02:00:00,1369.545171339564 +2012-01-04 03:00:00,1307.2242990654206 +2012-01-04 04:00:00,1238.981308411215 +2012-01-04 05:00:00,1316.202492211838 +2012-01-04 06:00:00,1529.4610591900312 +2012-01-04 07:00:00,1850.0747663551401 +2012-01-04 08:00:00,1963.785046728972 +2012-01-04 09:00:00,2421.2118380062307 +2012-01-04 10:00:00,2677.457943925234 +2012-01-04 11:00:00,2754.133956386293 +2012-01-04 12:00:00,2856.436137071651 +2012-01-04 13:00:00,2905.654205607477 +2012-01-04 14:00:00,2925.7196261682243 +2012-01-04 15:00:00,2959.697819314642 +2012-01-04 16:00:00,2997.2585669781934 +2012-01-04 17:00:00,3066.8442367601247 +2012-01-04 18:00:00,3319.97507788162 +2012-01-04 19:00:00,3293.221183800623 +2012-01-04 20:00:00,3089.6947040498444 +2012-01-04 21:00:00,2972.5295950155764 +2012-01-04 22:00:00,2754.0342679127725 +2012-01-04 23:00:00,2287.06230529595 +2012-01-05 00:00:00,1789.619937694704 +2012-01-05 01:00:00,1493.632398753894 +2012-01-05 02:00:00,1407.3271028037384 +2012-01-05 03:00:00,1351.7383177570093 +2012-01-05 04:00:00,1292.576323987539 +2012-01-05 05:00:00,1341.7538940809968 +2012-01-05 06:00:00,1541.9065420560748 +2012-01-05 07:00:00,1856.6635514018692 +2012-01-05 08:00:00,1970.607476635514 +2012-01-05 09:00:00,2403.0841121495328 +2012-01-05 10:00:00,2692.542056074766 +2012-01-05 11:00:00,2751.713395638629 +2012-01-05 12:00:00,2868.3177570093458 +2012-01-05 13:00:00,2942.6573208722743 +2012-01-05 14:00:00,2937.685358255452 +2012-01-05 15:00:00,2978.595015576324 +2012-01-05 16:00:00,2998.7943925233644 +2012-01-05 17:00:00,3107.644859813084 +2012-01-05 18:00:00,3284.059190031153 +2012-01-05 19:00:00,3281.722741433022 +2012-01-05 20:00:00,3067.9003115264795 +2012-01-05 21:00:00,2920.691588785047 +2012-01-05 22:00:00,2676.0872274143303 +2012-01-05 23:00:00,2246.4548286604363 +2012-01-06 00:00:00,1768.0031152647975 +2012-01-06 01:00:00,1458.214953271028 +2012-01-06 02:00:00,1386.03738317757 +2012-01-06 03:00:00,1325.6884735202493 +2012-01-06 04:00:00,1293.4517133956385 +2012-01-06 05:00:00,1332.3520249221183 +2012-01-06 06:00:00,1548.1900311526479 +2012-01-06 07:00:00,1877.778816199377 +2012-01-06 08:00:00,1991.2087227414331 +2012-01-06 09:00:00,2421.345794392523 +2012-01-06 10:00:00,2727.2959501557634 +2012-01-06 11:00:00,2790.0342679127725 +2012-01-06 12:00:00,2843.4766355140187 +2012-01-06 13:00:00,2932.495327102804 +2012-01-06 14:00:00,2927.2803738317757 +2012-01-06 15:00:00,2934.6510903426793 +2012-01-06 16:00:00,2996.1464174454827 +2012-01-06 17:00:00,3080.4174454828662 +2012-01-06 18:00:00,3288.090342679128 +2012-01-06 19:00:00,3265.6168224299067 +2012-01-06 20:00:00,3160.9003115264795 +2012-01-06 21:00:00,2969.323987538941 +2012-01-06 22:00:00,2761.3052959501556 +2012-01-06 23:00:00,2379.0498442367602 +2012-01-07 00:00:00,1831.398753894081 +2012-01-07 01:00:00,1499.018691588785 +2012-01-07 02:00:00,1382.7258566978194 +2012-01-07 03:00:00,1289.9096573208724 +2012-01-07 04:00:00,1250.4859813084113 +2012-01-07 05:00:00,1319.6417445482866 +2012-01-07 06:00:00,1511.2274143302182 +2012-01-07 07:00:00,1826.6884735202493 +2012-01-07 08:00:00,1924.6043613707166 +2012-01-07 09:00:00,2357.4205607476633 +2012-01-07 10:00:00,2693.669781931464 +2012-01-07 11:00:00,2755.713395638629 +2012-01-07 12:00:00,2904.1090342679126 +2012-01-07 13:00:00,2946.2367601246106 +2012-01-07 14:00:00,2910.373831775701 +2012-01-07 15:00:00,2947.286604361371 +2012-01-07 16:00:00,2978.0560747663553 +2012-01-07 17:00:00,3063.3115264797507 +2012-01-07 18:00:00,3277.595015576324 +2012-01-07 19:00:00,3240.0031152647975 +2012-01-07 20:00:00,3158.654205607477 +2012-01-07 21:00:00,3039.4205607476633 +2012-01-07 22:00:00,2734.744548286604 +2012-01-07 23:00:00,2378.7258566978194 +2012-01-08 00:00:00,1843.1433021806854 +2012-01-08 01:00:00,1516.526479750779 +2012-01-08 02:00:00,1438.0872274143303 +2012-01-08 03:00:00,1361.6168224299065 +2012-01-08 04:00:00,1233.018691588785 +2012-01-08 05:00:00,1301.6666666666667 +2012-01-08 06:00:00,1475.2834890965732 +2012-01-08 07:00:00,1789.5295950155764 +2012-01-08 08:00:00,1845.5514018691588 +2012-01-08 09:00:00,2280.8068535825546 +2012-01-08 10:00:00,2610.105919003115 +2012-01-08 11:00:00,2717.6573208722743 +2012-01-08 12:00:00,2806.8753894080996 +2012-01-08 13:00:00,2826.9532710280373 +2012-01-08 14:00:00,2826.3520249221183 +2012-01-08 15:00:00,2860.8255451713394 +2012-01-08 16:00:00,2887.177570093458 +2012-01-08 17:00:00,2992.323987538941 +2012-01-08 18:00:00,3168.489096573209 +2012-01-08 19:00:00,3123.5171339563863 +2012-01-08 20:00:00,3028.423676012461 +2012-01-08 21:00:00,2932.563862928349 +2012-01-08 22:00:00,2658.97507788162 +2012-01-08 23:00:00,2159.0404984423676 +2012-01-09 00:00:00,1642.6168224299065 +2012-01-09 01:00:00,1364.1308411214952 +2012-01-09 02:00:00,1322.582554517134 +2012-01-09 03:00:00,1276.4641744548287 +2012-01-09 04:00:00,1216.7445482866044 +2012-01-09 05:00:00,1263.2772585669782 +2012-01-09 06:00:00,1474.563862928349 +2012-01-09 07:00:00,1790.563862928349 +2012-01-09 08:00:00,1867.6915887850466 +2012-01-09 09:00:00,2333.3052959501556 +2012-01-09 10:00:00,2613.5482866043612 +2012-01-09 11:00:00,2716.392523364486 +2012-01-09 12:00:00,2733.8535825545173 +2012-01-09 13:00:00,2859.080996884735 +2012-01-09 14:00:00,2872.105919003115 +2012-01-09 15:00:00,2842.4766355140187 +2012-01-09 16:00:00,2873.133956386293 +2012-01-09 17:00:00,2971.411214953271 +2012-01-09 18:00:00,3195.542056074766 +2012-01-09 19:00:00,3192.803738317757 +2012-01-09 20:00:00,3066.791277258567 +2012-01-09 21:00:00,2881.4641744548285 +2012-01-09 22:00:00,2624.6199376947043 +2012-01-09 23:00:00,2196.9781931464177 +2012-01-10 00:00:00,1699.0965732087227 +2012-01-10 01:00:00,1414.7538940809968 +2012-01-10 02:00:00,1357.4890965732088 +2012-01-10 03:00:00,1303.9376947040498 +2012-01-10 04:00:00,1239.0591900311526 +2012-01-10 05:00:00,1306.6168224299065 +2012-01-10 06:00:00,1526.4423676012461 +2012-01-10 07:00:00,1832.3956386292834 +2012-01-10 08:00:00,1947.1090342679129 +2012-01-10 09:00:00,2355.0841121495328 +2012-01-10 10:00:00,2629.1028037383176 +2012-01-10 11:00:00,2737.4267912772584 +2012-01-10 12:00:00,2771.4392523364486 +2012-01-10 13:00:00,2881.429906542056 +2012-01-10 14:00:00,2837.4080996884736 +2012-01-10 15:00:00,2891.5451713395637 +2012-01-10 16:00:00,2899.246105919003 +2012-01-10 17:00:00,2985.202492211838 +2012-01-10 18:00:00,3232.7507788161993 +2012-01-10 19:00:00,3214.866043613707 +2012-01-10 20:00:00,3074.735202492212 +2012-01-10 21:00:00,3000.323987538941 +2012-01-10 22:00:00,2729.92523364486 +2012-01-10 23:00:00,2205.1370716510905 +2012-01-11 00:00:00,1694.3894080996886 +2012-01-11 01:00:00,1423.588785046729 +2012-01-11 02:00:00,1374.5794392523364 +2012-01-11 03:00:00,1295.9844236760125 +2012-01-11 04:00:00,1235.5358255451713 +2012-01-11 05:00:00,1292.165109034268 +2012-01-11 06:00:00,1504.177570093458 +2012-01-11 07:00:00,1833.8566978193146 +2012-01-11 08:00:00,1964.766355140187 +2012-01-11 09:00:00,2386.9906542056074 +2012-01-11 10:00:00,2671.5171339563863 +2012-01-11 11:00:00,2723.4330218068535 +2012-01-11 12:00:00,2842.8317757009345 +2012-01-11 13:00:00,2871.7102803738317 +2012-01-11 14:00:00,2854.644859813084 +2012-01-11 15:00:00,2892.2616822429904 +2012-01-11 16:00:00,2925.8847352024923 +2012-01-11 17:00:00,3013.2118380062307 +2012-01-11 18:00:00,3218.264797507788 +2012-01-11 19:00:00,3201.2056074766356 +2012-01-11 20:00:00,3094.947040498442 +2012-01-11 21:00:00,2926.1183800623053 +2012-01-11 22:00:00,2636.127725856698 +2012-01-11 23:00:00,2195.766355140187 +2012-01-12 00:00:00,1699.0155763239875 +2012-01-12 01:00:00,1421.6915887850466 +2012-01-12 02:00:00,1364.588785046729 +2012-01-12 03:00:00,1310.386292834891 +2012-01-12 04:00:00,1250.4205607476636 +2012-01-12 05:00:00,1296.3146417445482 +2012-01-12 06:00:00,1536.2866043613708 +2012-01-12 07:00:00,1830.2990654205607 +2012-01-12 08:00:00,1978.7819314641745 +2012-01-12 09:00:00,2378.1869158878503 +2012-01-12 10:00:00,2652.526479750779 +2012-01-12 11:00:00,2692.239875389408 +2012-01-12 12:00:00,2803.07476635514 +2012-01-12 13:00:00,2843.1152647975077 +2012-01-12 14:00:00,2771.8535825545173 +2012-01-12 15:00:00,2823.7383177570096 +2012-01-12 16:00:00,2865.302180685358 +2012-01-12 17:00:00,3004.8130841121497 +2012-01-12 18:00:00,3191.1401869158876 +2012-01-12 19:00:00,3174.9657320872275 +2012-01-12 20:00:00,3079.595015576324 +2012-01-12 21:00:00,2965.7414330218066 +2012-01-12 22:00:00,2727.744548286604 +2012-01-12 23:00:00,2269.7476635514017 +2012-01-13 00:00:00,1706.4984423676012 +2012-01-13 01:00:00,1428.4890965732088 +2012-01-13 02:00:00,1371.9127725856697 +2012-01-13 03:00:00,1314.8785046728972 +2012-01-13 04:00:00,1274.0155763239875 +2012-01-13 05:00:00,1348.778816199377 +2012-01-13 06:00:00,1554.760124610592 +2012-01-13 07:00:00,1861.9750778816199 +2012-01-13 08:00:00,2005.4828660436137 +2012-01-13 09:00:00,2400.4392523364486 +2012-01-13 10:00:00,2669.2741433021806 +2012-01-13 11:00:00,2716.373831775701 +2012-01-13 12:00:00,3019.9595015576324 +2012-01-13 13:00:00,2893.202492211838 +2012-01-13 14:00:00,2880.6199376947043 +2012-01-13 15:00:00,2891.947040498442 +2012-01-13 16:00:00,2926.1028037383176 +2012-01-13 17:00:00,3005.866043613707 +2012-01-13 18:00:00,3264.0218068535823 +2012-01-13 19:00:00,3214.7757009345796 +2012-01-13 20:00:00,3047.588785046729 +2012-01-13 21:00:00,2944.292834890966 +2012-01-13 22:00:00,2727.0031152647975 +2012-01-13 23:00:00,2362.5015576323985 +2012-01-14 00:00:00,1778.6697819314643 +2012-01-14 01:00:00,1482.165109034268 +2012-01-14 02:00:00,1395.3302180685357 +2012-01-14 03:00:00,1291.778816199377 +2012-01-14 04:00:00,1231.473520249221 +2012-01-14 05:00:00,1313.1495327102805 +2012-01-14 06:00:00,1516.816199376947 +2012-01-14 07:00:00,1798.6978193146417 +2012-01-14 08:00:00,1939.638629283489 +2012-01-14 09:00:00,2388.0778816199377 +2012-01-14 10:00:00,2705.01246105919 +2012-01-14 11:00:00,2770.8380062305296 +2012-01-14 12:00:00,2922.096573208723 +2012-01-14 13:00:00,2918.526479750779 +2012-01-14 14:00:00,2867.386292834891 +2012-01-14 15:00:00,2928.190031152648 +2012-01-14 16:00:00,2977.8504672897197 +2012-01-14 17:00:00,3033.760124610592 +2012-01-14 18:00:00,3254.0654205607475 +2012-01-14 19:00:00,3240.9813084112147 +2012-01-14 20:00:00,3145.367601246106 +2012-01-14 21:00:00,3049.3177570093458 +2012-01-14 22:00:00,2761.940809968847 +2012-01-14 23:00:00,2350.2429906542056 +2012-01-15 00:00:00,1809.3208722741433 +2012-01-15 01:00:00,1505.1931464174454 +2012-01-15 02:00:00,1431.6635514018692 +2012-01-15 03:00:00,1359.6635514018692 +2012-01-15 04:00:00,1243.214953271028 +2012-01-15 05:00:00,1292.2959501557632 +2012-01-15 06:00:00,1483.6760124610591 +2012-01-15 07:00:00,1795.0249221183801 +2012-01-15 08:00:00,1867.0218068535826 +2012-01-15 09:00:00,2368.5669781931465 +2012-01-15 10:00:00,2682.6791277258567 +2012-01-15 11:00:00,2747.588785046729 +2012-01-15 12:00:00,2872.355140186916 +2012-01-15 13:00:00,2885.9657320872275 +2012-01-15 14:00:00,2819.878504672897 +2012-01-15 15:00:00,2827.5669781931465 +2012-01-15 16:00:00,2884.607476635514 +2012-01-15 17:00:00,2969.07476635514 +2012-01-15 18:00:00,3136.872274143302 +2012-01-15 19:00:00,3119.0716510903426 +2012-01-15 20:00:00,2996.121495327103 +2012-01-15 21:00:00,2917.9501557632398 +2012-01-15 22:00:00,2625.8629283489095 +2012-01-15 23:00:00,2075.0 +2012-01-16 00:00:00,1671.3302180685357 +2012-01-16 01:00:00,1411.177570093458 +2012-01-16 02:00:00,1353.9345794392523 +2012-01-16 03:00:00,1315.392523364486 +2012-01-16 04:00:00,1277.632398753894 +2012-01-16 05:00:00,1373.183800623053 +2012-01-16 06:00:00,1528.9221183800623 +2012-01-16 07:00:00,1845.3769470404984 +2012-01-16 08:00:00,1972.398753894081 +2012-01-16 09:00:00,2348.4922118380064 +2012-01-16 10:00:00,2633.2118380062307 +2012-01-16 11:00:00,2703.772585669782 +2012-01-16 12:00:00,2730.822429906542 +2012-01-16 13:00:00,2815.2741433021806 +2012-01-16 14:00:00,2834.4766355140187 +2012-01-16 15:00:00,2831.7383177570096 +2012-01-16 16:00:00,2883.797507788162 +2012-01-16 17:00:00,2943.1682242990655 +2012-01-16 18:00:00,3187.165109034268 +2012-01-16 19:00:00,3166.828660436137 +2012-01-16 20:00:00,3086.0 +2012-01-16 21:00:00,2966.196261682243 +2012-01-16 22:00:00,2659.7881619937693 +2012-01-16 23:00:00,2221.3208722741433 +2012-01-17 00:00:00,1740.386292834891 +2012-01-17 01:00:00,1488.5607476635514 +2012-01-17 02:00:00,1408.545171339564 +2012-01-17 03:00:00,1336.2305295950155 +2012-01-17 04:00:00,1270.651090342679 +2012-01-17 05:00:00,1361.6261682242991 +2012-01-17 06:00:00,1527.6635514018692 +2012-01-17 07:00:00,1843.797507788162 +2012-01-17 08:00:00,1955.6292834890967 +2012-01-17 09:00:00,2342.0716510903426 +2012-01-17 10:00:00,2641.3395638629286 +2012-01-17 11:00:00,2701.448598130841 +2012-01-17 12:00:00,2791.448598130841 +2012-01-17 13:00:00,2831.5358255451715 +2012-01-17 14:00:00,2820.5669781931465 +2012-01-17 15:00:00,2864.4984423676015 +2012-01-17 16:00:00,2871.4859813084113 +2012-01-17 17:00:00,2927.563862928349 +2012-01-17 18:00:00,3208.576323987539 +2012-01-17 19:00:00,3172.3395638629286 +2012-01-17 20:00:00,3064.3177570093458 +2012-01-17 21:00:00,2957.722741433022 +2012-01-17 22:00:00,2735.4548286604363 +2012-01-17 23:00:00,2202.1619937694704 +2012-01-18 00:00:00,1710.367601246106 +2012-01-18 01:00:00,1443.1059190031153 +2012-01-18 02:00:00,1353.8971962616822 +2012-01-18 03:00:00,1286.1183800623053 +2012-01-18 04:00:00,1241.3551401869158 +2012-01-18 05:00:00,1284.7632398753894 +2012-01-18 06:00:00,1516.9252336448599 +2012-01-18 07:00:00,1829.651090342679 +2012-01-18 08:00:00,1977.8660436137072 +2012-01-18 09:00:00,2374.1931464174454 +2012-01-18 10:00:00,2638.398753894081 +2012-01-18 11:00:00,2706.669781931464 +2012-01-18 12:00:00,2764.398753894081 +2012-01-18 13:00:00,2851.1464174454827 +2012-01-18 14:00:00,2800.1744548286606 +2012-01-18 15:00:00,2863.9283489096574 +2012-01-18 16:00:00,2880.931464174455 +2012-01-18 17:00:00,2954.1308411214955 +2012-01-18 18:00:00,3186.744548286604 +2012-01-18 19:00:00,3156.713395638629 +2012-01-18 20:00:00,3064.7102803738317 +2012-01-18 21:00:00,2962.2741433021806 +2012-01-18 22:00:00,2670.336448598131 +2012-01-18 23:00:00,2191.5015576323985 +2012-01-19 00:00:00,1673.7133956386292 +2012-01-19 01:00:00,1408.4423676012461 +2012-01-19 02:00:00,1342.9750778816199 +2012-01-19 03:00:00,1286.632398753894 +2012-01-19 04:00:00,1228.3208722741433 +2012-01-19 05:00:00,1310.165109034268 +2012-01-19 06:00:00,1483.3333333333333 +2012-01-19 07:00:00,1839.1059190031153 +2012-01-19 08:00:00,1919.5981308411215 +2012-01-19 09:00:00,2355.8753894080996 +2012-01-19 10:00:00,2638.105919003115 +2012-01-19 11:00:00,2750.4766355140187 +2012-01-19 12:00:00,2863.7040498442366 +2012-01-19 13:00:00,2846.1090342679126 +2012-01-19 14:00:00,2820.601246105919 +2012-01-19 15:00:00,2850.753894080997 +2012-01-19 16:00:00,2888.5545171339563 +2012-01-19 17:00:00,2967.3115264797507 +2012-01-19 18:00:00,3212.239875389408 +2012-01-19 19:00:00,3184.9439252336447 +2012-01-19 20:00:00,3092.1401869158876 +2012-01-19 21:00:00,2994.183800623053 +2012-01-19 22:00:00,2699.6791277258567 +2012-01-19 23:00:00,2221.190031152648 +2012-01-20 00:00:00,1751.380062305296 +2012-01-20 01:00:00,1489.576323987539 +2012-01-20 02:00:00,1420.607476635514 +2012-01-20 03:00:00,1359.0747663551401 +2012-01-20 04:00:00,1317.3302180685357 +2012-01-20 05:00:00,1355.8878504672898 +2012-01-20 06:00:00,1529.4267912772586 +2012-01-20 07:00:00,1868.3707165109033 +2012-01-20 08:00:00,1996.2461059190032 +2012-01-20 09:00:00,2383.4205607476633 +2012-01-20 10:00:00,2659.190031152648 +2012-01-20 11:00:00,2705.7414330218066 +2012-01-20 12:00:00,2778.88785046729 +2012-01-20 13:00:00,2852.2523364485983 +2012-01-20 14:00:00,2901.809968847352 +2012-01-20 15:00:00,2909.5794392523367 +2012-01-20 16:00:00,2969.495327102804 +2012-01-20 17:00:00,3016.06230529595 +2012-01-20 18:00:00,3239.0716510903426 +2012-01-20 19:00:00,3242.423676012461 +2012-01-20 20:00:00,3164.6666666666665 +2012-01-20 21:00:00,3038.133956386293 +2012-01-20 22:00:00,2783.6199376947043 +2012-01-20 23:00:00,2349.956386292835 +2012-01-21 00:00:00,1785.6822429906542 +2012-01-21 01:00:00,1486.7071651090343 +2012-01-21 02:00:00,1399.1028037383178 +2012-01-21 03:00:00,1292.7414330218069 +2012-01-21 04:00:00,1255.9408099688474 +2012-01-21 05:00:00,1306.9532710280373 +2012-01-21 06:00:00,1487.3582554517134 +2012-01-21 07:00:00,1831.8317757009345 +2012-01-21 08:00:00,1914.1308411214952 +2012-01-21 09:00:00,2361.7819314641742 +2012-01-21 10:00:00,2719.8971962616824 +2012-01-21 11:00:00,2765.931464174455 +2012-01-21 12:00:00,2833.1028037383176 +2012-01-21 13:00:00,2911.9781931464177 +2012-01-21 14:00:00,2914.993769470405 +2012-01-21 15:00:00,2941.6510903426793 +2012-01-21 16:00:00,2991.4018691588785 +2012-01-21 17:00:00,2996.6822429906542 +2012-01-21 18:00:00,3245.809968847352 +2012-01-21 19:00:00,3240.822429906542 +2012-01-21 20:00:00,3128.1869158878503 +2012-01-21 21:00:00,2970.006230529595 +2012-01-21 22:00:00,2767.97507788162 +2012-01-21 23:00:00,2348.2305295950155 +2012-01-22 00:00:00,1785.4704049844236 +2012-01-22 01:00:00,1520.1557632398753 +2012-01-22 02:00:00,1448.8286604361372 +2012-01-22 03:00:00,1370.2429906542056 +2012-01-22 04:00:00,1241.4672897196263 +2012-01-22 05:00:00,1289.872274143302 +2012-01-22 06:00:00,1482.0903426791276 +2012-01-22 07:00:00,1784.5700934579438 +2012-01-22 08:00:00,1836.9501557632398 +2012-01-22 09:00:00,2324.2056074766356 +2012-01-22 10:00:00,2656.856697819315 +2012-01-22 11:00:00,2730.4392523364486 +2012-01-22 12:00:00,2825.0841121495328 +2012-01-22 13:00:00,2814.3800623052957 +2012-01-22 14:00:00,2798.0093457943926 +2012-01-22 15:00:00,2828.233644859813 +2012-01-22 16:00:00,2897.2679127725855 +2012-01-22 17:00:00,2922.9003115264795 +2012-01-22 18:00:00,3164.7102803738317 +2012-01-22 19:00:00,3157.872274143302 +2012-01-22 20:00:00,3049.068535825545 +2012-01-22 21:00:00,2876.3271028037384 +2012-01-22 22:00:00,2589.3894080996884 +2012-01-22 23:00:00,2114.4330218068535 +2012-01-23 00:00:00,1679.1806853582555 +2012-01-23 01:00:00,1399.6822429906542 +2012-01-23 02:00:00,1360.834890965732 +2012-01-23 03:00:00,1316.8660436137072 +2012-01-23 04:00:00,1268.96261682243 +2012-01-23 05:00:00,1322.5700934579438 +2012-01-23 06:00:00,1514.2180685358255 +2012-01-23 07:00:00,1826.6542056074766 +2012-01-23 08:00:00,1916.7071651090343 +2012-01-23 09:00:00,2331.2679127725855 +2012-01-23 10:00:00,2621.9595015576324 +2012-01-23 11:00:00,2691.2305295950155 +2012-01-23 12:00:00,2778.2616822429904 +2012-01-23 13:00:00,2872.1401869158876 +2012-01-23 14:00:00,2853.772585669782 +2012-01-23 15:00:00,2832.386292834891 +2012-01-23 16:00:00,2877.96261682243 +2012-01-23 17:00:00,2956.096573208723 +2012-01-23 18:00:00,3138.9813084112147 +2012-01-23 19:00:00,3180.323987538941 +2012-01-23 20:00:00,3086.11214953271 +2012-01-23 21:00:00,2891.8193146417448 +2012-01-23 22:00:00,2634.227414330218 +2012-01-23 23:00:00,2216.663551401869 +2012-01-24 00:00:00,1725.6915887850466 +2012-01-24 01:00:00,1451.8380062305296 +2012-01-24 02:00:00,1399.0031152647975 +2012-01-24 03:00:00,1339.1900311526479 +2012-01-24 04:00:00,1307.9221183800623 +2012-01-24 05:00:00,1369.0965732087227 +2012-01-24 06:00:00,1559.1059190031153 +2012-01-24 07:00:00,1862.0249221183801 +2012-01-24 08:00:00,1949.5545171339563 +2012-01-24 09:00:00,2342.744548286604 +2012-01-24 10:00:00,2628.361370716511 +2012-01-24 11:00:00,2674.1744548286606 +2012-01-24 12:00:00,2764.538940809969 +2012-01-24 13:00:00,2863.5794392523367 +2012-01-24 14:00:00,2826.8629283489095 +2012-01-24 15:00:00,2841.797507788162 +2012-01-24 16:00:00,2842.8629283489095 +2012-01-24 17:00:00,2945.92523364486 +2012-01-24 18:00:00,3164.9158878504672 +2012-01-24 19:00:00,3167.06230529595 +2012-01-24 20:00:00,2958.7476635514017 +2012-01-24 21:00:00,2861.448598130841 +2012-01-24 22:00:00,2665.878504672897 +2012-01-24 23:00:00,2207.9345794392525 +2012-01-25 00:00:00,1720.747663551402 +2012-01-25 01:00:00,1440.9345794392523 +2012-01-25 02:00:00,1389.417445482866 +2012-01-25 03:00:00,1327.9158878504672 +2012-01-25 04:00:00,1298.6791277258567 +2012-01-25 05:00:00,1374.1028037383178 +2012-01-25 06:00:00,1532.3271028037384 +2012-01-25 07:00:00,1846.2367601246106 +2012-01-25 08:00:00,1993.7320872274142 +2012-01-25 09:00:00,2346.0031152647975 +2012-01-25 10:00:00,2616.9719626168226 +2012-01-25 11:00:00,2670.1183800623053 +2012-01-25 12:00:00,2777.4828660436137 +2012-01-25 13:00:00,2866.5233644859813 +2012-01-25 14:00:00,2835.9657320872275 +2012-01-25 15:00:00,2863.919003115265 +2012-01-25 16:00:00,2844.214953271028 +2012-01-25 17:00:00,2925.1246105919004 +2012-01-25 18:00:00,3191.1152647975077 +2012-01-25 19:00:00,3175.105919003115 +2012-01-25 20:00:00,2996.3707165109035 +2012-01-25 21:00:00,2884.208722741433 +2012-01-25 22:00:00,2639.6728971962616 +2012-01-25 23:00:00,2175.753894080997 +2012-01-26 00:00:00,1683.03738317757 +2012-01-26 01:00:00,1414.3551401869158 +2012-01-26 02:00:00,1349.5576323987539 +2012-01-26 03:00:00,1287.7538940809968 +2012-01-26 04:00:00,1244.9314641744547 +2012-01-26 05:00:00,1314.252336448598 +2012-01-26 06:00:00,1537.981308411215 +2012-01-26 07:00:00,1858.8785046728972 +2012-01-26 08:00:00,1974.9501557632398 +2012-01-26 09:00:00,2360.6728971962616 +2012-01-26 10:00:00,2648.2056074766356 +2012-01-26 11:00:00,2699.878504672897 +2012-01-26 12:00:00,2815.6884735202493 +2012-01-26 13:00:00,2899.0841121495328 +2012-01-26 14:00:00,2901.177570093458 +2012-01-26 15:00:00,2898.0560747663553 +2012-01-26 16:00:00,2903.88785046729 +2012-01-26 17:00:00,2985.8255451713394 +2012-01-26 18:00:00,3219.1869158878503 +2012-01-26 19:00:00,3181.551401869159 +2012-01-26 20:00:00,2997.255451713396 +2012-01-26 21:00:00,2919.2056074766356 +2012-01-26 22:00:00,2644.143302180685 +2012-01-26 23:00:00,2197.4859813084113 +2012-01-27 00:00:00,1690.1526479750778 +2012-01-27 01:00:00,1405.2180685358255 +2012-01-27 02:00:00,1339.9595015576324 +2012-01-27 03:00:00,1253.1028037383178 +2012-01-27 04:00:00,1223.9968847352025 +2012-01-27 05:00:00,1297.7258566978194 +2012-01-27 06:00:00,1538.4953271028037 +2012-01-27 07:00:00,1832.3333333333333 +2012-01-27 08:00:00,1994.6417445482866 +2012-01-27 09:00:00,2368.866043613707 +2012-01-27 10:00:00,2654.2616822429904 +2012-01-27 11:00:00,2699.392523364486 +2012-01-27 12:00:00,2782.0872274143303 +2012-01-27 13:00:00,2843.93769470405 +2012-01-27 14:00:00,2824.8130841121497 +2012-01-27 15:00:00,2868.722741433022 +2012-01-27 16:00:00,2884.4205607476633 +2012-01-27 17:00:00,2941.3426791277257 +2012-01-27 18:00:00,3174.669781931464 +2012-01-27 19:00:00,3175.504672897196 +2012-01-27 20:00:00,3014.4080996884736 +2012-01-27 21:00:00,2913.707165109034 +2012-01-27 22:00:00,2708.1806853582552 +2012-01-27 23:00:00,2332.0934579439254 +2012-01-28 00:00:00,1756.1308411214952 +2012-01-28 01:00:00,1467.8816199376947 +2012-01-28 02:00:00,1396.8660436137072 +2012-01-28 03:00:00,1287.6168224299065 +2012-01-28 04:00:00,1240.3115264797507 +2012-01-28 05:00:00,1297.8971962616822 +2012-01-28 06:00:00,1541.4922118380061 +2012-01-28 07:00:00,1819.0591900311526 +2012-01-28 08:00:00,1932.8317757009345 +2012-01-28 09:00:00,2362.299065420561 +2012-01-28 10:00:00,2648.607476635514 +2012-01-28 11:00:00,2726.3769470404986 +2012-01-28 12:00:00,2835.557632398754 +2012-01-28 13:00:00,2903.7943925233644 +2012-01-28 14:00:00,2817.3520249221183 +2012-01-28 15:00:00,2888.5140186915887 +2012-01-28 16:00:00,2918.8971962616824 +2012-01-28 17:00:00,2935.4704049844236 +2012-01-28 18:00:00,3191.03738317757 +2012-01-28 19:00:00,3242.479750778816 +2012-01-28 20:00:00,3005.2492211838007 +2012-01-28 21:00:00,2886.8629283489095 +2012-01-28 22:00:00,2716.0778816199377 +2012-01-28 23:00:00,2326.0996884735205 +2012-01-29 00:00:00,1772.6978193146417 +2012-01-29 01:00:00,1453.4984423676012 +2012-01-29 02:00:00,1394.3707165109033 +2012-01-29 03:00:00,1324.6479750778817 +2012-01-29 04:00:00,1198.632398753894 +2012-01-29 05:00:00,1224.8255451713396 +2012-01-29 06:00:00,1452.7009345794393 +2012-01-29 07:00:00,1721.6417445482866 +2012-01-29 08:00:00,1824.7320872274142 +2012-01-29 09:00:00,2297.5794392523367 +2012-01-29 10:00:00,2622.0467289719627 +2012-01-29 11:00:00,2696.355140186916 +2012-01-29 12:00:00,2771.7383177570096 +2012-01-29 13:00:00,2793.9283489096574 +2012-01-29 14:00:00,2724.9968847352025 +2012-01-29 15:00:00,2767.2492211838007 +2012-01-29 16:00:00,2815.685358255452 +2012-01-29 17:00:00,2863.330218068536 +2012-01-29 18:00:00,3061.919003115265 +2012-01-29 19:00:00,3111.2056074766356 +2012-01-29 20:00:00,2954.1495327102803 +2012-01-29 21:00:00,2803.202492211838 +2012-01-29 22:00:00,2530.753894080997 +2012-01-29 23:00:00,2089.526479750779 +2012-01-30 00:00:00,1660.9034267912773 +2012-01-30 01:00:00,1370.7632398753894 +2012-01-30 02:00:00,1324.165109034268 +2012-01-30 03:00:00,1269.3021806853583 +2012-01-30 04:00:00,1283.2554517133956 +2012-01-30 05:00:00,1310.8442367601247 +2012-01-30 06:00:00,1537.7445482866044 +2012-01-30 07:00:00,1809.1246105919004 +2012-01-30 08:00:00,1953.8473520249222 +2012-01-30 09:00:00,2330.299065420561 +2012-01-30 10:00:00,2591.6105919003116 +2012-01-30 11:00:00,2681.4641744548285 +2012-01-30 12:00:00,2777.588785046729 +2012-01-30 13:00:00,2866.0778816199377 +2012-01-30 14:00:00,2793.676012461059 +2012-01-30 15:00:00,2860.5669781931465 +2012-01-30 16:00:00,2911.473520249221 +2012-01-30 17:00:00,2916.386292834891 +2012-01-30 18:00:00,3138.7943925233644 +2012-01-30 19:00:00,3196.7881619937693 +2012-01-30 20:00:00,3061.152647975078 +2012-01-30 21:00:00,2947.227414330218 +2012-01-30 22:00:00,2707.993769470405 +2012-01-30 23:00:00,2272.5732087227416 +2012-01-31 00:00:00,1655.2928348909657 +2012-01-31 01:00:00,1376.2118380062304 +2012-01-31 02:00:00,1323.7165109034268 +2012-01-31 03:00:00,1259.8598130841121 +2012-01-31 04:00:00,1219.8504672897195 +2012-01-31 05:00:00,1267.6635514018692 +2012-01-31 06:00:00,1479.657320872274 +2012-01-31 07:00:00,1807.803738317757 +2012-01-31 08:00:00,1961.6978193146417 +2012-01-31 09:00:00,2358.707165109034 +2012-01-31 10:00:00,2621.5451713395637 +2012-01-31 11:00:00,2714.5233644859813 +2012-01-31 12:00:00,2768.92523364486 +2012-01-31 13:00:00,2862.043613707165 +2012-01-31 14:00:00,2877.442367601246 +2012-01-31 15:00:00,2867.7258566978194 +2012-01-31 16:00:00,2872.638629283489 +2012-01-31 17:00:00,2946.7040498442366 +2012-01-31 18:00:00,3119.3426791277257 +2012-01-31 19:00:00,3193.803738317757 +2012-01-31 20:00:00,3009.856697819315 +2012-01-31 21:00:00,2881.133956386293 +2012-01-31 22:00:00,2661.461059190031 +2012-01-31 23:00:00,2172.246105919003 +2012-02-01 00:00:00,1664.3831775700935 +2012-02-01 01:00:00,1383.3520249221183 +2012-02-01 02:00:00,1342.619937694704 +2012-02-01 03:00:00,1282.2274143302182 +2012-02-01 04:00:00,1256.6853582554518 +2012-02-01 05:00:00,1331.9252336448599 +2012-02-01 06:00:00,1545.4018691588785 +2012-02-01 07:00:00,1862.8691588785048 +2012-02-01 08:00:00,2000.6479750778817 +2012-02-01 09:00:00,2376.5451713395637 +2012-02-01 10:00:00,2627.7632398753894 +2012-02-01 11:00:00,2728.841121495327 +2012-02-01 12:00:00,2784.2305295950155 +2012-02-01 13:00:00,2903.6947040498444 +2012-02-01 14:00:00,2864.9532710280373 +2012-02-01 15:00:00,2875.5856697819313 +2012-02-01 16:00:00,2921.345794392523 +2012-02-01 17:00:00,2955.1495327102803 +2012-02-01 18:00:00,3146.5295950155764 +2012-02-01 19:00:00,3178.940809968847 +2012-02-01 20:00:00,3010.588785046729 +2012-02-01 21:00:00,2898.841121495327 +2012-02-01 22:00:00,2657.6666666666665 +2012-02-01 23:00:00,2203.993769470405 +2012-02-02 00:00:00,1680.342679127726 +2012-02-02 01:00:00,1380.728971962617 +2012-02-02 02:00:00,1332.5171339563863 +2012-02-02 03:00:00,1269.8473520249222 +2012-02-02 04:00:00,1239.6261682242991 +2012-02-02 05:00:00,1303.9065420560748 +2012-02-02 06:00:00,1522.6168224299065 +2012-02-02 07:00:00,1840.8068535825546 +2012-02-02 08:00:00,1987.785046728972 +2012-02-02 09:00:00,2392.8971962616824 +2012-02-02 10:00:00,2639.993769470405 +2012-02-02 11:00:00,2699.302180685358 +2012-02-02 12:00:00,2765.2803738317757 +2012-02-02 13:00:00,2861.510903426791 +2012-02-02 14:00:00,2802.7757009345796 +2012-02-02 15:00:00,2803.0996884735205 +2012-02-02 16:00:00,2838.404984423676 +2012-02-02 17:00:00,2890.3644859813085 +2012-02-02 18:00:00,3115.158878504673 +2012-02-02 19:00:00,3157.255451713396 +2012-02-02 20:00:00,3023.9065420560746 +2012-02-02 21:00:00,2859.3395638629286 +2012-02-02 22:00:00,2631.07476635514 +2012-02-02 23:00:00,2175.6884735202493 +2012-02-03 00:00:00,1672.3520249221183 +2012-02-03 01:00:00,1377.7009345794393 +2012-02-03 02:00:00,1313.7009345794393 +2012-02-03 03:00:00,1258.0872274143303 +2012-02-03 04:00:00,1204.8411214953271 +2012-02-03 05:00:00,1264.417445482866 +2012-02-03 06:00:00,1471.619937694704 +2012-02-03 07:00:00,1798.96261682243 +2012-02-03 08:00:00,1948.2242990654206 +2012-02-03 09:00:00,2359.9221183800623 +2012-02-03 10:00:00,2613.043613707165 +2012-02-03 11:00:00,2690.8691588785045 +2012-02-03 12:00:00,2749.202492211838 +2012-02-03 13:00:00,2789.735202492212 +2012-02-03 14:00:00,2826.7632398753894 +2012-02-03 15:00:00,2842.772585669782 +2012-02-03 16:00:00,2868.3208722741433 +2012-02-03 17:00:00,2959.6791277258567 +2012-02-03 18:00:00,3110.1557632398753 +2012-02-03 19:00:00,3198.355140186916 +2012-02-03 20:00:00,3035.1464174454827 +2012-02-03 21:00:00,2885.909657320872 +2012-02-03 22:00:00,2681.314641744548 +2012-02-03 23:00:00,2310.760124610592 +2012-02-04 00:00:00,1759.8940809968847 +2012-02-04 01:00:00,1468.96261682243 +2012-02-04 02:00:00,1367.367601246106 +2012-02-04 03:00:00,1242.8255451713396 +2012-02-04 04:00:00,1162.4517133956385 +2012-02-04 05:00:00,1226.5015576323988 +2012-02-04 06:00:00,1455.747663551402 +2012-02-04 07:00:00,1733.4579439252336 +2012-02-04 08:00:00,1876.9190031152648 +2012-02-04 09:00:00,2361.834890965732 +2012-02-04 10:00:00,2640.1370716510905 +2012-02-04 11:00:00,2758.0155763239877 +2012-02-04 12:00:00,2767.006230529595 +2012-02-04 13:00:00,2739.1090342679126 +2012-02-04 14:00:00,2721.479750778816 +2012-02-04 15:00:00,2714.8816199376947 +2012-02-04 16:00:00,2794.685358255452 +2012-02-04 17:00:00,2813.6666666666665 +2012-02-04 18:00:00,3045.467289719626 +2012-02-04 19:00:00,3100.01246105919 +2012-02-04 20:00:00,3001.8847352024923 +2012-02-04 21:00:00,2866.0778816199377 +2012-02-04 22:00:00,2665.0716510903426 +2012-02-04 23:00:00,2288.8598130841124 +2012-02-05 00:00:00,1752.778816199377 +2012-02-05 01:00:00,1454.0778816199377 +2012-02-05 02:00:00,1382.7538940809968 +2012-02-05 03:00:00,1269.2056074766356 +2012-02-05 04:00:00,1151.797507788162 +2012-02-05 05:00:00,1224.981308411215 +2012-02-05 06:00:00,1449.5140186915887 +2012-02-05 07:00:00,1720.2616822429907 +2012-02-05 08:00:00,1828.601246105919 +2012-02-05 09:00:00,2314.9003115264795 +2012-02-05 10:00:00,2585.8629283489095 +2012-02-05 11:00:00,2719.8193146417448 +2012-02-05 12:00:00,2764.700934579439 +2012-02-05 13:00:00,2686.059190031153 +2012-02-05 14:00:00,2710.6884735202493 +2012-02-05 15:00:00,2690.6199376947043 +2012-02-05 16:00:00,2725.392523364486 +2012-02-05 17:00:00,2742.1806853582552 +2012-02-05 18:00:00,2956.190031152648 +2012-02-05 19:00:00,3019.392523364486 +2012-02-05 20:00:00,2934.96261682243 +2012-02-05 21:00:00,2816.940809968847 +2012-02-05 22:00:00,2531.5451713395637 +2012-02-05 23:00:00,2096.872274143302 +2012-02-06 00:00:00,1684.4922118380061 +2012-02-06 01:00:00,1398.2274143302182 +2012-02-06 02:00:00,1340.834890965732 +2012-02-06 03:00:00,1264.8691588785048 +2012-02-06 04:00:00,1238.3956386292834 +2012-02-06 05:00:00,1312.9781931464174 +2012-02-06 06:00:00,1508.613707165109 +2012-02-06 07:00:00,1792.3271028037384 +2012-02-06 08:00:00,1945.2274143302182 +2012-02-06 09:00:00,2372.1869158878503 +2012-02-06 10:00:00,2610.778816199377 +2012-02-06 11:00:00,2717.685358255452 +2012-02-06 12:00:00,2738.588785046729 +2012-02-06 13:00:00,2833.442367601246 +2012-02-06 14:00:00,2869.713395638629 +2012-02-06 15:00:00,2851.532710280374 +2012-02-06 16:00:00,2892.299065420561 +2012-02-06 17:00:00,2899.2367601246106 +2012-02-06 18:00:00,3116.221183800623 +2012-02-06 19:00:00,3191.6199376947043 +2012-02-06 20:00:00,2988.0 +2012-02-06 21:00:00,2880.4174454828662 +2012-02-06 22:00:00,2637.4018691588785 +2012-02-06 23:00:00,2171.4517133956388 +2012-02-07 00:00:00,1704.1401869158879 +2012-02-07 01:00:00,1405.4890965732088 +2012-02-07 02:00:00,1358.2585669781931 +2012-02-07 03:00:00,1272.526479750779 +2012-02-07 04:00:00,1247.01246105919 +2012-02-07 05:00:00,1334.834890965732 +2012-02-07 06:00:00,1539.271028037383 +2012-02-07 07:00:00,1847.5669781931465 +2012-02-07 08:00:00,1994.239875389408 +2012-02-07 09:00:00,2387.6168224299067 +2012-02-07 10:00:00,2633.778816199377 +2012-02-07 11:00:00,2689.0654205607475 +2012-02-07 12:00:00,2739.7196261682243 +2012-02-07 13:00:00,2830.3115264797507 +2012-02-07 14:00:00,2847.607476635514 +2012-02-07 15:00:00,2865.4018691588785 +2012-02-07 16:00:00,2879.4859813084113 +2012-02-07 17:00:00,2927.0186915887853 +2012-02-07 18:00:00,3105.196261682243 +2012-02-07 19:00:00,3163.0498442367602 +2012-02-07 20:00:00,3109.866043613707 +2012-02-07 21:00:00,2962.8006230529595 +2012-02-07 22:00:00,2694.98753894081 +2012-02-07 23:00:00,2262.6510903426793 +2012-02-08 00:00:00,1704.3052959501558 +2012-02-08 01:00:00,1349.2928348909657 +2012-02-08 02:00:00,1319.1744548286604 +2012-02-08 03:00:00,1252.2990654205607 +2012-02-08 04:00:00,1244.545171339564 +2012-02-08 05:00:00,1285.5015576323988 +2012-02-08 06:00:00,1492.2928348909657 +2012-02-08 07:00:00,1796.0093457943926 +2012-02-08 08:00:00,1954.778816199377 +2012-02-08 09:00:00,2372.3271028037384 +2012-02-08 10:00:00,2613.345794392523 +2012-02-08 11:00:00,2664.5140186915887 +2012-02-08 12:00:00,2739.3707165109035 +2012-02-08 13:00:00,2805.429906542056 +2012-02-08 14:00:00,2838.07476635514 +2012-02-08 15:00:00,2793.3769470404986 +2012-02-08 16:00:00,2825.663551401869 +2012-02-08 17:00:00,2904.0716510903426 +2012-02-08 18:00:00,3069.0560747663553 +2012-02-08 19:00:00,3144.8130841121497 +2012-02-08 20:00:00,3086.8130841121497 +2012-02-08 21:00:00,2915.713395638629 +2012-02-08 22:00:00,2687.221183800623 +2012-02-08 23:00:00,2176.2305295950155 +2012-02-09 00:00:00,1645.3457943925234 +2012-02-09 01:00:00,1342.2274143302182 +2012-02-09 02:00:00,1275.4797507788162 +2012-02-09 03:00:00,1213.0 +2012-02-09 04:00:00,1198.3956386292834 +2012-02-09 05:00:00,1291.1713395638628 +2012-02-09 06:00:00,1491.5358255451713 +2012-02-09 07:00:00,1801.3084112149534 +2012-02-09 08:00:00,1956.7414330218069 +2012-02-09 09:00:00,2334.7476635514017 +2012-02-09 10:00:00,2592.5825545171338 +2012-02-09 11:00:00,2684.1090342679126 +2012-02-09 12:00:00,2722.6510903426793 +2012-02-09 13:00:00,2823.3831775700933 +2012-02-09 14:00:00,2801.7819314641742 +2012-02-09 15:00:00,2801.3426791277257 +2012-02-09 16:00:00,2837.373831775701 +2012-02-09 17:00:00,2907.4267912772584 +2012-02-09 18:00:00,3076.638629283489 +2012-02-09 19:00:00,3132.11214953271 +2012-02-09 20:00:00,3088.0280373831774 +2012-02-09 21:00:00,2953.700934579439 +2012-02-09 22:00:00,2699.2803738317757 +2012-02-09 23:00:00,2226.3115264797507 +2012-02-10 00:00:00,1686.8878504672898 +2012-02-10 01:00:00,1381.3769470404984 +2012-02-10 02:00:00,1306.5358255451713 +2012-02-10 03:00:00,1249.9314641744547 +2012-02-10 04:00:00,1234.3457943925234 +2012-02-10 05:00:00,1303.0 +2012-02-10 06:00:00,1498.4080996884736 +2012-02-10 07:00:00,1828.6635514018692 +2012-02-10 08:00:00,1955.2616822429907 +2012-02-10 09:00:00,2401.0841121495328 +2012-02-10 10:00:00,2626.457943925234 +2012-02-10 11:00:00,2733.5981308411215 +2012-02-10 12:00:00,2803.834890965732 +2012-02-10 13:00:00,2856.931464174455 +2012-02-10 14:00:00,2812.7507788161993 +2012-02-10 15:00:00,2897.6947040498444 +2012-02-10 16:00:00,2891.9158878504672 +2012-02-10 17:00:00,3004.1028037383176 +2012-02-10 18:00:00,3082.6417445482866 +2012-02-10 19:00:00,3212.367601246106 +2012-02-10 20:00:00,3068.3271028037384 +2012-02-10 21:00:00,2898.06230529595 +2012-02-10 22:00:00,2714.654205607477 +2012-02-10 23:00:00,2318.3271028037384 +2012-02-11 00:00:00,1768.2959501557632 +2012-02-11 01:00:00,1482.165109034268 +2012-02-11 02:00:00,1395.6728971962616 +2012-02-11 03:00:00,1261.8753894080996 +2012-02-11 04:00:00,1193.7196261682243 +2012-02-11 05:00:00,1259.766355140187 +2012-02-11 06:00:00,1497.803738317757 +2012-02-11 07:00:00,1798.9283489096574 +2012-02-11 08:00:00,1931.3395638629283 +2012-02-11 09:00:00,2378.744548286604 +2012-02-11 10:00:00,2650.9906542056074 +2012-02-11 11:00:00,2775.177570093458 +2012-02-11 12:00:00,2802.121495327103 +2012-02-11 13:00:00,2850.766355140187 +2012-02-11 14:00:00,2828.461059190031 +2012-02-11 15:00:00,2905.5919003115264 +2012-02-11 16:00:00,2879.208722741433 +2012-02-11 17:00:00,2962.816199376947 +2012-02-11 18:00:00,3141.2616822429904 +2012-02-11 19:00:00,3236.834890965732 +2012-02-11 20:00:00,3067.5607476635514 +2012-02-11 21:00:00,2952.165109034268 +2012-02-11 22:00:00,2710.722741433022 +2012-02-11 23:00:00,2325.6573208722743 +2012-02-12 00:00:00,1767.4922118380061 +2012-02-12 01:00:00,1446.2305295950155 +2012-02-12 02:00:00,1377.8909657320871 +2012-02-12 03:00:00,1276.0155763239875 +2012-02-12 04:00:00,1147.0996884735202 +2012-02-12 05:00:00,1218.7445482866044 +2012-02-12 06:00:00,1411.202492211838 +2012-02-12 07:00:00,1705.613707165109 +2012-02-12 08:00:00,1812.6978193146417 +2012-02-12 09:00:00,2306.9221183800623 +2012-02-12 10:00:00,2607.878504672897 +2012-02-12 11:00:00,2701.8317757009345 +2012-02-12 12:00:00,2722.685358255452 +2012-02-12 13:00:00,2756.031152647975 +2012-02-12 14:00:00,2747.6199376947043 +2012-02-12 15:00:00,2783.7102803738317 +2012-02-12 16:00:00,2773.595015576324 +2012-02-12 17:00:00,2831.3644859813085 +2012-02-12 18:00:00,2991.707165109034 +2012-02-12 19:00:00,3024.068535825545 +2012-02-12 20:00:00,2956.7881619937693 +2012-02-12 21:00:00,2768.92523364486 +2012-02-12 22:00:00,2509.753894080997 +2012-02-12 23:00:00,2038.4890965732088 +2012-02-13 00:00:00,1598.6728971962616 +2012-02-13 01:00:00,1293.5295950155764 +2012-02-13 02:00:00,1250.056074766355 +2012-02-13 03:00:00,1208.423676012461 +2012-02-13 04:00:00,1189.760124610592 +2012-02-13 05:00:00,1260.816199376947 +2012-02-13 06:00:00,1457.2834890965732 +2012-02-13 07:00:00,1755.4423676012461 +2012-02-13 08:00:00,1900.9283489096574 +2012-02-13 09:00:00,2326.707165109034 +2012-02-13 10:00:00,2557.7570093457944 +2012-02-13 11:00:00,2663.1152647975077 +2012-02-13 12:00:00,2714.563862928349 +2012-02-13 13:00:00,2764.367601246106 +2012-02-13 14:00:00,2835.6292834890965 +2012-02-13 15:00:00,2778.92523364486 +2012-02-13 16:00:00,2809.4018691588785 +2012-02-13 17:00:00,2847.7476635514017 +2012-02-13 18:00:00,3021.0716510903426 +2012-02-13 19:00:00,3122.809968847352 +2012-02-13 20:00:00,3043.3707165109035 +2012-02-13 21:00:00,2913.8442367601247 +2012-02-13 22:00:00,2670.0654205607475 +2012-02-13 23:00:00,2346.4143302180687 +2012-02-14 00:00:00,1740.8629283489097 +2012-02-14 01:00:00,1473.2990654205607 +2012-02-14 02:00:00,1364.3021806853583 +2012-02-14 03:00:00,1294.5295950155764 +2012-02-14 04:00:00,1295.03738317757 +2012-02-14 05:00:00,1339.0996884735202 +2012-02-14 06:00:00,1506.2492211838007 +2012-02-14 07:00:00,1798.7383177570093 +2012-02-14 08:00:00,1943.9719626168223 +2012-02-14 09:00:00,2368.2523364485983 +2012-02-14 10:00:00,2588.6168224299067 +2012-02-14 11:00:00,2678.202492211838 +2012-02-14 12:00:00,2712.1183800623053 +2012-02-14 13:00:00,2768.4330218068535 +2012-02-14 14:00:00,2816.8971962616824 +2012-02-14 15:00:00,2817.92523364486 +2012-02-14 16:00:00,2831.0031152647975 +2012-02-14 17:00:00,2836.669781931464 +2012-02-14 18:00:00,3017.1993769470405 +2012-02-14 19:00:00,3149.707165109034 +2012-02-14 20:00:00,3043.1869158878503 +2012-02-14 21:00:00,2925.1183800623053 +2012-02-14 22:00:00,2658.448598130841 +2012-02-14 23:00:00,2290.0404984423676 +2012-02-15 00:00:00,1702.3831775700935 +2012-02-15 01:00:00,1354.3333333333333 +2012-02-15 02:00:00,1301.6448598130842 +2012-02-15 03:00:00,1241.0996884735202 +2012-02-15 04:00:00,1235.1619937694704 +2012-02-15 05:00:00,1312.6822429906542 +2012-02-15 06:00:00,1498.7570093457944 +2012-02-15 07:00:00,1814.5109034267912 +2012-02-15 08:00:00,1939.6292834890967 +2012-02-15 09:00:00,2328.1308411214955 +2012-02-15 10:00:00,2551.8193146417448 +2012-02-15 11:00:00,2670.2803738317757 +2012-02-15 12:00:00,2776.878504672897 +2012-02-15 13:00:00,2771.2180685358258 +2012-02-15 14:00:00,2787.404984423676 +2012-02-15 15:00:00,2747.0186915887853 +2012-02-15 16:00:00,2791.903426791277 +2012-02-15 17:00:00,2850.0996884735205 +2012-02-15 18:00:00,2989.07476635514 +2012-02-15 19:00:00,3118.277258566978 +2012-02-15 20:00:00,3028.2679127725855 +2012-02-15 21:00:00,2953.7507788161993 +2012-02-15 22:00:00,2686.1869158878503 +2012-02-15 23:00:00,2279.1401869158876 +2012-02-16 00:00:00,1719.7133956386292 +2012-02-16 01:00:00,1384.526479750779 +2012-02-16 02:00:00,1318.8317757009345 +2012-02-16 03:00:00,1263.7320872274142 +2012-02-16 04:00:00,1236.9844236760125 +2012-02-16 05:00:00,1278.785046728972 +2012-02-16 06:00:00,1480.6884735202493 +2012-02-16 07:00:00,1797.6697819314643 +2012-02-16 08:00:00,1925.5015576323988 +2012-02-16 09:00:00,2320.423676012461 +2012-02-16 10:00:00,2558.133956386293 +2012-02-16 11:00:00,2652.766355140187 +2012-02-16 12:00:00,2672.0280373831774 +2012-02-16 13:00:00,2734.7320872274145 +2012-02-16 14:00:00,2802.121495327103 +2012-02-16 15:00:00,2809.4922118380064 +2012-02-16 16:00:00,2803.947040498442 +2012-02-16 17:00:00,2843.8068535825546 +2012-02-16 18:00:00,3028.8255451713394 +2012-02-16 19:00:00,3155.5295950155764 +2012-02-16 20:00:00,3055.0155763239877 +2012-02-16 21:00:00,2871.059190031153 +2012-02-16 22:00:00,2618.286604361371 +2012-02-16 23:00:00,2212.3489096573207 +2012-02-17 00:00:00,1718.1495327102805 +2012-02-17 01:00:00,1434.981308411215 +2012-02-17 02:00:00,1365.2429906542056 +2012-02-17 03:00:00,1304.031152647975 +2012-02-17 04:00:00,1305.1806853582555 +2012-02-17 05:00:00,1332.8006230529595 +2012-02-17 06:00:00,1555.8629283489097 +2012-02-17 07:00:00,1818.2990654205607 +2012-02-17 08:00:00,1970.5171339563863 +2012-02-17 09:00:00,2344.816199376947 +2012-02-17 10:00:00,2578.588785046729 +2012-02-17 11:00:00,2655.7258566978194 +2012-02-17 12:00:00,2744.3333333333335 +2012-02-17 13:00:00,2825.601246105919 +2012-02-17 14:00:00,2836.2305295950155 +2012-02-17 15:00:00,2817.01246105919 +2012-02-17 16:00:00,2841.613707165109 +2012-02-17 17:00:00,2906.1619937694704 +2012-02-17 18:00:00,3023.9781931464177 +2012-02-17 19:00:00,3148.0342679127725 +2012-02-17 20:00:00,2997.1401869158876 +2012-02-17 21:00:00,2875.785046728972 +2012-02-17 22:00:00,2705.88785046729 +2012-02-17 23:00:00,2326.532710280374 +2012-02-18 00:00:00,1787.1682242990655 +2012-02-18 01:00:00,1464.6947040498442 +2012-02-18 02:00:00,1385.2647975077882 +2012-02-18 03:00:00,1263.1339563862928 +2012-02-18 04:00:00,1211.3582554517134 +2012-02-18 05:00:00,1251.5919003115264 +2012-02-18 06:00:00,1441.3364485981308 +2012-02-18 07:00:00,1764.6292834890967 +2012-02-18 08:00:00,1925.526479750779 +2012-02-18 09:00:00,2312.828660436137 +2012-02-18 10:00:00,2616.676012461059 +2012-02-18 11:00:00,2694.177570093458 +2012-02-18 12:00:00,2795.532710280374 +2012-02-18 13:00:00,2771.264797507788 +2012-02-18 14:00:00,2815.9127725856697 +2012-02-18 15:00:00,2828.4859813084113 +2012-02-18 16:00:00,2840.5295950155764 +2012-02-18 17:00:00,2903.0342679127725 +2012-02-18 18:00:00,3049.2118380062307 +2012-02-18 19:00:00,3168.4080996884736 +2012-02-18 20:00:00,3012.1183800623053 +2012-02-18 21:00:00,2854.429906542056 +2012-02-18 22:00:00,2659.8006230529595 +2012-02-18 23:00:00,2304.7943925233644 +2012-02-19 00:00:00,1789.2242990654206 +2012-02-19 01:00:00,1484.0 +2012-02-19 02:00:00,1413.3208722741433 +2012-02-19 03:00:00,1318.1900311526479 +2012-02-19 04:00:00,1205.0155763239875 +2012-02-19 05:00:00,1237.1401869158879 +2012-02-19 06:00:00,1425.638629283489 +2012-02-19 07:00:00,1723.5607476635514 +2012-02-19 08:00:00,1829.6791277258567 +2012-02-19 09:00:00,2311.816199376947 +2012-02-19 10:00:00,2567.4517133956388 +2012-02-19 11:00:00,2676.6573208722743 +2012-02-19 12:00:00,2697.760124610592 +2012-02-19 13:00:00,2709.423676012461 +2012-02-19 14:00:00,2654.6043613707166 +2012-02-19 15:00:00,2688.9906542056074 +2012-02-19 16:00:00,2705.398753894081 +2012-02-19 17:00:00,2736.6666666666665 +2012-02-19 18:00:00,2886.3831775700933 +2012-02-19 19:00:00,3029.700934579439 +2012-02-19 20:00:00,2876.7819314641742 +2012-02-19 21:00:00,2753.208722741433 +2012-02-19 22:00:00,2495.6510903426793 +2012-02-19 23:00:00,2050.8816199376947 +2012-02-20 00:00:00,1605.1588785046729 +2012-02-20 01:00:00,1319.4828660436137 +2012-02-20 02:00:00,1266.9158878504672 +2012-02-20 03:00:00,1221.4517133956385 +2012-02-20 04:00:00,1205.0591900311526 +2012-02-20 05:00:00,1257.8068535825546 +2012-02-20 06:00:00,1485.5669781931465 +2012-02-20 07:00:00,1766.5482866043615 +2012-02-20 08:00:00,1899.1183800623053 +2012-02-20 09:00:00,2301.2523364485983 +2012-02-20 10:00:00,2570.11214953271 +2012-02-20 11:00:00,2692.448598130841 +2012-02-20 12:00:00,2761.791277258567 +2012-02-20 13:00:00,2794.323987538941 +2012-02-20 14:00:00,2750.196261682243 +2012-02-20 15:00:00,2801.638629283489 +2012-02-20 16:00:00,2829.292834890966 +2012-02-20 17:00:00,2865.760124610592 +2012-02-20 18:00:00,2984.947040498442 +2012-02-20 19:00:00,3119.940809968847 +2012-02-20 20:00:00,2986.3052959501556 +2012-02-20 21:00:00,2839.043613707165 +2012-02-20 22:00:00,2633.143302180685 +2012-02-20 23:00:00,2251.0404984423676 +2012-02-21 00:00:00,1754.127725856698 +2012-02-21 01:00:00,1417.822429906542 +2012-02-21 02:00:00,1353.9345794392523 +2012-02-21 03:00:00,1266.0436137071652 +2012-02-21 04:00:00,1259.1246105919004 +2012-02-21 05:00:00,1277.3738317757009 +2012-02-21 06:00:00,1502.632398753894 +2012-02-21 07:00:00,1747.3115264797507 +2012-02-21 08:00:00,1868.576323987539 +2012-02-21 09:00:00,2230.9065420560746 +2012-02-21 10:00:00,2556.0031152647975 +2012-02-21 11:00:00,2658.691588785047 +2012-02-21 12:00:00,2695.4018691588785 +2012-02-21 13:00:00,2737.6417445482866 +2012-02-21 14:00:00,2906.8255451713394 +2012-02-21 15:00:00,2787.9719626168226 +2012-02-21 16:00:00,2820.7694704049845 +2012-02-21 17:00:00,2874.165109034268 +2012-02-21 18:00:00,2988.448598130841 +2012-02-21 19:00:00,3128.323987538941 +2012-02-21 20:00:00,2917.0560747663553 +2012-02-21 21:00:00,2825.93769470405 +2012-02-21 22:00:00,2570.841121495327 +2012-02-21 23:00:00,2095.006230529595 +2012-02-22 00:00:00,1667.454828660436 +2012-02-22 01:00:00,1374.0716510903426 +2012-02-22 02:00:00,1315.7507788161993 +2012-02-22 03:00:00,1266.3582554517134 +2012-02-22 04:00:00,1238.8317757009345 +2012-02-22 05:00:00,1259.9065420560748 +2012-02-22 06:00:00,1486.760124610592 +2012-02-22 07:00:00,1768.031152647975 +2012-02-22 08:00:00,1911.411214953271 +2012-02-22 09:00:00,2335.3707165109035 +2012-02-22 10:00:00,2590.392523364486 +2012-02-22 11:00:00,2657.264797507788 +2012-02-22 12:00:00,2793.090342679128 +2012-02-22 13:00:00,2849.398753894081 +2012-02-22 14:00:00,2858.9003115264795 +2012-02-22 15:00:00,2869.1464174454827 +2012-02-22 16:00:00,2877.713395638629 +2012-02-22 17:00:00,2874.06230529595 +2012-02-22 18:00:00,3030.685358255452 +2012-02-22 19:00:00,3148.607476635514 +2012-02-22 20:00:00,3048.0934579439254 +2012-02-22 21:00:00,2935.7165109034268 +2012-02-22 22:00:00,2626.4080996884736 +2012-02-22 23:00:00,2229.01246105919 +2012-02-23 00:00:00,1691.6978193146417 +2012-02-23 01:00:00,1378.4672897196263 +2012-02-23 02:00:00,1298.8598130841121 +2012-02-23 03:00:00,1269.8753894080996 +2012-02-23 04:00:00,1237.6355140186915 +2012-02-23 05:00:00,1297.1433021806854 +2012-02-23 06:00:00,1509.0872274143303 +2012-02-23 07:00:00,1793.2990654205607 +2012-02-23 08:00:00,1907.8504672897195 +2012-02-23 09:00:00,2339.9781931464177 +2012-02-23 10:00:00,2595.292834890966 +2012-02-23 11:00:00,2679.8753894080996 +2012-02-23 12:00:00,2724.1682242990655 +2012-02-23 13:00:00,2764.165109034268 +2012-02-23 14:00:00,2835.9345794392525 +2012-02-23 15:00:00,2896.8629283489095 +2012-02-23 16:00:00,2915.386292834891 +2012-02-23 17:00:00,2918.0218068535823 +2012-02-23 18:00:00,3028.404984423676 +2012-02-23 19:00:00,3124.4641744548285 +2012-02-23 20:00:00,2980.1869158878503 +2012-02-23 21:00:00,2863.7819314641742 +2012-02-23 22:00:00,2637.638629283489 +2012-02-23 23:00:00,2217.9906542056074 +2012-02-24 00:00:00,1708.6822429906542 +2012-02-24 01:00:00,1375.7819314641745 +2012-02-24 02:00:00,1304.6230529595016 +2012-02-24 03:00:00,1260.367601246106 +2012-02-24 04:00:00,1270.9750778816199 +2012-02-24 05:00:00,1334.4984423676012 +2012-02-24 06:00:00,1527.0155763239875 +2012-02-24 07:00:00,1779.6853582554518 +2012-02-24 08:00:00,1935.98753894081 +2012-02-24 09:00:00,2347.6168224299067 +2012-02-24 10:00:00,2586.052959501558 +2012-02-24 11:00:00,2663.3208722741433 +2012-02-24 12:00:00,2787.442367601246 +2012-02-24 13:00:00,2864.3426791277257 +2012-02-24 14:00:00,2866.9719626168226 +2012-02-24 15:00:00,2856.1993769470405 +2012-02-24 16:00:00,2896.903426791277 +2012-02-24 17:00:00,2933.0716510903426 +2012-02-24 18:00:00,3052.632398753894 +2012-02-24 19:00:00,3160.7632398753894 +2012-02-24 20:00:00,3131.654205607477 +2012-02-24 21:00:00,2985.791277258567 +2012-02-24 22:00:00,2701.1619937694704 +2012-02-24 23:00:00,2359.3333333333335 +2012-02-25 00:00:00,1806.239875389408 +2012-02-25 01:00:00,1508.613707165109 +2012-02-25 02:00:00,1413.8566978193146 +2012-02-25 03:00:00,1304.214953271028 +2012-02-25 04:00:00,1243.6822429906542 +2012-02-25 05:00:00,1298.7725856697818 +2012-02-25 06:00:00,1464.0685358255453 +2012-02-25 07:00:00,1763.5981308411215 +2012-02-25 08:00:00,1902.3146417445482 +2012-02-25 09:00:00,2294.3177570093458 +2012-02-25 10:00:00,2623.4330218068535 +2012-02-25 11:00:00,2713.8598130841124 +2012-02-25 12:00:00,2824.8816199376947 +2012-02-25 13:00:00,2911.0467289719627 +2012-02-25 14:00:00,2885.6230529595014 +2012-02-25 15:00:00,2866.3956386292834 +2012-02-25 16:00:00,2928.557632398754 +2012-02-25 17:00:00,2926.6510903426793 +2012-02-25 18:00:00,3046.059190031153 +2012-02-25 19:00:00,3211.043613707165 +2012-02-25 20:00:00,3037.557632398754 +2012-02-25 21:00:00,2905.246105919003 +2012-02-25 22:00:00,2698.330218068536 +2012-02-25 23:00:00,2321.919003115265 +2012-02-26 00:00:00,1800.1931464174454 +2012-02-26 01:00:00,1495.386292834891 +2012-02-26 02:00:00,1405.9190031152648 +2012-02-26 03:00:00,1325.8971962616822 +2012-02-26 04:00:00,1220.473520249221 +2012-02-26 05:00:00,1255.4330218068535 +2012-02-26 06:00:00,1427.3208722741433 +2012-02-26 07:00:00,1714.4859813084113 +2012-02-26 08:00:00,1820.2928348909657 +2012-02-26 09:00:00,2266.1401869158876 +2012-02-26 10:00:00,2609.940809968847 +2012-02-26 11:00:00,2726.3333333333335 +2012-02-26 12:00:00,2825.644859813084 +2012-02-26 13:00:00,2850.227414330218 +2012-02-26 14:00:00,2820.6728971962616 +2012-02-26 15:00:00,2836.467289719626 +2012-02-26 16:00:00,2845.7383177570096 +2012-02-26 17:00:00,2884.828660436137 +2012-02-26 18:00:00,2949.7040498442366 +2012-02-26 19:00:00,3102.8317757009345 +2012-02-26 20:00:00,2963.785046728972 +2012-02-26 21:00:00,2829.8753894080996 +2012-02-26 22:00:00,2529.778816199377 +2012-02-26 23:00:00,2059.429906542056 +2012-02-27 00:00:00,1633.9190031152648 +2012-02-27 01:00:00,1355.526479750779 +2012-02-27 02:00:00,1292.8909657320871 +2012-02-27 03:00:00,1266.423676012461 +2012-02-27 04:00:00,1252.4392523364486 +2012-02-27 05:00:00,1301.2679127725858 +2012-02-27 06:00:00,1510.7009345794393 +2012-02-27 07:00:00,1756.0218068535826 +2012-02-27 08:00:00,1891.7196261682243 +2012-02-27 09:00:00,2284.214953271028 +2012-02-27 10:00:00,2558.7507788161993 +2012-02-27 11:00:00,2669.214953271028 +2012-02-27 12:00:00,2799.7320872274145 +2012-02-27 13:00:00,2833.6728971962616 +2012-02-27 14:00:00,2836.11214953271 +2012-02-27 15:00:00,2823.031152647975 +2012-02-27 16:00:00,2922.9065420560746 +2012-02-27 17:00:00,2930.068535825545 +2012-02-27 18:00:00,3019.4766355140187 +2012-02-27 19:00:00,3151.98753894081 +2012-02-27 20:00:00,3081.2180685358258 +2012-02-27 21:00:00,2983.8006230529595 +2012-02-27 22:00:00,2744.096573208723 +2012-02-27 23:00:00,2261.7040498442366 +2012-02-28 00:00:00,1728.601246105919 +2012-02-28 01:00:00,1409.1619937694704 +2012-02-28 02:00:00,1339.6292834890967 +2012-02-28 03:00:00,1296.6105919003114 +2012-02-28 04:00:00,1280.0498442367602 +2012-02-28 05:00:00,1340.423676012461 +2012-02-28 06:00:00,1507.582554517134 +2012-02-28 07:00:00,1782.9408099688474 +2012-02-28 08:00:00,1900.2741433021806 +2012-02-28 09:00:00,2329.570093457944 +2012-02-28 10:00:00,2594.177570093458 +2012-02-28 11:00:00,2725.791277258567 +2012-02-28 12:00:00,2797.791277258567 +2012-02-28 13:00:00,2850.196261682243 +2012-02-28 14:00:00,2866.700934579439 +2012-02-28 15:00:00,2853.467289719626 +2012-02-28 16:00:00,2892.785046728972 +2012-02-28 17:00:00,2921.3115264797507 +2012-02-28 18:00:00,3018.3769470404986 +2012-02-28 19:00:00,3171.654205607477 +2012-02-28 20:00:00,3024.563862928349 +2012-02-28 21:00:00,2863.557632398754 +2012-02-28 22:00:00,2628.3707165109035 +2012-02-28 23:00:00,2138.467289719626 +2012-02-29 00:00:00,1675.6947040498442 +2012-02-29 01:00:00,1378.8660436137072 +2012-02-29 02:00:00,1313.2741433021806 +2012-02-29 03:00:00,1263.9190031152648 +2012-02-29 04:00:00,1244.6697819314643 +2012-02-29 05:00:00,1287.2928348909657 +2012-02-29 06:00:00,1490.8286604361372 +2012-02-29 07:00:00,1780.8255451713396 +2012-02-29 08:00:00,1909.1744548286604 +2012-02-29 09:00:00,2319.080996884735 +2012-02-29 10:00:00,2602.1090342679126 +2012-02-29 11:00:00,2677.532710280374 +2012-02-29 12:00:00,2826.9657320872275 +2012-02-29 13:00:00,2860.947040498442 +2012-02-29 14:00:00,2859.314641744548 +2012-02-29 15:00:00,2837.722741433022 +2012-02-29 16:00:00,2930.1869158878503 +2012-02-29 17:00:00,2908.9158878504672 +2012-02-29 18:00:00,3015.9968847352025 +2012-02-29 19:00:00,3145.11214953271 +2012-02-29 20:00:00,2977.532710280374 +2012-02-29 21:00:00,2897.7258566978194 +2012-02-29 22:00:00,2624.3582554517134 +2012-02-29 23:00:00,2223.956386292835 +2012-03-01 00:00:00,1664.4205607476636 +2012-03-01 01:00:00,1348.0093457943926 +2012-03-01 02:00:00,1283.803738317757 +2012-03-01 03:00:00,1258.2928348909657 +2012-03-01 04:00:00,1260.1308411214952 +2012-03-01 05:00:00,1292.9221183800623 +2012-03-01 06:00:00,1472.380062305296 +2012-03-01 07:00:00,1789.7725856697818 +2012-03-01 08:00:00,1903.177570093458 +2012-03-01 09:00:00,2341.127725856698 +2012-03-01 10:00:00,2596.3644859813085 +2012-03-01 11:00:00,2677.461059190031 +2012-03-01 12:00:00,2808.8193146417448 +2012-03-01 13:00:00,2875.728971962617 +2012-03-01 14:00:00,2842.0716510903426 +2012-03-01 15:00:00,2851.7881619937693 +2012-03-01 16:00:00,2881.8629283489095 +2012-03-01 17:00:00,2918.323987538941 +2012-03-01 18:00:00,3040.4517133956388 +2012-03-01 19:00:00,3159.2679127725855 +2012-03-01 20:00:00,3057.1028037383176 +2012-03-01 21:00:00,2949.576323987539 +2012-03-01 22:00:00,2659.133956386293 +2012-03-01 23:00:00,2205.264797507788 +2012-03-02 00:00:00,1678.582554517134 +2012-03-02 01:00:00,1370.404984423676 +2012-03-02 02:00:00,1310.3364485981308 +2012-03-02 03:00:00,1274.386292834891 +2012-03-02 04:00:00,1254.7352024922118 +2012-03-02 05:00:00,1307.595015576324 +2012-03-02 06:00:00,1482.4080996884736 +2012-03-02 07:00:00,1777.5981308411215 +2012-03-02 08:00:00,1898.3302180685357 +2012-03-02 09:00:00,2329.669781931464 +2012-03-02 10:00:00,2645.3395638629286 +2012-03-02 11:00:00,2735.1744548286606 +2012-03-02 12:00:00,2811.760124610592 +2012-03-02 13:00:00,2885.8380062305296 +2012-03-02 14:00:00,2880.919003115265 +2012-03-02 15:00:00,2908.772585669782 +2012-03-02 16:00:00,2933.3831775700933 +2012-03-02 17:00:00,2954.4174454828662 +2012-03-02 18:00:00,3015.931464174455 +2012-03-02 19:00:00,3184.1308411214955 +2012-03-02 20:00:00,3084.3707165109035 +2012-03-02 21:00:00,2907.809968847352 +2012-03-02 22:00:00,2772.3115264797507 +2012-03-02 23:00:00,2342.3426791277257 +2012-03-03 00:00:00,1810.8193146417445 +2012-03-03 01:00:00,1507.9501557632398 +2012-03-03 02:00:00,1395.5358255451713 +2012-03-03 03:00:00,1284.8660436137072 +2012-03-03 04:00:00,1261.0249221183801 +2012-03-03 05:00:00,1321.0342679127725 +2012-03-03 06:00:00,1481.601246105919 +2012-03-03 07:00:00,1750.1370716510903 +2012-03-03 08:00:00,1858.943925233645 +2012-03-03 09:00:00,2321.4641744548285 +2012-03-03 10:00:00,2657.2585669781934 +2012-03-03 11:00:00,2777.448598130841 +2012-03-03 12:00:00,2883.822429906542 +2012-03-03 13:00:00,2898.92523364486 +2012-03-03 14:00:00,2897.4392523364486 +2012-03-03 15:00:00,2926.9968847352025 +2012-03-03 16:00:00,2950.6292834890965 +2012-03-03 17:00:00,2953.2523364485983 +2012-03-03 18:00:00,3077.006230529595 +2012-03-03 19:00:00,3215.601246105919 +2012-03-03 20:00:00,3140.6728971962616 +2012-03-03 21:00:00,3007.227414330218 +2012-03-03 22:00:00,2836.233644859813 +2012-03-03 23:00:00,2469.9127725856697 +2012-03-04 00:00:00,1860.1588785046729 +2012-03-04 01:00:00,1542.239875389408 +2012-03-04 02:00:00,1463.8442367601247 +2012-03-04 03:00:00,1386.4797507788162 +2012-03-04 04:00:00,1256.3084112149534 +2012-03-04 05:00:00,1297.4922118380061 +2012-03-04 06:00:00,1532.4423676012461 +2012-03-04 07:00:00,1735.127725856698 +2012-03-04 08:00:00,1821.9065420560748 +2012-03-04 09:00:00,2313.8380062305296 +2012-03-04 10:00:00,2641.542056074766 +2012-03-04 11:00:00,2773.386292834891 +2012-03-04 12:00:00,2872.330218068536 +2012-03-04 13:00:00,2825.1869158878503 +2012-03-04 14:00:00,2831.2429906542056 +2012-03-04 15:00:00,2861.0 +2012-03-04 16:00:00,2881.355140186916 +2012-03-04 17:00:00,2881.88785046729 +2012-03-04 18:00:00,2960.3052959501556 +2012-03-04 19:00:00,3169.1869158878503 +2012-03-04 20:00:00,3030.691588785047 +2012-03-04 21:00:00,2942.8380062305296 +2012-03-04 22:00:00,2679.0280373831774 +2012-03-04 23:00:00,2169.489096573209 +2012-03-05 00:00:00,1666.6666666666667 +2012-03-05 01:00:00,1346.8473520249222 +2012-03-05 02:00:00,1289.601246105919 +2012-03-05 03:00:00,1259.6915887850466 +2012-03-05 04:00:00,1233.7196261682243 +2012-03-05 05:00:00,1307.3333333333333 +2012-03-05 06:00:00,1510.968847352025 +2012-03-05 07:00:00,1739.4797507788162 +2012-03-05 08:00:00,1806.5545171339563 +2012-03-05 09:00:00,2246.878504672897 +2012-03-05 10:00:00,2602.6884735202493 +2012-03-05 11:00:00,2779.903426791277 +2012-03-05 12:00:00,2773.866043613707 +2012-03-05 13:00:00,2876.1744548286606 +2012-03-05 14:00:00,2871.196261682243 +2012-03-05 15:00:00,2885.5233644859813 +2012-03-05 16:00:00,2912.6230529595014 +2012-03-05 17:00:00,2890.947040498442 +2012-03-05 18:00:00,2986.542056074766 +2012-03-05 19:00:00,3168.398753894081 +2012-03-05 20:00:00,3080.1557632398753 +2012-03-05 21:00:00,2971.744548286604 +2012-03-05 22:00:00,2626.4828660436137 +2012-03-05 23:00:00,2218.98753894081 +2012-03-06 00:00:00,1693.7819314641745 +2012-03-06 01:00:00,1404.3395638629283 +2012-03-06 02:00:00,1344.9719626168223 +2012-03-06 03:00:00,1299.4205607476636 +2012-03-06 04:00:00,1263.1993769470405 +2012-03-06 05:00:00,1336.0249221183801 +2012-03-06 06:00:00,1521.8847352024923 +2012-03-06 07:00:00,1780.0436137071652 +2012-03-06 08:00:00,1892.582554517134 +2012-03-06 09:00:00,2294.7165109034268 +2012-03-06 10:00:00,2568.308411214953 +2012-03-06 11:00:00,2675.5077881619936 +2012-03-06 12:00:00,2799.202492211838 +2012-03-06 13:00:00,2844.803738317757 +2012-03-06 14:00:00,2851.3520249221183 +2012-03-06 15:00:00,2862.8068535825546 +2012-03-06 16:00:00,2867.9532710280373 +2012-03-06 17:00:00,2900.07476635514 +2012-03-06 18:00:00,2991.0654205607475 +2012-03-06 19:00:00,3155.06230529595 +2012-03-06 20:00:00,3043.0654205607475 +2012-03-06 21:00:00,2966.7383177570096 +2012-03-06 22:00:00,2782.264797507788 +2012-03-06 23:00:00,2322.0996884735205 +2012-03-07 00:00:00,1721.7943925233644 +2012-03-07 01:00:00,1393.8847352024923 +2012-03-07 02:00:00,1321.8691588785048 +2012-03-07 03:00:00,1269.398753894081 +2012-03-07 04:00:00,1245.0623052959502 +2012-03-07 05:00:00,1333.0654205607477 +2012-03-07 06:00:00,1513.2118380062304 +2012-03-07 07:00:00,1799.3644859813085 +2012-03-07 08:00:00,1911.9750778816199 +2012-03-07 09:00:00,2276.5732087227416 +2012-03-07 10:00:00,2580.644859813084 +2012-03-07 11:00:00,2726.6510903426793 +2012-03-07 12:00:00,2832.542056074766 +2012-03-07 13:00:00,2844.4174454828662 +2012-03-07 14:00:00,2858.4704049844236 +2012-03-07 15:00:00,2881.302180685358 +2012-03-07 16:00:00,2905.429906542056 +2012-03-07 17:00:00,2948.5171339563863 +2012-03-07 18:00:00,3006.93769470405 +2012-03-07 19:00:00,3156.5669781931465 +2012-03-07 20:00:00,3074.6791277258567 +2012-03-07 21:00:00,2971.11214953271 +2012-03-07 22:00:00,2749.1993769470405 +2012-03-07 23:00:00,2295.1370716510905 +2012-03-08 00:00:00,1732.271028037383 +2012-03-08 01:00:00,1412.8130841121495 +2012-03-08 02:00:00,1376.9844236760125 +2012-03-08 03:00:00,1310.6760124610591 +2012-03-08 04:00:00,1279.803738317757 +2012-03-08 05:00:00,1322.4984423676012 +2012-03-08 06:00:00,1527.2274143302182 +2012-03-08 07:00:00,1796.3551401869158 +2012-03-08 08:00:00,1894.031152647975 +2012-03-08 09:00:00,2286.367601246106 +2012-03-08 10:00:00,2615.0996884735205 +2012-03-08 11:00:00,2709.2242990654204 +2012-03-08 12:00:00,2748.442367601246 +2012-03-08 13:00:00,2967.096573208723 +2012-03-08 14:00:00,3005.8317757009345 +2012-03-08 15:00:00,2999.277258566978 +2012-03-08 16:00:00,2999.7570093457944 +2012-03-08 17:00:00,3040.797507788162 +2012-03-08 18:00:00,3045.816199376947 +2012-03-08 19:00:00,3194.442367601246 +2012-03-08 20:00:00,3109.0716510903426 +2012-03-08 21:00:00,3040.7258566978194 +2012-03-08 22:00:00,2745.8971962616824 +2012-03-08 23:00:00,2202.221183800623 +2012-03-09 00:00:00,1713.380062305296 +2012-03-09 01:00:00,1450.9781931464174 +2012-03-09 02:00:00,1349.0093457943926 +2012-03-09 03:00:00,1317.7320872274142 +2012-03-09 04:00:00,1275.822429906542 +2012-03-09 05:00:00,1315.582554517134 +2012-03-09 06:00:00,1518.760124610592 +2012-03-09 07:00:00,1766.392523364486 +2012-03-09 08:00:00,1859.0467289719627 +2012-03-09 09:00:00,2282.6355140186915 +2012-03-09 10:00:00,2557.0560747663553 +2012-03-09 11:00:00,2841.803738317757 +2012-03-09 12:00:00,2878.9813084112147 +2012-03-09 13:00:00,2879.8130841121497 +2012-03-09 14:00:00,2904.105919003115 +2012-03-09 15:00:00,2895.02492211838 +2012-03-09 16:00:00,2962.8753894080996 +2012-03-09 17:00:00,2980.404984423676 +2012-03-09 18:00:00,2991.5451713395637 +2012-03-09 19:00:00,3187.797507788162 +2012-03-09 20:00:00,3117.4548286604363 +2012-03-09 21:00:00,3004.5451713395637 +2012-03-09 22:00:00,2747.707165109034 +2012-03-09 23:00:00,2361.4392523364486 +2012-03-10 00:00:00,1830.7912772585669 +2012-03-10 01:00:00,1546.0872274143303 +2012-03-10 02:00:00,1447.4953271028037 +2012-03-10 03:00:00,1339.6417445482866 +2012-03-10 04:00:00,1288.3395638629283 +2012-03-10 05:00:00,1303.0342679127725 +2012-03-10 06:00:00,1501.9345794392523 +2012-03-10 07:00:00,1752.545171339564 +2012-03-10 08:00:00,1832.2492211838007 +2012-03-10 09:00:00,2267.068535825545 +2012-03-10 10:00:00,2641.436137071651 +2012-03-10 11:00:00,2800.601246105919 +2012-03-10 12:00:00,2902.2616822429904 +2012-03-10 13:00:00,2885.323987538941 +2012-03-10 14:00:00,2891.2897196261683 +2012-03-10 15:00:00,2942.7943925233644 +2012-03-10 16:00:00,2960.5607476635514 +2012-03-10 17:00:00,2955.866043613707 +2012-03-10 18:00:00,2980.7320872274145 +2012-03-10 19:00:00,3187.663551401869 +2012-03-10 20:00:00,3090.563862928349 +2012-03-10 21:00:00,3008.6105919003116 +2012-03-10 22:00:00,2790.6604361370714 +2012-03-10 23:00:00,2428.264797507788 +2012-03-11 00:00:00,1840.9968847352025 +2012-03-11 01:00:00,1517.4672897196263 +2012-03-11 02:00:00,1440.9190031152648 +2012-03-11 03:00:00,1367.5077881619939 +2012-03-11 04:00:00,1241.8442367601247 +2012-03-11 05:00:00,1272.1401869158879 +2012-03-11 06:00:00,1484.5545171339563 +2012-03-11 07:00:00,1710.7165109034268 +2012-03-11 08:00:00,1777.8193146417445 +2012-03-11 09:00:00,2231.6479750778817 +2012-03-11 10:00:00,2609.5451713395637 +2012-03-11 11:00:00,2801.386292834891 +2012-03-11 12:00:00,2940.105919003115 +2012-03-11 13:00:00,2854.336448598131 +2012-03-11 14:00:00,2854.644859813084 +2012-03-11 15:00:00,2911.080996884735 +2012-03-11 16:00:00,2883.308411214953 +2012-03-11 17:00:00,2939.5233644859813 +2012-03-11 18:00:00,2943.467289719626 +2012-03-11 19:00:00,3126.4766355140187 +2012-03-11 20:00:00,3051.728971962617 +2012-03-11 21:00:00,2920.03738317757 +2012-03-11 22:00:00,2581.0280373831774 +2012-03-11 23:00:00,2095.221183800623 +2012-03-12 00:00:00,1679.473520249221 +2012-03-12 01:00:00,1398.4205607476636 +2012-03-12 02:00:00,1365.816199376947 +2012-03-12 03:00:00,1318.1152647975077 +2012-03-12 04:00:00,1304.7040498442368 +2012-03-12 05:00:00,1349.8193146417445 +2012-03-12 06:00:00,1515.5202492211838 +2012-03-12 07:00:00,1774.7227414330218 +2012-03-12 08:00:00,1824.6728971962616 +2012-03-12 09:00:00,2261.5981308411215 +2012-03-12 10:00:00,2592.227414330218 +2012-03-12 11:00:00,2712.894080996885 +2012-03-12 12:00:00,2901.542056074766 +2012-03-12 13:00:00,2903.0155763239877 +2012-03-12 14:00:00,2904.3956386292834 +2012-03-12 15:00:00,2965.1682242990655 +2012-03-12 16:00:00,2986.1308411214955 +2012-03-12 17:00:00,2927.367601246106 +2012-03-12 18:00:00,3004.373831775701 +2012-03-12 19:00:00,3133.096573208723 +2012-03-12 20:00:00,3081.314641744548 +2012-03-12 21:00:00,3008.239875389408 +2012-03-12 22:00:00,2741.909657320872 +2012-03-12 23:00:00,2305.6292834890965 +2012-03-13 00:00:00,1713.2679127725858 +2012-03-13 01:00:00,1410.1183800623053 +2012-03-13 02:00:00,1315.7165109034268 +2012-03-13 03:00:00,1259.8317757009345 +2012-03-13 04:00:00,1254.9408099688474 +2012-03-13 05:00:00,1318.03738317757 +2012-03-13 06:00:00,1478.5327102803737 +2012-03-13 07:00:00,1767.8598130841121 +2012-03-13 08:00:00,1829.98753894081 +2012-03-13 09:00:00,2264.7165109034268 +2012-03-13 10:00:00,2782.398753894081 +2012-03-13 11:00:00,2870.1744548286606 +2012-03-13 12:00:00,2958.461059190031 +2012-03-13 13:00:00,3033.2834890965732 +2012-03-13 14:00:00,3061.3395638629286 +2012-03-13 15:00:00,3051.542056074766 +2012-03-13 16:00:00,3027.728971962617 +2012-03-13 17:00:00,2990.669781931464 +2012-03-13 18:00:00,3016.5140186915887 +2012-03-13 19:00:00,3166.7507788161993 +2012-03-13 20:00:00,3090.931464174455 +2012-03-13 21:00:00,3029.3520249221183 +2012-03-13 22:00:00,2775.0031152647975 +2012-03-13 23:00:00,2305.1246105919004 +2012-03-14 00:00:00,1735.0591900311526 +2012-03-14 01:00:00,1385.386292834891 +2012-03-14 02:00:00,1304.473520249221 +2012-03-14 03:00:00,1256.4392523364486 +2012-03-14 04:00:00,1266.2492211838007 +2012-03-14 05:00:00,1300.4953271028037 +2012-03-14 06:00:00,1467.8317757009345 +2012-03-14 07:00:00,1727.4984423676012 +2012-03-14 08:00:00,1810.404984423676 +2012-03-14 09:00:00,2276.7040498442366 +2012-03-14 10:00:00,2639.1869158878503 +2012-03-14 11:00:00,2812.5794392523367 +2012-03-14 12:00:00,2906.5451713395637 +2012-03-14 13:00:00,2992.121495327103 +2012-03-14 14:00:00,3033.7943925233644 +2012-03-14 15:00:00,3020.93769470405 +2012-03-14 16:00:00,3028.9158878504672 +2012-03-14 17:00:00,2995.271028037383 +2012-03-14 18:00:00,3042.3052959501556 +2012-03-14 19:00:00,3163.7943925233644 +2012-03-14 20:00:00,3022.728971962617 +2012-03-14 21:00:00,2935.9003115264795 +2012-03-14 22:00:00,2658.3333333333335 +2012-03-14 23:00:00,2240.1090342679126 +2012-03-15 00:00:00,1674.6760124610591 +2012-03-15 01:00:00,1380.872274143302 +2012-03-15 02:00:00,1321.2834890965732 +2012-03-15 03:00:00,1275.0747663551401 +2012-03-15 04:00:00,1262.165109034268 +2012-03-15 05:00:00,1288.601246105919 +2012-03-15 06:00:00,1445.1495327102805 +2012-03-15 07:00:00,1725.1152647975077 +2012-03-15 08:00:00,1800.6978193146417 +2012-03-15 09:00:00,2287.0 +2012-03-15 10:00:00,2663.5140186915887 +2012-03-15 11:00:00,2813.5358255451715 +2012-03-15 12:00:00,2906.766355140187 +2012-03-15 13:00:00,2945.2118380062307 +2012-03-15 14:00:00,2918.8006230529595 +2012-03-15 15:00:00,2914.355140186916 +2012-03-15 16:00:00,2950.06230529595 +2012-03-15 17:00:00,2968.772585669782 +2012-03-15 18:00:00,3038.8442367601247 +2012-03-15 19:00:00,3161.5140186915887 +2012-03-15 20:00:00,3092.88785046729 +2012-03-15 21:00:00,2979.233644859813 +2012-03-15 22:00:00,2677.644859813084 +2012-03-15 23:00:00,2237.1401869158876 +2012-03-16 00:00:00,1698.2585669781931 +2012-03-16 01:00:00,1393.6355140186915 +2012-03-16 02:00:00,1335.5856697819315 +2012-03-16 03:00:00,1290.436137071651 +2012-03-16 04:00:00,1265.398753894081 +2012-03-16 05:00:00,1360.816199376947 +2012-03-16 06:00:00,1505.7881619937696 +2012-03-16 07:00:00,1761.526479750779 +2012-03-16 08:00:00,1844.1401869158879 +2012-03-16 09:00:00,2296.4704049844236 +2012-03-16 10:00:00,2655.398753894081 +2012-03-16 11:00:00,2824.9065420560746 +2012-03-16 12:00:00,2932.576323987539 +2012-03-16 13:00:00,2912.595015576324 +2012-03-16 14:00:00,2900.8068535825546 +2012-03-16 15:00:00,2886.816199376947 +2012-03-16 16:00:00,2910.3271028037384 +2012-03-16 17:00:00,2940.0872274143303 +2012-03-16 18:00:00,2992.700934579439 +2012-03-16 19:00:00,3200.9657320872275 +2012-03-16 20:00:00,3077.532710280374 +2012-03-16 21:00:00,2991.772585669782 +2012-03-16 22:00:00,2834.644859813084 +2012-03-16 23:00:00,2450.654205607477 +2012-03-17 00:00:00,1857.5295950155764 +2012-03-17 01:00:00,1531.4579439252336 +2012-03-17 02:00:00,1414.834890965732 +2012-03-17 03:00:00,1281.9096573208724 +2012-03-17 04:00:00,1232.766355140187 +2012-03-17 05:00:00,1295.9065420560748 +2012-03-17 06:00:00,1466.4267912772586 +2012-03-17 07:00:00,1713.3271028037384 +2012-03-17 08:00:00,1815.3956386292834 +2012-03-17 09:00:00,2264.7383177570096 +2012-03-17 10:00:00,2677.489096573209 +2012-03-17 11:00:00,2834.2523364485983 +2012-03-17 12:00:00,2915.613707165109 +2012-03-17 13:00:00,2876.1557632398753 +2012-03-17 14:00:00,2830.277258566978 +2012-03-17 15:00:00,2912.1993769470405 +2012-03-17 16:00:00,2909.277258566978 +2012-03-17 17:00:00,2914.0716510903426 +2012-03-17 18:00:00,2959.286604361371 +2012-03-17 19:00:00,3143.0872274143303 +2012-03-17 20:00:00,3090.0560747663553 +2012-03-17 21:00:00,2991.2741433021806 +2012-03-17 22:00:00,2735.9719626168226 +2012-03-17 23:00:00,2326.386292834891 +2012-03-18 00:00:00,1773.7102803738317 +2012-03-18 01:00:00,1463.2990654205607 +2012-03-18 02:00:00,1408.2492211838007 +2012-03-18 03:00:00,1308.1028037383178 +2012-03-18 04:00:00,1212.6853582554518 +2012-03-18 05:00:00,1254.5233644859813 +2012-03-18 06:00:00,1436.0342679127725 +2012-03-18 07:00:00,1643.1713395638628 +2012-03-18 08:00:00,1686.056074766355 +2012-03-18 09:00:00,2192.9127725856697 +2012-03-18 10:00:00,2567.5451713395637 +2012-03-18 11:00:00,2758.9781931464177 +2012-03-18 12:00:00,2819.1869158878503 +2012-03-18 13:00:00,2765.308411214953 +2012-03-18 14:00:00,2751.6822429906542 +2012-03-18 15:00:00,2735.03738317757 +2012-03-18 16:00:00,2810.6884735202493 +2012-03-18 17:00:00,2774.685358255452 +2012-03-18 18:00:00,2802.9532710280373 +2012-03-18 19:00:00,2996.2429906542056 +2012-03-18 20:00:00,2931.797507788162 +2012-03-18 21:00:00,2866.8598130841124 +2012-03-18 22:00:00,2465.392523364486 +2012-03-18 23:00:00,2001.4267912772586 +2012-03-19 00:00:00,1574.7133956386292 +2012-03-19 01:00:00,1273.0716510903426 +2012-03-19 02:00:00,1227.9470404984424 +2012-03-19 03:00:00,1221.5981308411215 +2012-03-19 04:00:00,1196.2242990654206 +2012-03-19 05:00:00,1259.5295950155764 +2012-03-19 06:00:00,1432.4828660436137 +2012-03-19 07:00:00,1661.2492211838007 +2012-03-19 08:00:00,1732.2429906542056 +2012-03-19 09:00:00,2199.4174454828662 +2012-03-19 10:00:00,2513.5856697819313 +2012-03-19 11:00:00,2630.644859813084 +2012-03-19 12:00:00,2737.2367601246106 +2012-03-19 13:00:00,2743.177570093458 +2012-03-19 14:00:00,2756.9283489096574 +2012-03-19 15:00:00,2784.277258566978 +2012-03-19 16:00:00,2798.096573208723 +2012-03-19 17:00:00,2817.233644859813 +2012-03-19 18:00:00,2841.308411214953 +2012-03-19 19:00:00,3039.246105919003 +2012-03-19 20:00:00,2989.542056074766 +2012-03-19 21:00:00,2895.644859813084 +2012-03-19 22:00:00,2600.473520249221 +2012-03-19 23:00:00,2202.7040498442366 +2012-03-20 00:00:00,1686.0467289719627 +2012-03-20 01:00:00,1373.872274143302 +2012-03-20 02:00:00,1318.1401869158879 +2012-03-20 03:00:00,1247.4018691588785 +2012-03-20 04:00:00,1232.728971962617 +2012-03-20 05:00:00,1308.454828660436 +2012-03-20 06:00:00,1453.5202492211838 +2012-03-20 07:00:00,1651.9252336448599 +2012-03-20 08:00:00,1752.3146417445482 +2012-03-20 09:00:00,2199.2180685358258 +2012-03-20 10:00:00,2534.8598130841124 +2012-03-20 11:00:00,2700.495327102804 +2012-03-20 12:00:00,2788.8442367601247 +2012-03-20 13:00:00,2755.8909657320874 +2012-03-20 14:00:00,2769.8691588785045 +2012-03-20 15:00:00,2820.1308411214955 +2012-03-20 16:00:00,2838.8130841121497 +2012-03-20 17:00:00,2822.105919003115 +2012-03-20 18:00:00,2908.06230529595 +2012-03-20 19:00:00,3047.165109034268 +2012-03-20 20:00:00,2991.676012461059 +2012-03-20 21:00:00,2900.7040498442366 +2012-03-20 22:00:00,2632.93769470405 +2012-03-20 23:00:00,2149.9657320872275 +2012-03-21 00:00:00,1636.202492211838 +2012-03-21 01:00:00,1318.9781931464174 +2012-03-21 02:00:00,1279.8598130841121 +2012-03-21 03:00:00,1212.0249221183801 +2012-03-21 04:00:00,1205.1246105919004 +2012-03-21 05:00:00,1272.473520249221 +2012-03-21 06:00:00,1434.9065420560748 +2012-03-21 07:00:00,1666.7352024922118 +2012-03-21 08:00:00,1755.348909657321 +2012-03-21 09:00:00,2231.644859813084 +2012-03-21 10:00:00,2566.632398753894 +2012-03-21 11:00:00,2723.5451713395637 +2012-03-21 12:00:00,2793.4174454828662 +2012-03-21 13:00:00,2779.255451713396 +2012-03-21 14:00:00,2779.2429906542056 +2012-03-21 15:00:00,2807.6604361370714 +2012-03-21 16:00:00,2821.03738317757 +2012-03-21 17:00:00,2839.4517133956388 +2012-03-21 18:00:00,2866.080996884735 +2012-03-21 19:00:00,3043.7196261682243 +2012-03-21 20:00:00,3000.0716510903426 +2012-03-21 21:00:00,2901.392523364486 +2012-03-21 22:00:00,2586.043613707165 +2012-03-21 23:00:00,2149.5825545171338 +2012-03-22 00:00:00,1618.031152647975 +2012-03-22 01:00:00,1334.4984423676012 +2012-03-22 02:00:00,1265.3333333333333 +2012-03-22 03:00:00,1216.4392523364486 +2012-03-22 04:00:00,1203.5327102803737 +2012-03-22 05:00:00,1261.3239875389409 +2012-03-22 06:00:00,1420.9065420560748 +2012-03-22 07:00:00,1655.1401869158879 +2012-03-22 08:00:00,1746.0903426791276 +2012-03-22 09:00:00,2228.909657320872 +2012-03-22 10:00:00,2551.919003115265 +2012-03-22 11:00:00,2750.6822429906542 +2012-03-22 12:00:00,2792.2616822429904 +2012-03-22 13:00:00,2794.816199376947 +2012-03-22 14:00:00,2806.707165109034 +2012-03-22 15:00:00,2851.7476635514017 +2012-03-22 16:00:00,2871.2834890965732 +2012-03-22 17:00:00,2860.551401869159 +2012-03-22 18:00:00,2914.489096573209 +2012-03-22 19:00:00,3103.0218068535823 +2012-03-22 20:00:00,3043.0155763239877 +2012-03-22 21:00:00,2941.8753894080996 +2012-03-22 22:00:00,2641.4766355140187 +2012-03-22 23:00:00,2167.3644859813085 +2012-03-23 00:00:00,1664.8971962616822 +2012-03-23 01:00:00,1371.6915887850466 +2012-03-23 02:00:00,1304.9844236760125 +2012-03-23 03:00:00,1255.4610591900312 +2012-03-23 04:00:00,1243.1401869158879 +2012-03-23 05:00:00,1289.5327102803737 +2012-03-23 06:00:00,1451.7881619937696 +2012-03-23 07:00:00,1700.5669781931465 +2012-03-23 08:00:00,1806.2180685358255 +2012-03-23 09:00:00,2260.4205607476633 +2012-03-23 10:00:00,2597.3208722741433 +2012-03-23 11:00:00,2819.6728971962616 +2012-03-23 12:00:00,2867.1931464174454 +2012-03-23 13:00:00,2887.1370716510905 +2012-03-23 14:00:00,2889.638629283489 +2012-03-23 15:00:00,2914.0996884735205 +2012-03-23 16:00:00,2998.607476635514 +2012-03-23 17:00:00,2996.878504672897 +2012-03-23 18:00:00,3071.07476635514 +2012-03-23 19:00:00,3203.878504672897 +2012-03-23 20:00:00,3127.096573208723 +2012-03-23 21:00:00,3064.809968847352 +2012-03-23 22:00:00,2841.2180685358258 +2012-03-23 23:00:00,2371.0280373831774 +2012-03-24 00:00:00,1785.1682242990655 +2012-03-24 01:00:00,1494.6728971962616 +2012-03-24 02:00:00,1416.1526479750778 +2012-03-24 03:00:00,1296.2803738317757 +2012-03-24 04:00:00,1252.9096573208724 +2012-03-24 05:00:00,1311.03738317757 +2012-03-24 06:00:00,1477.4953271028037 +2012-03-24 07:00:00,1711.7009345794393 +2012-03-24 08:00:00,1806.8816199376947 +2012-03-24 09:00:00,2285.152647975078 +2012-03-24 10:00:00,2713.2180685358258 +2012-03-24 11:00:00,2899.367601246106 +2012-03-24 12:00:00,2980.2242990654204 +2012-03-24 13:00:00,2937.931464174455 +2012-03-24 14:00:00,2972.2242990654204 +2012-03-24 15:00:00,2948.8068535825546 +2012-03-24 16:00:00,2977.1028037383176 +2012-03-24 17:00:00,2996.8068535825546 +2012-03-24 18:00:00,3071.2523364485983 +2012-03-24 19:00:00,3232.6199376947043 +2012-03-24 20:00:00,3173.4267912772584 +2012-03-24 21:00:00,3081.190031152648 +2012-03-24 22:00:00,2778.2305295950155 +2012-03-24 23:00:00,2359.931464174455 +2012-03-25 00:00:00,1798.9096573208724 +2012-03-25 01:00:00,54.149532710280376 +2012-03-25 02:00:00,1446.127725856698 +2012-03-25 03:00:00,1391.4672897196263 +2012-03-25 04:00:00,1241.0093457943926 +2012-03-25 05:00:00,1278.8940809968847 +2012-03-25 06:00:00,1444.1869158878505 +2012-03-25 07:00:00,1674.8442367601247 +2012-03-25 08:00:00,1713.943925233645 +2012-03-25 09:00:00,2156.510903426791 +2012-03-25 10:00:00,2597.096573208723 +2012-03-25 11:00:00,2866.856697819315 +2012-03-25 12:00:00,2969.0342679127725 +2012-03-25 13:00:00,2954.336448598131 +2012-03-25 14:00:00,2977.691588785047 +2012-03-25 15:00:00,3002.8535825545173 +2012-03-25 16:00:00,3028.691588785047 +2012-03-25 17:00:00,3077.8847352024923 +2012-03-25 18:00:00,3108.7102803738317 +2012-03-25 19:00:00,3029.0186915887853 +2012-03-25 20:00:00,3138.2959501557634 +2012-03-25 21:00:00,3082.834890965732 +2012-03-25 22:00:00,2694.894080996885 +2012-03-25 23:00:00,2172.5482866043612 +2012-03-26 00:00:00,1687.006230529595 +2012-03-26 01:00:00,1375.0093457943926 +2012-03-26 02:00:00,1306.9968847352025 +2012-03-26 03:00:00,1249.9906542056074 +2012-03-26 04:00:00,1248.4797507788162 +2012-03-26 05:00:00,1308.6822429906542 +2012-03-26 06:00:00,1503.8753894080996 +2012-03-26 07:00:00,1698.8816199376947 +2012-03-26 08:00:00,1796.4797507788162 +2012-03-26 09:00:00,2260.495327102804 +2012-03-26 10:00:00,2640.5669781931465 +2012-03-26 11:00:00,2828.495327102804 +2012-03-26 12:00:00,2966.4984423676015 +2012-03-26 13:00:00,2982.361370716511 +2012-03-26 14:00:00,3042.323987538941 +2012-03-26 15:00:00,3032.4018691588785 +2012-03-26 16:00:00,3073.1090342679126 +2012-03-26 17:00:00,3084.7040498442366 +2012-03-26 18:00:00,3053.2959501557634 +2012-03-26 19:00:00,3052.735202492212 +2012-03-26 20:00:00,3163.638629283489 +2012-03-26 21:00:00,3094.685358255452 +2012-03-26 22:00:00,2804.5607476635514 +2012-03-26 23:00:00,2371.5607476635514 +2012-03-27 00:00:00,1800.0685358255453 +2012-03-27 01:00:00,1424.1059190031153 +2012-03-27 02:00:00,1339.1869158878505 +2012-03-27 03:00:00,1287.8006230529595 +2012-03-27 04:00:00,1255.3333333333333 +2012-03-27 05:00:00,1318.3551401869158 +2012-03-27 06:00:00,1473.3084112149534 +2012-03-27 07:00:00,1739.8660436137072 +2012-03-27 08:00:00,1804.1557632398753 +2012-03-27 09:00:00,2266.080996884735 +2012-03-27 10:00:00,2689.3582554517134 +2012-03-27 11:00:00,2911.404984423676 +2012-03-27 12:00:00,3021.707165109034 +2012-03-27 13:00:00,3056.563862928349 +2012-03-27 14:00:00,3080.940809968847 +2012-03-27 15:00:00,3080.6105919003116 +2012-03-27 16:00:00,3089.158878504673 +2012-03-27 17:00:00,3104.052959501558 +2012-03-27 18:00:00,3075.7819314641742 +2012-03-27 19:00:00,3076.5825545171338 +2012-03-27 20:00:00,3173.9065420560746 +2012-03-27 21:00:00,3075.8598130841124 +2012-03-27 22:00:00,2757.4517133956388 +2012-03-27 23:00:00,2280.479750778816 +2012-03-28 00:00:00,1729.8629283489097 +2012-03-28 01:00:00,1409.6479750778817 +2012-03-28 02:00:00,1335.2928348909657 +2012-03-28 03:00:00,1288.1214953271028 +2012-03-28 04:00:00,1257.607476635514 +2012-03-28 05:00:00,1370.0529595015576 +2012-03-28 06:00:00,1522.4485981308412 +2012-03-28 07:00:00,1741.1214953271028 +2012-03-28 08:00:00,1828.9719626168223 +2012-03-28 09:00:00,2281.4704049844236 +2012-03-28 10:00:00,2640.0934579439254 +2012-03-28 11:00:00,2902.2679127725855 +2012-03-28 12:00:00,2961.809968847352 +2012-03-28 13:00:00,2972.6728971962616 +2012-03-28 14:00:00,3071.4517133956388 +2012-03-28 15:00:00,3043.196261682243 +2012-03-28 16:00:00,3128.0560747663553 +2012-03-28 17:00:00,3156.1464174454827 +2012-03-28 18:00:00,3122.663551401869 +2012-03-28 19:00:00,3097.196261682243 +2012-03-28 20:00:00,3187.5295950155764 +2012-03-28 21:00:00,3119.557632398754 +2012-03-28 22:00:00,2750.0031152647975 +2012-03-28 23:00:00,2282.4641744548285 +2012-03-29 00:00:00,1712.1059190031153 +2012-03-29 01:00:00,1392.6760124610591 +2012-03-29 02:00:00,1345.2741433021806 +2012-03-29 03:00:00,1288.834890965732 +2012-03-29 04:00:00,1267.822429906542 +2012-03-29 05:00:00,1324.7757009345794 +2012-03-29 06:00:00,1490.8317757009345 +2012-03-29 07:00:00,1708.8753894080996 +2012-03-29 08:00:00,1837.2679127725858 +2012-03-29 09:00:00,2267.9781931464177 +2012-03-29 10:00:00,2660.4018691588785 +2012-03-29 11:00:00,2926.728971962617 +2012-03-29 12:00:00,3010.9781931464177 +2012-03-29 13:00:00,3010.373831775701 +2012-03-29 14:00:00,3052.8753894080996 +2012-03-29 15:00:00,3053.03738317757 +2012-03-29 16:00:00,3066.121495327103 +2012-03-29 17:00:00,3090.538940809969 +2012-03-29 18:00:00,3105.8130841121497 +2012-03-29 19:00:00,3123.4330218068535 +2012-03-29 20:00:00,3210.2741433021806 +2012-03-29 21:00:00,3119.5077881619936 +2012-03-29 22:00:00,2762.5140186915887 +2012-03-29 23:00:00,2291.0218068535823 +2012-03-30 00:00:00,1750.0249221183801 +2012-03-30 01:00:00,1454.3644859813085 +2012-03-30 02:00:00,1376.0778816199377 +2012-03-30 03:00:00,1300.8286604361372 +2012-03-30 04:00:00,1282.1401869158879 +2012-03-30 05:00:00,1377.8566978193146 +2012-03-30 06:00:00,1515.1682242990655 +2012-03-30 07:00:00,1742.2585669781931 +2012-03-30 08:00:00,1850.6168224299065 +2012-03-30 09:00:00,2366.336448598131 +2012-03-30 10:00:00,2748.1183800623053 +2012-03-30 11:00:00,2826.9906542056074 +2012-03-30 12:00:00,2984.031152647975 +2012-03-30 13:00:00,2987.638629283489 +2012-03-30 14:00:00,3021.4143302180687 +2012-03-30 15:00:00,3044.143302180685 +2012-03-30 16:00:00,3094.8504672897197 +2012-03-30 17:00:00,3082.3271028037384 +2012-03-30 18:00:00,3072.3489096573207 +2012-03-30 19:00:00,3098.626168224299 +2012-03-30 20:00:00,3192.183800623053 +2012-03-30 21:00:00,3061.6043613707166 +2012-03-30 22:00:00,2827.461059190031 +2012-03-30 23:00:00,2391.7040498442366 +2012-03-31 00:00:00,1843.6417445482866 +2012-03-31 01:00:00,1534.4828660436137 +2012-03-31 02:00:00,1444.7912772585669 +2012-03-31 03:00:00,1325.7757009345794 +2012-03-31 04:00:00,1258.8255451713396 +2012-03-31 05:00:00,1360.2492211838007 +2012-03-31 06:00:00,1497.214953271028 +2012-03-31 07:00:00,1704.4610591900312 +2012-03-31 08:00:00,1796.5607476635514 +2012-03-31 09:00:00,2280.3520249221183 +2012-03-31 10:00:00,2693.2367601246106 +2012-03-31 11:00:00,2823.822429906542 +2012-03-31 12:00:00,2956.644859813084 +2012-03-31 13:00:00,2975.6043613707166 +2012-03-31 14:00:00,2982.760124610592 +2012-03-31 15:00:00,3012.2305295950155 +2012-03-31 16:00:00,3017.822429906542 +2012-03-31 17:00:00,3051.3707165109035 +2012-03-31 18:00:00,3082.797507788162 +2012-03-31 19:00:00,3162.386292834891 +2012-03-31 20:00:00,3179.7320872274145 +2012-03-31 21:00:00,3129.4859813084113 +2012-03-31 22:00:00,2910.190031152648 +2012-03-31 23:00:00,2521.4984423676015 +2012-04-01 00:00:00,1894.8878504672898 +2012-04-01 01:00:00,1537.8504672897195 +2012-04-01 02:00:00,1470.8878504672898 +2012-04-01 03:00:00,1369.7009345794393 +2012-04-01 04:00:00,1254.1246105919004 +2012-04-01 05:00:00,1331.2429906542056 +2012-04-01 06:00:00,1470.342679127726 +2012-04-01 07:00:00,1688.5794392523364 +2012-04-01 08:00:00,1766.9221183800623 +2012-04-01 09:00:00,2238.03738317757 +2012-04-01 10:00:00,2652.7632398753894 +2012-04-01 11:00:00,2870.5545171339563 +2012-04-01 12:00:00,2969.3644859813085 +2012-04-01 13:00:00,2942.043613707165 +2012-04-01 14:00:00,2925.3769470404986 +2012-04-01 15:00:00,2956.5607476635514 +2012-04-01 16:00:00,2977.7320872274145 +2012-04-01 17:00:00,3033.8629283489095 +2012-04-01 18:00:00,3017.5140186915887 +2012-04-01 19:00:00,2971.2897196261683 +2012-04-01 20:00:00,3099.3831775700933 +2012-04-01 21:00:00,2989.5077881619936 +2012-04-01 22:00:00,2610.0654205607475 +2012-04-01 23:00:00,2117.940809968847 +2012-04-02 00:00:00,1648.1526479750778 +2012-04-02 01:00:00,1352.0623052959502 +2012-04-02 02:00:00,1330.7258566978194 +2012-04-02 03:00:00,1273.4267912772586 +2012-04-02 04:00:00,1257.9657320872275 +2012-04-02 05:00:00,1363.4890965732088 +2012-04-02 06:00:00,1501.816199376947 +2012-04-02 07:00:00,1699.3894080996886 +2012-04-02 08:00:00,1775.7040498442368 +2012-04-02 09:00:00,2260.2429906542056 +2012-04-02 10:00:00,2657.722741433022 +2012-04-02 11:00:00,2829.968847352025 +2012-04-02 12:00:00,2961.7694704049845 +2012-04-02 13:00:00,2933.090342679128 +2012-04-02 14:00:00,2973.4517133956388 +2012-04-02 15:00:00,2961.4859813084113 +2012-04-02 16:00:00,3007.314641744548 +2012-04-02 17:00:00,2991.0093457943926 +2012-04-02 18:00:00,3046.02492211838 +2012-04-02 19:00:00,3038.392523364486 +2012-04-02 20:00:00,3069.1183800623053 +2012-04-02 21:00:00,3051.127725856698 +2012-04-02 22:00:00,2675.834890965732 +2012-04-02 23:00:00,2229.5607476635514 +2012-04-03 00:00:00,1710.9190031152648 +2012-04-03 01:00:00,1405.9719626168223 +2012-04-03 02:00:00,1349.2461059190032 +2012-04-03 03:00:00,1289.797507788162 +2012-04-03 04:00:00,1263.3457943925234 +2012-04-03 05:00:00,1333.398753894081 +2012-04-03 06:00:00,1493.0 +2012-04-03 07:00:00,1732.5482866043615 +2012-04-03 08:00:00,1838.0623052959502 +2012-04-03 09:00:00,2262.286604361371 +2012-04-03 10:00:00,2642.663551401869 +2012-04-03 11:00:00,2802.1744548286606 +2012-04-03 12:00:00,2959.5482866043612 +2012-04-03 13:00:00,2897.2616822429904 +2012-04-03 14:00:00,2897.4205607476633 +2012-04-03 15:00:00,2952.7819314641742 +2012-04-03 16:00:00,2931.816199376947 +2012-04-03 17:00:00,2957.595015576324 +2012-04-03 18:00:00,2967.4517133956388 +2012-04-03 19:00:00,2970.9813084112147 +2012-04-03 20:00:00,3046.9906542056074 +2012-04-03 21:00:00,3016.4984423676015 +2012-04-03 22:00:00,2769.570093457944 +2012-04-03 23:00:00,2308.158878504673 +2012-04-04 00:00:00,1699.6230529595016 +2012-04-04 01:00:00,1384.9844236760125 +2012-04-04 02:00:00,1328.0996884735202 +2012-04-04 03:00:00,1305.0249221183801 +2012-04-04 04:00:00,1257.1433021806854 +2012-04-04 05:00:00,1341.6635514018692 +2012-04-04 06:00:00,1483.2959501557632 +2012-04-04 07:00:00,1705.2990654205607 +2012-04-04 08:00:00,1825.576323987539 +2012-04-04 09:00:00,2265.271028037383 +2012-04-04 10:00:00,2642.663551401869 +2012-04-04 11:00:00,2808.6199376947043 +2012-04-04 12:00:00,2882.2429906542056 +2012-04-04 13:00:00,2841.8598130841124 +2012-04-04 14:00:00,2882.2616822429904 +2012-04-04 15:00:00,2917.1993769470405 +2012-04-04 16:00:00,2892.5015576323985 +2012-04-04 17:00:00,2926.504672897196 +2012-04-04 18:00:00,2940.461059190031 +2012-04-04 19:00:00,2909.3582554517134 +2012-04-04 20:00:00,3025.828660436137 +2012-04-04 21:00:00,3010.3208722741433 +2012-04-04 22:00:00,2724.5451713395637 +2012-04-04 23:00:00,2216.0716510903426 +2012-04-05 00:00:00,1696.0342679127725 +2012-04-05 01:00:00,1387.3707165109033 +2012-04-05 02:00:00,1340.0249221183801 +2012-04-05 03:00:00,1267.785046728972 +2012-04-05 04:00:00,1259.183800623053 +2012-04-05 05:00:00,1351.8598130841121 +2012-04-05 06:00:00,1470.0342679127725 +2012-04-05 07:00:00,1687.404984423676 +2012-04-05 08:00:00,1786.576323987539 +2012-04-05 09:00:00,2230.803738317757 +2012-04-05 10:00:00,2596.576323987539 +2012-04-05 11:00:00,2798.411214953271 +2012-04-05 12:00:00,2878.3177570093458 +2012-04-05 13:00:00,2849.2056074766356 +2012-04-05 14:00:00,2913.3115264797507 +2012-04-05 15:00:00,2856.8909657320874 +2012-04-05 16:00:00,2875.8317757009345 +2012-04-05 17:00:00,2902.9221183800623 +2012-04-05 18:00:00,2922.8130841121497 +2012-04-05 19:00:00,2912.336448598131 +2012-04-05 20:00:00,3006.4018691588785 +2012-04-05 21:00:00,2967.7694704049845 +2012-04-05 22:00:00,2732.760124610592 +2012-04-05 23:00:00,2249.068535825545 +2012-04-06 00:00:00,1743.4205607476636 +2012-04-06 01:00:00,1380.1308411214952 +2012-04-06 02:00:00,1333.3769470404984 +2012-04-06 03:00:00,1246.0965732087227 +2012-04-06 04:00:00,1221.417445482866 +2012-04-06 05:00:00,1338.423676012461 +2012-04-06 06:00:00,1509.0218068535826 +2012-04-06 07:00:00,1660.6915887850466 +2012-04-06 08:00:00,1737.3084112149534 +2012-04-06 09:00:00,2192.3052959501556 +2012-04-06 10:00:00,2613.4517133956388 +2012-04-06 11:00:00,2806.728971962617 +2012-04-06 12:00:00,2912.691588785047 +2012-04-06 13:00:00,2874.542056074766 +2012-04-06 14:00:00,2903.8971962616824 +2012-04-06 15:00:00,2866.1090342679126 +2012-04-06 16:00:00,2930.956386292835 +2012-04-06 17:00:00,2955.5794392523367 +2012-04-06 18:00:00,2951.1619937694704 +2012-04-06 19:00:00,2954.3177570093458 +2012-04-06 20:00:00,3021.956386292835 +2012-04-06 21:00:00,3001.4267912772584 +2012-04-06 22:00:00,2770.8380062305296 +2012-04-06 23:00:00,2333.6666666666665 +2012-04-07 00:00:00,1775.2056074766356 +2012-04-07 01:00:00,1467.7258566978194 +2012-04-07 02:00:00,1384.3520249221183 +2012-04-07 03:00:00,1269.411214953271 +2012-04-07 04:00:00,1217.4080996884736 +2012-04-07 05:00:00,1287.2180685358255 +2012-04-07 06:00:00,1455.6822429906542 +2012-04-07 07:00:00,1629.8006230529595 +2012-04-07 08:00:00,1740.4797507788162 +2012-04-07 09:00:00,2209.143302180685 +2012-04-07 10:00:00,2612.4205607476633 +2012-04-07 11:00:00,2837.7320872274145 +2012-04-07 12:00:00,2926.956386292835 +2012-04-07 13:00:00,2899.2741433021806 +2012-04-07 14:00:00,2898.6791277258567 +2012-04-07 15:00:00,2911.0872274143303 +2012-04-07 16:00:00,2915.663551401869 +2012-04-07 17:00:00,2901.1028037383176 +2012-04-07 18:00:00,2940.791277258567 +2012-04-07 19:00:00,2915.778816199377 +2012-04-07 20:00:00,3012.947040498442 +2012-04-07 21:00:00,3040.7040498442366 +2012-04-07 22:00:00,2825.2367601246106 +2012-04-07 23:00:00,2450.392523364486 +2012-04-08 00:00:00,1835.3364485981308 +2012-04-08 01:00:00,1484.3738317757009 +2012-04-08 02:00:00,1427.7009345794393 +2012-04-08 03:00:00,1318.0809968847352 +2012-04-08 04:00:00,1196.9501557632398 +2012-04-08 05:00:00,1241.3707165109033 +2012-04-08 06:00:00,1400.8847352024923 +2012-04-08 07:00:00,1573.8753894080996 +2012-04-08 08:00:00,1683.8598130841121 +2012-04-08 09:00:00,2139.0996884735205 +2012-04-08 10:00:00,2544.196261682243 +2012-04-08 11:00:00,2713.07476635514 +2012-04-08 12:00:00,2728.4984423676015 +2012-04-08 13:00:00,2750.448598130841 +2012-04-08 14:00:00,2720.822429906542 +2012-04-08 15:00:00,2691.479750778816 +2012-04-08 16:00:00,2765.9065420560746 +2012-04-08 17:00:00,2742.5981308411215 +2012-04-08 18:00:00,2758.3052959501556 +2012-04-08 19:00:00,2592.8130841121497 +2012-04-08 20:00:00,2465.367601246106 +2012-04-08 21:00:00,2470.8193146417448 +2012-04-08 22:00:00,2293.1090342679126 +2012-04-08 23:00:00,2048.8909657320874 +2012-04-09 00:00:00,1668.651090342679 +2012-04-09 01:00:00,1367.018691588785 +2012-04-09 02:00:00,1318.2180685358255 +2012-04-09 03:00:00,1282.1121495327102 +2012-04-09 04:00:00,1212.5233644859813 +2012-04-09 05:00:00,1303.778816199377 +2012-04-09 06:00:00,1463.3239875389409 +2012-04-09 07:00:00,1635.619937694704 +2012-04-09 08:00:00,1736.1121495327102 +2012-04-09 09:00:00,2187.4174454828662 +2012-04-09 10:00:00,2614.429906542056 +2012-04-09 11:00:00,2739.6479750778817 +2012-04-09 12:00:00,2966.255451713396 +2012-04-09 13:00:00,2956.2897196261683 +2012-04-09 14:00:00,2903.760124610592 +2012-04-09 15:00:00,2960.6168224299067 +2012-04-09 16:00:00,2977.8535825545173 +2012-04-09 17:00:00,2999.772585669782 +2012-04-09 18:00:00,3009.3800623052957 +2012-04-09 19:00:00,2999.3582554517134 +2012-04-09 20:00:00,3051.8598130841124 +2012-04-09 21:00:00,3025.7040498442366 +2012-04-09 22:00:00,2797.993769470405 +2012-04-09 23:00:00,2374.190031152648 +2012-04-10 00:00:00,1816.031152647975 +2012-04-10 01:00:00,1490.0965732087227 +2012-04-10 02:00:00,1427.4953271028037 +2012-04-10 03:00:00,1358.7414330218069 +2012-04-10 04:00:00,1342.367601246106 +2012-04-10 05:00:00,1360.4922118380061 +2012-04-10 06:00:00,1503.7320872274142 +2012-04-10 07:00:00,1720.6105919003114 +2012-04-10 08:00:00,1832.1090342679129 +2012-04-10 09:00:00,2259.3426791277257 +2012-04-10 10:00:00,2643.467289719626 +2012-04-10 11:00:00,2755.121495327103 +2012-04-10 12:00:00,2847.183800623053 +2012-04-10 13:00:00,2855.5171339563863 +2012-04-10 14:00:00,2858.0218068535823 +2012-04-10 15:00:00,2896.292834890966 +2012-04-10 16:00:00,2926.9127725856697 +2012-04-10 17:00:00,2972.6417445482866 +2012-04-10 18:00:00,2951.5919003115264 +2012-04-10 19:00:00,2985.3115264797507 +2012-04-10 20:00:00,3021.9221183800623 +2012-04-10 21:00:00,2972.0404984423676 +2012-04-10 22:00:00,2791.8380062305296 +2012-04-10 23:00:00,2313.183800623053 +2012-04-11 00:00:00,1735.9906542056074 +2012-04-11 01:00:00,1399.7102803738317 +2012-04-11 02:00:00,1340.361370716511 +2012-04-11 03:00:00,1288.1619937694704 +2012-04-11 04:00:00,1273.0249221183801 +2012-04-11 05:00:00,1292.196261682243 +2012-04-11 06:00:00,1481.9595015576324 +2012-04-11 07:00:00,1700.1152647975077 +2012-04-11 08:00:00,1813.545171339564 +2012-04-11 09:00:00,2261.707165109034 +2012-04-11 10:00:00,2646.601246105919 +2012-04-11 11:00:00,2709.6230529595014 +2012-04-11 12:00:00,2930.3177570093458 +2012-04-11 13:00:00,2871.6884735202493 +2012-04-11 14:00:00,2855.1370716510905 +2012-04-11 15:00:00,2859.504672897196 +2012-04-11 16:00:00,2899.7165109034268 +2012-04-11 17:00:00,2921.878504672897 +2012-04-11 18:00:00,2935.1246105919004 +2012-04-11 19:00:00,2908.2429906542056 +2012-04-11 20:00:00,3031.96261682243 +2012-04-11 21:00:00,2996.0093457943926 +2012-04-11 22:00:00,2637.8847352024923 +2012-04-11 23:00:00,2216.006230529595 +2012-04-12 00:00:00,1688.0934579439252 +2012-04-12 01:00:00,1379.031152647975 +2012-04-12 02:00:00,1319.872274143302 +2012-04-12 03:00:00,1260.638629283489 +2012-04-12 04:00:00,1248.2647975077882 +2012-04-12 05:00:00,1297.638629283489 +2012-04-12 06:00:00,1476.4080996884736 +2012-04-12 07:00:00,1709.0809968847352 +2012-04-12 08:00:00,1817.239875389408 +2012-04-12 09:00:00,2227.6573208722743 +2012-04-12 10:00:00,2575.526479750779 +2012-04-12 11:00:00,2670.171339563863 +2012-04-12 12:00:00,2871.398753894081 +2012-04-12 13:00:00,2784.127725856698 +2012-04-12 14:00:00,2798.121495327103 +2012-04-12 15:00:00,2783.1308411214955 +2012-04-12 16:00:00,2815.5732087227416 +2012-04-12 17:00:00,2824.7570093457944 +2012-04-12 18:00:00,2876.2118380062307 +2012-04-12 19:00:00,2876.183800623053 +2012-04-12 20:00:00,2941.822429906542 +2012-04-12 21:00:00,2932.6666666666665 +2012-04-12 22:00:00,2728.9532710280373 +2012-04-12 23:00:00,2313.1931464174454 +2012-04-13 00:00:00,1756.5015576323988 +2012-04-13 01:00:00,1390.018691588785 +2012-04-13 02:00:00,1336.7102803738317 +2012-04-13 03:00:00,1270.183800623053 +2012-04-13 04:00:00,1266.3520249221183 +2012-04-13 05:00:00,1306.0623052959502 +2012-04-13 06:00:00,1479.8878504672898 +2012-04-13 07:00:00,1673.1121495327102 +2012-04-13 08:00:00,1806.2554517133956 +2012-04-13 09:00:00,2261.632398753894 +2012-04-13 10:00:00,2622.2429906542056 +2012-04-13 11:00:00,2725.7943925233644 +2012-04-13 12:00:00,2816.7757009345796 +2012-04-13 13:00:00,2799.7694704049845 +2012-04-13 14:00:00,2887.816199376947 +2012-04-13 15:00:00,2887.9906542056074 +2012-04-13 16:00:00,2921.9719626168226 +2012-04-13 17:00:00,2916.2118380062307 +2012-04-13 18:00:00,2961.0467289719627 +2012-04-13 19:00:00,2975.7694704049845 +2012-04-13 20:00:00,3013.1090342679126 +2012-04-13 21:00:00,2998.713395638629 +2012-04-13 22:00:00,2874.105919003115 +2012-04-13 23:00:00,2358.816199376947 +2012-04-14 00:00:00,1788.2056074766356 +2012-04-14 01:00:00,1505.177570093458 +2012-04-14 02:00:00,1417.3582554517134 +2012-04-14 03:00:00,1277.1682242990655 +2012-04-14 04:00:00,1238.9719626168223 +2012-04-14 05:00:00,1314.0280373831777 +2012-04-14 06:00:00,1462.3052959501558 +2012-04-14 07:00:00,1708.7912772585669 +2012-04-14 08:00:00,1827.8130841121495 +2012-04-14 09:00:00,2237.292834890966 +2012-04-14 10:00:00,2618.2834890965732 +2012-04-14 11:00:00,2700.152647975078 +2012-04-14 12:00:00,2818.0934579439254 +2012-04-14 13:00:00,2901.3333333333335 +2012-04-14 14:00:00,2831.669781931464 +2012-04-14 15:00:00,2870.01246105919 +2012-04-14 16:00:00,2886.0498442367602 +2012-04-14 17:00:00,2894.563862928349 +2012-04-14 18:00:00,2894.0155763239877 +2012-04-14 19:00:00,2869.0342679127725 +2012-04-14 20:00:00,2973.373831775701 +2012-04-14 21:00:00,2910.7881619937693 +2012-04-14 22:00:00,2683.367601246106 +2012-04-14 23:00:00,2322.7757009345796 +2012-04-15 00:00:00,1781.4299065420562 +2012-04-15 01:00:00,1459.0996884735202 +2012-04-15 02:00:00,1403.5077881619939 +2012-04-15 03:00:00,1300.380062305296 +2012-04-15 04:00:00,1181.9283489096574 +2012-04-15 05:00:00,1261.834890965732 +2012-04-15 06:00:00,1413.2056074766356 +2012-04-15 07:00:00,1617.214953271028 +2012-04-15 08:00:00,1685.2834890965732 +2012-04-15 09:00:00,2139.5607476635514 +2012-04-15 10:00:00,2485.809968847352 +2012-04-15 11:00:00,2663.8504672897197 +2012-04-15 12:00:00,2784.97507788162 +2012-04-15 13:00:00,2734.5825545171338 +2012-04-15 14:00:00,2705.2741433021806 +2012-04-15 15:00:00,2681.803738317757 +2012-04-15 16:00:00,2725.697819314642 +2012-04-15 17:00:00,2774.4984423676015 +2012-04-15 18:00:00,2736.903426791277 +2012-04-15 19:00:00,2741.6479750778817 +2012-04-15 20:00:00,2803.4454828660437 +2012-04-15 21:00:00,2827.1464174454827 +2012-04-15 22:00:00,2485.5794392523367 +2012-04-15 23:00:00,2005.5794392523364 +2012-04-16 00:00:00,1603.196261682243 +2012-04-16 01:00:00,1307.9003115264798 +2012-04-16 02:00:00,1276.473520249221 +2012-04-16 03:00:00,1227.3177570093458 +2012-04-16 04:00:00,1205.6697819314643 +2012-04-16 05:00:00,1270.4080996884736 +2012-04-16 06:00:00,1449.5794392523364 +2012-04-16 07:00:00,1610.8878504672898 +2012-04-16 08:00:00,1720.6043613707166 +2012-04-16 09:00:00,2177.442367601246 +2012-04-16 10:00:00,2498.6199376947043 +2012-04-16 11:00:00,2651.919003115265 +2012-04-16 12:00:00,2737.202492211838 +2012-04-16 13:00:00,2770.2056074766356 +2012-04-16 14:00:00,2752.576323987539 +2012-04-16 15:00:00,2798.7165109034268 +2012-04-16 16:00:00,2817.520249221184 +2012-04-16 17:00:00,2858.4143302180687 +2012-04-16 18:00:00,2867.557632398754 +2012-04-16 19:00:00,2836.06230529595 +2012-04-16 20:00:00,2938.3769470404986 +2012-04-16 21:00:00,2876.809968847352 +2012-04-16 22:00:00,2609.227414330218 +2012-04-16 23:00:00,2233.4766355140187 +2012-04-17 00:00:00,1745.239875389408 +2012-04-17 01:00:00,1424.8660436137072 +2012-04-17 02:00:00,1331.0249221183801 +2012-04-17 03:00:00,1256.1152647975077 +2012-04-17 04:00:00,1236.6105919003114 +2012-04-17 05:00:00,1310.797507788162 +2012-04-17 06:00:00,1503.8006230529595 +2012-04-17 07:00:00,1675.526479750779 +2012-04-17 08:00:00,1788.4953271028037 +2012-04-17 09:00:00,2249.856697819315 +2012-04-17 10:00:00,2539.398753894081 +2012-04-17 11:00:00,2765.8971962616824 +2012-04-17 12:00:00,2872.457943925234 +2012-04-17 13:00:00,2882.595015576324 +2012-04-17 14:00:00,2912.1931464174454 +2012-04-17 15:00:00,2950.143302180685 +2012-04-17 16:00:00,2936.006230529595 +2012-04-17 17:00:00,2928.2959501557634 +2012-04-17 18:00:00,2942.93769470405 +2012-04-17 19:00:00,2940.8442367601247 +2012-04-17 20:00:00,2932.6884735202493 +2012-04-17 21:00:00,2858.6947040498444 +2012-04-17 22:00:00,2615.059190031153 +2012-04-17 23:00:00,2169.7383177570096 +2012-04-18 00:00:00,1712.2118380062304 +2012-04-18 01:00:00,1374.760124610592 +2012-04-18 02:00:00,1282.2803738317757 +2012-04-18 03:00:00,1254.214953271028 +2012-04-18 04:00:00,1226.8971962616822 +2012-04-18 05:00:00,1275.0685358255453 +2012-04-18 06:00:00,1443.2305295950155 +2012-04-18 07:00:00,1660.943925233645 +2012-04-18 08:00:00,1782.4392523364486 +2012-04-18 09:00:00,2261.2492211838007 +2012-04-18 10:00:00,2554.803738317757 +2012-04-18 11:00:00,2797.246105919003 +2012-04-18 12:00:00,2792.8909657320874 +2012-04-18 13:00:00,2790.489096573209 +2012-04-18 14:00:00,2802.6105919003116 +2012-04-18 15:00:00,2838.2242990654204 +2012-04-18 16:00:00,2793.0186915887853 +2012-04-18 17:00:00,2881.302180685358 +2012-04-18 18:00:00,2889.753894080997 +2012-04-18 19:00:00,2871.6043613707166 +2012-04-18 20:00:00,2966.809968847352 +2012-04-18 21:00:00,2926.165109034268 +2012-04-18 22:00:00,2612.0093457943926 +2012-04-18 23:00:00,2166.588785046729 +2012-04-19 00:00:00,1671.398753894081 +2012-04-19 01:00:00,1359.3115264797507 +2012-04-19 02:00:00,1302.9003115264798 +2012-04-19 03:00:00,1239.9408099688474 +2012-04-19 04:00:00,1232.3239875389409 +2012-04-19 05:00:00,1298.0716510903426 +2012-04-19 06:00:00,1456.0841121495328 +2012-04-19 07:00:00,1699.1090342679129 +2012-04-19 08:00:00,1803.4143302180685 +2012-04-19 09:00:00,2274.336448598131 +2012-04-19 10:00:00,2587.323987538941 +2012-04-19 11:00:00,2786.7414330218066 +2012-04-19 12:00:00,2810.3271028037384 +2012-04-19 13:00:00,2838.1183800623053 +2012-04-19 14:00:00,2850.221183800623 +2012-04-19 15:00:00,2799.2523364485983 +2012-04-19 16:00:00,2814.6604361370714 +2012-04-19 17:00:00,2881.3831775700933 +2012-04-19 18:00:00,2923.8598130841124 +2012-04-19 19:00:00,2929.473520249221 +2012-04-19 20:00:00,2957.6417445482866 +2012-04-19 21:00:00,2959.632398753894 +2012-04-19 22:00:00,2756.052959501558 +2012-04-19 23:00:00,2344.803738317757 +2012-04-20 00:00:00,1749.2897196261683 +2012-04-20 01:00:00,1157.651090342679 +2012-04-20 02:00:00,1266.454828660436 +2012-04-20 03:00:00,1360.576323987539 +2012-04-20 04:00:00,1261.9595015576324 +2012-04-20 05:00:00,1325.8940809968847 +2012-04-20 06:00:00,1490.5482866043615 +2012-04-20 07:00:00,1727.8566978193146 +2012-04-20 08:00:00,1843.3208722741433 +2012-04-20 09:00:00,2278.3769470404986 +2012-04-20 10:00:00,2637.7943925233644 +2012-04-20 11:00:00,2838.373831775701 +2012-04-20 12:00:00,2935.5482866043612 +2012-04-20 13:00:00,2887.8629283489095 +2012-04-20 14:00:00,2882.6417445482866 +2012-04-20 15:00:00,2851.4641744548285 +2012-04-20 16:00:00,2942.993769470405 +2012-04-20 17:00:00,2946.0093457943926 +2012-04-20 18:00:00,2998.0498442367602 +2012-04-20 19:00:00,3010.0404984423676 +2012-04-20 20:00:00,3039.0 +2012-04-20 21:00:00,3064.006230529595 +2012-04-20 22:00:00,2751.6417445482866 +2012-04-20 23:00:00,2360.753894080997 +2012-04-21 00:00:00,1810.760124610592 +2012-04-21 01:00:00,1517.0218068535826 +2012-04-21 02:00:00,1429.2180685358255 +2012-04-21 03:00:00,1304.5109034267912 +2012-04-21 04:00:00,1265.9719626168223 +2012-04-21 05:00:00,1306.0654205607477 +2012-04-21 06:00:00,1493.0218068535826 +2012-04-21 07:00:00,1712.0685358255453 +2012-04-21 08:00:00,1791.5109034267912 +2012-04-21 09:00:00,2277.5015576323985 +2012-04-21 10:00:00,2646.0934579439254 +2012-04-21 11:00:00,2914.9345794392525 +2012-04-21 12:00:00,2970.0872274143303 +2012-04-21 13:00:00,2987.202492211838 +2012-04-21 14:00:00,2947.323987538941 +2012-04-21 15:00:00,2950.3707165109035 +2012-04-21 16:00:00,3031.744548286604 +2012-04-21 17:00:00,3008.7258566978194 +2012-04-21 18:00:00,3049.894080996885 +2012-04-21 19:00:00,3049.183800623053 +2012-04-21 20:00:00,3030.1931464174454 +2012-04-21 21:00:00,3047.090342679128 +2012-04-21 22:00:00,2759.8130841121497 +2012-04-21 23:00:00,2350.1090342679126 +2012-04-22 00:00:00,1811.5514018691588 +2012-04-22 01:00:00,1492.1869158878505 +2012-04-22 02:00:00,1430.2367601246106 +2012-04-22 03:00:00,1349.760124610592 +2012-04-22 04:00:00,1233.392523364486 +2012-04-22 05:00:00,1262.252336448598 +2012-04-22 06:00:00,1449.3457943925234 +2012-04-22 07:00:00,1645.545171339564 +2012-04-22 08:00:00,1696.454828660436 +2012-04-22 09:00:00,2164.4517133956388 +2012-04-22 10:00:00,2591.6822429906542 +2012-04-22 11:00:00,2898.3177570093458 +2012-04-22 12:00:00,2961.8971962616824 +2012-04-22 13:00:00,2885.314641744548 +2012-04-22 14:00:00,2880.0996884735205 +2012-04-22 15:00:00,2864.7102803738317 +2012-04-22 16:00:00,2908.9501557632398 +2012-04-22 17:00:00,2940.3582554517134 +2012-04-22 18:00:00,2911.847352024922 +2012-04-22 19:00:00,2869.3644859813085 +2012-04-22 20:00:00,2946.4205607476633 +2012-04-22 21:00:00,2935.872274143302 +2012-04-22 22:00:00,2606.1028037383176 +2012-04-22 23:00:00,2059.5233644859813 +2012-04-23 00:00:00,1627.0031152647975 +2012-04-23 01:00:00,1373.1090342679129 +2012-04-23 02:00:00,1317.9376947040498 +2012-04-23 03:00:00,1259.3084112149534 +2012-04-23 04:00:00,1242.2367601246106 +2012-04-23 05:00:00,1332.5482866043615 +2012-04-23 06:00:00,1495.6604361370717 +2012-04-23 07:00:00,1682.0498442367602 +2012-04-23 08:00:00,1805.9127725856697 +2012-04-23 09:00:00,2254.3208722741433 +2012-04-23 10:00:00,2631.171339563863 +2012-04-23 11:00:00,2805.398753894081 +2012-04-23 12:00:00,2891.07476635514 +2012-04-23 13:00:00,2924.214953271028 +2012-04-23 14:00:00,2923.96261682243 +2012-04-23 15:00:00,2886.0155763239877 +2012-04-23 16:00:00,2943.1619937694704 +2012-04-23 17:00:00,2902.940809968847 +2012-04-23 18:00:00,2942.894080996885 +2012-04-23 19:00:00,2956.2585669781934 +2012-04-23 20:00:00,3001.398753894081 +2012-04-23 21:00:00,2988.816199376947 +2012-04-23 22:00:00,2667.02492211838 +2012-04-23 23:00:00,2249.7694704049845 +2012-04-24 00:00:00,1745.5202492211838 +2012-04-24 01:00:00,1429.0342679127725 +2012-04-24 02:00:00,1371.1744548286604 +2012-04-24 03:00:00,1312.2056074766356 +2012-04-24 04:00:00,1291.8785046728972 +2012-04-24 05:00:00,1358.0218068535826 +2012-04-24 06:00:00,1509.3302180685357 +2012-04-24 07:00:00,1719.6978193146417 +2012-04-24 08:00:00,1832.576323987539 +2012-04-24 09:00:00,2288.676012461059 +2012-04-24 10:00:00,2615.1183800623053 +2012-04-24 11:00:00,2813.1246105919004 +2012-04-24 12:00:00,2845.3644859813085 +2012-04-24 13:00:00,2868.2679127725855 +2012-04-24 14:00:00,2839.4766355140187 +2012-04-24 15:00:00,2904.92523364486 +2012-04-24 16:00:00,2901.489096573209 +2012-04-24 17:00:00,2970.7320872274145 +2012-04-24 18:00:00,2932.1619937694704 +2012-04-24 19:00:00,2937.6573208722743 +2012-04-24 20:00:00,2980.411214953271 +2012-04-24 21:00:00,2977.7507788161993 +2012-04-24 22:00:00,2669.0218068535823 +2012-04-24 23:00:00,2256.919003115265 +2012-04-25 00:00:00,1753.3364485981308 +2012-04-25 01:00:00,1430.2803738317757 +2012-04-25 02:00:00,1350.822429906542 +2012-04-25 03:00:00,1291.2554517133956 +2012-04-25 04:00:00,1265.1588785046729 +2012-04-25 05:00:00,1319.4704049844236 +2012-04-25 06:00:00,1506.8442367601247 +2012-04-25 07:00:00,1645.031152647975 +2012-04-25 08:00:00,1782.6947040498442 +2012-04-25 09:00:00,2203.183800623053 +2012-04-25 10:00:00,2639.473520249221 +2012-04-25 11:00:00,2720.4828660436137 +2012-04-25 12:00:00,2926.4174454828662 +2012-04-25 13:00:00,2948.0778816199377 +2012-04-25 14:00:00,2921.7165109034268 +2012-04-25 15:00:00,2903.3707165109035 +2012-04-25 16:00:00,3002.436137071651 +2012-04-25 17:00:00,2935.2523364485983 +2012-04-25 18:00:00,2946.5077881619936 +2012-04-25 19:00:00,2979.697819314642 +2012-04-25 20:00:00,3012.4080996884736 +2012-04-25 21:00:00,2978.3894080996884 +2012-04-25 22:00:00,2631.828660436137 +2012-04-25 23:00:00,2202.526479750779 +2012-04-26 00:00:00,1688.0498442367602 +2012-04-26 01:00:00,1384.1433021806854 +2012-04-26 02:00:00,1309.4859813084113 +2012-04-26 03:00:00,1260.2461059190032 +2012-04-26 04:00:00,1244.2803738317757 +2012-04-26 05:00:00,1297.526479750779 +2012-04-26 06:00:00,1468.1308411214952 +2012-04-26 07:00:00,1670.2274143302182 +2012-04-26 08:00:00,1826.2803738317757 +2012-04-26 09:00:00,2251.489096573209 +2012-04-26 10:00:00,2626.0155763239877 +2012-04-26 11:00:00,2723.5856697819313 +2012-04-26 12:00:00,2924.4984423676015 +2012-04-26 13:00:00,2871.2367601246106 +2012-04-26 14:00:00,2895.202492211838 +2012-04-26 15:00:00,2902.467289719626 +2012-04-26 16:00:00,2900.8909657320874 +2012-04-26 17:00:00,2968.872274143302 +2012-04-26 18:00:00,2967.947040498442 +2012-04-26 19:00:00,2962.208722741433 +2012-04-26 20:00:00,3041.847352024922 +2012-04-26 21:00:00,3007.239875389408 +2012-04-26 22:00:00,2733.177570093458 +2012-04-26 23:00:00,2211.588785046729 +2012-04-27 00:00:00,1709.7725856697818 +2012-04-27 01:00:00,1402.638629283489 +2012-04-27 02:00:00,1324.0965732087227 +2012-04-27 03:00:00,1250.9657320872275 +2012-04-27 04:00:00,1245.981308411215 +2012-04-27 05:00:00,1344.2616822429907 +2012-04-27 06:00:00,1476.1557632398753 +2012-04-27 07:00:00,1704.1682242990655 +2012-04-27 08:00:00,1821.4859813084113 +2012-04-27 09:00:00,2271.1246105919004 +2012-04-27 10:00:00,2634.654205607477 +2012-04-27 11:00:00,2756.3520249221183 +2012-04-27 12:00:00,2832.152647975078 +2012-04-27 13:00:00,2881.1464174454827 +2012-04-27 14:00:00,2944.0280373831774 +2012-04-27 15:00:00,2897.9781931464177 +2012-04-27 16:00:00,2908.772585669782 +2012-04-27 17:00:00,2965.0155763239877 +2012-04-27 18:00:00,2957.8068535825546 +2012-04-27 19:00:00,2960.277258566978 +2012-04-27 20:00:00,3019.9595015576324 +2012-04-27 21:00:00,2937.6417445482866 +2012-04-27 22:00:00,2667.1682242990655 +2012-04-27 23:00:00,2327.277258566978 +2012-04-28 00:00:00,1796.7912772585669 +2012-04-28 01:00:00,1493.5576323987539 +2012-04-28 02:00:00,1389.2367601246106 +2012-04-28 03:00:00,1271.4423676012461 +2012-04-28 04:00:00,1225.0591900311526 +2012-04-28 05:00:00,1322.4641744548287 +2012-04-28 06:00:00,1446.2897196261683 +2012-04-28 07:00:00,1639.3457943925234 +2012-04-28 08:00:00,1783.853582554517 +2012-04-28 09:00:00,2251.2180685358258 +2012-04-28 10:00:00,2650.728971962617 +2012-04-28 11:00:00,2688.2741433021806 +2012-04-28 12:00:00,2780.214953271028 +2012-04-28 13:00:00,2796.7476635514017 +2012-04-28 14:00:00,2767.956386292835 +2012-04-28 15:00:00,2745.707165109034 +2012-04-28 16:00:00,2809.772585669782 +2012-04-28 17:00:00,2812.8909657320874 +2012-04-28 18:00:00,2831.632398753894 +2012-04-28 19:00:00,2847.903426791277 +2012-04-28 20:00:00,2892.557632398754 +2012-04-28 21:00:00,2923.052959501558 +2012-04-28 22:00:00,2684.866043613707 +2012-04-28 23:00:00,2290.0155763239877 +2012-04-29 00:00:00,1783.423676012461 +2012-04-29 01:00:00,1465.9345794392523 +2012-04-29 02:00:00,1387.943925233645 +2012-04-29 03:00:00,1303.2429906542056 +2012-04-29 04:00:00,1193.0934579439252 +2012-04-29 05:00:00,1266.2180685358255 +2012-04-29 06:00:00,1432.6978193146417 +2012-04-29 07:00:00,1556.4454828660437 +2012-04-29 08:00:00,1657.6853582554518 +2012-04-29 09:00:00,2121.856697819315 +2012-04-29 10:00:00,2567.557632398754 +2012-04-29 11:00:00,2670.4174454828662 +2012-04-29 12:00:00,2684.3052959501556 +2012-04-29 13:00:00,2644.772585669782 +2012-04-29 14:00:00,2659.0155763239877 +2012-04-29 15:00:00,2649.121495327103 +2012-04-29 16:00:00,2671.7258566978194 +2012-04-29 17:00:00,2701.4018691588785 +2012-04-29 18:00:00,2741.398753894081 +2012-04-29 19:00:00,2708.5669781931465 +2012-04-29 20:00:00,2730.697819314642 +2012-04-29 21:00:00,2802.1152647975077 +2012-04-29 22:00:00,2494.9968847352025 +2012-04-29 23:00:00,2019.993769470405 +2012-04-30 00:00:00,1606.4766355140187 +2012-04-30 01:00:00,1295.1931464174454 +2012-04-30 02:00:00,1232.6915887850466 +2012-04-30 03:00:00,1180.6791277258567 +2012-04-30 04:00:00,1199.9781931464174 +2012-04-30 05:00:00,1245.5015576323988 +2012-04-30 06:00:00,1416.638629283489 +2012-04-30 07:00:00,1588.7881619937696 +2012-04-30 08:00:00,1748.2492211838007 +2012-04-30 09:00:00,2198.6230529595014 +2012-04-30 10:00:00,2745.1495327102803 +2012-04-30 11:00:00,2782.6292834890965 +2012-04-30 12:00:00,2872.9532710280373 +2012-04-30 13:00:00,2841.7040498442366 +2012-04-30 14:00:00,2811.133956386293 +2012-04-30 15:00:00,2816.654205607477 +2012-04-30 16:00:00,2866.7476635514017 +2012-04-30 17:00:00,2884.5233644859813 +2012-04-30 18:00:00,2936.02492211838 +2012-04-30 19:00:00,2939.3333333333335 +2012-04-30 20:00:00,2953.411214953271 +2012-04-30 21:00:00,2989.504672897196 +2012-04-30 22:00:00,2754.3426791277257 +2012-04-30 23:00:00,2354.8317757009345 +2012-05-01 00:00:00,1711.2834890965732 +2012-05-01 01:00:00,1358.6853582554518 +2012-05-01 02:00:00,1296.03738317757 +2012-05-01 03:00:00,1222.1152647975077 +2012-05-01 04:00:00,1198.5109034267912 +2012-05-01 05:00:00,1287.9657320872275 +2012-05-01 06:00:00,1454.4330218068535 +2012-05-01 07:00:00,1618.8411214953271 +2012-05-01 08:00:00,1753.9657320872275 +2012-05-01 09:00:00,2198.4984423676015 +2012-05-01 10:00:00,2581.3489096573207 +2012-05-01 11:00:00,2726.7102803738317 +2012-05-01 12:00:00,2867.246105919003 +2012-05-01 13:00:00,2826.7102803738317 +2012-05-01 14:00:00,2839.059190031153 +2012-05-01 15:00:00,2864.8130841121497 +2012-05-01 16:00:00,2892.196261682243 +2012-05-01 17:00:00,2914.06230529595 +2012-05-01 18:00:00,2938.872274143302 +2012-05-01 19:00:00,2900.0218068535823 +2012-05-01 20:00:00,2927.828660436137 +2012-05-01 21:00:00,2978.5669781931465 +2012-05-01 22:00:00,2721.2897196261683 +2012-05-01 23:00:00,2242.5856697819313 +2012-05-02 00:00:00,1710.0872274143303 +2012-05-02 01:00:00,1318.8753894080996 +2012-05-02 02:00:00,1272.2647975077882 +2012-05-02 03:00:00,1222.526479750779 +2012-05-02 04:00:00,1219.5514018691588 +2012-05-02 05:00:00,1275.6978193146417 +2012-05-02 06:00:00,1454.0467289719627 +2012-05-02 07:00:00,1661.4267912772586 +2012-05-02 08:00:00,1800.607476635514 +2012-05-02 09:00:00,2254.3395638629286 +2012-05-02 10:00:00,2590.532710280374 +2012-05-02 11:00:00,2741.3800623052957 +2012-05-02 12:00:00,2906.0467289719627 +2012-05-02 13:00:00,2845.6230529595014 +2012-05-02 14:00:00,2917.1183800623053 +2012-05-02 15:00:00,2933.588785046729 +2012-05-02 16:00:00,2937.9221183800623 +2012-05-02 17:00:00,2919.286604361371 +2012-05-02 18:00:00,3038.361370716511 +2012-05-02 19:00:00,2968.0467289719627 +2012-05-02 20:00:00,2993.0280373831774 +2012-05-02 21:00:00,3012.1464174454827 +2012-05-02 22:00:00,2802.171339563863 +2012-05-02 23:00:00,2375.613707165109 +2012-05-03 00:00:00,1758.3956386292834 +2012-05-03 01:00:00,1447.2616822429907 +2012-05-03 02:00:00,1371.9376947040498 +2012-05-03 03:00:00,1300.657320872274 +2012-05-03 04:00:00,1245.4392523364486 +2012-05-03 05:00:00,1297.9314641744547 +2012-05-03 06:00:00,1514.2180685358255 +2012-05-03 07:00:00,1713.1713395638628 +2012-05-03 08:00:00,1827.3021806853583 +2012-05-03 09:00:00,2293.856697819315 +2012-05-03 10:00:00,2728.4018691588785 +2012-05-03 11:00:00,2887.7476635514017 +2012-05-03 12:00:00,2942.07476635514 +2012-05-03 13:00:00,2959.2834890965732 +2012-05-03 14:00:00,2972.1557632398753 +2012-05-03 15:00:00,2925.931464174455 +2012-05-03 16:00:00,2982.11214953271 +2012-05-03 17:00:00,2960.834890965732 +2012-05-03 18:00:00,3010.2616822429904 +2012-05-03 19:00:00,2992.7943925233644 +2012-05-03 20:00:00,3027.7632398753894 +2012-05-03 21:00:00,2978.588785046729 +2012-05-03 22:00:00,2759.5919003115264 +2012-05-03 23:00:00,2364.5794392523367 +2012-05-04 00:00:00,1764.9283489096574 +2012-05-04 01:00:00,1410.4610591900312 +2012-05-04 02:00:00,1351.545171339564 +2012-05-04 03:00:00,1281.8504672897195 +2012-05-04 04:00:00,1276.1308411214952 +2012-05-04 05:00:00,1336.5669781931465 +2012-05-04 06:00:00,1507.9968847352025 +2012-05-04 07:00:00,1736.1931464174454 +2012-05-04 08:00:00,1862.1744548286604 +2012-05-04 09:00:00,2280.448598130841 +2012-05-04 10:00:00,2654.4018691588785 +2012-05-04 11:00:00,2773.766355140187 +2012-05-04 12:00:00,2950.392523364486 +2012-05-04 13:00:00,2913.7383177570096 +2012-05-04 14:00:00,2913.436137071651 +2012-05-04 15:00:00,2943.8006230529595 +2012-05-04 16:00:00,2964.4080996884736 +2012-05-04 17:00:00,2962.8193146417448 +2012-05-04 18:00:00,2974.411214953271 +2012-05-04 19:00:00,3031.299065420561 +2012-05-04 20:00:00,3077.3271028037384 +2012-05-04 21:00:00,3070.722741433022 +2012-05-04 22:00:00,2888.330218068536 +2012-05-04 23:00:00,2381.6105919003116 +2012-05-05 00:00:00,1830.473520249221 +2012-05-05 01:00:00,1532.8940809968847 +2012-05-05 02:00:00,1447.613707165109 +2012-05-05 03:00:00,1334.6448598130842 +2012-05-05 04:00:00,1282.4330218068535 +2012-05-05 05:00:00,1303.6915887850466 +2012-05-05 06:00:00,1512.4704049844236 +2012-05-05 07:00:00,1679.619937694704 +2012-05-05 08:00:00,1826.1059190031153 +2012-05-05 09:00:00,2280.3520249221183 +2012-05-05 10:00:00,2663.931464174455 +2012-05-05 11:00:00,2821.0 +2012-05-05 12:00:00,2860.6604361370714 +2012-05-05 13:00:00,2969.6728971962616 +2012-05-05 14:00:00,2954.700934579439 +2012-05-05 15:00:00,2969.3052959501556 +2012-05-05 16:00:00,3010.785046728972 +2012-05-05 17:00:00,3034.7320872274145 +2012-05-05 18:00:00,3050.0186915887853 +2012-05-05 19:00:00,3026.8380062305296 +2012-05-05 20:00:00,3028.685358255452 +2012-05-05 21:00:00,3092.760124610592 +2012-05-05 22:00:00,2918.361370716511 +2012-05-05 23:00:00,2522.9813084112147 +2012-05-06 00:00:00,1886.2959501557632 +2012-05-06 01:00:00,1530.196261682243 +2012-05-06 02:00:00,1426.3769470404984 +2012-05-06 03:00:00,1329.9252336448599 +2012-05-06 04:00:00,1234.1370716510903 +2012-05-06 05:00:00,1272.0498442367602 +2012-05-06 06:00:00,1443.3333333333333 +2012-05-06 07:00:00,1625.8504672897195 +2012-05-06 08:00:00,1724.2429906542056 +2012-05-06 09:00:00,2193.0996884735205 +2012-05-06 10:00:00,2650.330218068536 +2012-05-06 11:00:00,2710.744548286604 +2012-05-06 12:00:00,2965.713395638629 +2012-05-06 13:00:00,2893.5794392523367 +2012-05-06 14:00:00,2917.239875389408 +2012-05-06 15:00:00,2911.4704049844236 +2012-05-06 16:00:00,2921.3956386292834 +2012-05-06 17:00:00,2948.3800623052957 +2012-05-06 18:00:00,2944.5171339563863 +2012-05-06 19:00:00,2948.595015576324 +2012-05-06 20:00:00,2939.7570093457944 +2012-05-06 21:00:00,3023.6573208722743 +2012-05-06 22:00:00,2743.931464174455 +2012-05-06 23:00:00,2234.1028037383176 +2012-05-07 00:00:00,1645.5919003115264 +2012-05-07 01:00:00,1345.3457943925234 +2012-05-07 02:00:00,1300.3021806853583 +2012-05-07 03:00:00,1252.1588785046729 +2012-05-07 04:00:00,1264.9283489096574 +2012-05-07 05:00:00,1335.6666666666667 +2012-05-07 06:00:00,1498.0685358255453 +2012-05-07 07:00:00,1682.6666666666667 +2012-05-07 08:00:00,1812.0747663551401 +2012-05-07 09:00:00,2263.9221183800623 +2012-05-07 10:00:00,2797.1931464174454 +2012-05-07 11:00:00,2931.6479750778817 +2012-05-07 12:00:00,2993.5856697819313 +2012-05-07 13:00:00,2984.8629283489095 +2012-05-07 14:00:00,2985.791277258567 +2012-05-07 15:00:00,3006.239875389408 +2012-05-07 16:00:00,3027.299065420561 +2012-05-07 17:00:00,2922.2305295950155 +2012-05-07 18:00:00,3013.8909657320874 +2012-05-07 19:00:00,3119.6168224299067 +2012-05-07 20:00:00,3111.3520249221183 +2012-05-07 21:00:00,3123.5171339563863 +2012-05-07 22:00:00,2891.8629283489095 +2012-05-07 23:00:00,2459.4330218068535 +2012-05-08 00:00:00,1865.98753894081 +2012-05-08 01:00:00,1543.4080996884736 +2012-05-08 02:00:00,1442.8473520249222 +2012-05-08 03:00:00,1386.785046728972 +2012-05-08 04:00:00,1356.4766355140187 +2012-05-08 05:00:00,1414.8566978193146 +2012-05-08 06:00:00,1607.01246105919 +2012-05-08 07:00:00,1750.0155763239875 +2012-05-08 08:00:00,1882.7757009345794 +2012-05-08 09:00:00,2341.0498442367602 +2012-05-08 10:00:00,2756.2180685358258 +2012-05-08 11:00:00,2881.0934579439254 +2012-05-08 12:00:00,3057.1464174454827 +2012-05-08 13:00:00,3187.7414330218066 +2012-05-08 14:00:00,3137.3271028037384 +2012-05-08 15:00:00,3255.8598130841124 +2012-05-08 16:00:00,3283.0934579439254 +2012-05-08 17:00:00,3269.9813084112147 +2012-05-08 18:00:00,3318.4984423676015 +2012-05-08 19:00:00,3247.834890965732 +2012-05-08 20:00:00,3179.4859813084113 +2012-05-08 21:00:00,3261.919003115265 +2012-05-08 22:00:00,2987.7476635514017 +2012-05-08 23:00:00,2506.2523364485983 +2012-05-09 00:00:00,1876.4018691588785 +2012-05-09 01:00:00,1548.386292834891 +2012-05-09 02:00:00,1486.7196261682243 +2012-05-09 03:00:00,1377.588785046729 +2012-05-09 04:00:00,1344.1526479750778 +2012-05-09 05:00:00,1394.1308411214952 +2012-05-09 06:00:00,1566.0872274143303 +2012-05-09 07:00:00,1766.3582554517134 +2012-05-09 08:00:00,1841.8255451713396 +2012-05-09 09:00:00,2312.495327102804 +2012-05-09 10:00:00,2765.1464174454827 +2012-05-09 11:00:00,3207.096573208723 +2012-05-09 12:00:00,3584.080996884735 +2012-05-09 13:00:00,3551.993769470405 +2012-05-09 14:00:00,3632.221183800623 +2012-05-09 15:00:00,3714.3769470404986 +2012-05-09 16:00:00,3759.264797507788 +2012-05-09 17:00:00,3784.3333333333335 +2012-05-09 18:00:00,3781.0934579439254 +2012-05-09 19:00:00,3763.676012461059 +2012-05-09 20:00:00,3566.6573208722743 +2012-05-09 21:00:00,3576.691588785047 +2012-05-09 22:00:00,3230.264797507788 +2012-05-09 23:00:00,2636.9844236760123 +2012-05-10 00:00:00,1835.4766355140187 +2012-05-10 01:00:00,1457.8816199376947 +2012-05-10 02:00:00,1406.1495327102805 +2012-05-10 03:00:00,1356.3364485981308 +2012-05-10 04:00:00,1302.6417445482866 +2012-05-10 05:00:00,1361.728971962617 +2012-05-10 06:00:00,1554.7258566978194 +2012-05-10 07:00:00,1750.6105919003114 +2012-05-10 08:00:00,1878.1246105919004 +2012-05-10 09:00:00,2389.956386292835 +2012-05-10 10:00:00,2914.7258566978194 +2012-05-10 11:00:00,3650.6573208722743 +2012-05-10 12:00:00,3819.2585669781934 +2012-05-10 13:00:00,3857.947040498442 +2012-05-10 14:00:00,3899.233644859813 +2012-05-10 15:00:00,3971.7632398753894 +2012-05-10 16:00:00,4008.479750778816 +2012-05-10 17:00:00,4047.1495327102803 +2012-05-10 18:00:00,4039.809968847352 +2012-05-10 19:00:00,3918.196261682243 +2012-05-10 20:00:00,3746.6417445482866 +2012-05-10 21:00:00,3655.1183800623053 +2012-05-10 22:00:00,3237.791277258567 +2012-05-10 23:00:00,2464.3582554517134 +2012-05-11 00:00:00,1824.221183800623 +2012-05-11 01:00:00,1489.4828660436137 +2012-05-11 02:00:00,1437.1308411214952 +2012-05-11 03:00:00,1382.9532710280373 +2012-05-11 04:00:00,1351.404984423676 +2012-05-11 05:00:00,1410.239875389408 +2012-05-11 06:00:00,1589.0903426791276 +2012-05-11 07:00:00,1819.7632398753894 +2012-05-11 08:00:00,1949.3551401869158 +2012-05-11 09:00:00,2491.221183800623 +2012-05-11 10:00:00,3051.345794392523 +2012-05-11 11:00:00,3584.1464174454827 +2012-05-11 12:00:00,3937.878504672897 +2012-05-11 13:00:00,3967.691588785047 +2012-05-11 14:00:00,4011.059190031153 +2012-05-11 15:00:00,3977.526479750779 +2012-05-11 16:00:00,4027.489096573209 +2012-05-11 17:00:00,3831.4922118380064 +2012-05-11 18:00:00,3968.336448598131 +2012-05-11 19:00:00,3851.6947040498444 +2012-05-11 20:00:00,3856.4641744548285 +2012-05-11 21:00:00,3808.663551401869 +2012-05-11 22:00:00,3357.676012461059 +2012-05-11 23:00:00,2664.7165109034268 +2012-05-12 00:00:00,1950.9595015576324 +2012-05-12 01:00:00,1641.8753894080996 +2012-05-12 02:00:00,1570.5202492211838 +2012-05-12 03:00:00,1446.747663551402 +2012-05-12 04:00:00,1384.2118380062304 +2012-05-12 05:00:00,1427.6884735202493 +2012-05-12 06:00:00,1620.9532710280373 +2012-05-12 07:00:00,1815.8940809968847 +2012-05-12 08:00:00,1952.5015576323988 +2012-05-12 09:00:00,2509.2367601246106 +2012-05-12 10:00:00,3243.2616822429904 +2012-05-12 11:00:00,3949.5171339563863 +2012-05-12 12:00:00,4153.763239875389 +2012-05-12 13:00:00,4220.006230529595 +2012-05-12 14:00:00,4283.719626168225 +2012-05-12 15:00:00,4340.461059190031 +2012-05-12 16:00:00,4303.115264797508 +2012-05-12 17:00:00,4290.934579439252 +2012-05-12 18:00:00,4240.866043613707 +2012-05-12 19:00:00,4049.6417445482866 +2012-05-12 20:00:00,3917.0716510903426 +2012-05-12 21:00:00,3916.404984423676 +2012-05-12 22:00:00,3587.031152647975 +2012-05-12 23:00:00,2709.02492211838 +2012-05-13 00:00:00,1946.4984423676012 +2012-05-13 01:00:00,1634.6542056074766 +2012-05-13 02:00:00,1566.6261682242991 +2012-05-13 03:00:00,1479.4704049844236 +2012-05-13 04:00:00,1363.8785046728972 +2012-05-13 05:00:00,1406.1214953271028 +2012-05-13 06:00:00,1596.239875389408 +2012-05-13 07:00:00,1753.0654205607477 +2012-05-13 08:00:00,1867.1214953271028 +2012-05-13 09:00:00,2431.1464174454827 +2012-05-13 10:00:00,3485.330218068536 +2012-05-13 11:00:00,3831.88785046729 +2012-05-13 12:00:00,4236.990654205608 +2012-05-13 13:00:00,4221.183800623053 +2012-05-13 14:00:00,4174.22429906542 +2012-05-13 15:00:00,4142.146417445483 +2012-05-13 16:00:00,4177.588785046729 +2012-05-13 17:00:00,4199.355140186916 +2012-05-13 18:00:00,4334.292834890965 +2012-05-13 19:00:00,4196.467289719626 +2012-05-13 20:00:00,3966.2429906542056 +2012-05-13 21:00:00,3906.809968847352 +2012-05-13 22:00:00,3316.5669781931465 +2012-05-13 23:00:00,2434.735202492212 +2012-05-14 00:00:00,1780.8504672897195 +2012-05-14 01:00:00,1499.7102803738317 +2012-05-14 02:00:00,1442.146417445483 +2012-05-14 03:00:00,1401.8629283489097 +2012-05-14 04:00:00,1407.993769470405 +2012-05-14 05:00:00,1480.981308411215 +2012-05-14 06:00:00,1620.8130841121495 +2012-05-14 07:00:00,1798.588785046729 +2012-05-14 08:00:00,1929.1900311526479 +2012-05-14 09:00:00,2459.5482866043612 +2012-05-14 10:00:00,3549.613707165109 +2012-05-14 11:00:00,3938.429906542056 +2012-05-14 12:00:00,4266.3613707165105 +2012-05-14 13:00:00,4354.573208722742 +2012-05-14 14:00:00,4433.806853582554 +2012-05-14 15:00:00,4484.548286604361 +2012-05-14 16:00:00,4454.152647975078 +2012-05-14 17:00:00,4381.479750778816 +2012-05-14 18:00:00,4440.274143302181 +2012-05-14 19:00:00,4325.118380062306 +2012-05-14 20:00:00,4015.183800623053 +2012-05-14 21:00:00,3942.6666666666665 +2012-05-14 22:00:00,3546.6292834890965 +2012-05-14 23:00:00,2627.461059190031 +2012-05-15 00:00:00,1893.5077881619939 +2012-05-15 01:00:00,1577.2118380062304 +2012-05-15 02:00:00,1521.3582554517134 +2012-05-15 03:00:00,1467.7258566978194 +2012-05-15 04:00:00,1428.2897196261683 +2012-05-15 05:00:00,1490.6448598130842 +2012-05-15 06:00:00,1629.5607476635514 +2012-05-15 07:00:00,1815.0716510903426 +2012-05-15 08:00:00,1923.6760124610591 +2012-05-15 09:00:00,2839.7320872274145 +2012-05-15 10:00:00,3890.6105919003116 +2012-05-15 11:00:00,4110.330218068536 +2012-05-15 12:00:00,4333.591900311527 +2012-05-15 13:00:00,4436.8753894081 +2012-05-15 14:00:00,4332.320872274143 +2012-05-15 15:00:00,4461.623052959501 +2012-05-15 16:00:00,4419.1682242990655 +2012-05-15 17:00:00,4523.679127725857 +2012-05-15 18:00:00,4475.221183800623 +2012-05-15 19:00:00,4260.520249221184 +2012-05-15 20:00:00,4255.249221183801 +2012-05-15 21:00:00,4174.841121495327 +2012-05-15 22:00:00,3415.442367601246 +2012-05-15 23:00:00,2473.7414330218066 +2012-05-16 00:00:00,1885.2866043613708 +2012-05-16 01:00:00,1558.2741433021806 +2012-05-16 02:00:00,1509.8816199376947 +2012-05-16 03:00:00,1454.9376947040498 +2012-05-16 04:00:00,1421.9190031152648 +2012-05-16 05:00:00,1450.607476635514 +2012-05-16 06:00:00,1664.2367601246106 +2012-05-16 07:00:00,1799.8785046728972 +2012-05-16 08:00:00,1933.5420560747664 +2012-05-16 09:00:00,3217.096573208723 +2012-05-16 10:00:00,3684.398753894081 +2012-05-16 11:00:00,4265.355140186916 +2012-05-16 12:00:00,4250.666666666667 +2012-05-16 13:00:00,4394.906542056075 +2012-05-16 14:00:00,4470.408099688473 +2012-05-16 15:00:00,4481.289719626168 +2012-05-16 16:00:00,4467.1246105919 +2012-05-16 17:00:00,4412.931464174455 +2012-05-16 18:00:00,4366.3021806853585 +2012-05-16 19:00:00,4289.9657320872275 +2012-05-16 20:00:00,4088.0186915887853 +2012-05-16 21:00:00,4006.177570093458 +2012-05-16 22:00:00,3179.043613707165 +2012-05-16 23:00:00,2442.4641744548285 +2012-05-17 00:00:00,1891.822429906542 +2012-05-17 01:00:00,1536.252336448598 +2012-05-17 02:00:00,1484.803738317757 +2012-05-17 03:00:00,1437.0218068535826 +2012-05-17 04:00:00,1412.404984423676 +2012-05-17 05:00:00,1459.8566978193146 +2012-05-17 06:00:00,1664.9657320872275 +2012-05-17 07:00:00,1856.9750778816199 +2012-05-17 08:00:00,1975.0529595015576 +2012-05-17 09:00:00,2746.931464174455 +2012-05-17 10:00:00,3547.3208722741433 +2012-05-17 11:00:00,3853.6043613707166 +2012-05-17 12:00:00,3912.1090342679126 +2012-05-17 13:00:00,3902.411214953271 +2012-05-17 14:00:00,3906.803738317757 +2012-05-17 15:00:00,3926.0404984423676 +2012-05-17 16:00:00,3936.0093457943926 +2012-05-17 17:00:00,3931.760124610592 +2012-05-17 18:00:00,3892.700934579439 +2012-05-17 19:00:00,3837.3582554517134 +2012-05-17 20:00:00,3733.538940809969 +2012-05-17 21:00:00,3727.4828660436137 +2012-05-17 22:00:00,3281.685358255452 +2012-05-17 23:00:00,2656.7507788161993 +2012-05-18 00:00:00,1877.595015576324 +2012-05-18 01:00:00,1500.6697819314643 +2012-05-18 02:00:00,1449.6292834890967 +2012-05-18 03:00:00,1381.1246105919004 +2012-05-18 04:00:00,1374.9595015576324 +2012-05-18 05:00:00,1419.2367601246106 +2012-05-18 06:00:00,1633.5545171339563 +2012-05-18 07:00:00,1816.3115264797507 +2012-05-18 08:00:00,1942.0965732087227 +2012-05-18 09:00:00,2689.3177570093458 +2012-05-18 10:00:00,3004.286604361371 +2012-05-18 11:00:00,3153.1090342679126 +2012-05-18 12:00:00,3282.8006230529595 +2012-05-18 13:00:00,3298.7507788161993 +2012-05-18 14:00:00,3387.489096573209 +2012-05-18 15:00:00,3422.1931464174454 +2012-05-18 16:00:00,4117.844236760125 +2012-05-18 17:00:00,3748.121495327103 +2012-05-18 18:00:00,3617.4205607476633 +2012-05-18 19:00:00,3620.2585669781934 +2012-05-18 20:00:00,3494.5856697819313 +2012-05-18 21:00:00,3488.473520249221 +2012-05-18 22:00:00,3201.411214953271 +2012-05-18 23:00:00,2667.7102803738317 +2012-05-19 00:00:00,2004.9844236760125 +2012-05-19 01:00:00,1573.5607476635514 +2012-05-19 02:00:00,1507.607476635514 +2012-05-19 03:00:00,1382.6884735202493 +2012-05-19 04:00:00,1337.2834890965732 +2012-05-19 05:00:00,1372.0155763239875 +2012-05-19 06:00:00,1573.018691588785 +2012-05-19 07:00:00,1722.5919003115264 +2012-05-19 08:00:00,1869.4330218068535 +2012-05-19 09:00:00,2550.97507788162 +2012-05-19 10:00:00,2881.2834890965732 +2012-05-19 11:00:00,3150.7632398753894 +2012-05-19 12:00:00,3281.909657320872 +2012-05-19 13:00:00,3223.5856697819313 +2012-05-19 14:00:00,3228.404984423676 +2012-05-19 15:00:00,3287.03738317757 +2012-05-19 16:00:00,3247.3800623052957 +2012-05-19 17:00:00,3233.8255451713394 +2012-05-19 18:00:00,3289.2616822429904 +2012-05-19 19:00:00,3242.3489096573207 +2012-05-19 20:00:00,3176.9221183800623 +2012-05-19 21:00:00,3224.7196261682243 +2012-05-19 22:00:00,2950.9781931464177 +2012-05-19 23:00:00,2382.367601246106 +2012-05-20 00:00:00,1838.7133956386292 +2012-05-20 01:00:00,1525.3177570093458 +2012-05-20 02:00:00,1466.5171339563863 +2012-05-20 03:00:00,1380.8660436137072 +2012-05-20 04:00:00,1268.9003115264798 +2012-05-20 05:00:00,1309.239875389408 +2012-05-20 06:00:00,1504.454828660436 +2012-05-20 07:00:00,1635.7445482866044 +2012-05-20 08:00:00,1719.2647975077882 +2012-05-20 09:00:00,2406.3426791277257 +2012-05-20 10:00:00,2789.0934579439254 +2012-05-20 11:00:00,3048.1869158878503 +2012-05-20 12:00:00,3180.8006230529595 +2012-05-20 13:00:00,3064.878504672897 +2012-05-20 14:00:00,3092.1619937694704 +2012-05-20 15:00:00,3097.392523364486 +2012-05-20 16:00:00,3169.214953271028 +2012-05-20 17:00:00,3143.797507788162 +2012-05-20 18:00:00,3137.8317757009345 +2012-05-20 19:00:00,3067.894080996885 +2012-05-20 20:00:00,3096.8130841121497 +2012-05-20 21:00:00,3132.2959501557634 +2012-05-20 22:00:00,2809.6199376947043 +2012-05-20 23:00:00,2161.5607476635514 +2012-05-21 00:00:00,1670.0 +2012-05-21 01:00:00,1347.0841121495328 +2012-05-21 02:00:00,1310.0342679127725 +2012-05-21 03:00:00,1253.4641744548287 +2012-05-21 04:00:00,1251.454828660436 +2012-05-21 05:00:00,1334.031152647975 +2012-05-21 06:00:00,1504.6479750778817 +2012-05-21 07:00:00,1669.404984423676 +2012-05-21 08:00:00,1806.4330218068535 +2012-05-21 09:00:00,2474.613707165109 +2012-05-21 10:00:00,2771.3333333333335 +2012-05-21 11:00:00,3095.9345794392525 +2012-05-21 12:00:00,3135.9532710280373 +2012-05-21 13:00:00,3178.2523364485983 +2012-05-21 14:00:00,3208.654205607477 +2012-05-21 15:00:00,3186.8006230529595 +2012-05-21 16:00:00,3218.6292834890965 +2012-05-21 17:00:00,3224.613707165109 +2012-05-21 18:00:00,3232.214953271028 +2012-05-21 19:00:00,3216.6791277258567 +2012-05-21 20:00:00,3126.2429906542056 +2012-05-21 21:00:00,3217.9657320872275 +2012-05-21 22:00:00,2930.314641744548 +2012-05-21 23:00:00,2447.4080996884736 +2012-05-22 00:00:00,1882.2461059190032 +2012-05-22 01:00:00,1560.0654205607477 +2012-05-22 02:00:00,1466.177570093458 +2012-05-22 03:00:00,1394.0436137071652 +2012-05-22 04:00:00,1372.8442367601247 +2012-05-22 05:00:00,1430.0155763239875 +2012-05-22 06:00:00,1603.9750778816199 +2012-05-22 07:00:00,1737.3302180685357 +2012-05-22 08:00:00,1872.0498442367602 +2012-05-22 09:00:00,2536.308411214953 +2012-05-22 10:00:00,2893.133956386293 +2012-05-22 11:00:00,3186.98753894081 +2012-05-22 12:00:00,3340.1308411214955 +2012-05-22 13:00:00,3343.4766355140187 +2012-05-22 14:00:00,3402.778816199377 +2012-05-22 15:00:00,3416.8753894080996 +2012-05-22 16:00:00,3471.9439252336447 +2012-05-22 17:00:00,3469.5482866043612 +2012-05-22 18:00:00,3557.314641744548 +2012-05-22 19:00:00,3479.96261682243 +2012-05-22 20:00:00,3372.1744548286606 +2012-05-22 21:00:00,3389.4984423676015 +2012-05-22 22:00:00,2966.1619937694704 +2012-05-22 23:00:00,2300.3800623052957 +2012-05-23 00:00:00,1819.9252336448599 +2012-05-23 01:00:00,1496.588785046729 +2012-05-23 02:00:00,1436.9003115264798 +2012-05-23 03:00:00,1387.5077881619939 +2012-05-23 04:00:00,1373.239875389408 +2012-05-23 05:00:00,1426.7133956386292 +2012-05-23 06:00:00,1606.7165109034268 +2012-05-23 07:00:00,1756.6043613707166 +2012-05-23 08:00:00,1886.6760124610591 +2012-05-23 09:00:00,2601.735202492212 +2012-05-23 10:00:00,2966.4984423676015 +2012-05-23 11:00:00,3611.4330218068535 +2012-05-23 12:00:00,3714.2897196261683 +2012-05-23 13:00:00,3792.5140186915887 +2012-05-23 14:00:00,3893.8753894080996 +2012-05-23 15:00:00,3894.0031152647975 +2012-05-23 16:00:00,3862.07476635514 +2012-05-23 17:00:00,3840.2679127725855 +2012-05-23 18:00:00,3827.3489096573207 +2012-05-23 19:00:00,3685.956386292835 +2012-05-23 20:00:00,3630.031152647975 +2012-05-23 21:00:00,3594.068535825545 +2012-05-23 22:00:00,3214.5171339563863 +2012-05-23 23:00:00,2446.386292834891 +2012-05-24 00:00:00,1832.3333333333333 +2012-05-24 01:00:00,1497.803738317757 +2012-05-24 02:00:00,1453.0218068535826 +2012-05-24 03:00:00,1372.9127725856697 +2012-05-24 04:00:00,1363.607476635514 +2012-05-24 05:00:00,1435.2367601246106 +2012-05-24 06:00:00,1603.4018691588785 +2012-05-24 07:00:00,1789.9314641744547 +2012-05-24 08:00:00,1896.6604361370717 +2012-05-24 09:00:00,2682.919003115265 +2012-05-24 10:00:00,3129.6604361370714 +2012-05-24 11:00:00,3362.302180685358 +2012-05-24 12:00:00,4055.1246105919004 +2012-05-24 13:00:00,3789.878504672897 +2012-05-24 14:00:00,3866.043613707165 +2012-05-24 15:00:00,3926.6791277258567 +2012-05-24 16:00:00,4012.03738317757 +2012-05-24 17:00:00,4040.993769470405 +2012-05-24 18:00:00,3967.8629283489095 +2012-05-24 19:00:00,3818.7757009345796 +2012-05-24 20:00:00,3674.043613707165 +2012-05-24 21:00:00,3604.196261682243 +2012-05-24 22:00:00,3218.0778816199377 +2012-05-24 23:00:00,2406.9065420560746 +2012-05-25 00:00:00,1837.797507788162 +2012-05-25 01:00:00,1494.4922118380061 +2012-05-25 02:00:00,1445.436137071651 +2012-05-25 03:00:00,1371.1183800623053 +2012-05-25 04:00:00,1372.4672897196263 +2012-05-25 05:00:00,1437.5015576323988 +2012-05-25 06:00:00,1656.0685358255453 +2012-05-25 07:00:00,1784.2492211838007 +2012-05-25 08:00:00,1927.7009345794393 +2012-05-25 09:00:00,2690.6791277258567 +2012-05-25 10:00:00,3328.2834890965732 +2012-05-25 11:00:00,3337.9501557632398 +2012-05-25 12:00:00,3534.5451713395637 +2012-05-25 13:00:00,3611.6479750778817 +2012-05-25 14:00:00,3623.5732087227416 +2012-05-25 15:00:00,3745.105919003115 +2012-05-25 16:00:00,3759.02492211838 +2012-05-25 17:00:00,3699.314641744548 +2012-05-25 18:00:00,3594.227414330218 +2012-05-25 19:00:00,3532.0498442367602 +2012-05-25 20:00:00,3364.9657320872275 +2012-05-25 21:00:00,3373.246105919003 +2012-05-25 22:00:00,3041.93769470405 +2012-05-25 23:00:00,2452.9345794392525 +2012-05-26 00:00:00,1921.0467289719627 +2012-05-26 01:00:00,1595.5046728971963 +2012-05-26 02:00:00,1502.4454828660437 +2012-05-26 03:00:00,1359.1059190031153 +2012-05-26 04:00:00,1315.3395638629283 +2012-05-26 05:00:00,1365.5233644859813 +2012-05-26 06:00:00,1569.380062305296 +2012-05-26 07:00:00,1727.6168224299065 +2012-05-26 08:00:00,1857.5669781931465 +2012-05-26 09:00:00,2588.0218068535823 +2012-05-26 10:00:00,2958.8816199376947 +2012-05-26 11:00:00,3383.9501557632398 +2012-05-26 12:00:00,3396.1152647975077 +2012-05-26 13:00:00,3453.707165109034 +2012-05-26 14:00:00,3494.355140186916 +2012-05-26 15:00:00,3559.713395638629 +2012-05-26 16:00:00,3574.8255451713394 +2012-05-26 17:00:00,3579.6510903426793 +2012-05-26 18:00:00,3458.5856697819313 +2012-05-26 19:00:00,3368.993769470405 +2012-05-26 20:00:00,3246.4548286604363 +2012-05-26 21:00:00,3228.0841121495328 +2012-05-26 22:00:00,2864.9003115264795 +2012-05-26 23:00:00,2353.158878504673 +2012-05-27 00:00:00,1871.1495327102805 +2012-05-27 01:00:00,1551.8847352024923 +2012-05-27 02:00:00,1493.1370716510903 +2012-05-27 03:00:00,1404.7881619937696 +2012-05-27 04:00:00,1302.1557632398753 +2012-05-27 05:00:00,1342.6604361370717 +2012-05-27 06:00:00,1543.6853582554518 +2012-05-27 07:00:00,1671.3520249221183 +2012-05-27 08:00:00,1727.411214953271 +2012-05-27 09:00:00,2494.3115264797507 +2012-05-27 10:00:00,2844.8130841121497 +2012-05-27 11:00:00,3146.0716510903426 +2012-05-27 12:00:00,3334.202492211838 +2012-05-27 13:00:00,3437.6884735202493 +2012-05-27 14:00:00,3508.772585669782 +2012-05-27 15:00:00,3588.816199376947 +2012-05-27 16:00:00,3600.2959501557634 +2012-05-27 17:00:00,3604.1370716510905 +2012-05-27 18:00:00,3687.8971962616824 +2012-05-27 19:00:00,3559.5140186915887 +2012-05-27 20:00:00,3440.5295950155764 +2012-05-27 21:00:00,3401.760124610592 +2012-05-27 22:00:00,2866.043613707165 +2012-05-27 23:00:00,2118.271028037383 +2012-05-28 00:00:00,1704.5669781931465 +2012-05-28 01:00:00,1390.96261682243 +2012-05-28 02:00:00,1320.9563862928348 +2012-05-28 03:00:00,1272.3551401869158 +2012-05-28 04:00:00,1260.9158878504672 +2012-05-28 05:00:00,1333.1495327102805 +2012-05-28 06:00:00,1536.1744548286604 +2012-05-28 07:00:00,1703.9190031152648 +2012-05-28 08:00:00,1803.2585669781931 +2012-05-28 09:00:00,2556.919003115265 +2012-05-28 10:00:00,2974.489096573209 +2012-05-28 11:00:00,3521.803738317757 +2012-05-28 12:00:00,3558.467289719626 +2012-05-28 13:00:00,3720.7320872274145 +2012-05-28 14:00:00,3780.429906542056 +2012-05-28 15:00:00,3909.0155763239877 +2012-05-28 16:00:00,3924.563862928349 +2012-05-28 17:00:00,3987.632398753894 +2012-05-28 18:00:00,3966.1619937694704 +2012-05-28 19:00:00,3725.3644859813085 +2012-05-28 20:00:00,3524.866043613707 +2012-05-28 21:00:00,3490.728971962617 +2012-05-28 22:00:00,3108.1183800623053 +2012-05-28 23:00:00,2379.233644859813 +2012-05-29 00:00:00,1855.0934579439252 +2012-05-29 01:00:00,1533.8504672897195 +2012-05-29 02:00:00,1432.872274143302 +2012-05-29 03:00:00,1381.127725856698 +2012-05-29 04:00:00,1360.943925233645 +2012-05-29 05:00:00,1418.348909657321 +2012-05-29 06:00:00,1608.8442367601247 +2012-05-29 07:00:00,1768.9532710280373 +2012-05-29 08:00:00,1881.2834890965732 +2012-05-29 09:00:00,2640.2056074766356 +2012-05-29 10:00:00,3211.526479750779 +2012-05-29 11:00:00,3447.4454828660437 +2012-05-29 12:00:00,3593.0404984423676 +2012-05-29 13:00:00,3772.3644859813085 +2012-05-29 14:00:00,3831.0218068535823 +2012-05-29 15:00:00,3907.6791277258567 +2012-05-29 16:00:00,3961.6666666666665 +2012-05-29 17:00:00,3982.2803738317757 +2012-05-29 18:00:00,3888.01246105919 +2012-05-29 19:00:00,3725.669781931464 +2012-05-29 20:00:00,3530.345794392523 +2012-05-29 21:00:00,3514.6666666666665 +2012-05-29 22:00:00,3196.4454828660437 +2012-05-29 23:00:00,2487.448598130841 +2012-05-30 00:00:00,1901.7009345794393 +2012-05-30 01:00:00,1565.5607476635514 +2012-05-30 02:00:00,1506.5171339563863 +2012-05-30 03:00:00,1394.9127725856697 +2012-05-30 04:00:00,1407.766355140187 +2012-05-30 05:00:00,1416.2897196261683 +2012-05-30 06:00:00,1618.127725856698 +2012-05-30 07:00:00,1829.576323987539 +2012-05-30 08:00:00,1924.8940809968847 +2012-05-30 09:00:00,2710.6479750778817 +2012-05-30 10:00:00,3114.442367601246 +2012-05-30 11:00:00,3753.330218068536 +2012-05-30 12:00:00,3831.595015576324 +2012-05-30 13:00:00,4109.320872274143 +2012-05-30 14:00:00,4016.0186915887853 +2012-05-30 15:00:00,4125.311526479751 +2012-05-30 16:00:00,4122.619937694704 +2012-05-30 17:00:00,4152.470404984424 +2012-05-30 18:00:00,4121.7663551401865 +2012-05-30 19:00:00,4097.772585669782 +2012-05-30 20:00:00,3986.1993769470405 +2012-05-30 21:00:00,3886.0186915887853 +2012-05-30 22:00:00,3415.847352024922 +2012-05-30 23:00:00,2612.5669781931465 +2012-05-31 00:00:00,1949.588785046729 +2012-05-31 01:00:00,1602.760124610592 +2012-05-31 02:00:00,1522.545171339564 +2012-05-31 03:00:00,1483.9750778816199 +2012-05-31 04:00:00,1399.0031152647975 +2012-05-31 05:00:00,1469.7538940809968 +2012-05-31 06:00:00,1650.526479750779 +2012-05-31 07:00:00,1861.6417445482866 +2012-05-31 08:00:00,1988.8660436137072 +2012-05-31 09:00:00,2843.1183800623053 +2012-05-31 10:00:00,3674.88785046729 +2012-05-31 11:00:00,3922.88785046729 +2012-05-31 12:00:00,4030.227414330218 +2012-05-31 13:00:00,4204.5015576323985 +2012-05-31 14:00:00,4205.018691588785 +2012-05-31 15:00:00,4191.3644859813085 +2012-05-31 16:00:00,4327.448598130841 +2012-05-31 17:00:00,4361.9034267912775 +2012-05-31 18:00:00,4348.464174454829 +2012-05-31 19:00:00,4376.090342679127 +2012-05-31 20:00:00,4210.5015576323985 +2012-05-31 21:00:00,4029.0716510903426 +2012-05-31 22:00:00,3528.8504672897197 +2012-05-31 23:00:00,2747.0155763239877 +2012-06-01 00:00:00,2073.196261682243 +2012-06-01 01:00:00,1687.8286604361372 +2012-06-01 02:00:00,1508.2866043613708 +2012-06-01 03:00:00,1459.031152647975 +2012-06-01 04:00:00,1418.0155763239875 +2012-06-01 05:00:00,1443.9719626168223 +2012-06-01 06:00:00,1685.3769470404984 +2012-06-01 07:00:00,1862.7757009345794 +2012-06-01 08:00:00,1994.6355140186915 +2012-06-01 09:00:00,2829.0186915887853 +2012-06-01 10:00:00,3811.323987538941 +2012-06-01 11:00:00,4088.177570093458 +2012-06-01 12:00:00,4210.1246105919 +2012-06-01 13:00:00,4302.526479750779 +2012-06-01 14:00:00,4310.760124610591 +2012-06-01 15:00:00,4296.9657320872275 +2012-06-01 16:00:00,4301.426791277258 +2012-06-01 17:00:00,4270.373831775701 +2012-06-01 18:00:00,4071.0 +2012-06-01 19:00:00,4009.286604361371 +2012-06-01 20:00:00,3888.772585669782 +2012-06-01 21:00:00,3849.6510903426793 +2012-06-01 22:00:00,3504.816199376947 +2012-06-01 23:00:00,2694.828660436137 +2012-06-02 00:00:00,2031.5015576323988 +2012-06-02 01:00:00,1696.7538940809968 +2012-06-02 02:00:00,1605.651090342679 +2012-06-02 03:00:00,1474.9314641744547 +2012-06-02 04:00:00,1432.473520249221 +2012-06-02 05:00:00,1502.1028037383178 +2012-06-02 06:00:00,1696.252336448598 +2012-06-02 07:00:00,1865.2834890965732 +2012-06-02 08:00:00,1999.3239875389409 +2012-06-02 09:00:00,2746.8753894080996 +2012-06-02 10:00:00,3521.1028037383176 +2012-06-02 11:00:00,3641.302180685358 +2012-06-02 12:00:00,3830.6105919003116 +2012-06-02 13:00:00,3828.429906542056 +2012-06-02 14:00:00,3796.4548286604363 +2012-06-02 15:00:00,3780.190031152648 +2012-06-02 16:00:00,3804.4517133956388 +2012-06-02 17:00:00,3784.404984423676 +2012-06-02 18:00:00,3821.1370716510905 +2012-06-02 19:00:00,3756.0342679127725 +2012-06-02 20:00:00,3688.183800623053 +2012-06-02 21:00:00,3734.2959501557634 +2012-06-02 22:00:00,3428.7943925233644 +2012-06-02 23:00:00,2698.8816199376947 +2012-06-03 00:00:00,2054.006230529595 +2012-06-03 01:00:00,1696.563862928349 +2012-06-03 02:00:00,1596.2242990654206 +2012-06-03 03:00:00,1485.5794392523364 +2012-06-03 04:00:00,1384.4485981308412 +2012-06-03 05:00:00,1447.0872274143303 +2012-06-03 06:00:00,1635.239875389408 +2012-06-03 07:00:00,1805.473520249221 +2012-06-03 08:00:00,1890.0872274143303 +2012-06-03 09:00:00,2631.5077881619936 +2012-06-03 10:00:00,3368.302180685358 +2012-06-03 11:00:00,3554.6168224299067 +2012-06-03 12:00:00,3756.9283489096574 +2012-06-03 13:00:00,3876.277258566978 +2012-06-03 14:00:00,3719.121495327103 +2012-06-03 15:00:00,3779.0996884735205 +2012-06-03 16:00:00,4011.9221183800623 +2012-06-03 17:00:00,4034.632398753894 +2012-06-03 18:00:00,4035.171339563863 +2012-06-03 19:00:00,3814.9501557632398 +2012-06-03 20:00:00,3655.0218068535823 +2012-06-03 21:00:00,3536.8753894080996 +2012-06-03 22:00:00,3206.663551401869 +2012-06-03 23:00:00,2304.5794392523367 +2012-06-04 00:00:00,1867.031152647975 +2012-06-04 01:00:00,1557.595015576324 +2012-06-04 02:00:00,1470.526479750779 +2012-06-04 03:00:00,1380.563862928349 +2012-06-04 04:00:00,1386.9158878504672 +2012-06-04 05:00:00,1473.6542056074766 +2012-06-04 06:00:00,1682.0467289719627 +2012-06-04 07:00:00,1834.9906542056074 +2012-06-04 08:00:00,1959.3738317757009 +2012-06-04 09:00:00,2682.1401869158876 +2012-06-04 10:00:00,3242.02492211838 +2012-06-04 11:00:00,3995.1152647975077 +2012-06-04 12:00:00,3889.271028037383 +2012-06-04 13:00:00,4035.5825545171338 +2012-06-04 14:00:00,4176.451713395639 +2012-06-04 15:00:00,4313.426791277258 +2012-06-04 16:00:00,4353.404984423676 +2012-06-04 17:00:00,4359.601246105919 +2012-06-04 18:00:00,4263.809968847352 +2012-06-04 19:00:00,4139.1651090342675 +2012-06-04 20:00:00,3900.9221183800623 +2012-06-04 21:00:00,3748.5015576323985 +2012-06-04 22:00:00,3316.4922118380064 +2012-06-04 23:00:00,2518.6479750778817 +2012-06-05 00:00:00,1969.0778816199377 +2012-06-05 01:00:00,1642.1619937694704 +2012-06-05 02:00:00,1558.2647975077882 +2012-06-05 03:00:00,1497.7071651090343 +2012-06-05 04:00:00,1473.2274143302182 +2012-06-05 05:00:00,1530.3644859813085 +2012-06-05 06:00:00,1712.8099688473521 +2012-06-05 07:00:00,1866.4267912772586 +2012-06-05 08:00:00,1994.5358255451713 +2012-06-05 09:00:00,2795.8535825545173 +2012-06-05 10:00:00,3303.0404984423676 +2012-06-05 11:00:00,3964.713395638629 +2012-06-05 12:00:00,4001.9906542056074 +2012-06-05 13:00:00,4214.626168224299 +2012-06-05 14:00:00,4311.105919003116 +2012-06-05 15:00:00,4353.267912772586 +2012-06-05 16:00:00,4355.909657320873 +2012-06-05 17:00:00,4395.0 +2012-06-05 18:00:00,4323.4953271028035 +2012-06-05 19:00:00,4113.320872274143 +2012-06-05 20:00:00,3907.856697819315 +2012-06-05 21:00:00,3819.07476635514 +2012-06-05 22:00:00,3397.504672897196 +2012-06-05 23:00:00,2656.239875389408 +2012-06-06 00:00:00,2008.0747663551401 +2012-06-06 01:00:00,1607.165109034268 +2012-06-06 02:00:00,1533.3115264797507 +2012-06-06 03:00:00,1469.8411214953271 +2012-06-06 04:00:00,1454.01246105919 +2012-06-06 05:00:00,1522.607476635514 +2012-06-06 06:00:00,1712.0809968847352 +2012-06-06 07:00:00,1905.0903426791276 +2012-06-06 08:00:00,2035.9345794392523 +2012-06-06 09:00:00,2839.4205607476633 +2012-06-06 10:00:00,3642.9221183800623 +2012-06-06 11:00:00,3826.286604361371 +2012-06-06 12:00:00,4044.8971962616824 +2012-06-06 13:00:00,4146.669781931464 +2012-06-06 14:00:00,4173.02492211838 +2012-06-06 15:00:00,4286.389408099689 +2012-06-06 16:00:00,4311.990654205608 +2012-06-06 17:00:00,4323.719626168225 +2012-06-06 18:00:00,4311.021806853582 +2012-06-06 19:00:00,4130.672897196262 +2012-06-06 20:00:00,3970.467289719626 +2012-06-06 21:00:00,3842.9532710280373 +2012-06-06 22:00:00,3429.239875389408 +2012-06-06 23:00:00,2684.121495327103 +2012-06-07 00:00:00,1942.0529595015576 +2012-06-07 01:00:00,1565.3239875389409 +2012-06-07 02:00:00,1496.9719626168223 +2012-06-07 03:00:00,1437.2461059190032 +2012-06-07 04:00:00,1432.4766355140187 +2012-06-07 05:00:00,1496.8971962616822 +2012-06-07 06:00:00,1690.5919003115264 +2012-06-07 07:00:00,1837.3644859813085 +2012-06-07 08:00:00,1959.2554517133956 +2012-06-07 09:00:00,2742.570093457944 +2012-06-07 10:00:00,3442.0404984423676 +2012-06-07 11:00:00,3961.006230529595 +2012-06-07 12:00:00,4101.859813084112 +2012-06-07 13:00:00,4023.214953271028 +2012-06-07 14:00:00,4091.02492211838 +2012-06-07 15:00:00,3995.626168224299 +2012-06-07 16:00:00,4004.8380062305296 +2012-06-07 17:00:00,4060.171339563863 +2012-06-07 18:00:00,3981.277258566978 +2012-06-07 19:00:00,3872.5015576323985 +2012-06-07 20:00:00,3693.728971962617 +2012-06-07 21:00:00,3600.0498442367602 +2012-06-07 22:00:00,3204.1931464174454 +2012-06-07 23:00:00,2400.02492211838 +2012-06-08 00:00:00,1861.7165109034268 +2012-06-08 01:00:00,1567.6884735202493 +2012-06-08 02:00:00,1523.576323987539 +2012-06-08 03:00:00,1461.4205607476636 +2012-06-08 04:00:00,1454.2180685358255 +2012-06-08 05:00:00,1490.8473520249222 +2012-06-08 06:00:00,1663.7071651090343 +2012-06-08 07:00:00,1825.5295950155764 +2012-06-08 08:00:00,1961.872274143302 +2012-06-08 09:00:00,2682.9532710280373 +2012-06-08 10:00:00,3154.314641744548 +2012-06-08 11:00:00,3656.404984423676 +2012-06-08 12:00:00,3644.0186915887853 +2012-06-08 13:00:00,3621.121495327103 +2012-06-08 14:00:00,3684.8816199376947 +2012-06-08 15:00:00,3791.3582554517134 +2012-06-08 16:00:00,3750.0031152647975 +2012-06-08 17:00:00,3752.3831775700933 +2012-06-08 18:00:00,3668.1246105919004 +2012-06-08 19:00:00,3573.8068535825546 +2012-06-08 20:00:00,3446.691588785047 +2012-06-08 21:00:00,3444.031152647975 +2012-06-08 22:00:00,3115.4454828660437 +2012-06-08 23:00:00,2467.504672897196 +2012-06-09 00:00:00,1902.239875389408 +2012-06-09 01:00:00,1611.9968847352025 +2012-06-09 02:00:00,1517.3644859813085 +2012-06-09 03:00:00,1394.473520249221 +2012-06-09 04:00:00,1345.386292834891 +2012-06-09 05:00:00,1410.1744548286604 +2012-06-09 06:00:00,1591.1028037383178 +2012-06-09 07:00:00,1746.6791277258567 +2012-06-09 08:00:00,1867.6884735202493 +2012-06-09 09:00:00,2602.4392523364486 +2012-06-09 10:00:00,3267.3956386292834 +2012-06-09 11:00:00,3556.8504672897197 +2012-06-09 12:00:00,3638.461059190031 +2012-06-09 13:00:00,3720.1806853582552 +2012-06-09 14:00:00,3781.526479750779 +2012-06-09 15:00:00,3820.246105919003 +2012-06-09 16:00:00,3949.4018691588785 +2012-06-09 17:00:00,3920.386292834891 +2012-06-09 18:00:00,3883.4922118380064 +2012-06-09 19:00:00,3763.8193146417448 +2012-06-09 20:00:00,3631.697819314642 +2012-06-09 21:00:00,3631.809968847352 +2012-06-09 22:00:00,3253.5015576323985 +2012-06-09 23:00:00,2519.3271028037384 +2012-06-10 00:00:00,1966.6947040498442 +2012-06-10 01:00:00,1650.7227414330218 +2012-06-10 02:00:00,1590.7819314641745 +2012-06-10 03:00:00,1511.853582554517 +2012-06-10 04:00:00,1411.7538940809968 +2012-06-10 05:00:00,1468.018691588785 +2012-06-10 06:00:00,1657.0872274143303 +2012-06-10 07:00:00,1826.8940809968847 +2012-06-10 08:00:00,1926.6915887850466 +2012-06-10 09:00:00,2705.834890965732 +2012-06-10 10:00:00,3523.2118380062307 +2012-06-10 11:00:00,3613.607476635514 +2012-06-10 12:00:00,3852.9813084112147 +2012-06-10 13:00:00,3977.3115264797507 +2012-06-10 14:00:00,4005.277258566978 +2012-06-10 15:00:00,4084.2523364485983 +2012-06-10 16:00:00,4136.772585669782 +2012-06-10 17:00:00,4045.1028037383176 +2012-06-10 18:00:00,3894.5015576323985 +2012-06-10 19:00:00,3879.931464174455 +2012-06-10 20:00:00,3673.336448598131 +2012-06-10 21:00:00,3524.152647975078 +2012-06-10 22:00:00,3075.707165109034 +2012-06-10 23:00:00,2202.8971962616824 +2012-06-11 00:00:00,1779.8909657320871 +2012-06-11 01:00:00,1476.9158878504672 +2012-06-11 02:00:00,1431.348909657321 +2012-06-11 03:00:00,1389.2492211838007 +2012-06-11 04:00:00,1376.638629283489 +2012-06-11 05:00:00,1469.8504672897195 +2012-06-11 06:00:00,1668.4299065420562 +2012-06-11 07:00:00,1859.8691588785048 +2012-06-11 08:00:00,1993.4766355140187 +2012-06-11 09:00:00,2750.043613707165 +2012-06-11 10:00:00,3131.5919003115264 +2012-06-11 11:00:00,3730.2897196261683 +2012-06-11 12:00:00,3633.336448598131 +2012-06-11 13:00:00,3691.7694704049845 +2012-06-11 14:00:00,3710.2180685358258 +2012-06-11 15:00:00,3724.0467289719627 +2012-06-11 16:00:00,3812.0872274143303 +2012-06-11 17:00:00,3697.2242990654204 +2012-06-11 18:00:00,3566.9813084112147 +2012-06-11 19:00:00,3510.697819314642 +2012-06-11 20:00:00,3419.01246105919 +2012-06-11 21:00:00,3404.0467289719627 +2012-06-11 22:00:00,3071.1183800623053 +2012-06-11 23:00:00,2399.601246105919 +2012-06-12 00:00:00,1873.5389408099688 +2012-06-12 01:00:00,1544.9408099688474 +2012-06-12 02:00:00,1454.2834890965732 +2012-06-12 03:00:00,1395.8411214953271 +2012-06-12 04:00:00,1388.4610591900312 +2012-06-12 05:00:00,1424.8442367601247 +2012-06-12 06:00:00,1625.8909657320871 +2012-06-12 07:00:00,1793.6542056074766 +2012-06-12 08:00:00,1917.545171339564 +2012-06-12 09:00:00,2620.722741433022 +2012-06-12 10:00:00,3205.461059190031 +2012-06-12 11:00:00,3392.9968847352025 +2012-06-12 12:00:00,3451.5358255451715 +2012-06-12 13:00:00,3553.520249221184 +2012-06-12 14:00:00,3577.663551401869 +2012-06-12 15:00:00,3683.1464174454827 +2012-06-12 16:00:00,3722.728971962617 +2012-06-12 17:00:00,3795.2741433021806 +2012-06-12 18:00:00,3746.1869158878503 +2012-06-12 19:00:00,3611.563862928349 +2012-06-12 20:00:00,3435.9439252336447 +2012-06-12 21:00:00,3401.797507788162 +2012-06-12 22:00:00,3090.697819314642 +2012-06-12 23:00:00,2373.9844236760123 +2012-06-13 00:00:00,1834.1682242990655 +2012-06-13 01:00:00,1491.6230529595016 +2012-06-13 02:00:00,1423.96261682243 +2012-06-13 03:00:00,1374.006230529595 +2012-06-13 04:00:00,1351.221183800623 +2012-06-13 05:00:00,1403.7725856697818 +2012-06-13 06:00:00,1597.8193146417445 +2012-06-13 07:00:00,1757.1433021806854 +2012-06-13 08:00:00,1877.6105919003114 +2012-06-13 09:00:00,2598.6947040498444 +2012-06-13 10:00:00,2995.8006230529595 +2012-06-13 11:00:00,3735.323987538941 +2012-06-13 12:00:00,3653.5919003115264 +2012-06-13 13:00:00,3737.676012461059 +2012-06-13 14:00:00,3823.3333333333335 +2012-06-13 15:00:00,3957.8006230529595 +2012-06-13 16:00:00,4039.6884735202493 +2012-06-13 17:00:00,3926.8598130841124 +2012-06-13 18:00:00,3878.299065420561 +2012-06-13 19:00:00,3719.121495327103 +2012-06-13 20:00:00,3528.1806853582552 +2012-06-13 21:00:00,3475.355140186916 +2012-06-13 22:00:00,3068.133956386293 +2012-06-13 23:00:00,2376.2118380062307 +2012-06-14 00:00:00,1812.6915887850466 +2012-06-14 01:00:00,1487.2367601246106 +2012-06-14 02:00:00,1413.6728971962616 +2012-06-14 03:00:00,1372.526479750779 +2012-06-14 04:00:00,1359.9501557632398 +2012-06-14 05:00:00,1445.5607476635514 +2012-06-14 06:00:00,1601.9408099688474 +2012-06-14 07:00:00,1824.9968847352025 +2012-06-14 08:00:00,1934.0591900311526 +2012-06-14 09:00:00,2643.8753894080996 +2012-06-14 10:00:00,3423.5015576323985 +2012-06-14 11:00:00,3546.713395638629 +2012-06-14 12:00:00,3711.9003115264795 +2012-06-14 13:00:00,3778.1931464174454 +2012-06-14 14:00:00,3931.0467289719627 +2012-06-14 15:00:00,3942.442367601246 +2012-06-14 16:00:00,4073.03738317757 +2012-06-14 17:00:00,4092.563862928349 +2012-06-14 18:00:00,4021.0716510903426 +2012-06-14 19:00:00,3843.5171339563863 +2012-06-14 20:00:00,3757.691588785047 +2012-06-14 21:00:00,3577.4205607476633 +2012-06-14 22:00:00,3256.2585669781934 +2012-06-14 23:00:00,2520.872274143302 +2012-06-15 00:00:00,1841.4330218068535 +2012-06-15 01:00:00,1505.778816199377 +2012-06-15 02:00:00,1457.1246105919004 +2012-06-15 03:00:00,1398.3177570093458 +2012-06-15 04:00:00,1370.0747663551401 +2012-06-15 05:00:00,1460.2554517133956 +2012-06-15 06:00:00,1644.657320872274 +2012-06-15 07:00:00,1829.3115264797507 +2012-06-15 08:00:00,1959.2866043613708 +2012-06-15 09:00:00,2728.7757009345796 +2012-06-15 10:00:00,3428.02492211838 +2012-06-15 11:00:00,3747.834890965732 +2012-06-15 12:00:00,3916.847352024922 +2012-06-15 13:00:00,3976.0841121495328 +2012-06-15 14:00:00,3816.411214953271 +2012-06-15 15:00:00,4010.847352024922 +2012-06-15 16:00:00,4149.090342679127 +2012-06-15 17:00:00,4212.878504672897 +2012-06-15 18:00:00,4134.158878504673 +2012-06-15 19:00:00,4030.744548286604 +2012-06-15 20:00:00,3875.9595015576324 +2012-06-15 21:00:00,3749.595015576324 +2012-06-15 22:00:00,3445.551401869159 +2012-06-15 23:00:00,2638.0560747663553 +2012-06-16 00:00:00,1981.367601246106 +2012-06-16 01:00:00,1666.5327102803737 +2012-06-16 02:00:00,1572.1900311526479 +2012-06-16 03:00:00,1462.3333333333333 +2012-06-16 04:00:00,1417.8785046728972 +2012-06-16 05:00:00,1513.3208722741433 +2012-06-16 06:00:00,1689.993769470405 +2012-06-16 07:00:00,1860.2647975077882 +2012-06-16 08:00:00,1970.2741433021806 +2012-06-16 09:00:00,2737.5794392523367 +2012-06-16 10:00:00,3537.158878504673 +2012-06-16 11:00:00,3840.0560747663553 +2012-06-16 12:00:00,3992.9158878504672 +2012-06-16 13:00:00,4018.866043613707 +2012-06-16 14:00:00,4134.090342679127 +2012-06-16 15:00:00,4181.383177570094 +2012-06-16 16:00:00,4239.370716510904 +2012-06-16 17:00:00,4213.878504672897 +2012-06-16 18:00:00,4220.679127725857 +2012-06-16 19:00:00,4115.109034267913 +2012-06-16 20:00:00,3957.663551401869 +2012-06-16 21:00:00,3807.6791277258567 +2012-06-16 22:00:00,3508.856697819315 +2012-06-16 23:00:00,2585.0841121495328 +2012-06-17 00:00:00,1984.6604361370717 +2012-06-17 01:00:00,1672.9719626168223 +2012-06-17 02:00:00,1599.0903426791276 +2012-06-17 03:00:00,1518.0 +2012-06-17 04:00:00,1378.9190031152648 +2012-06-17 05:00:00,1469.1090342679129 +2012-06-17 06:00:00,1643.0031152647975 +2012-06-17 07:00:00,1793.8660436137072 +2012-06-17 08:00:00,1898.3271028037384 +2012-06-17 09:00:00,2713.457943925234 +2012-06-17 10:00:00,3638.214953271028 +2012-06-17 11:00:00,3864.3894080996884 +2012-06-17 12:00:00,4116.968847352025 +2012-06-17 13:00:00,4170.242990654206 +2012-06-17 14:00:00,4203.85046728972 +2012-06-17 15:00:00,4250.744548286604 +2012-06-17 16:00:00,4222.08722741433 +2012-06-17 17:00:00,4200.121495327103 +2012-06-17 18:00:00,4066.133956386293 +2012-06-17 19:00:00,3966.8971962616824 +2012-06-17 20:00:00,3763.940809968847 +2012-06-17 21:00:00,3744.1931464174454 +2012-06-17 22:00:00,3265.461059190031 +2012-06-17 23:00:00,2314.4174454828662 +2012-06-18 00:00:00,1833.1744548286604 +2012-06-18 01:00:00,1530.404984423676 +2012-06-18 02:00:00,1449.423676012461 +2012-06-18 03:00:00,1410.165109034268 +2012-06-18 04:00:00,1401.8442367601247 +2012-06-18 05:00:00,1512.8660436137072 +2012-06-18 06:00:00,1657.8940809968847 +2012-06-18 07:00:00,1809.778816199377 +2012-06-18 08:00:00,1966.5077881619939 +2012-06-18 09:00:00,2688.4922118380064 +2012-06-18 10:00:00,3510.1090342679126 +2012-06-18 11:00:00,3641.411214953271 +2012-06-18 12:00:00,3842.2492211838007 +2012-06-18 13:00:00,3994.02492211838 +2012-06-18 14:00:00,3874.2897196261683 +2012-06-18 15:00:00,3913.121495327103 +2012-06-18 16:00:00,3965.246105919003 +2012-06-18 17:00:00,3911.8847352024923 +2012-06-18 18:00:00,3991.2180685358258 +2012-06-18 19:00:00,3813.299065420561 +2012-06-18 20:00:00,3650.4205607476633 +2012-06-18 21:00:00,3553.3115264797507 +2012-06-18 22:00:00,3249.691588785047 +2012-06-18 23:00:00,2502.2741433021806 +2012-06-19 00:00:00,1914.0529595015576 +2012-06-19 01:00:00,1629.9719626168223 +2012-06-19 02:00:00,1528.0965732087227 +2012-06-19 03:00:00,1475.8940809968847 +2012-06-19 04:00:00,1456.233644859813 +2012-06-19 05:00:00,1509.526479750779 +2012-06-19 06:00:00,1656.1246105919004 +2012-06-19 07:00:00,1825.9501557632398 +2012-06-19 08:00:00,1954.127725856698 +2012-06-19 09:00:00,2628.563862928349 +2012-06-19 10:00:00,3206.2585669781934 +2012-06-19 11:00:00,3380.090342679128 +2012-06-19 12:00:00,3563.9501557632398 +2012-06-19 13:00:00,3688.2367601246106 +2012-06-19 14:00:00,3697.3115264797507 +2012-06-19 15:00:00,3719.277258566978 +2012-06-19 16:00:00,3890.626168224299 +2012-06-19 17:00:00,3828.676012461059 +2012-06-19 18:00:00,3740.644859813084 +2012-06-19 19:00:00,3588.97507788162 +2012-06-19 20:00:00,3423.355140186916 +2012-06-19 21:00:00,3385.956386292835 +2012-06-19 22:00:00,3044.722741433022 +2012-06-19 23:00:00,2380.8255451713394 +2012-06-20 00:00:00,1845.4485981308412 +2012-06-20 01:00:00,1523.3769470404984 +2012-06-20 02:00:00,1459.2897196261683 +2012-06-20 03:00:00,1382.4641744548287 +2012-06-20 04:00:00,1378.4641744548287 +2012-06-20 05:00:00,1436.4579439252336 +2012-06-20 06:00:00,1597.9719626168223 +2012-06-20 07:00:00,1749.6666666666667 +2012-06-20 08:00:00,1894.8816199376947 +2012-06-20 09:00:00,2625.6947040498444 +2012-06-20 10:00:00,3035.07476635514 +2012-06-20 11:00:00,3193.3800623052957 +2012-06-20 12:00:00,3776.8255451713394 +2012-06-20 13:00:00,3576.866043613707 +2012-06-20 14:00:00,3548.411214953271 +2012-06-20 15:00:00,3591.190031152648 +2012-06-20 16:00:00,3583.669781931464 +2012-06-20 17:00:00,3584.9283489096574 +2012-06-20 18:00:00,3616.5077881619936 +2012-06-20 19:00:00,3591.816199376947 +2012-06-20 20:00:00,3529.9813084112147 +2012-06-20 21:00:00,3540.2367601246106 +2012-06-20 22:00:00,3194.8130841121497 +2012-06-20 23:00:00,2435.479750778816 +2012-06-21 00:00:00,1842.8442367601247 +2012-06-21 01:00:00,1516.436137071651 +2012-06-21 02:00:00,1451.7165109034268 +2012-06-21 03:00:00,1390.7165109034268 +2012-06-21 04:00:00,1393.7352024922118 +2012-06-21 05:00:00,1432.2305295950155 +2012-06-21 06:00:00,1643.6978193146417 +2012-06-21 07:00:00,1811.1713395638628 +2012-06-21 08:00:00,1964.5327102803737 +2012-06-21 09:00:00,2707.4828660436137 +2012-06-21 10:00:00,3131.196261682243 +2012-06-21 11:00:00,3498.2056074766356 +2012-06-21 12:00:00,3958.255451713396 +2012-06-21 13:00:00,3885.1183800623053 +2012-06-21 14:00:00,3868.542056074766 +2012-06-21 15:00:00,3850.2834890965732 +2012-06-21 16:00:00,3893.1744548286606 +2012-06-21 17:00:00,3966.9003115264795 +2012-06-21 18:00:00,3995.214953271028 +2012-06-21 19:00:00,3906.0654205607475 +2012-06-21 20:00:00,3617.336448598131 +2012-06-21 21:00:00,3474.700934579439 +2012-06-21 22:00:00,3048.5825545171338 +2012-06-21 23:00:00,2341.07476635514 +2012-06-22 00:00:00,1802.1588785046729 +2012-06-22 01:00:00,1481.7570093457944 +2012-06-22 02:00:00,1413.018691588785 +2012-06-22 03:00:00,1356.2118380062304 +2012-06-22 04:00:00,1365.588785046729 +2012-06-22 05:00:00,1416.6666666666667 +2012-06-22 06:00:00,1597.4890965732088 +2012-06-22 07:00:00,1740.0155763239875 +2012-06-22 08:00:00,1911.5420560747664 +2012-06-22 09:00:00,2654.803738317757 +2012-06-22 10:00:00,3073.654205607477 +2012-06-22 11:00:00,3707.208722741433 +2012-06-22 12:00:00,3725.2242990654204 +2012-06-22 13:00:00,3942.2429906542056 +2012-06-22 14:00:00,4058.2585669781934 +2012-06-22 15:00:00,4136.794392523365 +2012-06-22 16:00:00,4151.426791277258 +2012-06-22 17:00:00,4196.560747663551 +2012-06-22 18:00:00,4088.031152647975 +2012-06-22 19:00:00,3988.1993769470405 +2012-06-22 20:00:00,3768.336448598131 +2012-06-22 21:00:00,3697.6417445482866 +2012-06-22 22:00:00,3282.9283489096574 +2012-06-22 23:00:00,2517.5981308411215 +2012-06-23 00:00:00,1920.6791277258567 +2012-06-23 01:00:00,1598.9595015576324 +2012-06-23 02:00:00,1502.386292834891 +2012-06-23 03:00:00,1358.6292834890967 +2012-06-23 04:00:00,1345.595015576324 +2012-06-23 05:00:00,1371.3146417445482 +2012-06-23 06:00:00,1572.8317757009345 +2012-06-23 07:00:00,1742.8660436137072 +2012-06-23 08:00:00,1907.5077881619939 +2012-06-23 09:00:00,2689.6043613707166 +2012-06-23 10:00:00,3184.1557632398753 +2012-06-23 11:00:00,4081.5171339563863 +2012-06-23 12:00:00,3997.7632398753894 +2012-06-23 13:00:00,4021.576323987539 +2012-06-23 14:00:00,4118.554517133956 +2012-06-23 15:00:00,4182.426791277258 +2012-06-23 16:00:00,4252.897196261682 +2012-06-23 17:00:00,4331.084112149532 +2012-06-23 18:00:00,4215.915887850468 +2012-06-23 19:00:00,4102.616822429906 +2012-06-23 20:00:00,3955.576323987539 +2012-06-23 21:00:00,3946.9844236760123 +2012-06-23 22:00:00,3425.6479750778817 +2012-06-23 23:00:00,2542.8847352024923 +2012-06-24 00:00:00,1921.632398753894 +2012-06-24 01:00:00,1610.2616822429907 +2012-06-24 02:00:00,1533.9034267912773 +2012-06-24 03:00:00,1438.8909657320871 +2012-06-24 04:00:00,1337.2616822429907 +2012-06-24 05:00:00,1392.7227414330218 +2012-06-24 06:00:00,1571.8753894080996 +2012-06-24 07:00:00,1743.651090342679 +2012-06-24 08:00:00,1885.6542056074766 +2012-06-24 09:00:00,2729.323987538941 +2012-06-24 10:00:00,3395.1806853582552 +2012-06-24 11:00:00,4271.196261682243 +2012-06-24 12:00:00,4192.517133956387 +2012-06-24 13:00:00,4346.277258566978 +2012-06-24 14:00:00,4438.258566978193 +2012-06-24 15:00:00,4440.190031152648 +2012-06-24 16:00:00,4480.757009345794 +2012-06-24 17:00:00,4467.090342679127 +2012-06-24 18:00:00,4458.809968847352 +2012-06-24 19:00:00,4376.4330218068535 +2012-06-24 20:00:00,4224.570093457944 +2012-06-24 21:00:00,4094.367601246106 +2012-06-24 22:00:00,3552.7757009345796 +2012-06-24 23:00:00,2358.588785046729 +2012-06-25 00:00:00,1714.386292834891 +2012-06-25 01:00:00,1276.398753894081 +2012-06-25 02:00:00,1229.853582554517 +2012-06-25 03:00:00,1192.7352024922118 +2012-06-25 04:00:00,1208.4890965732088 +2012-06-25 05:00:00,1380.9470404984424 +2012-06-25 06:00:00,1627.2492211838007 +2012-06-25 07:00:00,1871.7881619937696 +2012-06-25 08:00:00,2080.822429906542 +2012-06-25 09:00:00,2997.323987538941 +2012-06-25 10:00:00,4149.585669781932 +2012-06-25 11:00:00,4414.869158878505 +2012-06-25 12:00:00,4727.716510903427 +2012-06-25 13:00:00,4909.267912772586 +2012-06-25 14:00:00,4983.186915887851 +2012-06-25 15:00:00,4888.785046728972 +2012-06-25 16:00:00,4897.448598130841 +2012-06-25 17:00:00,4942.190031152648 +2012-06-25 18:00:00,4896.928348909657 +2012-06-25 19:00:00,4793.666666666667 +2012-06-25 20:00:00,4535.647975077882 +2012-06-25 21:00:00,4433.311526479751 +2012-06-25 22:00:00,3711.8909657320874 +2012-06-25 23:00:00,2697.6168224299067 +2012-06-26 00:00:00,1955.056074766355 +2012-06-26 01:00:00,1662.0872274143303 +2012-06-26 02:00:00,1609.9065420560748 +2012-06-26 03:00:00,1705.7040498442368 +2012-06-26 04:00:00,1700.7227414330218 +2012-06-26 05:00:00,1708.2772585669782 +2012-06-26 06:00:00,1901.6448598130842 +2012-06-26 07:00:00,2076.9345794392525 +2012-06-26 08:00:00,2322.685358255452 +2012-06-26 09:00:00,3119.8753894080996 +2012-06-26 10:00:00,4413.451713395639 +2012-06-26 11:00:00,4608.1651090342675 +2012-06-26 12:00:00,5009.722741433022 +2012-06-26 13:00:00,5145.7694704049845 +2012-06-26 14:00:00,5258.355140186916 +2012-06-26 15:00:00,5235.934579439252 +2012-06-26 16:00:00,5176.242990654206 +2012-06-26 17:00:00,5224.7663551401865 +2012-06-26 18:00:00,5063.978193146418 +2012-06-26 19:00:00,4874.214953271028 +2012-06-26 20:00:00,4812.380062305296 +2012-06-26 21:00:00,4648.551401869159 +2012-06-26 22:00:00,4206.791277258567 +2012-06-26 23:00:00,2692.404984423676 +2012-06-27 00:00:00,2060.386292834891 +2012-06-27 01:00:00,1533.018691588785 +2012-06-27 02:00:00,1629.613707165109 +2012-06-27 03:00:00,1549.8785046728972 +2012-06-27 04:00:00,1552.6666666666667 +2012-06-27 05:00:00,1587.7320872274142 +2012-06-27 06:00:00,1782.2242990654206 +2012-06-27 07:00:00,1991.4267912772586 +2012-06-27 08:00:00,2231.479750778816 +2012-06-27 09:00:00,3374.5607476635514 +2012-06-27 10:00:00,4307.015576323987 +2012-06-27 11:00:00,4551.7663551401865 +2012-06-27 12:00:00,4672.476635514019 +2012-06-27 13:00:00,4983.308411214954 +2012-06-27 14:00:00,5188.940809968847 +2012-06-27 15:00:00,5051.971962616823 +2012-06-27 16:00:00,5000.370716510904 +2012-06-27 17:00:00,4964.227414330218 +2012-06-27 18:00:00,4826.529595015576 +2012-06-27 19:00:00,4680.629283489096 +2012-06-27 20:00:00,4454.0373831775705 +2012-06-27 21:00:00,4318.01246105919 +2012-06-27 22:00:00,3776.766355140187 +2012-06-27 23:00:00,2786.3707165109035 +2012-06-28 00:00:00,2021.3115264797507 +2012-06-28 01:00:00,1686.9657320872275 +2012-06-28 02:00:00,1615.1183800623053 +2012-06-28 03:00:00,1551.4392523364486 +2012-06-28 04:00:00,1557.423676012461 +2012-06-28 05:00:00,1600.9906542056074 +2012-06-28 06:00:00,1838.9127725856697 +2012-06-28 07:00:00,1976.9563862928348 +2012-06-28 08:00:00,2186.133956386293 +2012-06-28 09:00:00,3425.0404984423676 +2012-06-28 10:00:00,4098.461059190031 +2012-06-28 11:00:00,4348.236760124611 +2012-06-28 12:00:00,4441.894080996884 +2012-06-28 13:00:00,4656.13707165109 +2012-06-28 14:00:00,4826.570093457944 +2012-06-28 15:00:00,4902.317757009346 +2012-06-28 16:00:00,4918.660436137072 +2012-06-28 17:00:00,4794.395638629284 +2012-06-28 18:00:00,4601.208722741433 +2012-06-28 19:00:00,4371.781931464175 +2012-06-28 20:00:00,4142.654205607477 +2012-06-28 21:00:00,4011.9283489096574 +2012-06-28 22:00:00,3550.2741433021806 +2012-06-28 23:00:00,2563.8193146417448 +2012-06-29 00:00:00,1991.8473520249222 +2012-06-29 01:00:00,1645.380062305296 +2012-06-29 02:00:00,1574.5856697819315 +2012-06-29 03:00:00,1496.0404984423676 +2012-06-29 04:00:00,1504.747663551402 +2012-06-29 05:00:00,1576.8785046728972 +2012-06-29 06:00:00,1761.1152647975077 +2012-06-29 07:00:00,1943.3582554517134 +2012-06-29 08:00:00,2119.1557632398753 +2012-06-29 09:00:00,3096.2367601246106 +2012-06-29 10:00:00,3492.105919003115 +2012-06-29 11:00:00,4195.601246105919 +2012-06-29 12:00:00,3984.392523364486 +2012-06-29 13:00:00,4198.221183800623 +2012-06-29 14:00:00,4264.180685358256 +2012-06-29 15:00:00,4364.146417445483 +2012-06-29 16:00:00,4345.98753894081 +2012-06-29 17:00:00,4405.352024922118 +2012-06-29 18:00:00,4310.741433021807 +2012-06-29 19:00:00,4122.794392523365 +2012-06-29 20:00:00,3911.1152647975077 +2012-06-29 21:00:00,3842.931464174455 +2012-06-29 22:00:00,3454.8068535825546 +2012-06-29 23:00:00,2776.822429906542 +2012-06-30 00:00:00,2091.8971962616824 +2012-06-30 01:00:00,1738.8691588785048 +2012-06-30 02:00:00,1649.5015576323988 +2012-06-30 03:00:00,1512.760124610592 +2012-06-30 04:00:00,1484.9408099688474 +2012-06-30 05:00:00,1535.8660436137072 +2012-06-30 06:00:00,1712.4672897196263 +2012-06-30 07:00:00,1900.2274143302182 +2012-06-30 08:00:00,2052.0872274143303 +2012-06-30 09:00:00,3058.93769470405 +2012-06-30 10:00:00,3797.0841121495328 +2012-06-30 11:00:00,3819.96261682243 +2012-06-30 12:00:00,3894.308411214953 +2012-06-30 13:00:00,4012.448598130841 +2012-06-30 14:00:00,4128.426791277258 +2012-06-30 15:00:00,4079.9968847352025 +2012-06-30 16:00:00,4111.470404984424 +2012-06-30 17:00:00,4085.495327102804 +2012-06-30 18:00:00,4015.5919003115264 +2012-06-30 19:00:00,3879.06230529595 +2012-06-30 20:00:00,3695.7196261682243 +2012-06-30 21:00:00,3650.9813084112147 +2012-06-30 22:00:00,3295.654205607477 +2012-06-30 23:00:00,2667.6355140186915 +2012-07-01 00:00:00,2021.9127725856697 +2012-07-01 01:00:00,1682.2866043613708 +2012-07-01 02:00:00,1628.2461059190032 +2012-07-01 03:00:00,1517.2772585669782 +2012-07-01 04:00:00,1427.3582554517134 +2012-07-01 05:00:00,1459.8099688473521 +2012-07-01 06:00:00,1631.8940809968847 +2012-07-01 07:00:00,1817.4080996884736 +2012-07-01 08:00:00,1918.3956386292834 +2012-07-01 09:00:00,2838.7507788161993 +2012-07-01 10:00:00,3513.4205607476633 +2012-07-01 11:00:00,3650.760124610592 +2012-07-01 12:00:00,3834.171339563863 +2012-07-01 13:00:00,3988.0996884735205 +2012-07-01 14:00:00,4110.688473520249 +2012-07-01 15:00:00,4079.442367601246 +2012-07-01 16:00:00,4074.105919003115 +2012-07-01 17:00:00,4128.236760124611 +2012-07-01 18:00:00,4058.1183800623053 +2012-07-01 19:00:00,3958.4922118380064 +2012-07-01 20:00:00,3696.5358255451715 +2012-07-01 21:00:00,3598.5015576323985 +2012-07-01 22:00:00,3188.538940809969 +2012-07-01 23:00:00,2345.1090342679126 +2012-07-02 00:00:00,1853.7507788161993 +2012-07-02 01:00:00,1503.6043613707166 +2012-07-02 02:00:00,1453.1557632398753 +2012-07-02 03:00:00,1402.7258566978194 +2012-07-02 04:00:00,1402.8971962616822 +2012-07-02 05:00:00,1491.9127725856697 +2012-07-02 06:00:00,1644.3738317757009 +2012-07-02 07:00:00,1836.4485981308412 +2012-07-02 08:00:00,2008.2866043613708 +2012-07-02 09:00:00,2981.919003115265 +2012-07-02 10:00:00,3723.3395638629286 +2012-07-02 11:00:00,4045.841121495327 +2012-07-02 12:00:00,4344.295950155763 +2012-07-02 13:00:00,4478.93769470405 +2012-07-02 14:00:00,4478.439252336449 +2012-07-02 15:00:00,4536.065420560748 +2012-07-02 16:00:00,4447.676012461059 +2012-07-02 17:00:00,4534.339563862928 +2012-07-02 18:00:00,4489.654205607477 +2012-07-02 19:00:00,4334.647975077882 +2012-07-02 20:00:00,4118.127725856698 +2012-07-02 21:00:00,4068.3052959501556 +2012-07-02 22:00:00,3585.8317757009345 +2012-07-02 23:00:00,2694.314641744548 +2012-07-03 00:00:00,2004.5015576323988 +2012-07-03 01:00:00,1646.3738317757009 +2012-07-03 02:00:00,1533.031152647975 +2012-07-03 03:00:00,1463.6697819314643 +2012-07-03 04:00:00,1461.6915887850466 +2012-07-03 05:00:00,1508.0872274143303 +2012-07-03 06:00:00,1665.1619937694704 +2012-07-03 07:00:00,1880.9532710280373 +2012-07-03 08:00:00,2059.98753894081 +2012-07-03 09:00:00,3065.0934579439254 +2012-07-03 10:00:00,3961.9158878504672 +2012-07-03 11:00:00,4163.121495327103 +2012-07-03 12:00:00,4430.323987538941 +2012-07-03 13:00:00,4639.28660436137 +2012-07-03 14:00:00,4704.06230529595 +2012-07-03 15:00:00,4596.570093457944 +2012-07-03 16:00:00,4652.7694704049845 +2012-07-03 17:00:00,4726.454828660436 +2012-07-03 18:00:00,4672.947040498442 +2012-07-03 19:00:00,4547.5046728971965 +2012-07-03 20:00:00,4216.77570093458 +2012-07-03 21:00:00,4125.258566978193 +2012-07-03 22:00:00,3578.1993769470405 +2012-07-03 23:00:00,2739.9532710280373 +2012-07-04 00:00:00,2091.323987538941 +2012-07-04 01:00:00,1717.6728971962616 +2012-07-04 02:00:00,1641.8504672897195 +2012-07-04 03:00:00,1558.1993769470405 +2012-07-04 04:00:00,1518.8317757009345 +2012-07-04 05:00:00,1559.9501557632398 +2012-07-04 06:00:00,1732.4018691588785 +2012-07-04 07:00:00,1926.3551401869158 +2012-07-04 08:00:00,2093.88785046729 +2012-07-04 09:00:00,3096.0 +2012-07-04 10:00:00,3794.993769470405 +2012-07-04 11:00:00,4012.03738317757 +2012-07-04 12:00:00,4251.183800623053 +2012-07-04 13:00:00,4512.641744548287 +2012-07-04 14:00:00,4596.489096573208 +2012-07-04 15:00:00,4560.666666666667 +2012-07-04 16:00:00,4669.414330218068 +2012-07-04 17:00:00,4522.476635514019 +2012-07-04 18:00:00,4409.507788161994 +2012-07-04 19:00:00,4273.040498442368 +2012-07-04 20:00:00,4060.791277258567 +2012-07-04 21:00:00,3897.2616822429904 +2012-07-04 22:00:00,3451.0218068535823 +2012-07-04 23:00:00,2663.5171339563863 +2012-07-05 00:00:00,1990.6791277258567 +2012-07-05 01:00:00,1620.202492211838 +2012-07-05 02:00:00,1555.0716510903426 +2012-07-05 03:00:00,1486.031152647975 +2012-07-05 04:00:00,1488.7757009345794 +2012-07-05 05:00:00,1507.0654205607477 +2012-07-05 06:00:00,1696.4890965732088 +2012-07-05 07:00:00,1873.3395638629283 +2012-07-05 08:00:00,2042.4859813084113 +2012-07-05 09:00:00,2983.2616822429904 +2012-07-05 10:00:00,3661.1869158878503 +2012-07-05 11:00:00,3675.031152647975 +2012-07-05 12:00:00,3895.1806853582552 +2012-07-05 13:00:00,3956.177570093458 +2012-07-05 14:00:00,4055.1090342679126 +2012-07-05 15:00:00,4209.591900311527 +2012-07-05 16:00:00,4222.3644859813085 +2012-07-05 17:00:00,4179.242990654206 +2012-07-05 18:00:00,4211.065420560748 +2012-07-05 19:00:00,4026.8847352024923 +2012-07-05 20:00:00,3749.8598130841124 +2012-07-05 21:00:00,3680.4517133956388 +2012-07-05 22:00:00,3253.2305295950155 +2012-07-05 23:00:00,2580.2367601246106 +2012-07-06 00:00:00,1961.146417445483 +2012-07-06 01:00:00,1624.6417445482866 +2012-07-06 02:00:00,1549.0623052959502 +2012-07-06 03:00:00,1491.5700934579438 +2012-07-06 04:00:00,1472.404984423676 +2012-07-06 05:00:00,1517.785046728972 +2012-07-06 06:00:00,1696.4267912772586 +2012-07-06 07:00:00,1872.7258566978194 +2012-07-06 08:00:00,2057.5015576323985 +2012-07-06 09:00:00,3125.744548286604 +2012-07-06 10:00:00,3545.7165109034268 +2012-07-06 11:00:00,3721.532710280374 +2012-07-06 12:00:00,3894.8193146417448 +2012-07-06 13:00:00,4173.588785046729 +2012-07-06 14:00:00,4256.068535825545 +2012-07-06 15:00:00,4375.2305295950155 +2012-07-06 16:00:00,4473.3021806853585 +2012-07-06 17:00:00,4448.277258566978 +2012-07-06 18:00:00,4364.02492211838 +2012-07-06 19:00:00,4201.8317757009345 +2012-07-06 20:00:00,4023.4517133956388 +2012-07-06 21:00:00,3874.6728971962616 +2012-07-06 22:00:00,3540.336448598131 +2012-07-06 23:00:00,2789.271028037383 +2012-07-07 00:00:00,2136.563862928349 +2012-07-07 01:00:00,1781.6230529595016 +2012-07-07 02:00:00,1688.0747663551401 +2012-07-07 03:00:00,1528.760124610592 +2012-07-07 04:00:00,1474.1090342679129 +2012-07-07 05:00:00,1537.816199376947 +2012-07-07 06:00:00,1718.6542056074766 +2012-07-07 07:00:00,1885.8286604361372 +2012-07-07 08:00:00,2053.847352024922 +2012-07-07 09:00:00,3014.3208722741433 +2012-07-07 10:00:00,3805.323987538941 +2012-07-07 11:00:00,3968.1401869158876 +2012-07-07 12:00:00,4143.056074766355 +2012-07-07 13:00:00,4208.517133956387 +2012-07-07 14:00:00,4298.380062305296 +2012-07-07 15:00:00,4387.21183800623 +2012-07-07 16:00:00,4466.5046728971965 +2012-07-07 17:00:00,4364.953271028037 +2012-07-07 18:00:00,4331.274143302181 +2012-07-07 19:00:00,4187.342679127726 +2012-07-07 20:00:00,3912.479750778816 +2012-07-07 21:00:00,3782.423676012461 +2012-07-07 22:00:00,3392.6043613707166 +2012-07-07 23:00:00,2684.0093457943926 +2012-07-08 00:00:00,2032.657320872274 +2012-07-08 01:00:00,1691.2429906542056 +2012-07-08 02:00:00,1624.6604361370717 +2012-07-08 03:00:00,1544.632398753894 +2012-07-08 04:00:00,1445.4704049844236 +2012-07-08 05:00:00,1504.0591900311526 +2012-07-08 06:00:00,1644.2647975077882 +2012-07-08 07:00:00,1839.7071651090343 +2012-07-08 08:00:00,1948.9221183800623 +2012-07-08 09:00:00,2926.314641744548 +2012-07-08 10:00:00,3667.7819314641742 +2012-07-08 11:00:00,3817.7040498442366 +2012-07-08 12:00:00,4023.11214953271 +2012-07-08 13:00:00,4096.043613707165 +2012-07-08 14:00:00,4016.2242990654204 +2012-07-08 15:00:00,4138.931464174455 +2012-07-08 16:00:00,4257.292834890965 +2012-07-08 17:00:00,4326.595015576324 +2012-07-08 18:00:00,4265.629283489096 +2012-07-08 19:00:00,4059.5825545171338 +2012-07-08 20:00:00,3786.760124610592 +2012-07-08 21:00:00,3730.2585669781934 +2012-07-08 22:00:00,3310.302180685358 +2012-07-08 23:00:00,2422.3271028037384 +2012-07-09 00:00:00,1972.392523364486 +2012-07-09 01:00:00,1597.2118380062304 +2012-07-09 02:00:00,1482.5576323987539 +2012-07-09 03:00:00,1459.5109034267912 +2012-07-09 04:00:00,1457.6666666666667 +2012-07-09 05:00:00,1503.183800623053 +2012-07-09 06:00:00,1669.6760124610591 +2012-07-09 07:00:00,1842.9127725856697 +2012-07-09 08:00:00,2038.6168224299065 +2012-07-09 09:00:00,3011.6604361370714 +2012-07-09 10:00:00,3599.766355140187 +2012-07-09 11:00:00,3751.0218068535823 +2012-07-09 12:00:00,3896.8816199376947 +2012-07-09 13:00:00,3998.93769470405 +2012-07-09 14:00:00,4243.582554517134 +2012-07-09 15:00:00,4227.732087227414 +2012-07-09 16:00:00,4312.370716510904 +2012-07-09 17:00:00,4416.644859813084 +2012-07-09 18:00:00,4253.267912772586 +2012-07-09 19:00:00,4067.9501557632398 +2012-07-09 20:00:00,3807.6604361370714 +2012-07-09 21:00:00,3705.442367601246 +2012-07-09 22:00:00,3306.9781931464177 +2012-07-09 23:00:00,2584.457943925234 +2012-07-10 00:00:00,2038.7071651090343 +2012-07-10 01:00:00,1652.5576323987539 +2012-07-10 02:00:00,1537.3084112149534 +2012-07-10 03:00:00,1503.2803738317757 +2012-07-10 04:00:00,1494.563862928349 +2012-07-10 05:00:00,1544.165109034268 +2012-07-10 06:00:00,1665.3644859813085 +2012-07-10 07:00:00,1872.96261682243 +2012-07-10 08:00:00,2023.5171339563863 +2012-07-10 09:00:00,2938.9439252336447 +2012-07-10 10:00:00,3598.669781931464 +2012-07-10 11:00:00,3751.0654205607475 +2012-07-10 12:00:00,3924.6105919003116 +2012-07-10 13:00:00,4001.8255451713394 +2012-07-10 14:00:00,4070.6105919003116 +2012-07-10 15:00:00,4196.07476635514 +2012-07-10 16:00:00,4357.439252336449 +2012-07-10 17:00:00,4322.576323987539 +2012-07-10 18:00:00,4148.043613707165 +2012-07-10 19:00:00,4022.8629283489095 +2012-07-10 20:00:00,3830.068535825545 +2012-07-10 21:00:00,3728.760124610592 +2012-07-10 22:00:00,3366.872274143302 +2012-07-10 23:00:00,2612.6573208722743 +2012-07-11 00:00:00,2045.8006230529595 +2012-07-11 01:00:00,1618.006230529595 +2012-07-11 02:00:00,1530.1059190031153 +2012-07-11 03:00:00,1490.3177570093458 +2012-07-11 04:00:00,1481.8878504672898 +2012-07-11 05:00:00,1514.8317757009345 +2012-07-11 06:00:00,1669.8504672897195 +2012-07-11 07:00:00,1833.9003115264798 +2012-07-11 08:00:00,1990.4984423676012 +2012-07-11 09:00:00,2955.292834890966 +2012-07-11 10:00:00,3451.6822429906542 +2012-07-11 11:00:00,3615.9968847352025 +2012-07-11 12:00:00,3791.059190031153 +2012-07-11 13:00:00,4109.031152647975 +2012-07-11 14:00:00,4220.429906542056 +2012-07-11 15:00:00,4322.158878504673 +2012-07-11 16:00:00,4438.404984423676 +2012-07-11 17:00:00,4407.264797507788 +2012-07-11 18:00:00,4309.489096573208 +2012-07-11 19:00:00,4094.8442367601247 +2012-07-11 20:00:00,3942.822429906542 +2012-07-11 21:00:00,3765.9968847352025 +2012-07-11 22:00:00,3353.691588785047 +2012-07-11 23:00:00,2629.707165109034 +2012-07-12 00:00:00,2020.0342679127725 +2012-07-12 01:00:00,1634.0654205607477 +2012-07-12 02:00:00,1565.7757009345794 +2012-07-12 03:00:00,1544.595015576324 +2012-07-12 04:00:00,1489.0747663551401 +2012-07-12 05:00:00,1521.872274143302 +2012-07-12 06:00:00,1673.4454828660437 +2012-07-12 07:00:00,1844.632398753894 +2012-07-12 08:00:00,2015.9096573208724 +2012-07-12 09:00:00,2932.7165109034268 +2012-07-12 10:00:00,3620.4174454828662 +2012-07-12 11:00:00,3841.314641744548 +2012-07-12 12:00:00,4269.476635514019 +2012-07-12 13:00:00,4447.056074766355 +2012-07-12 14:00:00,4490.352024922118 +2012-07-12 15:00:00,4561.152647975078 +2012-07-12 16:00:00,4570.943925233645 +2012-07-12 17:00:00,4566.781931464175 +2012-07-12 18:00:00,4605.77570093458 +2012-07-12 19:00:00,4470.046728971963 +2012-07-12 20:00:00,4193.704049844237 +2012-07-12 21:00:00,4051.576323987539 +2012-07-12 22:00:00,3526.98753894081 +2012-07-12 23:00:00,2657.5856697819313 +2012-07-13 00:00:00,2043.2866043613708 +2012-07-13 01:00:00,1620.5482866043615 +2012-07-13 02:00:00,1533.6417445482866 +2012-07-13 03:00:00,1485.2367601246106 +2012-07-13 04:00:00,1458.7258566978194 +2012-07-13 05:00:00,1479.4641744548287 +2012-07-13 06:00:00,1646.7133956386292 +2012-07-13 07:00:00,1835.1557632398753 +2012-07-13 08:00:00,2045.545171339564 +2012-07-13 09:00:00,2985.1401869158876 +2012-07-13 10:00:00,3722.0404984423676 +2012-07-13 11:00:00,3940.4205607476633 +2012-07-13 12:00:00,4215.9034267912775 +2012-07-13 13:00:00,4451.822429906542 +2012-07-13 14:00:00,4622.214953271028 +2012-07-13 15:00:00,4714.006230529595 +2012-07-13 16:00:00,4856.604361370716 +2012-07-13 17:00:00,4818.529595015576 +2012-07-13 18:00:00,4664.538940809969 +2012-07-13 19:00:00,4387.13707165109 +2012-07-13 20:00:00,4173.750778816199 +2012-07-13 21:00:00,4075.1308411214955 +2012-07-13 22:00:00,3628.595015576324 +2012-07-13 23:00:00,2904.121495327103 +2012-07-14 00:00:00,2192.3769470404986 +2012-07-14 01:00:00,1758.9376947040498 +2012-07-14 02:00:00,1609.9906542056074 +2012-07-14 03:00:00,1518.4641744548287 +2012-07-14 04:00:00,1479.6947040498442 +2012-07-14 05:00:00,1510.2928348909657 +2012-07-14 06:00:00,1664.7912772585669 +2012-07-14 07:00:00,1877.4890965732088 +2012-07-14 08:00:00,2010.127725856698 +2012-07-14 09:00:00,3002.096573208723 +2012-07-14 10:00:00,3765.5171339563863 +2012-07-14 11:00:00,3822.7383177570096 +2012-07-14 12:00:00,4149.906542056075 +2012-07-14 13:00:00,4350.666666666667 +2012-07-14 14:00:00,4407.538940809969 +2012-07-14 15:00:00,4465.95015576324 +2012-07-14 16:00:00,4429.841121495327 +2012-07-14 17:00:00,4463.264797507788 +2012-07-14 18:00:00,4349.878504672897 +2012-07-14 19:00:00,4218.186915887851 +2012-07-14 20:00:00,3960.4330218068535 +2012-07-14 21:00:00,3819.0 +2012-07-14 22:00:00,3479.8504672897197 +2012-07-14 23:00:00,2722.8442367601247 +2012-07-15 00:00:00,2038.9719626168223 +2012-07-15 01:00:00,1653.8971962616822 +2012-07-15 02:00:00,1619.6479750778817 +2012-07-15 03:00:00,1549.0218068535826 +2012-07-15 04:00:00,1439.2118380062304 +2012-07-15 05:00:00,1453.4859813084113 +2012-07-15 06:00:00,1614.0404984423676 +2012-07-15 07:00:00,1803.5420560747664 +2012-07-15 08:00:00,1924.2274143302182 +2012-07-15 09:00:00,2896.03738317757 +2012-07-15 10:00:00,3660.479750778816 +2012-07-15 11:00:00,3915.233644859813 +2012-07-15 12:00:00,4202.442367601246 +2012-07-15 13:00:00,4441.947040498442 +2012-07-15 14:00:00,4351.981308411215 +2012-07-15 15:00:00,4282.794392523365 +2012-07-15 16:00:00,4379.803738317757 +2012-07-15 17:00:00,4404.4361370716515 +2012-07-15 18:00:00,4489.489096573208 +2012-07-15 19:00:00,4384.869158878505 +2012-07-15 20:00:00,4236.728971962617 +2012-07-15 21:00:00,4143.968847352025 +2012-07-15 22:00:00,3573.1495327102803 +2012-07-15 23:00:00,2513.255451713396 +2012-07-16 00:00:00,1955.638629283489 +2012-07-16 01:00:00,1640.6417445482866 +2012-07-16 02:00:00,1595.361370716511 +2012-07-16 03:00:00,1556.3021806853583 +2012-07-16 04:00:00,1512.3208722741433 +2012-07-16 05:00:00,1531.6666666666667 +2012-07-16 06:00:00,1703.5732087227414 +2012-07-16 07:00:00,1865.8971962616822 +2012-07-16 08:00:00,2083.4454828660437 +2012-07-16 09:00:00,3104.7819314641742 +2012-07-16 10:00:00,4312.451713395639 +2012-07-16 11:00:00,4483.461059190031 +2012-07-16 12:00:00,4727.719626168225 +2012-07-16 13:00:00,4969.454828660436 +2012-07-16 14:00:00,5003.971962616823 +2012-07-16 15:00:00,5068.828660436137 +2012-07-16 16:00:00,5069.02492211838 +2012-07-16 17:00:00,5089.5046728971965 +2012-07-16 18:00:00,5044.4361370716515 +2012-07-16 19:00:00,4959.028037383177 +2012-07-16 20:00:00,4749.227414330218 +2012-07-16 21:00:00,4594.22429906542 +2012-07-16 22:00:00,4008.196261682243 +2012-07-16 23:00:00,3040.183800623053 +2012-07-17 00:00:00,2321.07476635514 +2012-07-17 01:00:00,1841.01246105919 +2012-07-17 02:00:00,1745.1869158878505 +2012-07-17 03:00:00,1671.9968847352025 +2012-07-17 04:00:00,1640.7632398753894 +2012-07-17 05:00:00,1629.8317757009345 +2012-07-17 06:00:00,1802.196261682243 +2012-07-17 07:00:00,2007.853582554517 +2012-07-17 08:00:00,2217.7040498442366 +2012-07-17 09:00:00,3427.8255451713394 +2012-07-17 10:00:00,4642.174454828661 +2012-07-17 11:00:00,4823.348909657321 +2012-07-17 12:00:00,4938.725856697819 +2012-07-17 13:00:00,5163.990654205608 +2012-07-17 14:00:00,5232.467289719626 +2012-07-17 15:00:00,5214.028037383177 +2012-07-17 16:00:00,5283.420560747663 +2012-07-17 17:00:00,5275.719626168225 +2012-07-17 18:00:00,5181.442367601246 +2012-07-17 19:00:00,5026.252336448598 +2012-07-17 20:00:00,4732.470404984424 +2012-07-17 21:00:00,4624.5669781931465 +2012-07-17 22:00:00,4134.205607476635 +2012-07-17 23:00:00,3038.97507788162 +2012-07-18 00:00:00,2397.5077881619936 +2012-07-18 01:00:00,1969.9968847352025 +2012-07-18 02:00:00,1788.417445482866 +2012-07-18 03:00:00,1661.1557632398753 +2012-07-18 04:00:00,1595.3956386292834 +2012-07-18 05:00:00,1653.056074766355 +2012-07-18 06:00:00,1830.943925233645 +2012-07-18 07:00:00,2015.4205607476636 +2012-07-18 08:00:00,2280.3800623052957 +2012-07-18 09:00:00,3706.133956386293 +2012-07-18 10:00:00,4334.694704049844 +2012-07-18 11:00:00,4860.376947040499 +2012-07-18 12:00:00,5064.956386292835 +2012-07-18 13:00:00,5268.7009345794395 +2012-07-18 14:00:00,5326.08722741433 +2012-07-18 15:00:00,5165.311526479751 +2012-07-18 16:00:00,5066.909657320873 +2012-07-18 17:00:00,5100.573208722742 +2012-07-18 18:00:00,5012.953271028037 +2012-07-18 19:00:00,4829.601246105919 +2012-07-18 20:00:00,4628.071651090343 +2012-07-18 21:00:00,4690.059190031153 +2012-07-18 22:00:00,4255.177570093458 +2012-07-18 23:00:00,2983.1246105919004 +2012-07-19 00:00:00,2311.6728971962616 +2012-07-19 01:00:00,1859.4080996884736 +2012-07-19 02:00:00,1728.943925233645 +2012-07-19 03:00:00,1612.5327102803737 +2012-07-19 04:00:00,1551.8317757009345 +2012-07-19 05:00:00,1611.5981308411215 +2012-07-19 06:00:00,1756.5109034267912 +2012-07-19 07:00:00,1982.3239875389409 +2012-07-19 08:00:00,2183.8130841121497 +2012-07-19 09:00:00,3589.5856697819313 +2012-07-19 10:00:00,4372.956386292835 +2012-07-19 11:00:00,4698.370716510904 +2012-07-19 12:00:00,5039.996884735203 +2012-07-19 13:00:00,5061.809968847352 +2012-07-19 14:00:00,4975.451713395639 +2012-07-19 15:00:00,5020.847352024922 +2012-07-19 16:00:00,5073.897196261682 +2012-07-19 17:00:00,5083.679127725857 +2012-07-19 18:00:00,5090.507788161994 +2012-07-19 19:00:00,5025.629283489096 +2012-07-19 20:00:00,4712.741433021807 +2012-07-19 21:00:00,4508.760124610591 +2012-07-19 22:00:00,4007.0404984423676 +2012-07-19 23:00:00,2809.5171339563863 +2012-07-20 00:00:00,2201.2367601246106 +2012-07-20 01:00:00,1826.9190031152648 +2012-07-20 02:00:00,1669.8255451713396 +2012-07-20 03:00:00,1575.8598130841121 +2012-07-20 04:00:00,1514.4143302180685 +2012-07-20 05:00:00,1593.1308411214952 +2012-07-20 06:00:00,1782.4704049844236 +2012-07-20 07:00:00,1947.8130841121495 +2012-07-20 08:00:00,2149.3271028037384 +2012-07-20 09:00:00,3398.4392523364486 +2012-07-20 10:00:00,4031.0093457943926 +2012-07-20 11:00:00,4347.249221183801 +2012-07-20 12:00:00,4565.018691588785 +2012-07-20 13:00:00,4801.236760124611 +2012-07-20 14:00:00,4959.177570093458 +2012-07-20 15:00:00,4932.308411214954 +2012-07-20 16:00:00,4897.529595015576 +2012-07-20 17:00:00,4916.841121495327 +2012-07-20 18:00:00,4897.342679127726 +2012-07-20 19:00:00,4784.785046728972 +2012-07-20 20:00:00,4436.4984423676015 +2012-07-20 21:00:00,4336.0373831775705 +2012-07-20 22:00:00,3953.797507788162 +2012-07-20 23:00:00,2916.6791277258567 +2012-07-21 00:00:00,2274.330218068536 +2012-07-21 01:00:00,1799.2367601246106 +2012-07-21 02:00:00,1639.8691588785048 +2012-07-21 03:00:00,1544.6791277258567 +2012-07-21 04:00:00,1498.6947040498442 +2012-07-21 05:00:00,1585.9968847352025 +2012-07-21 06:00:00,1756.7320872274142 +2012-07-21 07:00:00,1928.8442367601247 +2012-07-21 08:00:00,2112.1557632398753 +2012-07-21 09:00:00,3396.0498442367602 +2012-07-21 10:00:00,4166.8753894081 +2012-07-21 11:00:00,4563.389408099689 +2012-07-21 12:00:00,4865.479750778816 +2012-07-21 13:00:00,5033.866043613707 +2012-07-21 14:00:00,5144.598130841122 +2012-07-21 15:00:00,5213.205607476635 +2012-07-21 16:00:00,5276.009345794392 +2012-07-21 17:00:00,5247.320872274143 +2012-07-21 18:00:00,5133.595015576324 +2012-07-21 19:00:00,4859.906542056075 +2012-07-21 20:00:00,4626.423676012461 +2012-07-21 21:00:00,4474.146417445483 +2012-07-21 22:00:00,4101.9657320872275 +2012-07-21 23:00:00,2923.059190031153 +2012-07-22 00:00:00,2308.735202492212 +2012-07-22 01:00:00,1840.221183800623 +2012-07-22 02:00:00,1710.7009345794393 +2012-07-22 03:00:00,1653.3239875389409 +2012-07-22 04:00:00,1511.7943925233644 +2012-07-22 05:00:00,1578.9595015576324 +2012-07-22 06:00:00,1755.8598130841121 +2012-07-22 07:00:00,1905.5358255451713 +2012-07-22 08:00:00,2065.828660436137 +2012-07-22 09:00:00,3361.872274143302 +2012-07-22 10:00:00,4161.242990654206 +2012-07-22 11:00:00,4563.9626168224295 +2012-07-22 12:00:00,4807.520249221184 +2012-07-22 13:00:00,4957.532710280374 +2012-07-22 14:00:00,4887.794392523365 +2012-07-22 15:00:00,4927.750778816199 +2012-07-22 16:00:00,5054.595015576324 +2012-07-22 17:00:00,5102.641744548287 +2012-07-22 18:00:00,5083.336448598131 +2012-07-22 19:00:00,4811.5638629283485 +2012-07-22 20:00:00,4614.841121495327 +2012-07-22 21:00:00,4422.579439252337 +2012-07-22 22:00:00,3921.866043613707 +2012-07-22 23:00:00,2636.1028037383176 +2012-07-23 00:00:00,2119.538940809969 +2012-07-23 01:00:00,1675.8193146417445 +2012-07-23 02:00:00,1624.5015576323988 +2012-07-23 03:00:00,1560.3115264797507 +2012-07-23 04:00:00,1514.1557632398753 +2012-07-23 05:00:00,1598.6168224299065 +2012-07-23 06:00:00,1781.146417445483 +2012-07-23 07:00:00,1947.9719626168223 +2012-07-23 08:00:00,2114.9781931464177 +2012-07-23 09:00:00,3666.9283489096574 +2012-07-23 10:00:00,4017.202492211838 +2012-07-23 11:00:00,4410.479750778816 +2012-07-23 12:00:00,4528.380062305296 +2012-07-23 13:00:00,4741.445482866044 +2012-07-23 14:00:00,4796.71339563863 +2012-07-23 15:00:00,4856.358255451713 +2012-07-23 16:00:00,4934.644859813084 +2012-07-23 17:00:00,4903.6386292834895 +2012-07-23 18:00:00,4780.91277258567 +2012-07-23 19:00:00,4656.355140186916 +2012-07-23 20:00:00,4430.01246105919 +2012-07-23 21:00:00,4379.990654205608 +2012-07-23 22:00:00,3877.5545171339563 +2012-07-23 23:00:00,2887.373831775701 +2012-07-24 00:00:00,2265.105919003115 +2012-07-24 01:00:00,1877.6884735202493 +2012-07-24 02:00:00,1716.0934579439252 +2012-07-24 03:00:00,1646.1869158878505 +2012-07-24 04:00:00,1572.9096573208724 +2012-07-24 05:00:00,1664.165109034268 +2012-07-24 06:00:00,1844.778816199377 +2012-07-24 07:00:00,2028.1806853582555 +2012-07-24 08:00:00,2194.177570093458 +2012-07-24 09:00:00,3624.3115264797507 +2012-07-24 10:00:00,3963.3831775700933 +2012-07-24 11:00:00,4278.283489096573 +2012-07-24 12:00:00,4357.915887850468 +2012-07-24 13:00:00,4572.193146417446 +2012-07-24 14:00:00,4638.202492211838 +2012-07-24 15:00:00,4661.485981308411 +2012-07-24 16:00:00,4676.591900311527 +2012-07-24 17:00:00,4728.423676012461 +2012-07-24 18:00:00,4658.520249221184 +2012-07-24 19:00:00,4516.258566978193 +2012-07-24 20:00:00,4269.523364485981 +2012-07-24 21:00:00,4218.894080996884 +2012-07-24 22:00:00,3830.92523364486 +2012-07-24 23:00:00,2859.457943925234 +2012-07-25 00:00:00,2215.866043613707 +2012-07-25 01:00:00,1781.0996884735202 +2012-07-25 02:00:00,1664.7912772585669 +2012-07-25 03:00:00,1610.5700934579438 +2012-07-25 04:00:00,1555.9563862928348 +2012-07-25 05:00:00,1619.5389408099688 +2012-07-25 06:00:00,1800.9781931464174 +2012-07-25 07:00:00,2020.4890965732088 +2012-07-25 08:00:00,2189.98753894081 +2012-07-25 09:00:00,3523.0498442367602 +2012-07-25 10:00:00,3935.196261682243 +2012-07-25 11:00:00,4216.152647975078 +2012-07-25 12:00:00,4377.676012461059 +2012-07-25 13:00:00,4564.510903426792 +2012-07-25 14:00:00,4602.258566978193 +2012-07-25 15:00:00,4592.489096573208 +2012-07-25 16:00:00,4621.647975077882 +2012-07-25 17:00:00,4641.647975077882 +2012-07-25 18:00:00,4515.227414330218 +2012-07-25 19:00:00,4405.214953271028 +2012-07-25 20:00:00,4237.881619937694 +2012-07-25 21:00:00,4235.660436137072 +2012-07-25 22:00:00,3829.4922118380064 +2012-07-25 23:00:00,2847.0155763239877 +2012-07-26 00:00:00,2244.856697819315 +2012-07-26 01:00:00,1814.7943925233644 +2012-07-26 02:00:00,1654.386292834891 +2012-07-26 03:00:00,1610.4766355140187 +2012-07-26 04:00:00,1537.728971962617 +2012-07-26 05:00:00,1623.4143302180685 +2012-07-26 06:00:00,1799.4485981308412 +2012-07-26 07:00:00,1993.6884735202493 +2012-07-26 08:00:00,2167.570093457944 +2012-07-26 09:00:00,3381.323987538941 +2012-07-26 10:00:00,3811.6355140186915 +2012-07-26 11:00:00,4096.423676012461 +2012-07-26 12:00:00,4271.283489096573 +2012-07-26 13:00:00,4351.6386292834895 +2012-07-26 14:00:00,4394.21183800623 +2012-07-26 15:00:00,4525.704049844237 +2012-07-26 16:00:00,4553.084112149532 +2012-07-26 17:00:00,4590.140186915888 +2012-07-26 18:00:00,4594.414330218068 +2012-07-26 19:00:00,4465.348909657321 +2012-07-26 20:00:00,4242.398753894081 +2012-07-26 21:00:00,4179.8753894081 +2012-07-26 22:00:00,3768.5295950155764 +2012-07-26 23:00:00,2633.1495327102803 +2012-07-27 00:00:00,2092.4828660436137 +2012-07-27 01:00:00,1735.3021806853583 +2012-07-27 02:00:00,1652.0654205607477 +2012-07-27 03:00:00,1604.5077881619939 +2012-07-27 04:00:00,1503.8130841121495 +2012-07-27 05:00:00,1545.6853582554518 +2012-07-27 06:00:00,1754.797507788162 +2012-07-27 07:00:00,1920.361370716511 +2012-07-27 08:00:00,2059.6510903426793 +2012-07-27 09:00:00,2971.1495327102803 +2012-07-27 10:00:00,3844.457943925234 +2012-07-27 11:00:00,4286.420560747663 +2012-07-27 12:00:00,4359.953271028037 +2012-07-27 13:00:00,4451.847352024922 +2012-07-27 14:00:00,4465.333333333333 +2012-07-27 15:00:00,4549.277258566978 +2012-07-27 16:00:00,4584.6978193146415 +2012-07-27 17:00:00,4588.8348909657325 +2012-07-27 18:00:00,4442.4984423676015 +2012-07-27 19:00:00,4298.068535825545 +2012-07-27 20:00:00,4169.383177570094 +2012-07-27 21:00:00,4085.052959501558 +2012-07-27 22:00:00,3774.510903426791 +2012-07-27 23:00:00,2845.330218068536 +2012-07-28 00:00:00,2154.563862928349 +2012-07-28 01:00:00,1731.1339563862928 +2012-07-28 02:00:00,1591.7414330218069 +2012-07-28 03:00:00,1479.3894080996886 +2012-07-28 04:00:00,1445.9252336448599 +2012-07-28 05:00:00,1526.1401869158879 +2012-07-28 06:00:00,1705.9501557632398 +2012-07-28 07:00:00,1864.7507788161993 +2012-07-28 08:00:00,2043.006230529595 +2012-07-28 09:00:00,2955.0778816199377 +2012-07-28 10:00:00,3838.3271028037384 +2012-07-28 11:00:00,4090.299065420561 +2012-07-28 12:00:00,4205.507788161994 +2012-07-28 13:00:00,4322.881619937694 +2012-07-28 14:00:00,4412.660436137072 +2012-07-28 15:00:00,4423.152647975078 +2012-07-28 16:00:00,4567.654205607477 +2012-07-28 17:00:00,4643.0 +2012-07-28 18:00:00,4579.744548286604 +2012-07-28 19:00:00,4397.052959501558 +2012-07-28 20:00:00,4139.551401869159 +2012-07-28 21:00:00,4046.096573208723 +2012-07-28 22:00:00,3759.809968847352 +2012-07-28 23:00:00,2771.158878504673 +2012-07-29 00:00:00,2123.5607476635514 +2012-07-29 01:00:00,1689.9034267912773 +2012-07-29 02:00:00,1622.4267912772586 +2012-07-29 03:00:00,1533.5794392523364 +2012-07-29 04:00:00,1407.576323987539 +2012-07-29 05:00:00,1464.9096573208724 +2012-07-29 06:00:00,1617.417445482866 +2012-07-29 07:00:00,1823.8878504672898 +2012-07-29 08:00:00,1975.2461059190032 +2012-07-29 09:00:00,2831.931464174455 +2012-07-29 10:00:00,3869.856697819315 +2012-07-29 11:00:00,4201.090342679127 +2012-07-29 12:00:00,4389.22429906542 +2012-07-29 13:00:00,4576.193146417446 +2012-07-29 14:00:00,4428.672897196262 +2012-07-29 15:00:00,4490.439252336449 +2012-07-29 16:00:00,4570.059190031153 +2012-07-29 17:00:00,4736.457943925234 +2012-07-29 18:00:00,4647.672897196262 +2012-07-29 19:00:00,4503.4953271028035 +2012-07-29 20:00:00,4224.06230529595 +2012-07-29 21:00:00,4060.542056074766 +2012-07-29 22:00:00,3542.766355140187 +2012-07-29 23:00:00,2487.9781931464177 +2012-07-30 00:00:00,1981.1744548286604 +2012-07-30 01:00:00,1561.96261682243 +2012-07-30 02:00:00,1493.7538940809968 +2012-07-30 03:00:00,1435.367601246106 +2012-07-30 04:00:00,1378.2959501557632 +2012-07-30 05:00:00,1449.0778816199377 +2012-07-30 06:00:00,1634.473520249221 +2012-07-30 07:00:00,1823.7165109034268 +2012-07-30 08:00:00,2017.1993769470405 +2012-07-30 09:00:00,3080.9595015576324 +2012-07-30 10:00:00,3868.4548286604363 +2012-07-30 11:00:00,4224.744548286604 +2012-07-30 12:00:00,4498.707165109035 +2012-07-30 13:00:00,4626.978193146418 +2012-07-30 14:00:00,4584.317757009346 +2012-07-30 15:00:00,4626.71339563863 +2012-07-30 16:00:00,4671.682242990654 +2012-07-30 17:00:00,4785.0996884735205 +2012-07-30 18:00:00,4795.208722741433 +2012-07-30 19:00:00,4692.83800623053 +2012-07-30 20:00:00,4471.199376947041 +2012-07-30 21:00:00,4224.532710280374 +2012-07-30 22:00:00,3790.1619937694704 +2012-07-30 23:00:00,2798.0934579439254 +2012-07-31 00:00:00,2168.669781931464 +2012-07-31 01:00:00,1680.3302180685357 +2012-07-31 02:00:00,1551.0529595015576 +2012-07-31 03:00:00,1497.9158878504672 +2012-07-31 04:00:00,1433.4205607476636 +2012-07-31 05:00:00,1493.760124610592 +2012-07-31 06:00:00,1656.2647975077882 +2012-07-31 07:00:00,1886.3395638629283 +2012-07-31 08:00:00,2034.545171339564 +2012-07-31 09:00:00,3088.1806853582552 +2012-07-31 10:00:00,3826.654205607477 +2012-07-31 11:00:00,4218.78816199377 +2012-07-31 12:00:00,4379.06230529595 +2012-07-31 13:00:00,4601.249221183801 +2012-07-31 14:00:00,4718.277258566978 +2012-07-31 15:00:00,4741.190031152648 +2012-07-31 16:00:00,4801.236760124611 +2012-07-31 17:00:00,4793.330218068536 +2012-07-31 18:00:00,4703.93769470405 +2012-07-31 19:00:00,4628.8317757009345 +2012-07-31 20:00:00,4382.258566978193 +2012-07-31 21:00:00,4159.604361370716 +2012-07-31 22:00:00,3680.239875389408 +2012-07-31 23:00:00,2764.993769470405 +2012-08-01 00:00:00,2167.9501557632398 +2012-08-01 01:00:00,1645.4672897196263 +2012-08-01 02:00:00,1549.3208722741433 +2012-08-01 03:00:00,1469.2647975077882 +2012-08-01 04:00:00,1420.6292834890967 +2012-08-01 05:00:00,1472.9376947040498 +2012-08-01 06:00:00,1673.4018691588785 +2012-08-01 07:00:00,1834.576323987539 +2012-08-01 08:00:00,2036.981308411215 +2012-08-01 09:00:00,2940.0 +2012-08-01 10:00:00,3803.563862928349 +2012-08-01 11:00:00,3972.361370716511 +2012-08-01 12:00:00,4233.109034267913 +2012-08-01 13:00:00,4543.947040498442 +2012-08-01 14:00:00,4672.514018691589 +2012-08-01 15:00:00,4775.763239875389 +2012-08-01 16:00:00,4892.803738317757 +2012-08-01 17:00:00,4883.02492211838 +2012-08-01 18:00:00,4715.598130841122 +2012-08-01 19:00:00,4572.794392523365 +2012-08-01 20:00:00,4352.591900311527 +2012-08-01 21:00:00,4261.439252336449 +2012-08-01 22:00:00,3917.152647975078 +2012-08-01 23:00:00,2882.6604361370714 +2012-08-02 00:00:00,2269.5794392523367 +2012-08-02 01:00:00,1856.0031152647975 +2012-08-02 02:00:00,1788.6105919003114 +2012-08-02 03:00:00,1587.0841121495328 +2012-08-02 04:00:00,1477.2834890965732 +2012-08-02 05:00:00,1536.3302180685357 +2012-08-02 06:00:00,1710.5669781931465 +2012-08-02 07:00:00,1912.8629283489097 +2012-08-02 08:00:00,2078.479750778816 +2012-08-02 09:00:00,3021.5140186915887 +2012-08-02 10:00:00,3939.96261682243 +2012-08-02 11:00:00,4269.22429906542 +2012-08-02 12:00:00,4495.190031152648 +2012-08-02 13:00:00,4672.06230529595 +2012-08-02 14:00:00,4829.445482866044 +2012-08-02 15:00:00,4925.127725856698 +2012-08-02 16:00:00,4998.887850467289 +2012-08-02 17:00:00,4961.682242990654 +2012-08-02 18:00:00,4870.320872274143 +2012-08-02 19:00:00,4667.4330218068535 +2012-08-02 20:00:00,4344.186915887851 +2012-08-02 21:00:00,4153.71339563863 +2012-08-02 22:00:00,3882.02492211838 +2012-08-02 23:00:00,2807.557632398754 +2012-08-03 00:00:00,1984.361370716511 +2012-08-03 01:00:00,1613.5233644859813 +2012-08-03 02:00:00,1553.0218068535826 +2012-08-03 03:00:00,1492.9501557632398 +2012-08-03 04:00:00,1439.816199376947 +2012-08-03 05:00:00,1500.0498442367602 +2012-08-03 06:00:00,1680.1806853582555 +2012-08-03 07:00:00,1864.4922118380061 +2012-08-03 08:00:00,2032.5015576323988 +2012-08-03 09:00:00,2923.0560747663553 +2012-08-03 10:00:00,3970.7476635514017 +2012-08-03 11:00:00,4241.772585669782 +2012-08-03 12:00:00,4504.931464174455 +2012-08-03 13:00:00,4749.576323987539 +2012-08-03 14:00:00,4841.922118380062 +2012-08-03 15:00:00,4964.570093457944 +2012-08-03 16:00:00,5008.190031152648 +2012-08-03 17:00:00,5027.800623052959 +2012-08-03 18:00:00,4785.660436137072 +2012-08-03 19:00:00,4574.208722741433 +2012-08-03 20:00:00,4333.461059190031 +2012-08-03 21:00:00,4199.704049844237 +2012-08-03 22:00:00,3863.0404984423676 +2012-08-03 23:00:00,2913.8629283489095 +2012-08-04 00:00:00,2187.96261682243 +2012-08-04 01:00:00,1661.01246105919 +2012-08-04 02:00:00,1563.9283489096574 +2012-08-04 03:00:00,1468.8566978193146 +2012-08-04 04:00:00,1446.7196261682243 +2012-08-04 05:00:00,1497.9345794392523 +2012-08-04 06:00:00,1669.7570093457944 +2012-08-04 07:00:00,1849.1183800623053 +2012-08-04 08:00:00,2023.803738317757 +2012-08-04 09:00:00,2904.4641744548285 +2012-08-04 10:00:00,3932.5919003115264 +2012-08-04 11:00:00,4168.676012461059 +2012-08-04 12:00:00,4356.454828660436 +2012-08-04 13:00:00,4578.576323987539 +2012-08-04 14:00:00,4641.451713395639 +2012-08-04 15:00:00,4771.947040498442 +2012-08-04 16:00:00,4853.591900311527 +2012-08-04 17:00:00,4825.657320872274 +2012-08-04 18:00:00,4710.4361370716515 +2012-08-04 19:00:00,4386.990654205608 +2012-08-04 20:00:00,4142.3613707165105 +2012-08-04 21:00:00,4154.878504672897 +2012-08-04 22:00:00,3817.277258566978 +2012-08-04 23:00:00,2824.0280373831774 +2012-08-05 00:00:00,2024.3769470404984 +2012-08-05 01:00:00,1693.4330218068535 +2012-08-05 02:00:00,1622.018691588785 +2012-08-05 03:00:00,1546.5358255451713 +2012-08-05 04:00:00,1427.7352024922118 +2012-08-05 05:00:00,1511.1028037383178 +2012-08-05 06:00:00,1673.9595015576324 +2012-08-05 07:00:00,1826.165109034268 +2012-08-05 08:00:00,1970.1183800623053 +2012-08-05 09:00:00,2799.1183800623053 +2012-08-05 10:00:00,3902.246105919003 +2012-08-05 11:00:00,4065.834890965732 +2012-08-05 12:00:00,4160.86292834891 +2012-08-05 13:00:00,4233.607476635514 +2012-08-05 14:00:00,4237.221183800623 +2012-08-05 15:00:00,4192.585669781932 +2012-08-05 16:00:00,4241.186915887851 +2012-08-05 17:00:00,4205.666666666667 +2012-08-05 18:00:00,4075.753894080997 +2012-08-05 19:00:00,3985.894080996885 +2012-08-05 20:00:00,3812.6510903426793 +2012-08-05 21:00:00,3802.4143302180687 +2012-08-05 22:00:00,3438.9065420560746 +2012-08-05 23:00:00,2466.0560747663553 +2012-08-06 00:00:00,1930.7227414330218 +2012-08-06 01:00:00,1576.8130841121495 +2012-08-06 02:00:00,1518.5327102803737 +2012-08-06 03:00:00,1467.0685358255453 +2012-08-06 04:00:00,1409.0529595015576 +2012-08-06 05:00:00,1455.386292834891 +2012-08-06 06:00:00,1620.5295950155764 +2012-08-06 07:00:00,1809.0342679127725 +2012-08-06 08:00:00,2009.7819314641745 +2012-08-06 09:00:00,2830.0498442367602 +2012-08-06 10:00:00,3654.6043613707166 +2012-08-06 11:00:00,3834.5919003115264 +2012-08-06 12:00:00,4067.336448598131 +2012-08-06 13:00:00,4345.467289719626 +2012-08-06 14:00:00,4325.915887850468 +2012-08-06 15:00:00,4357.105919003116 +2012-08-06 16:00:00,4499.3021806853585 +2012-08-06 17:00:00,4477.252336448598 +2012-08-06 18:00:00,4511.86292834891 +2012-08-06 19:00:00,4338.520249221184 +2012-08-06 20:00:00,4120.093457943925 +2012-08-06 21:00:00,3974.797507788162 +2012-08-06 22:00:00,3680.442367601246 +2012-08-06 23:00:00,2789.3271028037384 +2012-08-07 00:00:00,2114.5482866043612 +2012-08-07 01:00:00,1632.9376947040498 +2012-08-07 02:00:00,1552.4517133956385 +2012-08-07 03:00:00,1469.7320872274142 +2012-08-07 04:00:00,1418.778816199377 +2012-08-07 05:00:00,1503.0591900311526 +2012-08-07 06:00:00,1668.607476635514 +2012-08-07 07:00:00,1828.968847352025 +2012-08-07 08:00:00,1996.1993769470405 +2012-08-07 09:00:00,2888.510903426791 +2012-08-07 10:00:00,3908.601246105919 +2012-08-07 11:00:00,4219.2336448598135 +2012-08-07 12:00:00,4470.0965732087225 +2012-08-07 13:00:00,4671.990654205608 +2012-08-07 14:00:00,4702.707165109035 +2012-08-07 15:00:00,4777.274143302181 +2012-08-07 16:00:00,4913.772585669782 +2012-08-07 17:00:00,4867.940809968847 +2012-08-07 18:00:00,4792.934579439252 +2012-08-07 19:00:00,4685.429906542056 +2012-08-07 20:00:00,4527.785046728972 +2012-08-07 21:00:00,4416.158878504673 +2012-08-07 22:00:00,4122.6355140186915 +2012-08-07 23:00:00,3384.202492211838 +2012-08-08 00:00:00,2097.3115264797507 +2012-08-08 01:00:00,1638.252336448598 +2012-08-08 02:00:00,1578.6105919003114 +2012-08-08 03:00:00,1509.1713395638628 +2012-08-08 04:00:00,1449.271028037383 +2012-08-08 05:00:00,1479.3551401869158 +2012-08-08 06:00:00,1668.0996884735202 +2012-08-08 07:00:00,1851.7632398753894 +2012-08-08 08:00:00,2012.2897196261683 +2012-08-08 09:00:00,3245.068535825545 +2012-08-08 10:00:00,4047.7196261682243 +2012-08-08 11:00:00,4717.894080996884 +2012-08-08 12:00:00,4880.4330218068535 +2012-08-08 13:00:00,5041.009345794392 +2012-08-08 14:00:00,5079.271028037383 +2012-08-08 15:00:00,5075.196261682243 +2012-08-08 16:00:00,5077.887850467289 +2012-08-08 17:00:00,5083.146417445483 +2012-08-08 18:00:00,4964.548286604361 +2012-08-08 19:00:00,4755.376947040499 +2012-08-08 20:00:00,4602.140186915888 +2012-08-08 21:00:00,4537.485981308411 +2012-08-08 22:00:00,4183.894080996884 +2012-08-08 23:00:00,3149.785046728972 +2012-08-09 00:00:00,2081.744548286604 +2012-08-09 01:00:00,1663.803738317757 +2012-08-09 02:00:00,1591.0654205607477 +2012-08-09 03:00:00,1521.4330218068535 +2012-08-09 04:00:00,1454.4579439252336 +2012-08-09 05:00:00,1510.993769470405 +2012-08-09 06:00:00,1678.9501557632398 +2012-08-09 07:00:00,1907.2118380062304 +2012-08-09 08:00:00,2065.302180685358 +2012-08-09 09:00:00,3421.7881619937693 +2012-08-09 10:00:00,4339.93769470405 +2012-08-09 11:00:00,4760.953271028037 +2012-08-09 12:00:00,4917.417445482866 +2012-08-09 13:00:00,5065.647975077882 +2012-08-09 14:00:00,5188.317757009346 +2012-08-09 15:00:00,5250.442367601246 +2012-08-09 16:00:00,5317.158878504673 +2012-08-09 17:00:00,5263.373831775701 +2012-08-09 18:00:00,5184.1651090342675 +2012-08-09 19:00:00,5048.031152647975 +2012-08-09 20:00:00,4804.894080996884 +2012-08-09 21:00:00,4673.794392523365 +2012-08-09 22:00:00,4157.451713395639 +2012-08-09 23:00:00,3348.8535825545173 +2012-08-10 00:00:00,2129.7507788161993 +2012-08-10 01:00:00,1715.9034267912773 +2012-08-10 02:00:00,1629.8473520249222 +2012-08-10 03:00:00,1553.613707165109 +2012-08-10 04:00:00,1495.6791277258567 +2012-08-10 05:00:00,1563.5046728971963 +2012-08-10 06:00:00,1765.4018691588785 +2012-08-10 07:00:00,1956.9003115264798 +2012-08-10 08:00:00,2161.504672897196 +2012-08-10 09:00:00,3713.5482866043612 +2012-08-10 10:00:00,4618.956386292835 +2012-08-10 11:00:00,4980.417445482866 +2012-08-10 12:00:00,5162.177570093458 +2012-08-10 13:00:00,5428.507788161994 +2012-08-10 14:00:00,5311.897196261682 +2012-08-10 15:00:00,5388.6355140186915 +2012-08-10 16:00:00,5578.158878504673 +2012-08-10 17:00:00,5537.028037383177 +2012-08-10 18:00:00,5440.367601246106 +2012-08-10 19:00:00,5084.8753894081 +2012-08-10 20:00:00,4821.7663551401865 +2012-08-10 21:00:00,4651.803738317757 +2012-08-10 22:00:00,4240.420560747663 +2012-08-10 23:00:00,3498.735202492212 +2012-08-11 00:00:00,2185.4922118380064 +2012-08-11 01:00:00,1690.6168224299065 +2012-08-11 02:00:00,1592.1152647975077 +2012-08-11 03:00:00,1490.4205607476636 +2012-08-11 04:00:00,1454.4766355140187 +2012-08-11 05:00:00,1528.545171339564 +2012-08-11 06:00:00,1730.9314641744547 +2012-08-11 07:00:00,1884.9221183800623 +2012-08-11 08:00:00,2067.644859813084 +2012-08-11 09:00:00,3391.7320872274145 +2012-08-11 10:00:00,4183.841121495327 +2012-08-11 11:00:00,4563.7694704049845 +2012-08-11 12:00:00,4805.576323987539 +2012-08-11 13:00:00,5009.2305295950155 +2012-08-11 14:00:00,5201.2305295950155 +2012-08-11 15:00:00,5331.682242990654 +2012-08-11 16:00:00,5297.411214953271 +2012-08-11 17:00:00,5177.317757009346 +2012-08-11 18:00:00,4990.682242990654 +2012-08-11 19:00:00,4689.514018691589 +2012-08-11 20:00:00,4469.249221183801 +2012-08-11 21:00:00,4372.772585669782 +2012-08-11 22:00:00,4039.6417445482866 +2012-08-11 23:00:00,3355.330218068536 +2012-08-12 00:00:00,2170.0218068535823 +2012-08-12 01:00:00,1705.4579439252336 +2012-08-12 02:00:00,1650.1588785046729 +2012-08-12 03:00:00,1571.803738317757 +2012-08-12 04:00:00,1444.5607476635514 +2012-08-12 05:00:00,1517.8286604361372 +2012-08-12 06:00:00,1702.0965732087227 +2012-08-12 07:00:00,1859.9968847352025 +2012-08-12 08:00:00,1980.4485981308412 +2012-08-12 09:00:00,3216.0280373831774 +2012-08-12 10:00:00,3888.1401869158876 +2012-08-12 11:00:00,4173.1651090342675 +2012-08-12 12:00:00,4432.467289719626 +2012-08-12 13:00:00,4538.221183800623 +2012-08-12 14:00:00,4546.538940809969 +2012-08-12 15:00:00,4559.314641744549 +2012-08-12 16:00:00,4590.274143302181 +2012-08-12 17:00:00,4480.538940809969 +2012-08-12 18:00:00,4390.6978193146415 +2012-08-12 19:00:00,4221.947040498442 +2012-08-12 20:00:00,4082.3707165109035 +2012-08-12 21:00:00,3986.638629283489 +2012-08-12 22:00:00,3674.1246105919004 +2012-08-12 23:00:00,2856.0404984423676 +2012-08-13 00:00:00,1955.0498442367602 +2012-08-13 01:00:00,1599.2679127725858 +2012-08-13 02:00:00,1542.4828660436137 +2012-08-13 03:00:00,1476.5233644859813 +2012-08-13 04:00:00,1433.271028037383 +2012-08-13 05:00:00,1516.3520249221183 +2012-08-13 06:00:00,1674.9595015576324 +2012-08-13 07:00:00,1852.7040498442368 +2012-08-13 08:00:00,2025.651090342679 +2012-08-13 09:00:00,3182.5077881619936 +2012-08-13 10:00:00,3883.8753894080996 +2012-08-13 11:00:00,4186.666666666667 +2012-08-13 12:00:00,4405.109034267913 +2012-08-13 13:00:00,4616.800623052959 +2012-08-13 14:00:00,4662.009345794392 +2012-08-13 15:00:00,4742.348909657321 +2012-08-13 16:00:00,4820.339563862928 +2012-08-13 17:00:00,4809.152647975078 +2012-08-13 18:00:00,4731.728971962617 +2012-08-13 19:00:00,4563.694704049844 +2012-08-13 20:00:00,4346.940809968847 +2012-08-13 21:00:00,4248.887850467289 +2012-08-13 22:00:00,3874.190031152648 +2012-08-13 23:00:00,3198.7196261682243 +2012-08-14 00:00:00,2297.0996884735205 +2012-08-14 01:00:00,1666.473520249221 +2012-08-14 02:00:00,1589.1619937694704 +2012-08-14 03:00:00,1539.7694704049845 +2012-08-14 04:00:00,1474.7196261682243 +2012-08-14 05:00:00,1563.031152647975 +2012-08-14 06:00:00,1752.7352024922118 +2012-08-14 07:00:00,1911.613707165109 +2012-08-14 08:00:00,1997.5607476635514 +2012-08-14 09:00:00,3291.3520249221183 +2012-08-14 10:00:00,3948.6168224299067 +2012-08-14 11:00:00,4329.707165109035 +2012-08-14 12:00:00,4418.853582554517 +2012-08-14 13:00:00,4590.947040498442 +2012-08-14 14:00:00,4641.878504672897 +2012-08-14 15:00:00,4596.423676012461 +2012-08-14 16:00:00,4580.389408099689 +2012-08-14 17:00:00,4559.152647975078 +2012-08-14 18:00:00,4539.420560747663 +2012-08-14 19:00:00,4492.943925233645 +2012-08-14 20:00:00,4383.345794392523 +2012-08-14 21:00:00,4355.317757009346 +2012-08-14 22:00:00,4074.822429906542 +2012-08-14 23:00:00,3392.0342679127725 +2012-08-15 00:00:00,2197.557632398754 +2012-08-15 01:00:00,1749.5295950155764 +2012-08-15 02:00:00,1656.6542056074766 +2012-08-15 03:00:00,1579.1339563862928 +2012-08-15 04:00:00,1533.3395638629283 +2012-08-15 05:00:00,1574.9657320872275 +2012-08-15 06:00:00,1771.1370716510903 +2012-08-15 07:00:00,1893.3084112149534 +2012-08-15 08:00:00,2034.6666666666667 +2012-08-15 09:00:00,3252.4517133956388 +2012-08-15 10:00:00,3952.728971962617 +2012-08-15 11:00:00,4250.732087227414 +2012-08-15 12:00:00,4375.626168224299 +2012-08-15 13:00:00,4466.610591900311 +2012-08-15 14:00:00,4522.252336448598 +2012-08-15 15:00:00,4487.601246105919 +2012-08-15 16:00:00,4456.828660436137 +2012-08-15 17:00:00,4436.174454828661 +2012-08-15 18:00:00,4412.439252336449 +2012-08-15 19:00:00,4255.841121495327 +2012-08-15 20:00:00,4214.763239875389 +2012-08-15 21:00:00,4201.778816199377 +2012-08-15 22:00:00,3893.1682242990655 +2012-08-15 23:00:00,3207.791277258567 +2012-08-16 00:00:00,2076.3520249221183 +2012-08-16 01:00:00,1621.2087227414331 +2012-08-16 02:00:00,1558.342679127726 +2012-08-16 03:00:00,1482.9314641744547 +2012-08-16 04:00:00,1434.526479750779 +2012-08-16 05:00:00,1500.6448598130842 +2012-08-16 06:00:00,1666.3644859813085 +2012-08-16 07:00:00,1832.8909657320871 +2012-08-16 08:00:00,2019.2866043613708 +2012-08-16 09:00:00,2862.8691588785045 +2012-08-16 10:00:00,3909.3426791277257 +2012-08-16 11:00:00,4219.429906542056 +2012-08-16 12:00:00,4369.626168224299 +2012-08-16 13:00:00,4536.420560747663 +2012-08-16 14:00:00,4556.797507788162 +2012-08-16 15:00:00,4590.323987538941 +2012-08-16 16:00:00,4612.031152647975 +2012-08-16 17:00:00,4573.451713395639 +2012-08-16 18:00:00,4558.289719626168 +2012-08-16 19:00:00,4483.236760124611 +2012-08-16 20:00:00,4397.046728971963 +2012-08-16 21:00:00,4198.255451713396 +2012-08-16 22:00:00,3715.436137071651 +2012-08-16 23:00:00,3163.1246105919004 +2012-08-17 00:00:00,2067.526479750779 +2012-08-17 01:00:00,1667.5856697819315 +2012-08-17 02:00:00,1588.2990654205607 +2012-08-17 03:00:00,1535.3146417445482 +2012-08-17 04:00:00,1465.7040498442368 +2012-08-17 05:00:00,1540.1869158878505 +2012-08-17 06:00:00,1717.4485981308412 +2012-08-17 07:00:00,1872.6355140186915 +2012-08-17 08:00:00,2028.348909657321 +2012-08-17 09:00:00,2899.299065420561 +2012-08-17 10:00:00,4012.133956386293 +2012-08-17 11:00:00,4393.046728971963 +2012-08-17 12:00:00,4603.526479750779 +2012-08-17 13:00:00,4735.866043613707 +2012-08-17 14:00:00,4754.305295950156 +2012-08-17 15:00:00,4810.8753894081 +2012-08-17 16:00:00,4821.052959501558 +2012-08-17 17:00:00,4883.333333333333 +2012-08-17 18:00:00,4833.9034267912775 +2012-08-17 19:00:00,4692.121495327103 +2012-08-17 20:00:00,4506.666666666667 +2012-08-17 21:00:00,4315.277258566978 +2012-08-17 22:00:00,4014.9968847352025 +2012-08-17 23:00:00,3360.588785046729 +2012-08-18 00:00:00,2163.5295950155764 +2012-08-18 01:00:00,1692.797507788162 +2012-08-18 02:00:00,1598.5358255451713 +2012-08-18 03:00:00,1496.766355140187 +2012-08-18 04:00:00,1452.1059190031153 +2012-08-18 05:00:00,1524.6760124610591 +2012-08-18 06:00:00,1672.3146417445482 +2012-08-18 07:00:00,1870.398753894081 +2012-08-18 08:00:00,2021.5607476635514 +2012-08-18 09:00:00,2929.940809968847 +2012-08-18 10:00:00,4036.532710280374 +2012-08-18 11:00:00,4259.763239875389 +2012-08-18 12:00:00,4457.476635514019 +2012-08-18 13:00:00,4635.1246105919 +2012-08-18 14:00:00,4659.4984423676015 +2012-08-18 15:00:00,4713.934579439252 +2012-08-18 16:00:00,4807.2336448598135 +2012-08-18 17:00:00,4793.043613707165 +2012-08-18 18:00:00,4579.376947040499 +2012-08-18 19:00:00,4669.809968847352 +2012-08-18 20:00:00,4623.1651090342675 +2012-08-18 21:00:00,4428.355140186916 +2012-08-18 22:00:00,4113.461059190031 +2012-08-18 23:00:00,3371.7819314641742 +2012-08-19 00:00:00,2387.0093457943926 +2012-08-19 01:00:00,1823.1090342679129 +2012-08-19 02:00:00,1669.8255451713396 +2012-08-19 03:00:00,1591.398753894081 +2012-08-19 04:00:00,1470.5576323987539 +2012-08-19 05:00:00,1540.348909657321 +2012-08-19 06:00:00,1706.8691588785048 +2012-08-19 07:00:00,1848.5140186915887 +2012-08-19 08:00:00,1982.968847352025 +2012-08-19 09:00:00,2983.07476635514 +2012-08-19 10:00:00,4132.383177570094 +2012-08-19 11:00:00,4460.311526479751 +2012-08-19 12:00:00,4570.121495327103 +2012-08-19 13:00:00,4676.853582554517 +2012-08-19 14:00:00,4694.8317757009345 +2012-08-19 15:00:00,4667.28660436137 +2012-08-19 16:00:00,4662.996884735203 +2012-08-19 17:00:00,4699.579439252337 +2012-08-19 18:00:00,4669.947040498442 +2012-08-19 19:00:00,4623.476635514019 +2012-08-19 20:00:00,4535.5046728971965 +2012-08-19 21:00:00,4557.598130841122 +2012-08-19 22:00:00,4022.0467289719627 +2012-08-19 23:00:00,3226.5981308411215 +2012-08-20 00:00:00,2334.1806853582552 +2012-08-20 01:00:00,1890.747663551402 +2012-08-20 02:00:00,1617.3707165109033 +2012-08-20 03:00:00,1552.5576323987539 +2012-08-20 04:00:00,1471.0529595015576 +2012-08-20 05:00:00,1555.9408099688474 +2012-08-20 06:00:00,1724.1713395638628 +2012-08-20 07:00:00,1882.6666666666667 +2012-08-20 08:00:00,2011.2429906542056 +2012-08-20 09:00:00,3067.8847352024923 +2012-08-20 10:00:00,4384.174454828661 +2012-08-20 11:00:00,4794.978193146418 +2012-08-20 12:00:00,4973.853582554517 +2012-08-20 13:00:00,5170.819314641744 +2012-08-20 14:00:00,5212.071651090343 +2012-08-20 15:00:00,5239.844236760125 +2012-08-20 16:00:00,5284.887850467289 +2012-08-20 17:00:00,5223.9657320872275 +2012-08-20 18:00:00,5142.542056074766 +2012-08-20 19:00:00,4990.236760124611 +2012-08-20 20:00:00,4872.535825545171 +2012-08-20 21:00:00,4780.470404984424 +2012-08-20 22:00:00,4286.445482866044 +2012-08-20 23:00:00,3499.7258566978194 +2012-08-21 00:00:00,2305.8535825545173 +2012-08-21 01:00:00,1831.7383177570093 +2012-08-21 02:00:00,1732.2959501557632 +2012-08-21 03:00:00,1617.177570093458 +2012-08-21 04:00:00,1547.5482866043615 +2012-08-21 05:00:00,1627.7196261682243 +2012-08-21 06:00:00,1819.3333333333333 +2012-08-21 07:00:00,1957.9127725856697 +2012-08-21 08:00:00,2142.5140186915887 +2012-08-21 09:00:00,3199.5358255451715 +2012-08-21 10:00:00,4672.417445482866 +2012-08-21 11:00:00,4983.242990654206 +2012-08-21 12:00:00,5271.847352024922 +2012-08-21 13:00:00,5486.470404984424 +2012-08-21 14:00:00,5469.214953271028 +2012-08-21 15:00:00,5521.878504672897 +2012-08-21 16:00:00,5523.582554517134 +2012-08-21 17:00:00,5528.105919003116 +2012-08-21 18:00:00,5436.320872274143 +2012-08-21 19:00:00,5275.330218068536 +2012-08-21 20:00:00,4959.588785046729 +2012-08-21 21:00:00,4702.719626168225 +2012-08-21 22:00:00,4095.7881619937693 +2012-08-21 23:00:00,3193.847352024922 +2012-08-22 00:00:00,2288.4704049844236 +2012-08-22 01:00:00,1738.6915887850466 +2012-08-22 02:00:00,1605.0965732087227 +2012-08-22 03:00:00,1519.9158878504672 +2012-08-22 04:00:00,1463.006230529595 +2012-08-22 05:00:00,1541.0280373831777 +2012-08-22 06:00:00,1737.834890965732 +2012-08-22 07:00:00,1903.233644859813 +2012-08-22 08:00:00,2062.520249221184 +2012-08-22 09:00:00,3216.436137071651 +2012-08-22 10:00:00,4004.4080996884736 +2012-08-22 11:00:00,4373.598130841122 +2012-08-22 12:00:00,4589.22429906542 +2012-08-22 13:00:00,4834.940809968847 +2012-08-22 14:00:00,4958.7663551401865 +2012-08-22 15:00:00,5064.9034267912775 +2012-08-22 16:00:00,5179.16199376947 +2012-08-22 17:00:00,5090.345794392523 +2012-08-22 18:00:00,4840.956386292835 +2012-08-22 19:00:00,4643.757009345794 +2012-08-22 20:00:00,4450.644859813084 +2012-08-22 21:00:00,4313.0373831775705 +2012-08-22 22:00:00,3891.557632398754 +2012-08-22 23:00:00,3229.6728971962616 +2012-08-23 00:00:00,2306.97507788162 +2012-08-23 01:00:00,1692.4517133956385 +2012-08-23 02:00:00,1604.367601246106 +2012-08-23 03:00:00,1527.233644859813 +2012-08-23 04:00:00,1469.3146417445482 +2012-08-23 05:00:00,1555.9750778816199 +2012-08-23 06:00:00,1733.7757009345794 +2012-08-23 07:00:00,1930.165109034268 +2012-08-23 08:00:00,2063.9906542056074 +2012-08-23 09:00:00,3265.8909657320874 +2012-08-23 10:00:00,3960.993769470405 +2012-08-23 11:00:00,4405.856697819315 +2012-08-23 12:00:00,4540.763239875389 +2012-08-23 13:00:00,4686.707165109035 +2012-08-23 14:00:00,4742.317757009346 +2012-08-23 15:00:00,4894.414330218068 +2012-08-23 16:00:00,4949.507788161994 +2012-08-23 17:00:00,4860.046728971963 +2012-08-23 18:00:00,4744.844236760125 +2012-08-23 19:00:00,4538.423676012461 +2012-08-23 20:00:00,4291.6355140186915 +2012-08-23 21:00:00,4216.728971962617 +2012-08-23 22:00:00,3844.2180685358258 +2012-08-23 23:00:00,3141.1246105919004 +2012-08-24 00:00:00,2274.404984423676 +2012-08-24 01:00:00,1775.3146417445482 +2012-08-24 02:00:00,1571.1588785046729 +2012-08-24 03:00:00,1506.0404984423676 +2012-08-24 04:00:00,1446.239875389408 +2012-08-24 05:00:00,1505.1059190031153 +2012-08-24 06:00:00,1699.5794392523364 +2012-08-24 07:00:00,1875.3021806853583 +2012-08-24 08:00:00,2023.2772585669782 +2012-08-24 09:00:00,3113.663551401869 +2012-08-24 10:00:00,3826.8442367601247 +2012-08-24 11:00:00,4138.573208722742 +2012-08-24 12:00:00,4335.105919003116 +2012-08-24 13:00:00,4531.710280373832 +2012-08-24 14:00:00,4582.934579439252 +2012-08-24 15:00:00,4637.16199376947 +2012-08-24 16:00:00,4667.666666666667 +2012-08-24 17:00:00,4675.227414330218 +2012-08-24 18:00:00,4617.872274143302 +2012-08-24 19:00:00,4463.514018691589 +2012-08-24 20:00:00,4325.8317757009345 +2012-08-24 21:00:00,4298.401869158878 +2012-08-24 22:00:00,4010.336448598131 +2012-08-24 23:00:00,3381.323987538941 +2012-08-25 00:00:00,2156.97507788162 +2012-08-25 01:00:00,1709.5576323987539 +2012-08-25 02:00:00,1616.3302180685357 +2012-08-25 03:00:00,1502.7445482866044 +2012-08-25 04:00:00,1457.2180685358255 +2012-08-25 05:00:00,1543.607476635514 +2012-08-25 06:00:00,1737.380062305296 +2012-08-25 07:00:00,1897.2647975077882 +2012-08-25 08:00:00,2039.2087227414331 +2012-08-25 09:00:00,3266.0404984423676 +2012-08-25 10:00:00,4019.9439252336447 +2012-08-25 11:00:00,4333.797507788162 +2012-08-25 12:00:00,4516.523364485981 +2012-08-25 13:00:00,4628.529595015576 +2012-08-25 14:00:00,4622.691588785046 +2012-08-25 15:00:00,4700.660436137072 +2012-08-25 16:00:00,4796.386292834891 +2012-08-25 17:00:00,4769.953271028037 +2012-08-25 18:00:00,4709.806853582554 +2012-08-25 19:00:00,4529.352024922118 +2012-08-25 20:00:00,4362.704049844237 +2012-08-25 21:00:00,4162.517133956387 +2012-08-25 22:00:00,3753.1931464174454 +2012-08-25 23:00:00,3182.6105919003116 +2012-08-26 00:00:00,2102.8909657320874 +2012-08-26 01:00:00,1641.8255451713396 +2012-08-26 02:00:00,1585.3769470404984 +2012-08-26 03:00:00,1513.0280373831777 +2012-08-26 04:00:00,1389.0872274143303 +2012-08-26 05:00:00,1444.7071651090343 +2012-08-26 06:00:00,1629.7570093457944 +2012-08-26 07:00:00,1790.0934579439252 +2012-08-26 08:00:00,1903.6105919003114 +2012-08-26 09:00:00,2977.4205607476633 +2012-08-26 10:00:00,3619.3115264797507 +2012-08-26 11:00:00,3946.4984423676015 +2012-08-26 12:00:00,4165.872274143302 +2012-08-26 13:00:00,4415.781931464175 +2012-08-26 14:00:00,4260.414330218068 +2012-08-26 15:00:00,4354.140186915888 +2012-08-26 16:00:00,4415.576323987539 +2012-08-26 17:00:00,4429.6978193146415 +2012-08-26 18:00:00,4375.5669781931465 +2012-08-26 19:00:00,4300.990654205608 +2012-08-26 20:00:00,4124.367601246106 +2012-08-26 21:00:00,3974.11214953271 +2012-08-26 22:00:00,3578.5233644859813 +2012-08-26 23:00:00,2726.7165109034268 +2012-08-27 00:00:00,1896.5514018691588 +2012-08-27 01:00:00,1553.0809968847352 +2012-08-27 02:00:00,1488.1183800623053 +2012-08-27 03:00:00,1439.6604361370717 +2012-08-27 04:00:00,1386.747663551402 +2012-08-27 05:00:00,1463.5669781931465 +2012-08-27 06:00:00,1665.3021806853583 +2012-08-27 07:00:00,1834.5358255451713 +2012-08-27 08:00:00,1970.2772585669782 +2012-08-27 09:00:00,2917.190031152648 +2012-08-27 10:00:00,3735.6791277258567 +2012-08-27 11:00:00,3906.526479750779 +2012-08-27 12:00:00,4171.333333333333 +2012-08-27 13:00:00,4380.92523364486 +2012-08-27 14:00:00,4399.978193146418 +2012-08-27 15:00:00,4459.367601246106 +2012-08-27 16:00:00,4526.716510903427 +2012-08-27 17:00:00,4591.227414330218 +2012-08-27 18:00:00,4524.3644859813085 +2012-08-27 19:00:00,4377.993769470405 +2012-08-27 20:00:00,4152.704049844237 +2012-08-27 21:00:00,4044.7476635514017 +2012-08-27 22:00:00,3676.105919003115 +2012-08-27 23:00:00,3092.165109034268 +2012-08-28 00:00:00,2271.1557632398753 +2012-08-28 01:00:00,1839.8940809968847 +2012-08-28 02:00:00,1750.943925233645 +2012-08-28 03:00:00,1499.5171339563863 +2012-08-28 04:00:00,1434.2928348909657 +2012-08-28 05:00:00,1508.3021806853583 +2012-08-28 06:00:00,1721.177570093458 +2012-08-28 07:00:00,1888.5420560747664 +2012-08-28 08:00:00,2029.2492211838007 +2012-08-28 09:00:00,2877.5015576323985 +2012-08-28 10:00:00,3994.0093457943926 +2012-08-28 11:00:00,4297.255451713396 +2012-08-28 12:00:00,4522.214953271028 +2012-08-28 13:00:00,4623.92523364486 +2012-08-28 14:00:00,4565.289719626168 +2012-08-28 15:00:00,4639.242990654206 +2012-08-28 16:00:00,4761.9034267912775 +2012-08-28 17:00:00,4806.579439252337 +2012-08-28 18:00:00,4805.271028037383 +2012-08-28 19:00:00,4635.595015576324 +2012-08-28 20:00:00,4531.682242990654 +2012-08-28 21:00:00,4430.890965732087 +2012-08-28 22:00:00,4041.6510903426793 +2012-08-28 23:00:00,2910.1869158878503 +2012-08-29 00:00:00,2047.6760124610591 +2012-08-29 01:00:00,1648.8753894080996 +2012-08-29 02:00:00,1561.632398753894 +2012-08-29 03:00:00,1473.6947040498442 +2012-08-29 04:00:00,1411.183800623053 +2012-08-29 05:00:00,1474.1246105919004 +2012-08-29 06:00:00,1673.3894080996886 +2012-08-29 07:00:00,1802.4143302180685 +2012-08-29 08:00:00,1960.1246105919004 +2012-08-29 09:00:00,2761.841121495327 +2012-08-29 10:00:00,3749.6105919003116 +2012-08-29 11:00:00,3899.355140186916 +2012-08-29 12:00:00,4138.604361370716 +2012-08-29 13:00:00,4397.672897196262 +2012-08-29 14:00:00,4445.5669781931465 +2012-08-29 15:00:00,4386.7009345794395 +2012-08-29 16:00:00,4457.744548286604 +2012-08-29 17:00:00,4496.454828660436 +2012-08-29 18:00:00,4401.133956386293 +2012-08-29 19:00:00,4204.467289719626 +2012-08-29 20:00:00,4085.133956386293 +2012-08-29 21:00:00,4002.2523364485983 +2012-08-29 22:00:00,3665.392523364486 +2012-08-29 23:00:00,2991.8380062305296 +2012-08-30 00:00:00,2182.96261682243 +2012-08-30 01:00:00,1611.1931464174454 +2012-08-30 02:00:00,1539.9595015576324 +2012-08-30 03:00:00,1483.5327102803737 +2012-08-30 04:00:00,1427.5109034267912 +2012-08-30 05:00:00,1474.7912772585669 +2012-08-30 06:00:00,1654.9221183800623 +2012-08-30 07:00:00,1829.0218068535826 +2012-08-30 08:00:00,1979.4517133956385 +2012-08-30 09:00:00,2772.8130841121497 +2012-08-30 10:00:00,3658.9781931464177 +2012-08-30 11:00:00,3895.386292834891 +2012-08-30 12:00:00,4129.760124610591 +2012-08-30 13:00:00,4460.922118380062 +2012-08-30 14:00:00,4522.71339563863 +2012-08-30 15:00:00,4630.146417445483 +2012-08-30 16:00:00,4658.853582554517 +2012-08-30 17:00:00,4671.4984423676015 +2012-08-30 18:00:00,4487.803738317757 +2012-08-30 19:00:00,4301.311526479751 +2012-08-30 20:00:00,4174.3613707165105 +2012-08-30 21:00:00,4013.7476635514017 +2012-08-30 22:00:00,3629.121495327103 +2012-08-30 23:00:00,3026.4641744548285 +2012-08-31 00:00:00,1998.0155763239875 +2012-08-31 01:00:00,1634.968847352025 +2012-08-31 02:00:00,1571.5171339563863 +2012-08-31 03:00:00,1502.601246105919 +2012-08-31 04:00:00,1447.595015576324 +2012-08-31 05:00:00,1480.6947040498442 +2012-08-31 06:00:00,1682.4672897196263 +2012-08-31 07:00:00,1812.4330218068535 +2012-08-31 08:00:00,1947.7570093457944 +2012-08-31 09:00:00,2753.6199376947043 +2012-08-31 10:00:00,3916.227414330218 +2012-08-31 11:00:00,4200.271028037383 +2012-08-31 12:00:00,4354.258566978193 +2012-08-31 13:00:00,4551.738317757009 +2012-08-31 14:00:00,4686.046728971963 +2012-08-31 15:00:00,4751.1246105919 +2012-08-31 16:00:00,4779.174454828661 +2012-08-31 17:00:00,4782.710280373832 +2012-08-31 18:00:00,4698.86292834891 +2012-08-31 19:00:00,4559.370716510904 +2012-08-31 20:00:00,4541.5015576323985 +2012-08-31 21:00:00,4372.8317757009345 +2012-08-31 22:00:00,4010.993769470405 +2012-08-31 23:00:00,3390.644859813084 +2012-09-01 00:00:00,2164.894080996885 +2012-09-01 01:00:00,1648.657320872274 +2012-09-01 02:00:00,1564.386292834891 +2012-09-01 03:00:00,1460.9657320872275 +2012-09-01 04:00:00,1414.766355140187 +2012-09-01 05:00:00,1456.5233644859813 +2012-09-01 06:00:00,1625.7009345794393 +2012-09-01 07:00:00,1804.657320872274 +2012-09-01 08:00:00,1942.2305295950155 +2012-09-01 09:00:00,2809.5981308411215 +2012-09-01 10:00:00,3917.6292834890965 +2012-09-01 11:00:00,4263.890965732087 +2012-09-01 12:00:00,4498.112149532711 +2012-09-01 13:00:00,4610.542056074766 +2012-09-01 14:00:00,4671.183800623053 +2012-09-01 15:00:00,4692.485981308411 +2012-09-01 16:00:00,4662.95015576324 +2012-09-01 17:00:00,4649.464174454829 +2012-09-01 18:00:00,4657.018691588785 +2012-09-01 19:00:00,4543.4984423676015 +2012-09-01 20:00:00,4441.909657320873 +2012-09-01 21:00:00,4209.943925233645 +2012-09-01 22:00:00,3837.127725856698 +2012-09-01 23:00:00,3208.0186915887853 +2012-09-02 00:00:00,2256.1931464174454 +2012-09-02 01:00:00,1640.943925233645 +2012-09-02 02:00:00,1581.7881619937696 +2012-09-02 03:00:00,1507.9595015576324 +2012-09-02 04:00:00,1383.5981308411215 +2012-09-02 05:00:00,1432.2118380062304 +2012-09-02 06:00:00,1613.9096573208724 +2012-09-02 07:00:00,1771.8878504672898 +2012-09-02 08:00:00,1904.202492211838 +2012-09-02 09:00:00,3102.7196261682243 +2012-09-02 10:00:00,3879.632398753894 +2012-09-02 11:00:00,4257.728971962617 +2012-09-02 12:00:00,4470.196261682243 +2012-09-02 13:00:00,4598.336448598131 +2012-09-02 14:00:00,4503.485981308411 +2012-09-02 15:00:00,4532.71339563863 +2012-09-02 16:00:00,4520.9034267912775 +2012-09-02 17:00:00,4477.682242990654 +2012-09-02 18:00:00,4509.853582554517 +2012-09-02 19:00:00,4352.704049844237 +2012-09-02 20:00:00,4231.943925233645 +2012-09-02 21:00:00,4091.0342679127725 +2012-09-02 22:00:00,3633.676012461059 +2012-09-02 23:00:00,2879.6417445482866 +2012-09-03 00:00:00,1974.7009345794393 +2012-09-03 01:00:00,1600.6947040498442 +2012-09-03 02:00:00,1545.8255451713396 +2012-09-03 03:00:00,1488.619937694704 +2012-09-03 04:00:00,1439.9595015576324 +2012-09-03 05:00:00,1500.3707165109033 +2012-09-03 06:00:00,1666.8130841121495 +2012-09-03 07:00:00,1849.4922118380061 +2012-09-03 08:00:00,1989.7507788161993 +2012-09-03 09:00:00,3023.068535825545 +2012-09-03 10:00:00,3811.8504672897197 +2012-09-03 11:00:00,4166.21183800623 +2012-09-03 12:00:00,4347.760124610591 +2012-09-03 13:00:00,4553.395638629284 +2012-09-03 14:00:00,4535.881619937694 +2012-09-03 15:00:00,4543.208722741433 +2012-09-03 16:00:00,4565.08722741433 +2012-09-03 17:00:00,4558.881619937694 +2012-09-03 18:00:00,4467.993769470405 +2012-09-03 19:00:00,4340.246105919003 +2012-09-03 20:00:00,4374.809968847352 +2012-09-03 21:00:00,4112.8317757009345 +2012-09-03 22:00:00,3670.809968847352 +2012-09-03 23:00:00,3006.4267912772584 +2012-09-04 00:00:00,2092.6479750778817 +2012-09-04 01:00:00,1652.4828660436137 +2012-09-04 02:00:00,1588.392523364486 +2012-09-04 03:00:00,1515.380062305296 +2012-09-04 04:00:00,1465.6448598130842 +2012-09-04 05:00:00,1483.7632398753894 +2012-09-04 06:00:00,1699.361370716511 +2012-09-04 07:00:00,1856.7258566978194 +2012-09-04 08:00:00,2019.1433021806854 +2012-09-04 09:00:00,2991.903426791277 +2012-09-04 10:00:00,3818.479750778816 +2012-09-04 11:00:00,4162.996884735203 +2012-09-04 12:00:00,4366.208722741433 +2012-09-04 13:00:00,4685.5046728971965 +2012-09-04 14:00:00,4590.595015576324 +2012-09-04 15:00:00,4610.102803738318 +2012-09-04 16:00:00,4711.333333333333 +2012-09-04 17:00:00,4650.190031152648 +2012-09-04 18:00:00,4561.523364485981 +2012-09-04 19:00:00,4468.691588785046 +2012-09-04 20:00:00,4378.261682242991 +2012-09-04 21:00:00,4222.1651090342675 +2012-09-04 22:00:00,3748.1246105919004 +2012-09-04 23:00:00,3034.803738317757 +2012-09-05 00:00:00,2013.183800623053 +2012-09-05 01:00:00,1662.0934579439252 +2012-09-05 02:00:00,1580.1433021806854 +2012-09-05 03:00:00,1519.271028037383 +2012-09-05 04:00:00,1453.5856697819315 +2012-09-05 05:00:00,1507.8504672897195 +2012-09-05 06:00:00,1666.9501557632398 +2012-09-05 07:00:00,1862.380062305296 +2012-09-05 08:00:00,2003.8411214953271 +2012-09-05 09:00:00,3062.2803738317757 +2012-09-05 10:00:00,3920.473520249221 +2012-09-05 11:00:00,4292.457943925234 +2012-09-05 12:00:00,4458.791277258567 +2012-09-05 13:00:00,4614.401869158878 +2012-09-05 14:00:00,4666.8348909657325 +2012-09-05 15:00:00,4757.451713395639 +2012-09-05 16:00:00,4742.16199376947 +2012-09-05 17:00:00,4731.327102803738 +2012-09-05 18:00:00,4664.2305295950155 +2012-09-05 19:00:00,4493.249221183801 +2012-09-05 20:00:00,4447.320872274143 +2012-09-05 21:00:00,4376.98753894081 +2012-09-05 22:00:00,3999.07476635514 +2012-09-05 23:00:00,3165.255451713396 +2012-09-06 00:00:00,2121.632398753894 +2012-09-06 01:00:00,1683.797507788162 +2012-09-06 02:00:00,1613.8130841121495 +2012-09-06 03:00:00,1536.2585669781931 +2012-09-06 04:00:00,1466.1183800623053 +2012-09-06 05:00:00,1501.1588785046729 +2012-09-06 06:00:00,1666.613707165109 +2012-09-06 07:00:00,1896.4890965732088 +2012-09-06 08:00:00,2041.0155763239875 +2012-09-06 09:00:00,3303.9595015576324 +2012-09-06 10:00:00,4031.947040498442 +2012-09-06 11:00:00,4403.959501557632 +2012-09-06 12:00:00,4537.828660436137 +2012-09-06 13:00:00,4723.040498442368 +2012-09-06 14:00:00,4788.884735202492 +2012-09-06 15:00:00,4852.2990654205605 +2012-09-06 16:00:00,4881.305295950156 +2012-09-06 17:00:00,4902.704049844237 +2012-09-06 18:00:00,4793.716510903427 +2012-09-06 19:00:00,4676.1246105919 +2012-09-06 20:00:00,4693.971962616823 +2012-09-06 21:00:00,4539.258566978193 +2012-09-06 22:00:00,4150.996884735203 +2012-09-06 23:00:00,3333.588785046729 +2012-09-07 00:00:00,2118.152647975078 +2012-09-07 01:00:00,1692.8566978193146 +2012-09-07 02:00:00,1623.7912772585669 +2012-09-07 03:00:00,1544.7352024922118 +2012-09-07 04:00:00,1487.5109034267912 +2012-09-07 05:00:00,1556.1588785046729 +2012-09-07 06:00:00,1759.613707165109 +2012-09-07 07:00:00,1934.4610591900312 +2012-09-07 08:00:00,2093.9003115264795 +2012-09-07 09:00:00,3488.461059190031 +2012-09-07 10:00:00,4178.535825545171 +2012-09-07 11:00:00,4451.355140186916 +2012-09-07 12:00:00,4572.93769470405 +2012-09-07 13:00:00,4740.95015576324 +2012-09-07 14:00:00,4822.9657320872275 +2012-09-07 15:00:00,4806.672897196262 +2012-09-07 16:00:00,4835.548286604361 +2012-09-07 17:00:00,4816.660436137072 +2012-09-07 18:00:00,4719.352024922118 +2012-09-07 19:00:00,4486.825545171339 +2012-09-07 20:00:00,4497.526479750779 +2012-09-07 21:00:00,4417.077881619938 +2012-09-07 22:00:00,4047.2959501557634 +2012-09-07 23:00:00,3316.4143302180687 +2012-09-08 00:00:00,2192.5981308411215 +2012-09-08 01:00:00,1727.6728971962616 +2012-09-08 02:00:00,1631.1370716510903 +2012-09-08 03:00:00,1512.981308411215 +2012-09-08 04:00:00,1493.380062305296 +2012-09-08 05:00:00,1537.0903426791276 +2012-09-08 06:00:00,1736.3769470404984 +2012-09-08 07:00:00,1879.7757009345794 +2012-09-08 08:00:00,2003.545171339564 +2012-09-08 09:00:00,2923.5794392523367 +2012-09-08 10:00:00,3635.7570093457944 +2012-09-08 11:00:00,3906.6292834890965 +2012-09-08 12:00:00,4225.473520249221 +2012-09-08 13:00:00,4830.246105919003 +2012-09-08 14:00:00,4644.214953271028 +2012-09-08 15:00:00,4679.660436137072 +2012-09-08 16:00:00,4673.467289719626 +2012-09-08 17:00:00,4626.22429906542 +2012-09-08 18:00:00,4646.015576323987 +2012-09-08 19:00:00,4448.582554517134 +2012-09-08 20:00:00,4482.866043613707 +2012-09-08 21:00:00,4269.3021806853585 +2012-09-08 22:00:00,3908.6666666666665 +2012-09-08 23:00:00,3255.5825545171338 +2012-09-09 00:00:00,2110.2959501557634 +2012-09-09 01:00:00,1706.1401869158879 +2012-09-09 02:00:00,1649.0623052959502 +2012-09-09 03:00:00,1575.1059190031153 +2012-09-09 04:00:00,1445.588785046729 +2012-09-09 05:00:00,1495.1433021806854 +2012-09-09 06:00:00,1692.7943925233644 +2012-09-09 07:00:00,1850.9158878504672 +2012-09-09 08:00:00,1955.0404984423676 +2012-09-09 09:00:00,3153.239875389408 +2012-09-09 10:00:00,3856.601246105919 +2012-09-09 11:00:00,4191.376947040499 +2012-09-09 12:00:00,4326.277258566978 +2012-09-09 13:00:00,4290.507788161994 +2012-09-09 14:00:00,4350.535825545171 +2012-09-09 15:00:00,4378.872274143302 +2012-09-09 16:00:00,4303.725856697819 +2012-09-09 17:00:00,4337.292834890965 +2012-09-09 18:00:00,4394.897196261682 +2012-09-09 19:00:00,4252.959501557632 +2012-09-09 20:00:00,4207.140186915888 +2012-09-09 21:00:00,4067.607476635514 +2012-09-09 22:00:00,3642.9065420560746 +2012-09-09 23:00:00,2847.822429906542 +2012-09-10 00:00:00,1952.5358255451713 +2012-09-10 01:00:00,1601.8753894080996 +2012-09-10 02:00:00,1540.2118380062304 +2012-09-10 03:00:00,1484.0467289719627 +2012-09-10 04:00:00,1437.1433021806854 +2012-09-10 05:00:00,1489.1401869158879 +2012-09-10 06:00:00,1664.9252336448599 +2012-09-10 07:00:00,1870.006230529595 +2012-09-10 08:00:00,2004.8006230529595 +2012-09-10 09:00:00,3152.2741433021806 +2012-09-10 10:00:00,3772.772585669782 +2012-09-10 11:00:00,4043.5669781931465 +2012-09-10 12:00:00,4203.068535825545 +2012-09-10 13:00:00,4347.376947040499 +2012-09-10 14:00:00,4404.753894080997 +2012-09-10 15:00:00,4418.573208722742 +2012-09-10 16:00:00,4447.345794392523 +2012-09-10 17:00:00,4421.538940809969 +2012-09-10 18:00:00,4411.872274143302 +2012-09-10 19:00:00,4235.457943925234 +2012-09-10 20:00:00,4084.4174454828662 +2012-09-10 21:00:00,4018.457943925234 +2012-09-10 22:00:00,3633.1495327102803 +2012-09-10 23:00:00,2986.3707165109035 +2012-09-11 00:00:00,2159.3271028037384 +2012-09-11 01:00:00,1701.4610591900312 +2012-09-11 02:00:00,1640.5576323987539 +2012-09-11 03:00:00,1583.2928348909657 +2012-09-11 04:00:00,1532.6915887850466 +2012-09-11 05:00:00,1577.1214953271028 +2012-09-11 06:00:00,1762.6479750778817 +2012-09-11 07:00:00,1938.9781931464174 +2012-09-11 08:00:00,2090.090342679128 +2012-09-11 09:00:00,3205.595015576324 +2012-09-11 10:00:00,3795.760124610592 +2012-09-11 11:00:00,4163.205607476635 +2012-09-11 12:00:00,4312.16199376947 +2012-09-11 13:00:00,4449.214953271028 +2012-09-11 14:00:00,4579.803738317757 +2012-09-11 15:00:00,4536.822429906542 +2012-09-11 16:00:00,4658.246105919003 +2012-09-11 17:00:00,4628.457943925234 +2012-09-11 18:00:00,4661.426791277258 +2012-09-11 19:00:00,4575.4953271028035 +2012-09-11 20:00:00,4459.190031152648 +2012-09-11 21:00:00,4134.323987538941 +2012-09-11 22:00:00,3717.1370716510905 +2012-09-11 23:00:00,3093.557632398754 +2012-09-12 00:00:00,2048.685358255452 +2012-09-12 01:00:00,1673.0 +2012-09-12 02:00:00,1604.2834890965732 +2012-09-12 03:00:00,1550.619937694704 +2012-09-12 04:00:00,1494.361370716511 +2012-09-12 05:00:00,1541.7445482866044 +2012-09-12 06:00:00,1703.4517133956385 +2012-09-12 07:00:00,1908.0996884735202 +2012-09-12 08:00:00,2051.299065420561 +2012-09-12 09:00:00,3157.7476635514017 +2012-09-12 10:00:00,4089.6168224299067 +2012-09-12 11:00:00,4374.86292834891 +2012-09-12 12:00:00,4785.800623052959 +2012-09-12 13:00:00,4891.7663551401865 +2012-09-12 14:00:00,4875.429906542056 +2012-09-12 15:00:00,4906.959501557632 +2012-09-12 16:00:00,5054.719626168225 +2012-09-12 17:00:00,5045.6386292834895 +2012-09-12 18:00:00,5024.3021806853585 +2012-09-12 19:00:00,4754.953271028037 +2012-09-12 20:00:00,4640.021806853582 +2012-09-12 21:00:00,4381.647975077882 +2012-09-12 22:00:00,3938.479750778816 +2012-09-12 23:00:00,3166.0498442367602 +2012-09-13 00:00:00,1986.2647975077882 +2012-09-13 01:00:00,1621.1183800623053 +2012-09-13 02:00:00,1566.9252336448599 +2012-09-13 03:00:00,1525.4828660436137 +2012-09-13 04:00:00,1462.9719626168223 +2012-09-13 05:00:00,1493.9719626168223 +2012-09-13 06:00:00,1708.2928348909657 +2012-09-13 07:00:00,1855.417445482866 +2012-09-13 08:00:00,2002.943925233645 +2012-09-13 09:00:00,3060.9065420560746 +2012-09-13 10:00:00,3832.6417445482866 +2012-09-13 11:00:00,4089.551401869159 +2012-09-13 12:00:00,4447.3644859813085 +2012-09-13 13:00:00,4764.9626168224295 +2012-09-13 14:00:00,4851.342679127726 +2012-09-13 15:00:00,4862.579439252337 +2012-09-13 16:00:00,4957.333333333333 +2012-09-13 17:00:00,5021.482866043613 +2012-09-13 18:00:00,4910.018691588785 +2012-09-13 19:00:00,4681.3613707165105 +2012-09-13 20:00:00,4534.841121495327 +2012-09-13 21:00:00,4200.06230529595 +2012-09-13 22:00:00,3792.542056074766 +2012-09-13 23:00:00,3046.9968847352025 +2012-09-14 00:00:00,2039.271028037383 +2012-09-14 01:00:00,1635.816199376947 +2012-09-14 02:00:00,1559.5700934579438 +2012-09-14 03:00:00,1495.5607476635514 +2012-09-14 04:00:00,1428.9003115264798 +2012-09-14 05:00:00,1504.9408099688474 +2012-09-14 06:00:00,1687.8411214953271 +2012-09-14 07:00:00,1857.6542056074766 +2012-09-14 08:00:00,2001.4859813084113 +2012-09-14 09:00:00,3034.595015576324 +2012-09-14 10:00:00,3865.2367601246106 +2012-09-14 11:00:00,4121.130841121495 +2012-09-14 12:00:00,4404.931464174455 +2012-09-14 13:00:00,4621.411214953271 +2012-09-14 14:00:00,4676.08722741433 +2012-09-14 15:00:00,4711.08722741433 +2012-09-14 16:00:00,4748.274143302181 +2012-09-14 17:00:00,4690.115264797508 +2012-09-14 18:00:00,4587.91277258567 +2012-09-14 19:00:00,4389.691588785046 +2012-09-14 20:00:00,4374.822429906542 +2012-09-14 21:00:00,4251.482866043613 +2012-09-14 22:00:00,3865.4766355140187 +2012-09-14 23:00:00,3181.255451713396 +2012-09-15 00:00:00,2220.336448598131 +2012-09-15 01:00:00,1700.4330218068535 +2012-09-15 02:00:00,1564.2990654205607 +2012-09-15 03:00:00,1458.7757009345794 +2012-09-15 04:00:00,1402.1900311526479 +2012-09-15 05:00:00,1450.853582554517 +2012-09-15 06:00:00,1631.4330218068535 +2012-09-15 07:00:00,1831.8442367601247 +2012-09-15 08:00:00,1956.2554517133956 +2012-09-15 09:00:00,3072.345794392523 +2012-09-15 10:00:00,3858.3956386292834 +2012-09-15 11:00:00,4397.190031152648 +2012-09-15 12:00:00,4656.3613707165105 +2012-09-15 13:00:00,4751.7663551401865 +2012-09-15 14:00:00,4785.485981308411 +2012-09-15 15:00:00,4814.186915887851 +2012-09-15 16:00:00,4858.451713395639 +2012-09-15 17:00:00,4832.408099688473 +2012-09-15 18:00:00,4741.647975077882 +2012-09-15 19:00:00,4508.112149532711 +2012-09-15 20:00:00,4383.947040498442 +2012-09-15 21:00:00,4255.85046728972 +2012-09-15 22:00:00,3945.691588785047 +2012-09-15 23:00:00,3298.1931464174454 +2012-09-16 00:00:00,2297.7632398753894 +2012-09-16 01:00:00,1675.1308411214952 +2012-09-16 02:00:00,1586.1495327102805 +2012-09-16 03:00:00,1510.4143302180685 +2012-09-16 04:00:00,1388.7819314641745 +2012-09-16 05:00:00,1442.9096573208724 +2012-09-16 06:00:00,1621.2274143302182 +2012-09-16 07:00:00,1800.5576323987539 +2012-09-16 08:00:00,1896.214953271028 +2012-09-16 09:00:00,2747.6105919003116 +2012-09-16 10:00:00,3819.5015576323985 +2012-09-16 11:00:00,4142.548286604361 +2012-09-16 12:00:00,4321.732087227414 +2012-09-16 13:00:00,4395.794392523365 +2012-09-16 14:00:00,4191.355140186916 +2012-09-16 15:00:00,4278.3644859813085 +2012-09-16 16:00:00,4312.757009345794 +2012-09-16 17:00:00,4321.442367601246 +2012-09-16 18:00:00,4318.579439252337 +2012-09-16 19:00:00,4148.327102803738 +2012-09-16 20:00:00,4164.342679127726 +2012-09-16 21:00:00,4011.8535825545173 +2012-09-16 22:00:00,3577.856697819315 +2012-09-16 23:00:00,2744.1931464174454 +2012-09-17 00:00:00,1820.2647975077882 +2012-09-17 01:00:00,1509.4641744548287 +2012-09-17 02:00:00,1463.1214953271028 +2012-09-17 03:00:00,1426.5700934579438 +2012-09-17 04:00:00,1408.3084112149534 +2012-09-17 05:00:00,1470.747663551402 +2012-09-17 06:00:00,1659.2180685358255 +2012-09-17 07:00:00,1830.638629283489 +2012-09-17 08:00:00,1962.8566978193146 +2012-09-17 09:00:00,2838.5140186915887 +2012-09-17 10:00:00,3805.6168224299067 +2012-09-17 11:00:00,4109.127725856698 +2012-09-17 12:00:00,4140.647975077882 +2012-09-17 13:00:00,4298.056074766355 +2012-09-17 14:00:00,4289.112149532711 +2012-09-17 15:00:00,4310.174454828661 +2012-09-17 16:00:00,4397.507788161994 +2012-09-17 17:00:00,4476.915887850468 +2012-09-17 18:00:00,4284.922118380062 +2012-09-17 19:00:00,4220.2336448598135 +2012-09-17 20:00:00,4217.052959501558 +2012-09-17 21:00:00,4057.202492211838 +2012-09-17 22:00:00,3609.9906542056074 +2012-09-17 23:00:00,2431.1370716510905 +2012-09-18 00:00:00,1924.8816199376947 +2012-09-18 01:00:00,1635.5919003115264 +2012-09-18 02:00:00,1561.0093457943926 +2012-09-18 03:00:00,1491.0934579439252 +2012-09-18 04:00:00,1458.5981308411215 +2012-09-18 05:00:00,1507.8847352024923 +2012-09-18 06:00:00,1719.5389408099688 +2012-09-18 07:00:00,1891.96261682243 +2012-09-18 08:00:00,2012.7725856697818 +2012-09-18 09:00:00,3111.01246105919 +2012-09-18 10:00:00,3980.0778816199377 +2012-09-18 11:00:00,4144.190031152648 +2012-09-18 12:00:00,4310.591900311527 +2012-09-18 13:00:00,4461.4330218068535 +2012-09-18 14:00:00,4507.897196261682 +2012-09-18 15:00:00,4505.171339563863 +2012-09-18 16:00:00,4525.856697819315 +2012-09-18 17:00:00,4531.816199376947 +2012-09-18 18:00:00,4462.242990654206 +2012-09-18 19:00:00,4363.548286604361 +2012-09-18 20:00:00,4286.404984423676 +2012-09-18 21:00:00,4082.404984423676 +2012-09-18 22:00:00,3745.2305295950155 +2012-09-18 23:00:00,2746.4330218068535 +2012-09-19 00:00:00,2064.4205607476633 +2012-09-19 01:00:00,1581.5919003115264 +2012-09-19 02:00:00,1512.613707165109 +2012-09-19 03:00:00,1506.7414330218069 +2012-09-19 04:00:00,1459.6479750778817 +2012-09-19 05:00:00,1553.9719626168223 +2012-09-19 06:00:00,1708.2897196261683 +2012-09-19 07:00:00,1926.0529595015576 +2012-09-19 08:00:00,2045.6791277258567 +2012-09-19 09:00:00,3219.7881619937693 +2012-09-19 10:00:00,3850.6230529595014 +2012-09-19 11:00:00,3961.1246105919004 +2012-09-19 12:00:00,4207.629283489096 +2012-09-19 13:00:00,4346.95015576324 +2012-09-19 14:00:00,4383.367601246106 +2012-09-19 15:00:00,4708.464174454829 +2012-09-19 16:00:00,4688.7694704049845 +2012-09-19 17:00:00,4684.853582554517 +2012-09-19 18:00:00,4628.221183800623 +2012-09-19 19:00:00,4457.454828660436 +2012-09-19 20:00:00,4418.093457943925 +2012-09-19 21:00:00,4110.542056074766 +2012-09-19 22:00:00,3706.669781931464 +2012-09-19 23:00:00,2681.398753894081 +2012-09-20 00:00:00,2027.760124610592 +2012-09-20 01:00:00,1659.0872274143303 +2012-09-20 02:00:00,1523.7040498442368 +2012-09-20 03:00:00,1516.1028037383178 +2012-09-20 04:00:00,1498.2772585669782 +2012-09-20 05:00:00,1490.1028037383178 +2012-09-20 06:00:00,1705.3520249221183 +2012-09-20 07:00:00,1895.056074766355 +2012-09-20 08:00:00,2029.6417445482866 +2012-09-20 09:00:00,3043.5607476635514 +2012-09-20 10:00:00,3806.292834890966 +2012-09-20 11:00:00,4073.8816199376947 +2012-09-20 12:00:00,4209.0342679127725 +2012-09-20 13:00:00,4397.887850467289 +2012-09-20 14:00:00,4384.890965732087 +2012-09-20 15:00:00,4479.323987538941 +2012-09-20 16:00:00,4408.647975077882 +2012-09-20 17:00:00,4475.694704049844 +2012-09-20 18:00:00,4249.968847352025 +2012-09-20 19:00:00,4144.252336448598 +2012-09-20 20:00:00,4169.591900311527 +2012-09-20 21:00:00,3991.7507788161993 +2012-09-20 22:00:00,3612.785046728972 +2012-09-20 23:00:00,2409.4766355140187 +2012-09-21 00:00:00,1843.9563862928348 +2012-09-21 01:00:00,1565.5077881619939 +2012-09-21 02:00:00,1528.127725856698 +2012-09-21 03:00:00,1470.3115264797507 +2012-09-21 04:00:00,1460.588785046729 +2012-09-21 05:00:00,1520.1619937694704 +2012-09-21 06:00:00,1716.8629283489097 +2012-09-21 07:00:00,1922.4579439252336 +2012-09-21 08:00:00,2044.5077881619939 +2012-09-21 09:00:00,3216.1495327102803 +2012-09-21 10:00:00,3808.06230529595 +2012-09-21 11:00:00,4039.6168224299067 +2012-09-21 12:00:00,4228.105919003116 +2012-09-21 13:00:00,4388.853582554517 +2012-09-21 14:00:00,4380.5046728971965 +2012-09-21 15:00:00,4423.535825545171 +2012-09-21 16:00:00,4406.517133956387 +2012-09-21 17:00:00,4220.619937694704 +2012-09-21 18:00:00,4130.320872274143 +2012-09-21 19:00:00,4046.308411214953 +2012-09-21 20:00:00,4084.5358255451715 +2012-09-21 21:00:00,3950.436137071651 +2012-09-21 22:00:00,3602.828660436137 +2012-09-21 23:00:00,2556.669781931464 +2012-09-22 00:00:00,1979.8753894080996 +2012-09-22 01:00:00,1669.0436137071652 +2012-09-22 02:00:00,1576.0218068535826 +2012-09-22 03:00:00,1471.0716510903426 +2012-09-22 04:00:00,1422.651090342679 +2012-09-22 05:00:00,1496.5233644859813 +2012-09-22 06:00:00,1673.943925233645 +2012-09-22 07:00:00,1886.0093457943926 +2012-09-22 08:00:00,1964.1495327102805 +2012-09-22 09:00:00,3141.8629283489095 +2012-09-22 10:00:00,3768.286604361371 +2012-09-22 11:00:00,4080.5825545171338 +2012-09-22 12:00:00,4191.3613707165105 +2012-09-22 13:00:00,4257.878504672897 +2012-09-22 14:00:00,4271.448598130841 +2012-09-22 15:00:00,4275.102803738318 +2012-09-22 16:00:00,4353.152647975078 +2012-09-22 17:00:00,4434.943925233645 +2012-09-22 18:00:00,4322.090342679127 +2012-09-22 19:00:00,4236.028037383177 +2012-09-22 20:00:00,4227.8348909657325 +2012-09-22 21:00:00,4078.847352024922 +2012-09-22 22:00:00,3828.5607476635514 +2012-09-22 23:00:00,2845.4080996884736 +2012-09-23 00:00:00,2187.9127725856697 +2012-09-23 01:00:00,1772.785046728972 +2012-09-23 02:00:00,1633.3894080996886 +2012-09-23 03:00:00,1541.4018691588785 +2012-09-23 04:00:00,1409.221183800623 +2012-09-23 05:00:00,1474.9968847352025 +2012-09-23 06:00:00,1683.9221183800623 +2012-09-23 07:00:00,1885.1993769470405 +2012-09-23 08:00:00,1965.2928348909657 +2012-09-23 09:00:00,3038.4267912772584 +2012-09-23 10:00:00,3730.791277258567 +2012-09-23 11:00:00,4013.302180685358 +2012-09-23 12:00:00,3930.202492211838 +2012-09-23 13:00:00,4060.3520249221183 +2012-09-23 14:00:00,4126.685358255451 +2012-09-23 15:00:00,4153.716510903427 +2012-09-23 16:00:00,4120.878504672897 +2012-09-23 17:00:00,4108.482866043613 +2012-09-23 18:00:00,3968.0186915887853 +2012-09-23 19:00:00,3874.7694704049845 +2012-09-23 20:00:00,3933.576323987539 +2012-09-23 21:00:00,3779.663551401869 +2012-09-23 22:00:00,3342.3956386292834 +2012-09-23 23:00:00,2431.5607476635514 +2012-09-24 00:00:00,1793.0529595015576 +2012-09-24 01:00:00,1564.6884735202493 +2012-09-24 02:00:00,1501.4672897196263 +2012-09-24 03:00:00,1453.968847352025 +2012-09-24 04:00:00,1448.2242990654206 +2012-09-24 05:00:00,1529.1401869158879 +2012-09-24 06:00:00,1668.3894080996886 +2012-09-24 07:00:00,1859.6853582554518 +2012-09-24 08:00:00,1947.3551401869158 +2012-09-24 09:00:00,2724.489096573209 +2012-09-24 10:00:00,3519.8753894080996 +2012-09-24 11:00:00,3516.1869158878503 +2012-09-24 12:00:00,3629.9719626168226 +2012-09-24 13:00:00,3704.323987538941 +2012-09-24 14:00:00,3691.190031152648 +2012-09-24 15:00:00,3694.2056074766356 +2012-09-24 16:00:00,3696.4828660436137 +2012-09-24 17:00:00,3743.96261682243 +2012-09-24 18:00:00,3651.663551401869 +2012-09-24 19:00:00,3667.866043613707 +2012-09-24 20:00:00,3710.6947040498444 +2012-09-24 21:00:00,3532.5358255451715 +2012-09-24 22:00:00,3199.8380062305296 +2012-09-24 23:00:00,2502.143302180685 +2012-09-25 00:00:00,1918.7819314641745 +2012-09-25 01:00:00,1636.7102803738317 +2012-09-25 02:00:00,1516.183800623053 +2012-09-25 03:00:00,1452.2866043613708 +2012-09-25 04:00:00,1434.853582554517 +2012-09-25 05:00:00,1478.0529595015576 +2012-09-25 06:00:00,1650.4392523364486 +2012-09-25 07:00:00,1874.417445482866 +2012-09-25 08:00:00,1955.1526479750778 +2012-09-25 09:00:00,2778.5358255451715 +2012-09-25 10:00:00,3295.5794392523367 +2012-09-25 11:00:00,3627.791277258567 +2012-09-25 12:00:00,3472.0186915887853 +2012-09-25 13:00:00,3575.542056074766 +2012-09-25 14:00:00,3608.2616822429904 +2012-09-25 15:00:00,3674.5669781931465 +2012-09-25 16:00:00,3641.068535825545 +2012-09-25 17:00:00,3619.613707165109 +2012-09-25 18:00:00,3591.0218068535823 +2012-09-25 19:00:00,3624.07476635514 +2012-09-25 20:00:00,3739.361370716511 +2012-09-25 21:00:00,3477.489096573209 +2012-09-25 22:00:00,3145.557632398754 +2012-09-25 23:00:00,2332.0996884735205 +2012-09-26 00:00:00,1764.2554517133956 +2012-09-26 01:00:00,1459.1028037383178 +2012-09-26 02:00:00,1418.0841121495328 +2012-09-26 03:00:00,1375.0404984423676 +2012-09-26 04:00:00,1353.5202492211838 +2012-09-26 05:00:00,1385.2834890965732 +2012-09-26 06:00:00,1570.2429906542056 +2012-09-26 07:00:00,1772.5202492211838 +2012-09-26 08:00:00,1859.9065420560748 +2012-09-26 09:00:00,2633.968847352025 +2012-09-26 10:00:00,3271.2429906542056 +2012-09-26 11:00:00,3198.361370716511 +2012-09-26 12:00:00,3341.1931464174454 +2012-09-26 13:00:00,3399.538940809969 +2012-09-26 14:00:00,3390.5171339563863 +2012-09-26 15:00:00,3363.323987538941 +2012-09-26 16:00:00,3402.1931464174454 +2012-09-26 17:00:00,3390.1557632398753 +2012-09-26 18:00:00,3367.9968847352025 +2012-09-26 19:00:00,3419.0 +2012-09-26 20:00:00,3458.866043613707 +2012-09-26 21:00:00,3373.7414330218066 +2012-09-26 22:00:00,3028.9906542056074 +2012-09-26 23:00:00,2244.386292834891 +2012-09-27 00:00:00,1710.1059190031153 +2012-09-27 01:00:00,1460.7757009345794 +2012-09-27 02:00:00,1491.0965732087227 +2012-09-27 03:00:00,1428.6355140186915 +2012-09-27 04:00:00,1395.5358255451713 +2012-09-27 05:00:00,1420.3021806853583 +2012-09-27 06:00:00,1585.9501557632398 +2012-09-27 07:00:00,1787.0155763239875 +2012-09-27 08:00:00,1898.8099688473521 +2012-09-27 09:00:00,2550.9439252336447 +2012-09-27 10:00:00,3032.8535825545173 +2012-09-27 11:00:00,3030.88785046729 +2012-09-27 12:00:00,3188.2523364485983 +2012-09-27 13:00:00,3294.791277258567 +2012-09-27 14:00:00,3256.3208722741433 +2012-09-27 15:00:00,3337.638629283489 +2012-09-27 16:00:00,3357.713395638629 +2012-09-27 17:00:00,3350.2523364485983 +2012-09-27 18:00:00,3338.2367601246106 +2012-09-27 19:00:00,3402.1090342679126 +2012-09-27 20:00:00,3334.068535825545 +2012-09-27 21:00:00,3299.4174454828662 +2012-09-27 22:00:00,2946.127725856698 +2012-09-27 23:00:00,2225.9158878504672 +2012-09-28 00:00:00,1724.5545171339563 +2012-09-28 01:00:00,1465.6043613707166 +2012-09-28 02:00:00,1394.1588785046729 +2012-09-28 03:00:00,1364.5700934579438 +2012-09-28 04:00:00,1336.0249221183801 +2012-09-28 05:00:00,1426.8816199376947 +2012-09-28 06:00:00,1590.473520249221 +2012-09-28 07:00:00,1756.056074766355 +2012-09-28 08:00:00,1864.2647975077882 +2012-09-28 09:00:00,2555.4984423676015 +2012-09-28 10:00:00,3097.2834890965732 +2012-09-28 11:00:00,3214.1495327102803 +2012-09-28 12:00:00,3306.9345794392525 +2012-09-28 13:00:00,3323.5295950155764 +2012-09-28 14:00:00,3337.785046728972 +2012-09-28 15:00:00,3304.691588785047 +2012-09-28 16:00:00,3419.0841121495328 +2012-09-28 17:00:00,3369.532710280374 +2012-09-28 18:00:00,3372.07476635514 +2012-09-28 19:00:00,3428.8255451713394 +2012-09-28 20:00:00,3532.457943925234 +2012-09-28 21:00:00,3379.6230529595014 +2012-09-28 22:00:00,3183.940809968847 +2012-09-28 23:00:00,2452.8442367601247 +2012-09-29 00:00:00,1894.8940809968847 +2012-09-29 01:00:00,1612.2056074766356 +2012-09-29 02:00:00,1592.5202492211838 +2012-09-29 03:00:00,1447.1433021806854 +2012-09-29 04:00:00,1396.2803738317757 +2012-09-29 05:00:00,1448.5700934579438 +2012-09-29 06:00:00,1612.2990654205607 +2012-09-29 07:00:00,1775.214953271028 +2012-09-29 08:00:00,1894.4579439252336 +2012-09-29 09:00:00,2644.127725856698 +2012-09-29 10:00:00,3333.3831775700933 +2012-09-29 11:00:00,3331.299065420561 +2012-09-29 12:00:00,3441.700934579439 +2012-09-29 13:00:00,3597.7320872274145 +2012-09-29 14:00:00,3663.196261682243 +2012-09-29 15:00:00,3742.06230529595 +2012-09-29 16:00:00,3873.158878504673 +2012-09-29 17:00:00,3809.669781931464 +2012-09-29 18:00:00,3814.5140186915887 +2012-09-29 19:00:00,3802.489096573209 +2012-09-29 20:00:00,3851.0186915887853 +2012-09-29 21:00:00,3604.202492211838 +2012-09-29 22:00:00,3313.158878504673 +2012-09-29 23:00:00,2427.722741433022 +2012-09-30 00:00:00,1887.5077881619939 +2012-09-30 01:00:00,1622.607476635514 +2012-09-30 02:00:00,1572.018691588785 +2012-09-30 03:00:00,1484.8691588785048 +2012-09-30 04:00:00,1379.7694704049845 +2012-09-30 05:00:00,1387.595015576324 +2012-09-30 06:00:00,1558.5233644859813 +2012-09-30 07:00:00,1752.6479750778817 +2012-09-30 08:00:00,1833.1370716510903 +2012-09-30 09:00:00,2535.7040498442366 +2012-09-30 10:00:00,3273.4174454828662 +2012-09-30 11:00:00,3448.6417445482866 +2012-09-30 12:00:00,3622.271028037383 +2012-09-30 13:00:00,3666.3800623052957 +2012-09-30 14:00:00,3634.654205607477 +2012-09-30 15:00:00,3646.392523364486 +2012-09-30 16:00:00,3734.98753894081 +2012-09-30 17:00:00,3695.607476635514 +2012-09-30 18:00:00,3598.8847352024923 +2012-09-30 19:00:00,3611.457943925234 +2012-09-30 20:00:00,3584.1682242990655 +2012-09-30 21:00:00,3444.5669781931465 +2012-09-30 22:00:00,3041.286604361371 +2012-09-30 23:00:00,2103.4704049844236 +2012-10-01 00:00:00,1663.0934579439252 +2012-10-01 01:00:00,1437.8380062305296 +2012-10-01 02:00:00,1405.2554517133956 +2012-10-01 03:00:00,1354.2118380062304 +2012-10-01 04:00:00,1351.348909657321 +2012-10-01 05:00:00,1389.9314641744547 +2012-10-01 06:00:00,1585.0934579439252 +2012-10-01 07:00:00,1764.202492211838 +2012-10-01 08:00:00,1865.361370716511 +2012-10-01 09:00:00,2306.570093457944 +2012-10-01 10:00:00,2886.239875389408 +2012-10-01 11:00:00,3481.841121495327 +2012-10-01 12:00:00,3551.588785046729 +2012-10-01 13:00:00,3658.2897196261683 +2012-10-01 14:00:00,3617.423676012461 +2012-10-01 15:00:00,3669.669781931464 +2012-10-01 16:00:00,3616.0 +2012-10-01 17:00:00,3561.1931464174454 +2012-10-01 18:00:00,3460.473520249221 +2012-10-01 19:00:00,3538.277258566978 +2012-10-01 20:00:00,3561.208722741433 +2012-10-01 21:00:00,3422.9813084112147 +2012-10-01 22:00:00,3029.9003115264795 +2012-10-01 23:00:00,2213.5233644859813 +2012-10-02 00:00:00,1717.8130841121495 +2012-10-02 01:00:00,1472.2087227414331 +2012-10-02 02:00:00,1423.1619937694704 +2012-10-02 03:00:00,1402.6635514018692 +2012-10-02 04:00:00,1372.2897196261683 +2012-10-02 05:00:00,1414.96261682243 +2012-10-02 06:00:00,1609.2616822429907 +2012-10-02 07:00:00,1785.0467289719627 +2012-10-02 08:00:00,1877.2118380062304 +2012-10-02 09:00:00,2323.286604361371 +2012-10-02 10:00:00,2936.3800623052957 +2012-10-02 11:00:00,3484.2242990654204 +2012-10-02 12:00:00,3607.6573208722743 +2012-10-02 13:00:00,3605.504672897196 +2012-10-02 14:00:00,3607.0186915887853 +2012-10-02 15:00:00,3646.4922118380064 +2012-10-02 16:00:00,3692.872274143302 +2012-10-02 17:00:00,3650.080996884735 +2012-10-02 18:00:00,3553.183800623053 +2012-10-02 19:00:00,3610.8535825545173 +2012-10-02 20:00:00,3552.3208722741433 +2012-10-02 21:00:00,3423.691588785047 +2012-10-02 22:00:00,3079.1495327102803 +2012-10-02 23:00:00,2246.5077881619936 +2012-10-03 00:00:00,1783.7165109034268 +2012-10-03 01:00:00,1487.4828660436137 +2012-10-03 02:00:00,1427.9065420560748 +2012-10-03 03:00:00,1395.196261682243 +2012-10-03 04:00:00,1367.6448598130842 +2012-10-03 05:00:00,1397.4579439252336 +2012-10-03 06:00:00,1588.4330218068535 +2012-10-03 07:00:00,1784.8411214953271 +2012-10-03 08:00:00,1874.233644859813 +2012-10-03 09:00:00,2336.654205607477 +2012-10-03 10:00:00,2913.1869158878503 +2012-10-03 11:00:00,3477.8068535825546 +2012-10-03 12:00:00,3614.0342679127725 +2012-10-03 13:00:00,3640.6199376947043 +2012-10-03 14:00:00,3636.4267912772584 +2012-10-03 15:00:00,3742.286604361371 +2012-10-03 16:00:00,3682.557632398754 +2012-10-03 17:00:00,3549.6666666666665 +2012-10-03 18:00:00,3500.4859813084113 +2012-10-03 19:00:00,3512.3177570093458 +2012-10-03 20:00:00,3586.448598130841 +2012-10-03 21:00:00,3417.847352024922 +2012-10-03 22:00:00,3094.3831775700933 +2012-10-03 23:00:00,2203.4828660436137 +2012-10-04 00:00:00,1750.2990654205607 +2012-10-04 01:00:00,1469.7071651090343 +2012-10-04 02:00:00,1417.822429906542 +2012-10-04 03:00:00,1374.1214953271028 +2012-10-04 04:00:00,1359.454828660436 +2012-10-04 05:00:00,1391.1931464174454 +2012-10-04 06:00:00,1563.4859813084113 +2012-10-04 07:00:00,1802.9252336448599 +2012-10-04 08:00:00,1878.2866043613708 +2012-10-04 09:00:00,2328.233644859813 +2012-10-04 10:00:00,2919.0716510903426 +2012-10-04 11:00:00,3537.03738317757 +2012-10-04 12:00:00,3673.6292834890965 +2012-10-04 13:00:00,3772.0934579439254 +2012-10-04 14:00:00,3760.919003115265 +2012-10-04 15:00:00,3792.07476635514 +2012-10-04 16:00:00,3780.2367601246106 +2012-10-04 17:00:00,3707.644859813084 +2012-10-04 18:00:00,3678.2429906542056 +2012-10-04 19:00:00,3651.8006230529595 +2012-10-04 20:00:00,3633.1246105919004 +2012-10-04 21:00:00,3531.841121495327 +2012-10-04 22:00:00,3203.442367601246 +2012-10-04 23:00:00,2331.4766355140187 +2012-10-05 00:00:00,1828.1993769470405 +2012-10-05 01:00:00,1524.1183800623053 +2012-10-05 02:00:00,1444.9906542056074 +2012-10-05 03:00:00,1384.0155763239875 +2012-10-05 04:00:00,1369.7040498442368 +2012-10-05 05:00:00,1433.6448598130842 +2012-10-05 06:00:00,1580.6635514018692 +2012-10-05 07:00:00,1766.2492211838007 +2012-10-05 08:00:00,1858.816199376947 +2012-10-05 09:00:00,2341.563862928349 +2012-10-05 10:00:00,3006.809968847352 +2012-10-05 11:00:00,3634.691588785047 +2012-10-05 12:00:00,3814.2959501557634 +2012-10-05 13:00:00,3917.121495327103 +2012-10-05 14:00:00,3952.4267912772584 +2012-10-05 15:00:00,4040.5825545171338 +2012-10-05 16:00:00,3931.797507788162 +2012-10-05 17:00:00,3859.3831775700933 +2012-10-05 18:00:00,3753.828660436137 +2012-10-05 19:00:00,3753.816199376947 +2012-10-05 20:00:00,3759.0 +2012-10-05 21:00:00,3657.2803738317757 +2012-10-05 22:00:00,3230.676012461059 +2012-10-05 23:00:00,2375.1744548286606 +2012-10-06 00:00:00,1925.2429906542056 +2012-10-06 01:00:00,1654.601246105919 +2012-10-06 02:00:00,1555.411214953271 +2012-10-06 03:00:00,1451.5327102803737 +2012-10-06 04:00:00,1412.398753894081 +2012-10-06 05:00:00,1448.3644859813085 +2012-10-06 06:00:00,1623.417445482866 +2012-10-06 07:00:00,1806.9283489096574 +2012-10-06 08:00:00,1884.4143302180685 +2012-10-06 09:00:00,2393.5919003115264 +2012-10-06 10:00:00,3277.8130841121497 +2012-10-06 11:00:00,3482.5451713395637 +2012-10-06 12:00:00,3639.0996884735205 +2012-10-06 13:00:00,3677.816199376947 +2012-10-06 14:00:00,3640.685358255452 +2012-10-06 15:00:00,3723.5856697819313 +2012-10-06 16:00:00,3748.02492211838 +2012-10-06 17:00:00,3709.557632398754 +2012-10-06 18:00:00,3609.2679127725855 +2012-10-06 19:00:00,3674.2367601246106 +2012-10-06 20:00:00,3664.2679127725855 +2012-10-06 21:00:00,3549.6510903426793 +2012-10-06 22:00:00,3259.2367601246106 +2012-10-06 23:00:00,2440.479750778816 +2012-10-07 00:00:00,1927.582554517134 +2012-10-07 01:00:00,1642.4984423676012 +2012-10-07 02:00:00,1564.9408099688474 +2012-10-07 03:00:00,1478.6479750778817 +2012-10-07 04:00:00,1367.214953271028 +2012-10-07 05:00:00,1401.576323987539 +2012-10-07 06:00:00,1600.7725856697818 +2012-10-07 07:00:00,1793.0747663551401 +2012-10-07 08:00:00,1840.0467289719627 +2012-10-07 09:00:00,2375.264797507788 +2012-10-07 10:00:00,3341.152647975078 +2012-10-07 11:00:00,3605.2897196261683 +2012-10-07 12:00:00,3818.5669781931465 +2012-10-07 13:00:00,3911.7632398753894 +2012-10-07 14:00:00,3809.1744548286606 +2012-10-07 15:00:00,3849.367601246106 +2012-10-07 16:00:00,3840.0716510903426 +2012-10-07 17:00:00,3752.3831775700933 +2012-10-07 18:00:00,3682.909657320872 +2012-10-07 19:00:00,3695.227414330218 +2012-10-07 20:00:00,3703.479750778816 +2012-10-07 21:00:00,3566.8629283489095 +2012-10-07 22:00:00,3091.613707165109 +2012-10-07 23:00:00,2153.8006230529595 +2012-10-08 00:00:00,1762.8753894080996 +2012-10-08 01:00:00,1532.968847352025 +2012-10-08 02:00:00,1472.8411214953271 +2012-10-08 03:00:00,1428.348909657321 +2012-10-08 04:00:00,1451.5700934579438 +2012-10-08 05:00:00,1484.803738317757 +2012-10-08 06:00:00,1648.9096573208724 +2012-10-08 07:00:00,1828.9470404984424 +2012-10-08 08:00:00,1922.8660436137072 +2012-10-08 09:00:00,2371.5981308411215 +2012-10-08 10:00:00,2985.4828660436137 +2012-10-08 11:00:00,3715.778816199377 +2012-10-08 12:00:00,3795.5919003115264 +2012-10-08 13:00:00,3998.171339563863 +2012-10-08 14:00:00,4026.8193146417448 +2012-10-08 15:00:00,4004.133956386293 +2012-10-08 16:00:00,3897.6604361370714 +2012-10-08 17:00:00,3873.2679127725855 +2012-10-08 18:00:00,3780.6573208722743 +2012-10-08 19:00:00,3854.404984423676 +2012-10-08 20:00:00,3778.5825545171338 +2012-10-08 21:00:00,3663.3956386292834 +2012-10-08 22:00:00,3218.9595015576324 +2012-10-08 23:00:00,2388.7040498442366 +2012-10-09 00:00:00,1900.785046728972 +2012-10-09 01:00:00,1660.2741433021806 +2012-10-09 02:00:00,1587.9532710280373 +2012-10-09 03:00:00,1546.146417445483 +2012-10-09 04:00:00,1529.214953271028 +2012-10-09 05:00:00,1595.9065420560748 +2012-10-09 06:00:00,1725.5482866043615 +2012-10-09 07:00:00,1926.588785046729 +2012-10-09 08:00:00,2022.2679127725858 +2012-10-09 09:00:00,2433.0996884735205 +2012-10-09 10:00:00,3156.3426791277257 +2012-10-09 11:00:00,3748.88785046729 +2012-10-09 12:00:00,3938.526479750779 +2012-10-09 13:00:00,4079.753894080997 +2012-10-09 14:00:00,4046.06230529595 +2012-10-09 15:00:00,4040.8691588785045 +2012-10-09 16:00:00,3944.3800623052957 +2012-10-09 17:00:00,3791.2616822429904 +2012-10-09 18:00:00,3890.803738317757 +2012-10-09 19:00:00,3915.663551401869 +2012-10-09 20:00:00,3878.0498442367602 +2012-10-09 21:00:00,3747.133956386293 +2012-10-09 22:00:00,3303.0218068535823 +2012-10-09 23:00:00,2351.314641744548 +2012-10-10 00:00:00,1850.6666666666667 +2012-10-10 01:00:00,1600.728971962617 +2012-10-10 02:00:00,1539.2616822429907 +2012-10-10 03:00:00,1472.588785046729 +2012-10-10 04:00:00,1446.8691588785048 +2012-10-10 05:00:00,1533.3239875389409 +2012-10-10 06:00:00,1689.5576323987539 +2012-10-10 07:00:00,1880.5046728971963 +2012-10-10 08:00:00,1988.2803738317757 +2012-10-10 09:00:00,2461.6105919003116 +2012-10-10 10:00:00,3046.791277258567 +2012-10-10 11:00:00,3685.7476635514017 +2012-10-10 12:00:00,3831.7632398753894 +2012-10-10 13:00:00,3970.9781931464177 +2012-10-10 14:00:00,4056.97507788162 +2012-10-10 15:00:00,4048.0467289719627 +2012-10-10 16:00:00,4058.367601246106 +2012-10-10 17:00:00,3773.638629283489 +2012-10-10 18:00:00,3798.5856697819313 +2012-10-10 19:00:00,3812.626168224299 +2012-10-10 20:00:00,3798.208722741433 +2012-10-10 21:00:00,3683.5451713395637 +2012-10-10 22:00:00,3293.11214953271 +2012-10-10 23:00:00,2336.9345794392525 +2012-10-11 00:00:00,1839.436137071651 +2012-10-11 01:00:00,1594.1682242990655 +2012-10-11 02:00:00,1534.834890965732 +2012-10-11 03:00:00,1475.9408099688474 +2012-10-11 04:00:00,1464.6760124610591 +2012-10-11 05:00:00,1531.271028037383 +2012-10-11 06:00:00,1679.3021806853583 +2012-10-11 07:00:00,1872.8317757009345 +2012-10-11 08:00:00,1997.0093457943926 +2012-10-11 09:00:00,2434.308411214953 +2012-10-11 10:00:00,3030.576323987539 +2012-10-11 11:00:00,3640.4174454828662 +2012-10-11 12:00:00,3770.504672897196 +2012-10-11 13:00:00,3743.3208722741433 +2012-10-11 14:00:00,3813.448598130841 +2012-10-11 15:00:00,3794.7694704049845 +2012-10-11 16:00:00,3724.98753894081 +2012-10-11 17:00:00,3601.570093457944 +2012-10-11 18:00:00,3594.6417445482866 +2012-10-11 19:00:00,3635.5171339563863 +2012-10-11 20:00:00,3626.713395638629 +2012-10-11 21:00:00,3477.0093457943926 +2012-10-11 22:00:00,3140.9595015576324 +2012-10-11 23:00:00,2275.423676012461 +2012-10-12 00:00:00,1763.4454828660437 +2012-10-12 01:00:00,1517.5919003115264 +2012-10-12 02:00:00,1486.1339563862928 +2012-10-12 03:00:00,1437.760124610592 +2012-10-12 04:00:00,1422.1619937694704 +2012-10-12 05:00:00,1479.2274143302182 +2012-10-12 06:00:00,1621.1370716510903 +2012-10-12 07:00:00,1827.3582554517134 +2012-10-12 08:00:00,1910.981308411215 +2012-10-12 09:00:00,2344.872274143302 +2012-10-12 10:00:00,2974.1557632398753 +2012-10-12 11:00:00,3444.8598130841124 +2012-10-12 12:00:00,3455.0280373831774 +2012-10-12 13:00:00,3485.361370716511 +2012-10-12 14:00:00,3562.448598130841 +2012-10-12 15:00:00,3571.0716510903426 +2012-10-12 16:00:00,3605.0404984423676 +2012-10-12 17:00:00,3436.473520249221 +2012-10-12 18:00:00,3464.031152647975 +2012-10-12 19:00:00,3472.947040498442 +2012-10-12 20:00:00,3425.436137071651 +2012-10-12 21:00:00,3263.557632398754 +2012-10-12 22:00:00,3025.6573208722743 +2012-10-12 23:00:00,2343.3395638629286 +2012-10-13 00:00:00,1851.5046728971963 +2012-10-13 01:00:00,1595.006230529595 +2012-10-13 02:00:00,1510.9314641744547 +2012-10-13 03:00:00,1413.348909657321 +2012-10-13 04:00:00,1334.5794392523364 +2012-10-13 05:00:00,1367.6417445482866 +2012-10-13 06:00:00,1557.3115264797507 +2012-10-13 07:00:00,1710.454828660436 +2012-10-13 08:00:00,1788.4517133956385 +2012-10-13 09:00:00,2273.090342679128 +2012-10-13 10:00:00,3024.01246105919 +2012-10-13 11:00:00,3268.1246105919004 +2012-10-13 12:00:00,3393.345794392523 +2012-10-13 13:00:00,3374.5015576323985 +2012-10-13 14:00:00,3343.9439252336447 +2012-10-13 15:00:00,3414.1931464174454 +2012-10-13 16:00:00,3382.11214953271 +2012-10-13 17:00:00,3390.2242990654204 +2012-10-13 18:00:00,3397.8691588785045 +2012-10-13 19:00:00,3446.1401869158876 +2012-10-13 20:00:00,3432.9501557632398 +2012-10-13 21:00:00,3302.6947040498444 +2012-10-13 22:00:00,3000.8753894080996 +2012-10-13 23:00:00,2307.1464174454827 +2012-10-14 00:00:00,1818.404984423676 +2012-10-14 01:00:00,1530.8629283489097 +2012-10-14 02:00:00,1481.4423676012461 +2012-10-14 03:00:00,1406.3395638629283 +2012-10-14 04:00:00,1298.8940809968847 +2012-10-14 05:00:00,1367.8099688473521 +2012-10-14 06:00:00,1539.7445482866044 +2012-10-14 07:00:00,1692.0031152647975 +2012-10-14 08:00:00,1750.2056074766356 +2012-10-14 09:00:00,2266.4174454828662 +2012-10-14 10:00:00,3086.5981308411215 +2012-10-14 11:00:00,3325.01246105919 +2012-10-14 12:00:00,3443.9439252336447 +2012-10-14 13:00:00,3482.4174454828662 +2012-10-14 14:00:00,3466.052959501558 +2012-10-14 15:00:00,3481.8068535825546 +2012-10-14 16:00:00,3520.9532710280373 +2012-10-14 17:00:00,3479.6043613707166 +2012-10-14 18:00:00,3271.6043613707166 +2012-10-14 19:00:00,3503.791277258567 +2012-10-14 20:00:00,3424.3271028037384 +2012-10-14 21:00:00,3245.4267912772584 +2012-10-14 22:00:00,2863.6510903426793 +2012-10-14 23:00:00,2076.202492211838 +2012-10-15 00:00:00,1679.9657320872275 +2012-10-15 01:00:00,1461.214953271028 +2012-10-15 02:00:00,1396.1183800623053 +2012-10-15 03:00:00,1362.0809968847352 +2012-10-15 04:00:00,1347.8566978193146 +2012-10-15 05:00:00,1398.6884735202493 +2012-10-15 06:00:00,1534.8473520249222 +2012-10-15 07:00:00,1724.0031152647975 +2012-10-15 08:00:00,1811.3769470404984 +2012-10-15 09:00:00,2224.697819314642 +2012-10-15 10:00:00,2738.3707165109035 +2012-10-15 11:00:00,3087.314641744548 +2012-10-15 12:00:00,3071.728971962617 +2012-10-15 13:00:00,3126.607476635514 +2012-10-15 14:00:00,3131.903426791277 +2012-10-15 15:00:00,3201.2118380062307 +2012-10-15 16:00:00,3201.6791277258567 +2012-10-15 17:00:00,3174.607476635514 +2012-10-15 18:00:00,3119.9221183800623 +2012-10-15 19:00:00,3277.9657320872275 +2012-10-15 20:00:00,3263.9906542056074 +2012-10-15 21:00:00,3114.361370716511 +2012-10-15 22:00:00,2842.722741433022 +2012-10-15 23:00:00,2180.5015576323985 +2012-10-16 00:00:00,1779.0529595015576 +2012-10-16 01:00:00,1549.1806853582555 +2012-10-16 02:00:00,1486.2928348909657 +2012-10-16 03:00:00,1424.4610591900312 +2012-10-16 04:00:00,1408.5732087227414 +2012-10-16 05:00:00,1456.9501557632398 +2012-10-16 06:00:00,1568.473520249221 +2012-10-16 07:00:00,1782.0716510903426 +2012-10-16 08:00:00,1841.9844236760125 +2012-10-16 09:00:00,2239.404984423676 +2012-10-16 10:00:00,2744.940809968847 +2012-10-16 11:00:00,3146.9595015576324 +2012-10-16 12:00:00,3198.3644859813085 +2012-10-16 13:00:00,3207.1464174454827 +2012-10-16 14:00:00,3253.11214953271 +2012-10-16 15:00:00,3266.105919003115 +2012-10-16 16:00:00,3262.669781931464 +2012-10-16 17:00:00,3179.1682242990655 +2012-10-16 18:00:00,3211.5794392523367 +2012-10-16 19:00:00,3292.601246105919 +2012-10-16 20:00:00,3319.9595015576324 +2012-10-16 21:00:00,3160.8971962616824 +2012-10-16 22:00:00,2870.8130841121497 +2012-10-16 23:00:00,2162.5077881619936 +2012-10-17 00:00:00,1747.4672897196263 +2012-10-17 01:00:00,1490.3644859813085 +2012-10-17 02:00:00,1418.2959501557632 +2012-10-17 03:00:00,1368.6448598130842 +2012-10-17 04:00:00,1376.9034267912773 +2012-10-17 05:00:00,1404.7414330218069 +2012-10-17 06:00:00,1595.8473520249222 +2012-10-17 07:00:00,1769.404984423676 +2012-10-17 08:00:00,1863.8971962616822 +2012-10-17 09:00:00,2298.3644859813085 +2012-10-17 10:00:00,2811.707165109034 +2012-10-17 11:00:00,3084.246105919003 +2012-10-17 12:00:00,3141.8006230529595 +2012-10-17 13:00:00,3181.903426791277 +2012-10-17 14:00:00,3259.4143302180687 +2012-10-17 15:00:00,3311.722741433022 +2012-10-17 16:00:00,3299.5482866043612 +2012-10-17 17:00:00,3175.1370716510905 +2012-10-17 18:00:00,3201.096573208723 +2012-10-17 19:00:00,3388.208722741433 +2012-10-17 20:00:00,3257.3800623052957 +2012-10-17 21:00:00,3149.0841121495328 +2012-10-17 22:00:00,2894.8006230529595 +2012-10-17 23:00:00,2161.171339563863 +2012-10-18 00:00:00,1715.2897196261683 +2012-10-18 01:00:00,1461.7196261682243 +2012-10-18 02:00:00,1405.8255451713396 +2012-10-18 03:00:00,1359.3738317757009 +2012-10-18 04:00:00,1338.816199376947 +2012-10-18 05:00:00,1388.3084112149534 +2012-10-18 06:00:00,1537.993769470405 +2012-10-18 07:00:00,1733.4704049844236 +2012-10-18 08:00:00,1825.6355140186915 +2012-10-18 09:00:00,2270.5482866043612 +2012-10-18 10:00:00,2726.626168224299 +2012-10-18 11:00:00,2955.526479750779 +2012-10-18 12:00:00,2913.165109034268 +2012-10-18 13:00:00,2941.828660436137 +2012-10-18 14:00:00,2918.722741433022 +2012-10-18 15:00:00,2961.9345794392525 +2012-10-18 16:00:00,2938.5077881619936 +2012-10-18 17:00:00,2890.105919003115 +2012-10-18 18:00:00,3067.570093457944 +2012-10-18 19:00:00,3142.8068535825546 +2012-10-18 20:00:00,3083.2367601246106 +2012-10-18 21:00:00,2966.940809968847 +2012-10-18 22:00:00,2744.872274143302 +2012-10-18 23:00:00,2101.722741433022 +2012-10-19 00:00:00,1677.981308411215 +2012-10-19 01:00:00,1434.8130841121495 +2012-10-19 02:00:00,1378.9003115264798 +2012-10-19 03:00:00,1317.545171339564 +2012-10-19 04:00:00,1294.1183800623053 +2012-10-19 05:00:00,1333.417445482866 +2012-10-19 06:00:00,1488.7258566978194 +2012-10-19 07:00:00,1708.803738317757 +2012-10-19 08:00:00,1787.177570093458 +2012-10-19 09:00:00,2212.5669781931465 +2012-10-19 10:00:00,2663.601246105919 +2012-10-19 11:00:00,2924.411214953271 +2012-10-19 12:00:00,2964.6479750778817 +2012-10-19 13:00:00,2975.0560747663553 +2012-10-19 14:00:00,3013.0404984423676 +2012-10-19 15:00:00,3003.6355140186915 +2012-10-19 16:00:00,3006.4641744548285 +2012-10-19 17:00:00,3009.7102803738317 +2012-10-19 18:00:00,3057.227414330218 +2012-10-19 19:00:00,3191.367601246106 +2012-10-19 20:00:00,3132.6728971962616 +2012-10-19 21:00:00,3054.3769470404986 +2012-10-19 22:00:00,2811.8629283489095 +2012-10-19 23:00:00,2254.246105919003 +2012-10-20 00:00:00,1803.3271028037384 +2012-10-20 01:00:00,1539.8193146417445 +2012-10-20 02:00:00,1442.0342679127725 +2012-10-20 03:00:00,1321.5389408099688 +2012-10-20 04:00:00,1265.411214953271 +2012-10-20 05:00:00,1308.4080996884736 +2012-10-20 06:00:00,1474.613707165109 +2012-10-20 07:00:00,1650.1339563862928 +2012-10-20 08:00:00,1731.1214953271028 +2012-10-20 09:00:00,2180.6884735202493 +2012-10-20 10:00:00,2722.2959501557634 +2012-10-20 11:00:00,2918.233644859813 +2012-10-20 12:00:00,2963.0934579439254 +2012-10-20 13:00:00,3053.791277258567 +2012-10-20 14:00:00,3013.2242990654204 +2012-10-20 15:00:00,3000.6479750778817 +2012-10-20 16:00:00,3030.809968847352 +2012-10-20 17:00:00,3034.98753894081 +2012-10-20 18:00:00,3033.551401869159 +2012-10-20 19:00:00,3187.4143302180687 +2012-10-20 20:00:00,3147.233644859813 +2012-10-20 21:00:00,3027.436137071651 +2012-10-20 22:00:00,2845.595015576324 +2012-10-20 23:00:00,2218.834890965732 +2012-10-21 00:00:00,1769.9376947040498 +2012-10-21 01:00:00,1501.6947040498442 +2012-10-21 02:00:00,1425.5732087227414 +2012-10-21 03:00:00,1323.8660436137072 +2012-10-21 04:00:00,1222.6728971962616 +2012-10-21 05:00:00,1279.2492211838007 +2012-10-21 06:00:00,1418.8504672897195 +2012-10-21 07:00:00,1635.9657320872275 +2012-10-21 08:00:00,1664.3052959501558 +2012-10-21 09:00:00,2162.105919003115 +2012-10-21 10:00:00,2747.0093457943926 +2012-10-21 11:00:00,2923.0934579439254 +2012-10-21 12:00:00,2970.6822429906542 +2012-10-21 13:00:00,3025.797507788162 +2012-10-21 14:00:00,3041.9345794392525 +2012-10-21 15:00:00,3079.8535825545173 +2012-10-21 16:00:00,3138.6230529595014 +2012-10-21 17:00:00,3151.638629283489 +2012-10-21 18:00:00,3131.1152647975077 +2012-10-21 19:00:00,3272.8691588785045 +2012-10-21 20:00:00,3197.841121495327 +2012-10-21 21:00:00,3119.4984423676015 +2012-10-21 22:00:00,2864.6292834890965 +2012-10-21 23:00:00,2050.1246105919004 +2012-10-22 00:00:00,1684.8940809968847 +2012-10-22 01:00:00,1457.2585669781931 +2012-10-22 02:00:00,1400.1121495327102 +2012-10-22 03:00:00,1359.8193146417445 +2012-10-22 04:00:00,1353.0218068535826 +2012-10-22 05:00:00,1411.7320872274142 +2012-10-22 06:00:00,1552.9158878504672 +2012-10-22 07:00:00,1771.177570093458 +2012-10-22 08:00:00,1876.8598130841121 +2012-10-22 09:00:00,2276.221183800623 +2012-10-22 10:00:00,2787.4641744548285 +2012-10-22 11:00:00,3230.707165109034 +2012-10-22 12:00:00,3262.5015576323985 +2012-10-22 13:00:00,3307.2803738317757 +2012-10-22 14:00:00,3334.1495327102803 +2012-10-22 15:00:00,3404.1370716510905 +2012-10-22 16:00:00,3434.1931464174454 +2012-10-22 17:00:00,3397.292834890966 +2012-10-22 18:00:00,3252.3426791277257 +2012-10-22 19:00:00,3487.006230529595 +2012-10-22 20:00:00,3386.1464174454827 +2012-10-22 21:00:00,3262.8816199376947 +2012-10-22 22:00:00,2986.495327102804 +2012-10-22 23:00:00,2279.190031152648 +2012-10-23 00:00:00,1841.747663551402 +2012-10-23 01:00:00,1601.4205607476636 +2012-10-23 02:00:00,1541.0155763239875 +2012-10-23 03:00:00,1471.3239875389409 +2012-10-23 04:00:00,1459.9595015576324 +2012-10-23 05:00:00,1501.7507788161993 +2012-10-23 06:00:00,1625.018691588785 +2012-10-23 07:00:00,1827.6635514018692 +2012-10-23 08:00:00,1881.3239875389409 +2012-10-23 09:00:00,2294.9127725856697 +2012-10-23 10:00:00,2786.7196261682243 +2012-10-23 11:00:00,3149.1308411214955 +2012-10-23 12:00:00,3300.7694704049845 +2012-10-23 13:00:00,3355.277258566978 +2012-10-23 14:00:00,3348.9003115264795 +2012-10-23 15:00:00,3324.744548286604 +2012-10-23 16:00:00,3323.8847352024923 +2012-10-23 17:00:00,3199.5358255451715 +2012-10-23 18:00:00,3251.6199376947043 +2012-10-23 19:00:00,3425.9781931464177 +2012-10-23 20:00:00,3352.090342679128 +2012-10-23 21:00:00,3244.9657320872275 +2012-10-23 22:00:00,2916.9158878504672 +2012-10-23 23:00:00,2269.6947040498444 +2012-10-24 00:00:00,1839.9844236760125 +2012-10-24 01:00:00,1543.7165109034268 +2012-10-24 02:00:00,1452.3707165109033 +2012-10-24 03:00:00,1409.834890965732 +2012-10-24 04:00:00,1398.1495327102805 +2012-10-24 05:00:00,1457.2305295950155 +2012-10-24 06:00:00,1608.657320872274 +2012-10-24 07:00:00,1817.5420560747664 +2012-10-24 08:00:00,1880.6915887850466 +2012-10-24 09:00:00,2299.557632398754 +2012-10-24 10:00:00,2757.6947040498444 +2012-10-24 11:00:00,3140.3489096573207 +2012-10-24 12:00:00,3156.841121495327 +2012-10-24 13:00:00,3173.271028037383 +2012-10-24 14:00:00,3222.8598130841124 +2012-10-24 15:00:00,3175.404984423676 +2012-10-24 16:00:00,3153.822429906542 +2012-10-24 17:00:00,3134.8971962616824 +2012-10-24 18:00:00,3192.479750778816 +2012-10-24 19:00:00,3331.510903426791 +2012-10-24 20:00:00,3237.495327102804 +2012-10-24 21:00:00,3117.7258566978194 +2012-10-24 22:00:00,2887.2616822429904 +2012-10-24 23:00:00,2203.1183800623053 +2012-10-25 00:00:00,1785.1308411214952 +2012-10-25 01:00:00,1535.9719626168223 +2012-10-25 02:00:00,1425.4267912772586 +2012-10-25 03:00:00,1370.7133956386292 +2012-10-25 04:00:00,1347.5732087227414 +2012-10-25 05:00:00,1415.3084112149534 +2012-10-25 06:00:00,1546.6978193146417 +2012-10-25 07:00:00,1791.0436137071652 +2012-10-25 08:00:00,1820.601246105919 +2012-10-25 09:00:00,2205.7196261682243 +2012-10-25 10:00:00,2774.0716510903426 +2012-10-25 11:00:00,2872.9439252336447 +2012-10-25 12:00:00,2972.4454828660437 +2012-10-25 13:00:00,3101.01246105919 +2012-10-25 14:00:00,3013.0560747663553 +2012-10-25 15:00:00,3193.8193146417448 +2012-10-25 16:00:00,3237.797507788162 +2012-10-25 17:00:00,3138.8753894080996 +2012-10-25 18:00:00,3242.5919003115264 +2012-10-25 19:00:00,3348.0186915887853 +2012-10-25 20:00:00,3324.6043613707166 +2012-10-25 21:00:00,3217.9657320872275 +2012-10-25 22:00:00,2908.127725856698 +2012-10-25 23:00:00,2182.6791277258567 +2012-10-26 00:00:00,1717.0467289719627 +2012-10-26 01:00:00,1492.392523364486 +2012-10-26 02:00:00,1454.5607476635514 +2012-10-26 03:00:00,1417.595015576324 +2012-10-26 04:00:00,1391.6230529595016 +2012-10-26 05:00:00,1448.0872274143303 +2012-10-26 06:00:00,1620.0716510903426 +2012-10-26 07:00:00,1814.5295950155764 +2012-10-26 08:00:00,1894.5700934579438 +2012-10-26 09:00:00,2333.9595015576324 +2012-10-26 10:00:00,2827.2679127725855 +2012-10-26 11:00:00,2937.2803738317757 +2012-10-26 12:00:00,3170.613707165109 +2012-10-26 13:00:00,3150.504672897196 +2012-10-26 14:00:00,3166.8380062305296 +2012-10-26 15:00:00,3396.3894080996884 +2012-10-26 16:00:00,3373.467289719626 +2012-10-26 17:00:00,3187.947040498442 +2012-10-26 18:00:00,3239.2180685358258 +2012-10-26 19:00:00,3363.7570093457944 +2012-10-26 20:00:00,3321.190031152648 +2012-10-26 21:00:00,3220.0934579439254 +2012-10-26 22:00:00,2982.88785046729 +2012-10-26 23:00:00,2321.8847352024923 +2012-10-27 00:00:00,1865.9781931464174 +2012-10-27 01:00:00,1598.1090342679129 +2012-10-27 02:00:00,1515.8660436137072 +2012-10-27 03:00:00,1411.233644859813 +2012-10-27 04:00:00,1340.0841121495328 +2012-10-27 05:00:00,1387.9906542056074 +2012-10-27 06:00:00,1560.6884735202493 +2012-10-27 07:00:00,1753.1059190031153 +2012-10-27 08:00:00,1819.803738317757 +2012-10-27 09:00:00,2286.068535825545 +2012-10-27 10:00:00,2831.3769470404986 +2012-10-27 11:00:00,3026.345794392523 +2012-10-27 12:00:00,3066.993769470405 +2012-10-27 13:00:00,3038.3582554517134 +2012-10-27 14:00:00,3071.1993769470405 +2012-10-27 15:00:00,3114.080996884735 +2012-10-27 16:00:00,3143.473520249221 +2012-10-27 17:00:00,3124.7943925233644 +2012-10-27 18:00:00,3078.9127725856697 +2012-10-27 19:00:00,3230.4267912772584 +2012-10-27 20:00:00,3190.576323987539 +2012-10-27 21:00:00,3085.392523364486 +2012-10-27 22:00:00,2867.9844236760123 +2012-10-27 23:00:00,2290.8847352024923 +2012-10-28 00:00:00,1827.8193146417445 +2012-10-28 01:00:00,2975.1931464174454 +2012-10-28 02:00:00,1442.766355140187 +2012-10-28 03:00:00,1378.7383177570093 +2012-10-28 04:00:00,1300.0498442367602 +2012-10-28 05:00:00,1341.993769470405 +2012-10-28 06:00:00,1481.5794392523364 +2012-10-28 07:00:00,1670.4330218068535 +2012-10-28 08:00:00,1725.423676012461 +2012-10-28 09:00:00,2211.919003115265 +2012-10-28 10:00:00,2703.903426791277 +2012-10-28 11:00:00,2833.277258566978 +2012-10-28 12:00:00,2831.299065420561 +2012-10-28 13:00:00,2796.570093457944 +2012-10-28 14:00:00,2798.330218068536 +2012-10-28 15:00:00,2784.2056074766356 +2012-10-28 16:00:00,2885.809968847352 +2012-10-28 17:00:00,2852.4330218068535 +2012-10-28 18:00:00,3037.7320872274145 +2012-10-28 19:00:00,3034.7632398753894 +2012-10-28 20:00:00,2962.993769470405 +2012-10-28 21:00:00,2862.345794392523 +2012-10-28 22:00:00,2472.9532710280373 +2012-10-28 23:00:00,1914.404984423676 +2012-10-29 00:00:00,1598.233644859813 +2012-10-29 01:00:00,1381.0436137071652 +2012-10-29 02:00:00,1334.1900311526479 +2012-10-29 03:00:00,1305.1090342679129 +2012-10-29 04:00:00,1329.9844236760125 +2012-10-29 05:00:00,1350.1028037383178 +2012-10-29 06:00:00,1487.5389408099688 +2012-10-29 07:00:00,1693.3302180685357 +2012-10-29 08:00:00,1780.018691588785 +2012-10-29 09:00:00,2179.495327102804 +2012-10-29 10:00:00,2616.429906542056 +2012-10-29 11:00:00,2885.816199376947 +2012-10-29 12:00:00,3042.520249221184 +2012-10-29 13:00:00,2914.6292834890965 +2012-10-29 14:00:00,2922.6230529595014 +2012-10-29 15:00:00,2917.532710280374 +2012-10-29 16:00:00,2918.9906542056074 +2012-10-29 17:00:00,3052.398753894081 +2012-10-29 18:00:00,3191.735202492212 +2012-10-29 19:00:00,3156.98753894081 +2012-10-29 20:00:00,3143.0093457943926 +2012-10-29 21:00:00,3017.5732087227416 +2012-10-29 22:00:00,2739.404984423676 +2012-10-29 23:00:00,2113.663551401869 +2012-10-30 00:00:00,1703.0404984423676 +2012-10-30 01:00:00,1437.9252336448599 +2012-10-30 02:00:00,1369.9532710280373 +2012-10-30 03:00:00,1324.5919003115264 +2012-10-30 04:00:00,1347.7414330218069 +2012-10-30 05:00:00,1358.9376947040498 +2012-10-30 06:00:00,1548.4517133956385 +2012-10-30 07:00:00,1809.9750778816199 +2012-10-30 08:00:00,1856.8006230529595 +2012-10-30 09:00:00,2252.632398753894 +2012-10-30 10:00:00,2681.8971962616824 +2012-10-30 11:00:00,2971.866043613707 +2012-10-30 12:00:00,2952.8847352024923 +2012-10-30 13:00:00,3002.183800623053 +2012-10-30 14:00:00,2972.644859813084 +2012-10-30 15:00:00,2952.809968847352 +2012-10-30 16:00:00,2939.068535825545 +2012-10-30 17:00:00,2999.822429906542 +2012-10-30 18:00:00,3209.0342679127725 +2012-10-30 19:00:00,3192.847352024922 +2012-10-30 20:00:00,3061.5732087227416 +2012-10-30 21:00:00,2985.93769470405 +2012-10-30 22:00:00,2692.595015576324 +2012-10-30 23:00:00,2090.538940809969 +2012-10-31 00:00:00,1693.5358255451713 +2012-10-31 01:00:00,1408.5607476635514 +2012-10-31 02:00:00,1357.2741433021806 +2012-10-31 03:00:00,1302.8068535825546 +2012-10-31 04:00:00,1332.0249221183801 +2012-10-31 05:00:00,1321.392523364486 +2012-10-31 06:00:00,1484.9750778816199 +2012-10-31 07:00:00,1715.4859813084113 +2012-10-31 08:00:00,1802.4080996884736 +2012-10-31 09:00:00,2211.3333333333335 +2012-10-31 10:00:00,2657.766355140187 +2012-10-31 11:00:00,2734.5451713395637 +2012-10-31 12:00:00,2860.1401869158876 +2012-10-31 13:00:00,2945.4548286604363 +2012-10-31 14:00:00,2872.1869158878503 +2012-10-31 15:00:00,2904.11214953271 +2012-10-31 16:00:00,2907.785046728972 +2012-10-31 17:00:00,2939.0841121495328 +2012-10-31 18:00:00,3175.0031152647975 +2012-10-31 19:00:00,3203.956386292835 +2012-10-31 20:00:00,3135.0872274143303 +2012-10-31 21:00:00,3048.542056074766 +2012-10-31 22:00:00,2734.1931464174454 +2012-10-31 23:00:00,2128.3644859813085 +2012-11-01 00:00:00,1723.9283489096574 +2012-11-01 01:00:00,1414.6635514018692 +2012-11-01 02:00:00,1347.0747663551401 +2012-11-01 03:00:00,1299.0155763239875 +2012-11-01 04:00:00,1311.4797507788162 +2012-11-01 05:00:00,1326.1619937694704 +2012-11-01 06:00:00,1525.2679127725858 +2012-11-01 07:00:00,1667.417445482866 +2012-11-01 08:00:00,1740.853582554517 +2012-11-01 09:00:00,2185.411214953271 +2012-11-01 10:00:00,2648.6168224299067 +2012-11-01 11:00:00,2827.601246105919 +2012-11-01 12:00:00,2962.052959501558 +2012-11-01 13:00:00,2880.423676012461 +2012-11-01 14:00:00,2879.0280373831774 +2012-11-01 15:00:00,2887.96261682243 +2012-11-01 16:00:00,2936.436137071651 +2012-11-01 17:00:00,2931.9657320872275 +2012-11-01 18:00:00,3211.6292834890965 +2012-11-01 19:00:00,3102.442367601246 +2012-11-01 20:00:00,3036.98753894081 +2012-11-01 21:00:00,2950.323987538941 +2012-11-01 22:00:00,2658.947040498442 +2012-11-01 23:00:00,2047.582554517134 +2012-11-02 00:00:00,1673.4859813084113 +2012-11-02 01:00:00,1423.2180685358255 +2012-11-02 02:00:00,1363.2834890965732 +2012-11-02 03:00:00,1312.3208722741433 +2012-11-02 04:00:00,1319.7352024922118 +2012-11-02 05:00:00,1333.6915887850466 +2012-11-02 06:00:00,1518.7694704049845 +2012-11-02 07:00:00,1736.6604361370717 +2012-11-02 08:00:00,1835.2429906542056 +2012-11-02 09:00:00,2251.8006230529595 +2012-11-02 10:00:00,2704.5607476635514 +2012-11-02 11:00:00,2865.504672897196 +2012-11-02 12:00:00,2968.1183800623053 +2012-11-02 13:00:00,2930.538940809969 +2012-11-02 14:00:00,2958.7040498442366 +2012-11-02 15:00:00,3005.9844236760123 +2012-11-02 16:00:00,3062.1370716510905 +2012-11-02 17:00:00,3103.5358255451715 +2012-11-02 18:00:00,3257.177570093458 +2012-11-02 19:00:00,3262.246105919003 +2012-11-02 20:00:00,3165.3489096573207 +2012-11-02 21:00:00,3049.5295950155764 +2012-11-02 22:00:00,2806.6791277258567 +2012-11-02 23:00:00,2258.828660436137 +2012-11-03 00:00:00,1843.2647975077882 +2012-11-03 01:00:00,1596.0965732087227 +2012-11-03 02:00:00,1506.2834890965732 +2012-11-03 03:00:00,1400.006230529595 +2012-11-03 04:00:00,1383.1246105919004 +2012-11-03 05:00:00,1403.9221183800623 +2012-11-03 06:00:00,1614.9190031152648 +2012-11-03 07:00:00,1799.2990654205607 +2012-11-03 08:00:00,1940.4610591900312 +2012-11-03 09:00:00,2324.8193146417448 +2012-11-03 10:00:00,2854.165109034268 +2012-11-03 11:00:00,3281.11214953271 +2012-11-03 12:00:00,3527.7757009345796 +2012-11-03 13:00:00,3296.663551401869 +2012-11-03 14:00:00,3260.8380062305296 +2012-11-03 15:00:00,3280.6043613707166 +2012-11-03 16:00:00,3337.006230529595 +2012-11-03 17:00:00,3415.2679127725855 +2012-11-03 18:00:00,3432.940809968847 +2012-11-03 19:00:00,3408.1806853582552 +2012-11-03 20:00:00,3247.9158878504672 +2012-11-03 21:00:00,3147.1183800623053 +2012-11-03 22:00:00,2879.663551401869 +2012-11-03 23:00:00,2273.6791277258567 +2012-11-04 00:00:00,1846.7881619937696 +2012-11-04 01:00:00,1568.943925233645 +2012-11-04 02:00:00,1520.9003115264798 +2012-11-04 03:00:00,1237.4922118380061 +2012-11-04 04:00:00,1339.526479750779 +2012-11-04 05:00:00,1345.526479750779 +2012-11-04 06:00:00,1529.1401869158879 +2012-11-04 07:00:00,1683.7133956386292 +2012-11-04 08:00:00,1829.2305295950155 +2012-11-04 09:00:00,2248.473520249221 +2012-11-04 10:00:00,2758.1806853582552 +2012-11-04 11:00:00,2913.2897196261683 +2012-11-04 12:00:00,2611.0996884735205 +2012-11-04 13:00:00,2684.4517133956388 +2012-11-04 14:00:00,2637.4330218068535 +2012-11-04 15:00:00,2652.6168224299067 +2012-11-04 16:00:00,2802.956386292835 +2012-11-04 17:00:00,2996.3769470404986 +2012-11-04 18:00:00,3080.9657320872275 +2012-11-04 19:00:00,3150.7819314641742 +2012-11-04 20:00:00,3073.7476635514017 +2012-11-04 21:00:00,2964.6510903426793 +2012-11-04 22:00:00,2672.4143302180687 +2012-11-04 23:00:00,1974.411214953271 +2012-11-05 00:00:00,1627.5732087227414 +2012-11-05 01:00:00,1398.8411214953271 +2012-11-05 02:00:00,1352.5295950155764 +2012-11-05 03:00:00,1305.8473520249222 +2012-11-05 04:00:00,1327.4579439252336 +2012-11-05 05:00:00,1346.582554517134 +2012-11-05 06:00:00,1517.127725856698 +2012-11-05 07:00:00,1735.8411214953271 +2012-11-05 08:00:00,1803.8940809968847 +2012-11-05 09:00:00,2209.06230529595 +2012-11-05 10:00:00,2659.7943925233644 +2012-11-05 11:00:00,2781.214953271028 +2012-11-05 12:00:00,2828.8504672897197 +2012-11-05 13:00:00,2806.4517133956388 +2012-11-05 14:00:00,2822.323987538941 +2012-11-05 15:00:00,2842.0716510903426 +2012-11-05 16:00:00,2889.9595015576324 +2012-11-05 17:00:00,2996.1028037383176 +2012-11-05 18:00:00,3080.495327102804 +2012-11-05 19:00:00,3088.8380062305296 +2012-11-05 20:00:00,3013.7320872274145 +2012-11-05 21:00:00,2927.043613707165 +2012-11-05 22:00:00,2674.510903426791 +2012-11-05 23:00:00,2038.018691588785 +2012-11-06 00:00:00,1633.4859813084113 +2012-11-06 01:00:00,1374.4828660436137 +2012-11-06 02:00:00,1320.127725856698 +2012-11-06 03:00:00,1275.993769470405 +2012-11-06 04:00:00,1298.0841121495328 +2012-11-06 05:00:00,1316.8411214953271 +2012-11-06 06:00:00,1498.202492211838 +2012-11-06 07:00:00,1698.1869158878505 +2012-11-06 08:00:00,1761.5327102803737 +2012-11-06 09:00:00,2165.7102803738317 +2012-11-06 10:00:00,2579.1931464174454 +2012-11-06 11:00:00,2697.841121495327 +2012-11-06 12:00:00,2732.2679127725855 +2012-11-06 13:00:00,2747.2897196261683 +2012-11-06 14:00:00,2725.3271028037384 +2012-11-06 15:00:00,3107.6573208722743 +2012-11-06 16:00:00,2918.246105919003 +2012-11-06 17:00:00,2885.292834890966 +2012-11-06 18:00:00,3159.461059190031 +2012-11-06 19:00:00,3153.06230529595 +2012-11-06 20:00:00,2997.822429906542 +2012-11-06 21:00:00,2903.6479750778817 +2012-11-06 22:00:00,2672.2616822429904 +2012-11-06 23:00:00,2026.8785046728972 +2012-11-07 00:00:00,1618.380062305296 +2012-11-07 01:00:00,1355.2305295950155 +2012-11-07 02:00:00,1309.1619937694704 +2012-11-07 03:00:00,1268.5420560747664 +2012-11-07 04:00:00,1268.0467289719627 +2012-11-07 05:00:00,1277.3707165109033 +2012-11-07 06:00:00,1465.0747663551401 +2012-11-07 07:00:00,1660.816199376947 +2012-11-07 08:00:00,1744.006230529595 +2012-11-07 09:00:00,2166.9065420560746 +2012-11-07 10:00:00,2580.6947040498444 +2012-11-07 11:00:00,2748.707165109034 +2012-11-07 12:00:00,2899.0218068535823 +2012-11-07 13:00:00,2928.308411214953 +2012-11-07 14:00:00,2883.1246105919004 +2012-11-07 15:00:00,2825.0342679127725 +2012-11-07 16:00:00,3003.6292834890965 +2012-11-07 17:00:00,3082.0934579439254 +2012-11-07 18:00:00,3249.1806853582552 +2012-11-07 19:00:00,3201.940809968847 +2012-11-07 20:00:00,3113.551401869159 +2012-11-07 21:00:00,3053.0 +2012-11-07 22:00:00,2761.171339563863 +2012-11-07 23:00:00,2093.697819314642 +2012-11-08 00:00:00,1655.834890965732 +2012-11-08 01:00:00,1385.0591900311526 +2012-11-08 02:00:00,1327.8660436137072 +2012-11-08 03:00:00,1281.4485981308412 +2012-11-08 04:00:00,1302.2741433021806 +2012-11-08 05:00:00,1332.7507788161993 +2012-11-08 06:00:00,1535.4392523364486 +2012-11-08 07:00:00,1705.9719626168223 +2012-11-08 08:00:00,1801.8816199376947 +2012-11-08 09:00:00,2218.7507788161993 +2012-11-08 10:00:00,2690.669781931464 +2012-11-08 11:00:00,2953.6479750778817 +2012-11-08 12:00:00,2948.2242990654204 +2012-11-08 13:00:00,2876.01246105919 +2012-11-08 14:00:00,2903.398753894081 +2012-11-08 15:00:00,2991.467289719626 +2012-11-08 16:00:00,2944.07476635514 +2012-11-08 17:00:00,2896.127725856698 +2012-11-08 18:00:00,3147.96261682243 +2012-11-08 19:00:00,3099.847352024922 +2012-11-08 20:00:00,3041.6230529595014 +2012-11-08 21:00:00,2944.246105919003 +2012-11-08 22:00:00,2644.0342679127725 +2012-11-08 23:00:00,2048.6666666666665 +2012-11-09 00:00:00,1641.7507788161993 +2012-11-09 01:00:00,1374.2959501557632 +2012-11-09 02:00:00,1319.6822429906542 +2012-11-09 03:00:00,1267.9345794392523 +2012-11-09 04:00:00,1274.1214953271028 +2012-11-09 05:00:00,1301.9470404984424 +2012-11-09 06:00:00,1483.993769470405 +2012-11-09 07:00:00,1686.0342679127725 +2012-11-09 08:00:00,1779.454828660436 +2012-11-09 09:00:00,2187.6822429906542 +2012-11-09 10:00:00,2598.8847352024923 +2012-11-09 11:00:00,2753.5825545171338 +2012-11-09 12:00:00,2814.557632398754 +2012-11-09 13:00:00,2783.214953271028 +2012-11-09 14:00:00,2775.878504672897 +2012-11-09 15:00:00,3002.735202492212 +2012-11-09 16:00:00,3054.956386292835 +2012-11-09 17:00:00,2934.0342679127725 +2012-11-09 18:00:00,3216.7320872274145 +2012-11-09 19:00:00,3167.239875389408 +2012-11-09 20:00:00,3088.11214953271 +2012-11-09 21:00:00,3011.2523364485983 +2012-11-09 22:00:00,2798.0093457943926 +2012-11-09 23:00:00,2213.239875389408 +2012-11-10 00:00:00,1782.8317757009345 +2012-11-10 01:00:00,1508.1308411214952 +2012-11-10 02:00:00,1418.3271028037384 +2012-11-10 03:00:00,1303.2429906542056 +2012-11-10 04:00:00,1267.9221183800623 +2012-11-10 05:00:00,1290.9314641744547 +2012-11-10 06:00:00,1502.0280373831777 +2012-11-10 07:00:00,1688.2305295950155 +2012-11-10 08:00:00,1770.018691588785 +2012-11-10 09:00:00,2193.828660436137 +2012-11-10 10:00:00,2645.2118380062307 +2012-11-10 11:00:00,2858.4704049844236 +2012-11-10 12:00:00,2887.4828660436137 +2012-11-10 13:00:00,2856.361370716511 +2012-11-10 14:00:00,2824.2585669781934 +2012-11-10 15:00:00,2879.834890965732 +2012-11-10 16:00:00,2904.638629283489 +2012-11-10 17:00:00,2937.8068535825546 +2012-11-10 18:00:00,3152.685358255452 +2012-11-10 19:00:00,3140.479750778816 +2012-11-10 20:00:00,3045.121495327103 +2012-11-10 21:00:00,2949.0934579439254 +2012-11-10 22:00:00,2701.1993769470405 +2012-11-10 23:00:00,2181.1152647975077 +2012-11-11 00:00:00,1743.5607476635514 +2012-11-11 01:00:00,1465.638629283489 +2012-11-11 02:00:00,1399.2087227414331 +2012-11-11 03:00:00,1316.778816199377 +2012-11-11 04:00:00,1232.1619937694704 +2012-11-11 05:00:00,1257.2305295950155 +2012-11-11 06:00:00,1436.576323987539 +2012-11-11 07:00:00,1619.2897196261683 +2012-11-11 08:00:00,1668.0747663551401 +2012-11-11 09:00:00,2131.919003115265 +2012-11-11 10:00:00,2543.052959501558 +2012-11-11 11:00:00,2708.152647975078 +2012-11-11 12:00:00,2739.8909657320874 +2012-11-11 13:00:00,2681.856697819315 +2012-11-11 14:00:00,2663.2429906542056 +2012-11-11 15:00:00,2680.2118380062307 +2012-11-11 16:00:00,2685.0654205607475 +2012-11-11 17:00:00,2774.8847352024923 +2012-11-11 18:00:00,2926.0280373831774 +2012-11-11 19:00:00,2884.504672897196 +2012-11-11 20:00:00,2822.7476635514017 +2012-11-11 21:00:00,2707.563862928349 +2012-11-11 22:00:00,2450.457943925234 +2012-11-11 23:00:00,1890.2461059190032 +2012-11-12 00:00:00,1550.01246105919 +2012-11-12 01:00:00,1317.2897196261683 +2012-11-12 02:00:00,1265.968847352025 +2012-11-12 03:00:00,1235.3333333333333 +2012-11-12 04:00:00,1257.3457943925234 +2012-11-12 05:00:00,1279.8909657320871 +2012-11-12 06:00:00,1428.6853582554518 +2012-11-12 07:00:00,1635.8193146417445 +2012-11-12 08:00:00,1715.1433021806854 +2012-11-12 09:00:00,2119.404984423676 +2012-11-12 10:00:00,2505.105919003115 +2012-11-12 11:00:00,2610.6292834890965 +2012-11-12 12:00:00,2648.3800623052957 +2012-11-12 13:00:00,2719.4828660436137 +2012-11-12 14:00:00,2694.9844236760123 +2012-11-12 15:00:00,2716.8255451713394 +2012-11-12 16:00:00,2727.4330218068535 +2012-11-12 17:00:00,2808.7476635514017 +2012-11-12 18:00:00,2998.96261682243 +2012-11-12 19:00:00,3007.6292834890965 +2012-11-12 20:00:00,2931.676012461059 +2012-11-12 21:00:00,2825.171339563863 +2012-11-12 22:00:00,2550.8317757009345 +2012-11-12 23:00:00,2009.7009345794393 +2012-11-13 00:00:00,1623.1339563862928 +2012-11-13 01:00:00,1362.9408099688474 +2012-11-13 02:00:00,1296.271028037383 +2012-11-13 03:00:00,1237.423676012461 +2012-11-13 04:00:00,1251.6697819314643 +2012-11-13 05:00:00,1279.0716510903426 +2012-11-13 06:00:00,1448.2492211838007 +2012-11-13 07:00:00,1659.803738317757 +2012-11-13 08:00:00,1746.0404984423676 +2012-11-13 09:00:00,2145.190031152648 +2012-11-13 10:00:00,2543.3644859813085 +2012-11-13 11:00:00,2612.461059190031 +2012-11-13 12:00:00,2817.9221183800623 +2012-11-13 13:00:00,2834.208722741433 +2012-11-13 14:00:00,2530.828660436137 +2012-11-13 15:00:00,2874.5295950155764 +2012-11-13 16:00:00,2796.685358255452 +2012-11-13 17:00:00,2787.5015576323985 +2012-11-13 18:00:00,3010.1183800623053 +2012-11-13 19:00:00,2984.479750778816 +2012-11-13 20:00:00,2893.4984423676015 +2012-11-13 21:00:00,2782.461059190031 +2012-11-13 22:00:00,2562.803738317757 +2012-11-13 23:00:00,2052.473520249221 +2012-11-14 00:00:00,1607.8909657320871 +2012-11-14 01:00:00,1371.2897196261683 +2012-11-14 02:00:00,1312.436137071651 +2012-11-14 03:00:00,1266.0872274143303 +2012-11-14 04:00:00,1272.7819314641745 +2012-11-14 05:00:00,1285.5171339563863 +2012-11-14 06:00:00,1472.367601246106 +2012-11-14 07:00:00,1667.4610591900312 +2012-11-14 08:00:00,1750.5607476635514 +2012-11-14 09:00:00,2136.4454828660437 +2012-11-14 10:00:00,2703.0872274143303 +2012-11-14 11:00:00,2603.3894080996884 +2012-11-14 12:00:00,2787.2959501557634 +2012-11-14 13:00:00,2727.171339563863 +2012-11-14 14:00:00,2762.2429906542056 +2012-11-14 15:00:00,2754.4548286604363 +2012-11-14 16:00:00,2819.5140186915887 +2012-11-14 17:00:00,2890.3208722741433 +2012-11-14 18:00:00,3113.489096573209 +2012-11-14 19:00:00,3133.98753894081 +2012-11-14 20:00:00,3014.0841121495328 +2012-11-14 21:00:00,2907.9158878504672 +2012-11-14 22:00:00,2627.7694704049845 +2012-11-14 23:00:00,2071.1744548286606 +2012-11-15 00:00:00,1656.196261682243 +2012-11-15 01:00:00,1404.0872274143303 +2012-11-15 02:00:00,1352.056074766355 +2012-11-15 03:00:00,1290.4953271028037 +2012-11-15 04:00:00,1302.3831775700935 +2012-11-15 05:00:00,1318.98753894081 +2012-11-15 06:00:00,1493.6292834890967 +2012-11-15 07:00:00,1694.8940809968847 +2012-11-15 08:00:00,1796.8753894080996 +2012-11-15 09:00:00,2221.3426791277257 +2012-11-15 10:00:00,2635.7757009345796 +2012-11-15 11:00:00,2980.9781931464177 +2012-11-15 12:00:00,3061.956386292835 +2012-11-15 13:00:00,2920.7694704049845 +2012-11-15 14:00:00,2875.4080996884736 +2012-11-15 15:00:00,2860.956386292835 +2012-11-15 16:00:00,2897.3177570093458 +2012-11-15 17:00:00,2965.872274143302 +2012-11-15 18:00:00,3131.0872274143303 +2012-11-15 19:00:00,3154.1806853582552 +2012-11-15 20:00:00,3055.2367601246106 +2012-11-15 21:00:00,2925.0 +2012-11-15 22:00:00,2668.3800623052957 +2012-11-15 23:00:00,2103.8691588785045 +2012-11-16 00:00:00,1686.4579439252336 +2012-11-16 01:00:00,1435.2492211838007 +2012-11-16 02:00:00,1379.981308411215 +2012-11-16 03:00:00,1326.8691588785048 +2012-11-16 04:00:00,1341.7102803738317 +2012-11-16 05:00:00,1367.411214953271 +2012-11-16 06:00:00,1541.006230529595 +2012-11-16 07:00:00,1776.5732087227414 +2012-11-16 08:00:00,1862.2647975077882 +2012-11-16 09:00:00,2267.0996884735205 +2012-11-16 10:00:00,2712.5171339563863 +2012-11-16 11:00:00,2844.165109034268 +2012-11-16 12:00:00,2921.345794392523 +2012-11-16 13:00:00,2928.133956386293 +2012-11-16 14:00:00,2778.423676012461 +2012-11-16 15:00:00,2822.557632398754 +2012-11-16 16:00:00,2878.152647975078 +2012-11-16 17:00:00,2804.299065420561 +2012-11-16 18:00:00,2928.1370716510905 +2012-11-16 19:00:00,2917.5981308411215 +2012-11-16 20:00:00,2841.02492211838 +2012-11-16 21:00:00,2733.7414330218066 +2012-11-16 22:00:00,2559.4984423676015 +2012-11-16 23:00:00,2194.7943925233644 +2012-11-17 00:00:00,1803.0996884735202 +2012-11-17 01:00:00,1552.9968847352025 +2012-11-17 02:00:00,1467.2585669781931 +2012-11-17 03:00:00,1359.3738317757009 +2012-11-17 04:00:00,1322.0591900311526 +2012-11-17 05:00:00,1350.2834890965732 +2012-11-17 06:00:00,1538.96261682243 +2012-11-17 07:00:00,1778.0747663551401 +2012-11-17 08:00:00,1811.3831775700935 +2012-11-17 09:00:00,2198.2803738317757 +2012-11-17 10:00:00,2620.7757009345796 +2012-11-17 11:00:00,2735.436137071651 +2012-11-17 12:00:00,2805.872274143302 +2012-11-17 13:00:00,2786.3333333333335 +2012-11-17 14:00:00,2867.495327102804 +2012-11-17 15:00:00,3101.9532710280373 +2012-11-17 16:00:00,2918.3395638629286 +2012-11-17 17:00:00,3073.07476635514 +2012-11-17 18:00:00,3165.0716510903426 +2012-11-17 19:00:00,3148.6666666666665 +2012-11-17 20:00:00,3089.8598130841124 +2012-11-17 21:00:00,2957.6199376947043 +2012-11-17 22:00:00,2727.5669781931465 +2012-11-17 23:00:00,2198.190031152648 +2012-11-18 00:00:00,1775.8193146417445 +2012-11-18 01:00:00,1500.7258566978194 +2012-11-18 02:00:00,1438.1339563862928 +2012-11-18 03:00:00,1361.0872274143303 +2012-11-18 04:00:00,1270.3769470404984 +2012-11-18 05:00:00,1286.0778816199377 +2012-11-18 06:00:00,1453.607476635514 +2012-11-18 07:00:00,1618.7071651090343 +2012-11-18 08:00:00,1681.367601246106 +2012-11-18 09:00:00,2098.7258566978194 +2012-11-18 10:00:00,2487.2305295950155 +2012-11-18 11:00:00,2703.0467289719627 +2012-11-18 12:00:00,2703.601246105919 +2012-11-18 13:00:00,2689.7881619937693 +2012-11-18 14:00:00,2674.1993769470405 +2012-11-18 15:00:00,2680.7570093457944 +2012-11-18 16:00:00,2710.1183800623053 +2012-11-18 17:00:00,2872.1682242990655 +2012-11-18 18:00:00,3223.6822429906542 +2012-11-18 19:00:00,3007.8753894080996 +2012-11-18 20:00:00,2954.467289719626 +2012-11-18 21:00:00,2872.183800623053 +2012-11-18 22:00:00,2542.0218068535823 +2012-11-18 23:00:00,1920.4922118380061 +2012-11-19 00:00:00,1575.1588785046729 +2012-11-19 01:00:00,1326.0404984423676 +2012-11-19 02:00:00,1280.1308411214952 +2012-11-19 03:00:00,1242.595015576324 +2012-11-19 04:00:00,1245.6230529595016 +2012-11-19 05:00:00,1282.177570093458 +2012-11-19 06:00:00,1475.7320872274142 +2012-11-19 07:00:00,1656.1370716510903 +2012-11-19 08:00:00,1747.5856697819315 +2012-11-19 09:00:00,2143.2834890965732 +2012-11-19 10:00:00,2564.5732087227416 +2012-11-19 11:00:00,2718.495327102804 +2012-11-19 12:00:00,2800.510903426791 +2012-11-19 13:00:00,2788.0934579439254 +2012-11-19 14:00:00,2781.3115264797507 +2012-11-19 15:00:00,2800.7165109034268 +2012-11-19 16:00:00,2809.4548286604363 +2012-11-19 17:00:00,2904.5669781931465 +2012-11-19 18:00:00,3069.165109034268 +2012-11-19 19:00:00,3094.5732087227416 +2012-11-19 20:00:00,2994.9127725856697 +2012-11-19 21:00:00,2860.0342679127725 +2012-11-19 22:00:00,2634.713395638629 +2012-11-19 23:00:00,2070.2616822429904 +2012-11-20 00:00:00,1676.9657320872275 +2012-11-20 01:00:00,1431.9221183800623 +2012-11-20 02:00:00,1361.056074766355 +2012-11-20 03:00:00,1302.6168224299065 +2012-11-20 04:00:00,1285.6604361370717 +2012-11-20 05:00:00,1337.4828660436137 +2012-11-20 06:00:00,1511.2897196261683 +2012-11-20 07:00:00,1735.6978193146417 +2012-11-20 08:00:00,1793.1744548286604 +2012-11-20 09:00:00,2193.4205607476633 +2012-11-20 10:00:00,2666.233644859813 +2012-11-20 11:00:00,2749.7507788161993 +2012-11-20 12:00:00,2835.700934579439 +2012-11-20 13:00:00,2842.778816199377 +2012-11-20 14:00:00,2799.785046728972 +2012-11-20 15:00:00,2791.9844236760123 +2012-11-20 16:00:00,2808.1619937694704 +2012-11-20 17:00:00,2964.1682242990655 +2012-11-20 18:00:00,3146.373831775701 +2012-11-20 19:00:00,3088.373831775701 +2012-11-20 20:00:00,3009.2242990654204 +2012-11-20 21:00:00,2930.190031152648 +2012-11-20 22:00:00,2682.2305295950155 +2012-11-20 23:00:00,2088.6417445482866 +2012-11-21 00:00:00,1673.3146417445482 +2012-11-21 01:00:00,1420.9127725856697 +2012-11-21 02:00:00,1340.7102803738317 +2012-11-21 03:00:00,1269.0093457943926 +2012-11-21 04:00:00,1287.233644859813 +2012-11-21 05:00:00,1320.5607476635514 +2012-11-21 06:00:00,1496.2959501557632 +2012-11-21 07:00:00,1713.473520249221 +2012-11-21 08:00:00,1780.6261682242991 +2012-11-21 09:00:00,2170.9813084112147 +2012-11-21 10:00:00,2599.8847352024923 +2012-11-21 11:00:00,2693.878504672897 +2012-11-21 12:00:00,2747.4517133956388 +2012-11-21 13:00:00,2727.532710280374 +2012-11-21 14:00:00,2734.8193146417448 +2012-11-21 15:00:00,2762.6292834890965 +2012-11-21 16:00:00,2763.626168224299 +2012-11-21 17:00:00,2834.669781931464 +2012-11-21 18:00:00,3073.2834890965732 +2012-11-21 19:00:00,3050.227414330218 +2012-11-21 20:00:00,2972.314641744548 +2012-11-21 21:00:00,2825.5856697819313 +2012-11-21 22:00:00,2586.3800623052957 +2012-11-21 23:00:00,2002.0965732087227 +2012-11-22 00:00:00,1614.1370716510903 +2012-11-22 01:00:00,1365.981308411215 +2012-11-22 02:00:00,1308.1152647975077 +2012-11-22 03:00:00,1251.3738317757009 +2012-11-22 04:00:00,1267.9314641744547 +2012-11-22 05:00:00,1296.380062305296 +2012-11-22 06:00:00,1461.6884735202493 +2012-11-22 07:00:00,1660.9750778816199 +2012-11-22 08:00:00,1747.1713395638628 +2012-11-22 09:00:00,2150.133956386293 +2012-11-22 10:00:00,2542.336448598131 +2012-11-22 11:00:00,2688.760124610592 +2012-11-22 12:00:00,2720.9221183800623 +2012-11-22 13:00:00,2706.4080996884736 +2012-11-22 14:00:00,2724.638629283489 +2012-11-22 15:00:00,2743.607476635514 +2012-11-22 16:00:00,2820.121495327103 +2012-11-22 17:00:00,2851.2056074766356 +2012-11-22 18:00:00,3093.760124610592 +2012-11-22 19:00:00,3036.0841121495328 +2012-11-22 20:00:00,2974.3956386292834 +2012-11-22 21:00:00,2875.1308411214955 +2012-11-22 22:00:00,2588.367601246106 +2012-11-22 23:00:00,2009.3333333333333 +2012-11-23 00:00:00,1601.8504672897195 +2012-11-23 01:00:00,1355.6292834890967 +2012-11-23 02:00:00,1298.473520249221 +2012-11-23 03:00:00,1252.5389408099688 +2012-11-23 04:00:00,1257.386292834891 +2012-11-23 05:00:00,1305.657320872274 +2012-11-23 06:00:00,1506.9470404984424 +2012-11-23 07:00:00,1706.7227414330218 +2012-11-23 08:00:00,1795.3146417445482 +2012-11-23 09:00:00,2198.735202492212 +2012-11-23 10:00:00,2596.1557632398753 +2012-11-23 11:00:00,2736.4267912772584 +2012-11-23 12:00:00,2784.6884735202493 +2012-11-23 13:00:00,2760.3520249221183 +2012-11-23 14:00:00,2808.3208722741433 +2012-11-23 15:00:00,2814.3520249221183 +2012-11-23 16:00:00,2881.632398753894 +2012-11-23 17:00:00,2964.479750778816 +2012-11-23 18:00:00,3166.336448598131 +2012-11-23 19:00:00,3149.878504672897 +2012-11-23 20:00:00,3089.97507788162 +2012-11-23 21:00:00,3008.92523364486 +2012-11-23 22:00:00,2836.563862928349 +2012-11-23 23:00:00,2253.3800623052957 +2012-11-24 00:00:00,1816.1495327102805 +2012-11-24 01:00:00,1523.1246105919004 +2012-11-24 02:00:00,1440.2647975077882 +2012-11-24 03:00:00,1315.8130841121495 +2012-11-24 04:00:00,1289.2087227414331 +2012-11-24 05:00:00,1329.0155763239875 +2012-11-24 06:00:00,1504.0031152647975 +2012-11-24 07:00:00,1740.1931464174454 +2012-11-24 08:00:00,1820.3115264797507 +2012-11-24 09:00:00,2295.4392523364486 +2012-11-24 10:00:00,2739.221183800623 +2012-11-24 11:00:00,2896.8130841121497 +2012-11-24 12:00:00,2994.227414330218 +2012-11-24 13:00:00,2934.3582554517134 +2012-11-24 14:00:00,2949.3115264797507 +2012-11-24 15:00:00,2920.700934579439 +2012-11-24 16:00:00,2985.92523364486 +2012-11-24 17:00:00,3152.208722741433 +2012-11-24 18:00:00,3226.0841121495328 +2012-11-24 19:00:00,3255.7258566978194 +2012-11-24 20:00:00,3137.803738317757 +2012-11-24 21:00:00,3060.7632398753894 +2012-11-24 22:00:00,2851.3707165109035 +2012-11-24 23:00:00,2240.93769470405 +2012-11-25 00:00:00,1789.4579439252336 +2012-11-25 01:00:00,1516.8099688473521 +2012-11-25 02:00:00,1449.1806853582555 +2012-11-25 03:00:00,1368.9532710280373 +2012-11-25 04:00:00,1276.271028037383 +2012-11-25 05:00:00,1290.1246105919004 +2012-11-25 06:00:00,1460.3115264797507 +2012-11-25 07:00:00,1699.6915887850466 +2012-11-25 08:00:00,1733.7414330218069 +2012-11-25 09:00:00,2262.8130841121497 +2012-11-25 10:00:00,2733.1806853582552 +2012-11-25 11:00:00,2889.685358255452 +2012-11-25 12:00:00,2904.255451713396 +2012-11-25 13:00:00,2944.8535825545173 +2012-11-25 14:00:00,2892.9595015576324 +2012-11-25 15:00:00,2901.9003115264795 +2012-11-25 16:00:00,3000.2897196261683 +2012-11-25 17:00:00,3112.6199376947043 +2012-11-25 18:00:00,3187.6510903426793 +2012-11-25 19:00:00,3149.031152647975 +2012-11-25 20:00:00,3033.2118380062307 +2012-11-25 21:00:00,2999.031152647975 +2012-11-25 22:00:00,2691.9595015576324 +2012-11-25 23:00:00,1954.3084112149534 +2012-11-26 00:00:00,1570.1931464174454 +2012-11-26 01:00:00,1309.1028037383178 +2012-11-26 02:00:00,1273.0342679127725 +2012-11-26 03:00:00,1231.3239875389409 +2012-11-26 04:00:00,1246.7196261682243 +2012-11-26 05:00:00,1300.7632398753894 +2012-11-26 06:00:00,1455.0093457943926 +2012-11-26 07:00:00,1675.7196261682243 +2012-11-26 08:00:00,1782.9719626168223 +2012-11-26 09:00:00,2151.4174454828662 +2012-11-26 10:00:00,2645.5171339563863 +2012-11-26 11:00:00,2728.0186915887853 +2012-11-26 12:00:00,2752.158878504673 +2012-11-26 13:00:00,2739.2959501557634 +2012-11-26 14:00:00,2695.88785046729 +2012-11-26 15:00:00,2712.6105919003116 +2012-11-26 16:00:00,2757.355140186916 +2012-11-26 17:00:00,2891.0186915887853 +2012-11-26 18:00:00,3038.9844236760123 +2012-11-26 19:00:00,3008.919003115265 +2012-11-26 20:00:00,2917.7476635514017 +2012-11-26 21:00:00,2823.88785046729 +2012-11-26 22:00:00,2563.2803738317757 +2012-11-26 23:00:00,2018.3115264797507 +2012-11-27 00:00:00,1600.8130841121495 +2012-11-27 01:00:00,1331.4859813084113 +2012-11-27 02:00:00,1302.1214953271028 +2012-11-27 03:00:00,1237.6760124610591 +2012-11-27 04:00:00,1236.6292834890967 +2012-11-27 05:00:00,1264.6355140186915 +2012-11-27 06:00:00,1438.4672897196263 +2012-11-27 07:00:00,1648.3894080996886 +2012-11-27 08:00:00,1740.2274143302182 +2012-11-27 09:00:00,2137.0093457943926 +2012-11-27 10:00:00,2561.4704049844236 +2012-11-27 11:00:00,2643.8909657320874 +2012-11-27 12:00:00,2729.6728971962616 +2012-11-27 13:00:00,2712.2367601246106 +2012-11-27 14:00:00,2704.489096573209 +2012-11-27 15:00:00,2662.158878504673 +2012-11-27 16:00:00,2727.4766355140187 +2012-11-27 17:00:00,2815.0996884735205 +2012-11-27 18:00:00,3041.5794392523367 +2012-11-27 19:00:00,2994.404984423676 +2012-11-27 20:00:00,2921.7507788161993 +2012-11-27 21:00:00,2819.1869158878503 +2012-11-27 22:00:00,2569.9065420560746 +2012-11-27 23:00:00,2059.8629283489095 +2012-11-28 00:00:00,1657.797507788162 +2012-11-28 01:00:00,1391.8660436137072 +2012-11-28 02:00:00,1306.4859813084113 +2012-11-28 03:00:00,1244.1246105919004 +2012-11-28 04:00:00,1255.056074766355 +2012-11-28 05:00:00,1273.8380062305296 +2012-11-28 06:00:00,1438.3644859813085 +2012-11-28 07:00:00,1681.3582554517134 +2012-11-28 08:00:00,1748.183800623053 +2012-11-28 09:00:00,2152.557632398754 +2012-11-28 10:00:00,2529.8193146417448 +2012-11-28 11:00:00,2629.0467289719627 +2012-11-28 12:00:00,2709.6355140186915 +2012-11-28 13:00:00,2730.246105919003 +2012-11-28 14:00:00,2690.479750778816 +2012-11-28 15:00:00,2680.7819314641742 +2012-11-28 16:00:00,2739.4454828660437 +2012-11-28 17:00:00,2800.9813084112147 +2012-11-28 18:00:00,3039.3956386292834 +2012-11-28 19:00:00,3009.1557632398753 +2012-11-28 20:00:00,2921.1370716510905 +2012-11-28 21:00:00,2797.5825545171338 +2012-11-28 22:00:00,2540.323987538941 +2012-11-28 23:00:00,2014.9003115264798 +2012-11-29 00:00:00,1617.968847352025 +2012-11-29 01:00:00,1366.619937694704 +2012-11-29 02:00:00,1278.1308411214952 +2012-11-29 03:00:00,1237.0965732087227 +2012-11-29 04:00:00,1248.03738317757 +2012-11-29 05:00:00,1260.9158878504672 +2012-11-29 06:00:00,1478.2897196261683 +2012-11-29 07:00:00,1669.4641744548287 +2012-11-29 08:00:00,1750.1028037383178 +2012-11-29 09:00:00,2156.6791277258567 +2012-11-29 10:00:00,2523.2679127725855 +2012-11-29 11:00:00,2617.626168224299 +2012-11-29 12:00:00,2650.0031152647975 +2012-11-29 13:00:00,2680.330218068536 +2012-11-29 14:00:00,2701.753894080997 +2012-11-29 15:00:00,2644.2367601246106 +2012-11-29 16:00:00,2722.551401869159 +2012-11-29 17:00:00,2811.6947040498444 +2012-11-29 18:00:00,3043.361370716511 +2012-11-29 19:00:00,3030.143302180685 +2012-11-29 20:00:00,2923.1401869158876 +2012-11-29 21:00:00,2822.504672897196 +2012-11-29 22:00:00,2570.772585669782 +2012-11-29 23:00:00,2023.1152647975077 +2012-11-30 00:00:00,1628.1401869158879 +2012-11-30 01:00:00,1378.0778816199377 +2012-11-30 02:00:00,1311.0249221183801 +2012-11-30 03:00:00,1236.7414330218069 +2012-11-30 04:00:00,1244.9345794392523 +2012-11-30 05:00:00,1265.5202492211838 +2012-11-30 06:00:00,1463.4984423676012 +2012-11-30 07:00:00,1684.834890965732 +2012-11-30 08:00:00,1801.3239875389409 +2012-11-30 09:00:00,2213.7819314641742 +2012-11-30 10:00:00,2588.557632398754 +2012-11-30 11:00:00,2704.461059190031 +2012-11-30 12:00:00,2727.956386292835 +2012-11-30 13:00:00,2691.3395638629286 +2012-11-30 14:00:00,2731.772585669782 +2012-11-30 15:00:00,2670.2741433021806 +2012-11-30 16:00:00,2773.7258566978194 +2012-11-30 17:00:00,2878.190031152648 +2012-11-30 18:00:00,3035.8847352024923 +2012-11-30 19:00:00,3051.7040498442366 +2012-11-30 20:00:00,2922.7694704049845 +2012-11-30 21:00:00,2830.302180685358 +2012-11-30 22:00:00,2623.0841121495328 +2012-11-30 23:00:00,2156.8629283489095 +2012-12-01 00:00:00,1741.018691588785 +2012-12-01 01:00:00,1463.5607476635514 +2012-12-01 02:00:00,1363.361370716511 +2012-12-01 03:00:00,1256.0218068535826 +2012-12-01 04:00:00,1226.6947040498442 +2012-12-01 05:00:00,1245.4641744548287 +2012-12-01 06:00:00,1433.0934579439252 +2012-12-01 07:00:00,1643.3831775700935 +2012-12-01 08:00:00,1728.7570093457944 +2012-12-01 09:00:00,2169.8691588785045 +2012-12-01 10:00:00,2555.9158878504672 +2012-12-01 11:00:00,2682.803738317757 +2012-12-01 12:00:00,2683.9158878504672 +2012-12-01 13:00:00,2718.6884735202493 +2012-12-01 14:00:00,2721.3582554517134 +2012-12-01 15:00:00,2677.0996884735205 +2012-12-01 16:00:00,2795.1993769470405 +2012-12-01 17:00:00,2881.3800623052957 +2012-12-01 18:00:00,3076.663551401869 +2012-12-01 19:00:00,3022.4766355140187 +2012-12-01 20:00:00,2905.299065420561 +2012-12-01 21:00:00,2858.386292834891 +2012-12-01 22:00:00,2631.07476635514 +2012-12-01 23:00:00,2134.3489096573207 +2012-12-02 00:00:00,1707.9158878504672 +2012-12-02 01:00:00,1406.0591900311526 +2012-12-02 02:00:00,1325.5389408099688 +2012-12-02 03:00:00,1252.96261682243 +2012-12-02 04:00:00,1177.423676012461 +2012-12-02 05:00:00,1224.7912772585669 +2012-12-02 06:00:00,1392.7009345794393 +2012-12-02 07:00:00,1604.0467289719627 +2012-12-02 08:00:00,1661.8130841121495 +2012-12-02 09:00:00,2121.9595015576324 +2012-12-02 10:00:00,2518.386292834891 +2012-12-02 11:00:00,2680.0218068535823 +2012-12-02 12:00:00,2690.7881619937693 +2012-12-02 13:00:00,2690.919003115265 +2012-12-02 14:00:00,2673.4205607476633 +2012-12-02 15:00:00,2710.7757009345796 +2012-12-02 16:00:00,2711.6510903426793 +2012-12-02 17:00:00,2829.4548286604363 +2012-12-02 18:00:00,2934.495327102804 +2012-12-02 19:00:00,2903.96261682243 +2012-12-02 20:00:00,2797.3115264797507 +2012-12-02 21:00:00,2720.6043613707166 +2012-12-02 22:00:00,2437.919003115265 +2012-12-02 23:00:00,1886.2647975077882 +2012-12-03 00:00:00,1531.2180685358255 +2012-12-03 01:00:00,1300.6728971962616 +2012-12-03 02:00:00,1230.619937694704 +2012-12-03 03:00:00,1187.563862928349 +2012-12-03 04:00:00,1200.0685358255453 +2012-12-03 05:00:00,1220.4205607476636 +2012-12-03 06:00:00,1400.4579439252336 +2012-12-03 07:00:00,1610.3364485981308 +2012-12-03 08:00:00,1710.1713395638628 +2012-12-03 09:00:00,2150.7476635514017 +2012-12-03 10:00:00,2601.227414330218 +2012-12-03 11:00:00,2685.4454828660437 +2012-12-03 12:00:00,2721.227414330218 +2012-12-03 13:00:00,2759.5482866043612 +2012-12-03 14:00:00,2734.4828660436137 +2012-12-03 15:00:00,2776.1246105919004 +2012-12-03 16:00:00,2779.3894080996884 +2012-12-03 17:00:00,2918.9127725856697 +2012-12-03 18:00:00,3080.6510903426793 +2012-12-03 19:00:00,3005.436137071651 +2012-12-03 20:00:00,2972.2585669781934 +2012-12-03 21:00:00,2835.127725856698 +2012-12-03 22:00:00,2654.2741433021806 +2012-12-03 23:00:00,2057.2367601246106 +2012-12-04 00:00:00,1641.1339563862928 +2012-12-04 01:00:00,1384.595015576324 +2012-12-04 02:00:00,1313.6760124610591 +2012-12-04 03:00:00,1266.214953271028 +2012-12-04 04:00:00,1286.2866043613708 +2012-12-04 05:00:00,1314.361370716511 +2012-12-04 06:00:00,1483.526479750779 +2012-12-04 07:00:00,1709.127725856698 +2012-12-04 08:00:00,1792.6822429906542 +2012-12-04 09:00:00,2216.4766355140187 +2012-12-04 10:00:00,2617.202492211838 +2012-12-04 11:00:00,2685.436137071651 +2012-12-04 12:00:00,2766.6479750778817 +2012-12-04 13:00:00,2716.557632398754 +2012-12-04 14:00:00,2754.803738317757 +2012-12-04 15:00:00,2800.361370716511 +2012-12-04 16:00:00,2782.5015576323985 +2012-12-04 17:00:00,2903.386292834891 +2012-12-04 18:00:00,3065.7943925233644 +2012-12-04 19:00:00,3049.856697819315 +2012-12-04 20:00:00,2983.0280373831774 +2012-12-04 21:00:00,2832.3707165109035 +2012-12-04 22:00:00,2655.090342679128 +2012-12-04 23:00:00,2027.3208722741433 +2012-12-05 00:00:00,1576.2897196261683 +2012-12-05 01:00:00,1311.2647975077882 +2012-12-05 02:00:00,1306.8006230529595 +2012-12-05 03:00:00,1287.8940809968847 +2012-12-05 04:00:00,1282.2928348909657 +2012-12-05 05:00:00,1323.1744548286604 +2012-12-05 06:00:00,1518.1433021806854 +2012-12-05 07:00:00,1713.3115264797507 +2012-12-05 08:00:00,1820.4299065420562 +2012-12-05 09:00:00,2240.1401869158876 +2012-12-05 10:00:00,2630.299065420561 +2012-12-05 11:00:00,2671.2367601246106 +2012-12-05 12:00:00,2777.461059190031 +2012-12-05 13:00:00,2764.0716510903426 +2012-12-05 14:00:00,2686.330218068536 +2012-12-05 15:00:00,2744.7881619937693 +2012-12-05 16:00:00,2721.2834890965732 +2012-12-05 17:00:00,2948.367601246106 +2012-12-05 18:00:00,3094.3489096573207 +2012-12-05 19:00:00,3039.3426791277257 +2012-12-05 20:00:00,3001.4828660436137 +2012-12-05 21:00:00,2849.345794392523 +2012-12-05 22:00:00,2623.4330218068535 +2012-12-05 23:00:00,2050.336448598131 +2012-12-06 00:00:00,1633.0249221183801 +2012-12-06 01:00:00,1359.834890965732 +2012-12-06 02:00:00,1316.7570093457944 +2012-12-06 03:00:00,1267.4423676012461 +2012-12-06 04:00:00,1271.1993769470405 +2012-12-06 05:00:00,1309.1526479750778 +2012-12-06 06:00:00,1484.1059190031153 +2012-12-06 07:00:00,1725.3551401869158 +2012-12-06 08:00:00,1837.8629283489097 +2012-12-06 09:00:00,2247.286604361371 +2012-12-06 10:00:00,2641.006230529595 +2012-12-06 11:00:00,2692.0841121495328 +2012-12-06 12:00:00,2848.744548286604 +2012-12-06 13:00:00,2820.772585669782 +2012-12-06 14:00:00,2766.7632398753894 +2012-12-06 15:00:00,2844.4018691588785 +2012-12-06 16:00:00,2813.669781931464 +2012-12-06 17:00:00,3073.9532710280373 +2012-12-06 18:00:00,3130.336448598131 +2012-12-06 19:00:00,3079.152647975078 +2012-12-06 20:00:00,3016.878504672897 +2012-12-06 21:00:00,2875.644859813084 +2012-12-06 22:00:00,2646.059190031153 +2012-12-06 23:00:00,2039.5140186915887 +2012-12-07 00:00:00,1639.5109034267912 +2012-12-07 01:00:00,1365.5981308411215 +2012-12-07 02:00:00,1330.7227414330218 +2012-12-07 03:00:00,1284.2585669781931 +2012-12-07 04:00:00,1307.5919003115264 +2012-12-07 05:00:00,1314.6822429906542 +2012-12-07 06:00:00,1509.8940809968847 +2012-12-07 07:00:00,1726.1931464174454 +2012-12-07 08:00:00,1852.0031152647975 +2012-12-07 09:00:00,2265.638629283489 +2012-12-07 10:00:00,2657.947040498442 +2012-12-07 11:00:00,2754.1744548286606 +2012-12-07 12:00:00,2842.090342679128 +2012-12-07 13:00:00,2830.2959501557634 +2012-12-07 14:00:00,2826.778816199377 +2012-12-07 15:00:00,2854.700934579439 +2012-12-07 16:00:00,2861.3052959501556 +2012-12-07 17:00:00,3044.878504672897 +2012-12-07 18:00:00,3173.479750778816 +2012-12-07 19:00:00,3144.9657320872275 +2012-12-07 20:00:00,3108.11214953271 +2012-12-07 21:00:00,2947.0716510903426 +2012-12-07 22:00:00,2733.5077881619936 +2012-12-07 23:00:00,2211.461059190031 +2012-12-08 00:00:00,1795.0685358255453 +2012-12-08 01:00:00,1518.5482866043615 +2012-12-08 02:00:00,1418.5576323987539 +2012-12-08 03:00:00,1291.3644859813085 +2012-12-08 04:00:00,1237.766355140187 +2012-12-08 05:00:00,1267.943925233645 +2012-12-08 06:00:00,1443.8317757009345 +2012-12-08 07:00:00,1677.4143302180685 +2012-12-08 08:00:00,1743.367601246106 +2012-12-08 09:00:00,2244.6822429906542 +2012-12-08 10:00:00,2631.02492211838 +2012-12-08 11:00:00,2791.834890965732 +2012-12-08 12:00:00,2848.7258566978194 +2012-12-08 13:00:00,2818.2803738317757 +2012-12-08 14:00:00,2810.404984423676 +2012-12-08 15:00:00,2861.6604361370714 +2012-12-08 16:00:00,2890.302180685358 +2012-12-08 17:00:00,2956.5607476635514 +2012-12-08 18:00:00,3179.398753894081 +2012-12-08 19:00:00,3151.940809968847 +2012-12-08 20:00:00,3029.707165109034 +2012-12-08 21:00:00,2914.6043613707166 +2012-12-08 22:00:00,2641.1152647975077 +2012-12-08 23:00:00,2195.0 +2012-12-09 00:00:00,1769.2492211838007 +2012-12-09 01:00:00,1460.6417445482866 +2012-12-09 02:00:00,1370.2959501557632 +2012-12-09 03:00:00,1285.3364485981308 +2012-12-09 04:00:00,1205.3271028037384 +2012-12-09 05:00:00,1242.6043613707166 +2012-12-09 06:00:00,1445.9034267912773 +2012-12-09 07:00:00,1623.4890965732088 +2012-12-09 08:00:00,1695.2616822429907 +2012-12-09 09:00:00,2145.0498442367602 +2012-12-09 10:00:00,2563.4828660436137 +2012-12-09 11:00:00,2760.5482866043612 +2012-12-09 12:00:00,2707.691588785047 +2012-12-09 13:00:00,2810.5233644859813 +2012-12-09 14:00:00,2718.601246105919 +2012-12-09 15:00:00,2759.01246105919 +2012-12-09 16:00:00,2818.7102803738317 +2012-12-09 17:00:00,2966.07476635514 +2012-12-09 18:00:00,2995.0778816199377 +2012-12-09 19:00:00,3020.361370716511 +2012-12-09 20:00:00,2962.8006230529595 +2012-12-09 21:00:00,2803.9657320872275 +2012-12-09 22:00:00,2562.7040498442366 +2012-12-09 23:00:00,1922.5700934579438 +2012-12-10 00:00:00,1575.5140186915887 +2012-12-10 01:00:00,1314.3644859813085 +2012-12-10 02:00:00,1270.5109034267912 +2012-12-10 03:00:00,1218.5856697819315 +2012-12-10 04:00:00,1227.613707165109 +2012-12-10 05:00:00,1274.6884735202493 +2012-12-10 06:00:00,1434.613707165109 +2012-12-10 07:00:00,1637.252336448598 +2012-12-10 08:00:00,1700.0436137071652 +2012-12-10 09:00:00,2180.3520249221183 +2012-12-10 10:00:00,2604.3644859813085 +2012-12-10 11:00:00,2719.473520249221 +2012-12-10 12:00:00,2748.398753894081 +2012-12-10 13:00:00,2712.0 +2012-12-10 14:00:00,2719.676012461059 +2012-12-10 15:00:00,2756.803738317757 +2012-12-10 16:00:00,2740.4267912772584 +2012-12-10 17:00:00,2947.872274143302 +2012-12-10 18:00:00,3066.919003115265 +2012-12-10 19:00:00,3077.968847352025 +2012-12-10 20:00:00,2972.323987538941 +2012-12-10 21:00:00,2844.9595015576324 +2012-12-10 22:00:00,2591.1931464174454 +2012-12-10 23:00:00,2044.7165109034268 +2012-12-11 00:00:00,1667.8255451713396 +2012-12-11 01:00:00,1398.2647975077882 +2012-12-11 02:00:00,1319.872274143302 +2012-12-11 03:00:00,1263.271028037383 +2012-12-11 04:00:00,1266.2087227414331 +2012-12-11 05:00:00,1322.0093457943926 +2012-12-11 06:00:00,1504.454828660436 +2012-12-11 07:00:00,1722.0436137071652 +2012-12-11 08:00:00,1800.0965732087227 +2012-12-11 09:00:00,2187.121495327103 +2012-12-11 10:00:00,2546.9813084112147 +2012-12-11 11:00:00,2680.165109034268 +2012-12-11 12:00:00,2767.9968847352025 +2012-12-11 13:00:00,2744.931464174455 +2012-12-11 14:00:00,2737.570093457944 +2012-12-11 15:00:00,2743.4143302180687 +2012-12-11 16:00:00,2736.3707165109035 +2012-12-11 17:00:00,2950.1806853582552 +2012-12-11 18:00:00,3107.6728971962616 +2012-12-11 19:00:00,3032.4517133956388 +2012-12-11 20:00:00,2980.8255451713394 +2012-12-11 21:00:00,2866.570093457944 +2012-12-11 22:00:00,2584.576323987539 +2012-12-11 23:00:00,2025.778816199377 +2012-12-12 00:00:00,1657.0467289719627 +2012-12-12 01:00:00,1394.9003115264798 +2012-12-12 02:00:00,1317.1619937694704 +2012-12-12 03:00:00,1255.392523364486 +2012-12-12 04:00:00,1275.7445482866044 +2012-12-12 05:00:00,1302.8411214953271 +2012-12-12 06:00:00,1484.2461059190032 +2012-12-12 07:00:00,1733.6105919003114 +2012-12-12 08:00:00,1841.0342679127725 +2012-12-12 09:00:00,2291.669781931464 +2012-12-12 10:00:00,2620.4641744548285 +2012-12-12 11:00:00,2683.0716510903426 +2012-12-12 12:00:00,2788.760124610592 +2012-12-12 13:00:00,2764.7102803738317 +2012-12-12 14:00:00,2814.121495327103 +2012-12-12 15:00:00,2825.096573208723 +2012-12-12 16:00:00,2795.8068535825546 +2012-12-12 17:00:00,3017.9283489096574 +2012-12-12 18:00:00,3163.7570093457944 +2012-12-12 19:00:00,3083.576323987539 +2012-12-12 20:00:00,3013.11214953271 +2012-12-12 21:00:00,2883.735202492212 +2012-12-12 22:00:00,2616.143302180685 +2012-12-12 23:00:00,2052.6292834890965 +2012-12-13 00:00:00,1659.9003115264798 +2012-12-13 01:00:00,1386.006230529595 +2012-12-13 02:00:00,1316.6292834890967 +2012-12-13 03:00:00,1266.6728971962616 +2012-12-13 04:00:00,1270.1401869158879 +2012-12-13 05:00:00,1307.4330218068535 +2012-12-13 06:00:00,1497.7320872274142 +2012-12-13 07:00:00,1753.9252336448599 +2012-12-13 08:00:00,1895.1401869158879 +2012-12-13 09:00:00,2315.0654205607475 +2012-12-13 10:00:00,2681.059190031153 +2012-12-13 11:00:00,2758.903426791277 +2012-12-13 12:00:00,2886.489096573209 +2012-12-13 13:00:00,2843.2585669781934 +2012-12-13 14:00:00,2824.7258566978194 +2012-12-13 15:00:00,2843.4828660436137 +2012-12-13 16:00:00,2830.2056074766356 +2012-12-13 17:00:00,2960.2118380062307 +2012-12-13 18:00:00,3149.4517133956388 +2012-12-13 19:00:00,3112.1246105919004 +2012-12-13 20:00:00,3010.8442367601247 +2012-12-13 21:00:00,2920.9844236760123 +2012-12-13 22:00:00,2656.233644859813 +2012-12-13 23:00:00,2093.6791277258567 +2012-12-14 00:00:00,1709.4766355140187 +2012-12-14 01:00:00,1472.803738317757 +2012-12-14 02:00:00,1402.031152647975 +2012-12-14 03:00:00,1295.7632398753894 +2012-12-14 04:00:00,1316.1246105919004 +2012-12-14 05:00:00,1320.5794392523364 +2012-12-14 06:00:00,1524.0218068535826 +2012-12-14 07:00:00,1794.1682242990655 +2012-12-14 08:00:00,1941.6542056074766 +2012-12-14 09:00:00,2364.6666666666665 +2012-12-14 10:00:00,2670.190031152648 +2012-12-14 11:00:00,2809.8816199376947 +2012-12-14 12:00:00,2879.0467289719627 +2012-12-14 13:00:00,2919.1464174454827 +2012-12-14 14:00:00,2882.3271028037384 +2012-12-14 15:00:00,2899.644859813084 +2012-12-14 16:00:00,2932.8691588785045 +2012-12-14 17:00:00,3095.735202492212 +2012-12-14 18:00:00,3192.551401869159 +2012-12-14 19:00:00,3340.06230529595 +2012-12-14 20:00:00,3124.816199376947 +2012-12-14 21:00:00,3026.271028037383 +2012-12-14 22:00:00,2784.3271028037384 +2012-12-14 23:00:00,2285.271028037383 +2012-12-15 00:00:00,1857.8473520249222 +2012-12-15 01:00:00,1568.4610591900312 +2012-12-15 02:00:00,1462.8099688473521 +2012-12-15 03:00:00,1333.0218068535826 +2012-12-15 04:00:00,1307.8909657320871 +2012-12-15 05:00:00,1327.7632398753894 +2012-12-15 06:00:00,1540.853582554517 +2012-12-15 07:00:00,1712.8566978193146 +2012-12-15 08:00:00,1835.7383177570093 +2012-12-15 09:00:00,2280.7570093457944 +2012-12-15 10:00:00,2681.3271028037384 +2012-12-15 11:00:00,2810.744548286604 +2012-12-15 12:00:00,2902.1183800623053 +2012-12-15 13:00:00,2845.3115264797507 +2012-12-15 14:00:00,2855.411214953271 +2012-12-15 15:00:00,2897.88785046729 +2012-12-15 16:00:00,2926.613707165109 +2012-12-15 17:00:00,3117.1869158878503 +2012-12-15 18:00:00,3231.9501557632398 +2012-12-15 19:00:00,3198.8504672897197 +2012-12-15 20:00:00,3063.01246105919 +2012-12-15 21:00:00,3027.2741433021806 +2012-12-15 22:00:00,2949.3520249221183 +2012-12-15 23:00:00,2272.6604361370714 +2012-12-16 00:00:00,1830.367601246106 +2012-12-16 01:00:00,1531.588785046729 +2012-12-16 02:00:00,1456.6292834890967 +2012-12-16 03:00:00,1370.4517133956385 +2012-12-16 04:00:00,1277.0591900311526 +2012-12-16 05:00:00,1305.8940809968847 +2012-12-16 06:00:00,1501.1214953271028 +2012-12-16 07:00:00,1679.4080996884736 +2012-12-16 08:00:00,1769.0778816199377 +2012-12-16 09:00:00,2235.713395638629 +2012-12-16 10:00:00,2721.1028037383176 +2012-12-16 11:00:00,2896.2803738317757 +2012-12-16 12:00:00,2890.5981308411215 +2012-12-16 13:00:00,2868.5451713395637 +2012-12-16 14:00:00,3002.0280373831774 +2012-12-16 15:00:00,2885.411214953271 +2012-12-16 16:00:00,2944.9813084112147 +2012-12-16 17:00:00,3028.246105919003 +2012-12-16 18:00:00,3152.8691588785045 +2012-12-16 19:00:00,3189.5015576323985 +2012-12-16 20:00:00,3035.2834890965732 +2012-12-16 21:00:00,2920.6417445482866 +2012-12-16 22:00:00,2592.1401869158876 +2012-12-16 23:00:00,2057.0467289719627 +2012-12-17 00:00:00,1715.214953271028 +2012-12-17 01:00:00,1438.0529595015576 +2012-12-17 02:00:00,1345.2585669781931 +2012-12-17 03:00:00,1296.2772585669782 +2012-12-17 04:00:00,1287.9283489096574 +2012-12-17 05:00:00,1321.1059190031153 +2012-12-17 06:00:00,1518.816199376947 +2012-12-17 07:00:00,1714.2897196261683 +2012-12-17 08:00:00,1858.526479750779 +2012-12-17 09:00:00,2260.183800623053 +2012-12-17 10:00:00,2709.1869158878503 +2012-12-17 11:00:00,2798.1246105919004 +2012-12-17 12:00:00,2850.0498442367602 +2012-12-17 13:00:00,2816.538940809969 +2012-12-17 14:00:00,2973.473520249221 +2012-12-17 15:00:00,2898.956386292835 +2012-12-17 16:00:00,2965.9906542056074 +2012-12-17 17:00:00,3105.07476635514 +2012-12-17 18:00:00,3224.931464174455 +2012-12-17 19:00:00,3187.6822429906542 +2012-12-17 20:00:00,3067.3769470404986 +2012-12-17 21:00:00,3035.872274143302 +2012-12-17 22:00:00,2753.7881619937693 +2012-12-17 23:00:00,2285.676012461059 +2012-12-18 00:00:00,1878.8847352024923 +2012-12-18 01:00:00,1545.1339563862928 +2012-12-18 02:00:00,1454.822429906542 +2012-12-18 03:00:00,1368.6292834890967 +2012-12-18 04:00:00,1347.8193146417445 +2012-12-18 05:00:00,1407.8660436137072 +2012-12-18 06:00:00,1595.1557632398753 +2012-12-18 07:00:00,1778.6728971962616 +2012-12-18 08:00:00,1914.1869158878505 +2012-12-18 09:00:00,2317.6666666666665 +2012-12-18 10:00:00,2705.1993769470405 +2012-12-18 11:00:00,2825.3052959501556 +2012-12-18 12:00:00,2989.735202492212 +2012-12-18 13:00:00,2949.6230529595014 +2012-12-18 14:00:00,2931.993769470405 +2012-12-18 15:00:00,2986.707165109034 +2012-12-18 16:00:00,3042.8629283489095 +2012-12-18 17:00:00,3047.700934579439 +2012-12-18 18:00:00,3199.728971962617 +2012-12-18 19:00:00,3200.1495327102803 +2012-12-18 20:00:00,3118.8909657320874 +2012-12-18 21:00:00,3017.5794392523367 +2012-12-18 22:00:00,2780.336448598131 +2012-12-18 23:00:00,2290.6199376947043 +2012-12-19 00:00:00,1886.196261682243 +2012-12-19 01:00:00,1538.728971962617 +2012-12-19 02:00:00,1446.8193146417445 +2012-12-19 03:00:00,1373.8411214953271 +2012-12-19 04:00:00,1339.7414330218069 +2012-12-19 05:00:00,1370.6292834890967 +2012-12-19 06:00:00,1539.0436137071652 +2012-12-19 07:00:00,1742.7258566978194 +2012-12-19 08:00:00,1865.3582554517134 +2012-12-19 09:00:00,2296.6947040498444 +2012-12-19 10:00:00,2660.7943925233644 +2012-12-19 11:00:00,2823.766355140187 +2012-12-19 12:00:00,2857.7819314641742 +2012-12-19 13:00:00,2865.785046728972 +2012-12-19 14:00:00,2871.8442367601247 +2012-12-19 15:00:00,2999.489096573209 +2012-12-19 16:00:00,2991.068535825545 +2012-12-19 17:00:00,3079.0 +2012-12-19 18:00:00,3211.4922118380064 +2012-12-19 19:00:00,3176.9003115264795 +2012-12-19 20:00:00,3122.3520249221183 +2012-12-19 21:00:00,3036.264797507788 +2012-12-19 22:00:00,2799.7943925233644 +2012-12-19 23:00:00,2300.121495327103 +2012-12-20 00:00:00,1935.6105919003114 +2012-12-20 01:00:00,1576.98753894081 +2012-12-20 02:00:00,1467.1214953271028 +2012-12-20 03:00:00,1381.9408099688474 +2012-12-20 04:00:00,1377.271028037383 +2012-12-20 05:00:00,1398.0965732087227 +2012-12-20 06:00:00,1558.2242990654206 +2012-12-20 07:00:00,1767.981308411215 +2012-12-20 08:00:00,1894.8006230529595 +2012-12-20 09:00:00,2316.3052959501556 +2012-12-20 10:00:00,2704.98753894081 +2012-12-20 11:00:00,2862.5451713395637 +2012-12-20 12:00:00,2983.367601246106 +2012-12-20 13:00:00,2981.177570093458 +2012-12-20 14:00:00,2915.1308411214955 +2012-12-20 15:00:00,2847.607476635514 +2012-12-20 16:00:00,2794.3894080996884 +2012-12-20 17:00:00,2999.1931464174454 +2012-12-20 18:00:00,3274.06230529595 +2012-12-20 19:00:00,3209.828660436137 +2012-12-20 20:00:00,3167.6292834890965 +2012-12-20 21:00:00,3059.6884735202493 +2012-12-20 22:00:00,2848.308411214953 +2012-12-20 23:00:00,2299.5981308411215 +2012-12-21 00:00:00,1928.3177570093458 +2012-12-21 01:00:00,1546.2834890965732 +2012-12-21 02:00:00,1452.7133956386292 +2012-12-21 03:00:00,1395.657320872274 +2012-12-21 04:00:00,1366.5856697819315 +2012-12-21 05:00:00,1411.7694704049845 +2012-12-21 06:00:00,1604.9563862928348 +2012-12-21 07:00:00,1795.9906542056074 +2012-12-21 08:00:00,1904.7757009345794 +2012-12-21 09:00:00,2339.691588785047 +2012-12-21 10:00:00,2758.1806853582552 +2012-12-21 11:00:00,2910.031152647975 +2012-12-21 12:00:00,3097.0778816199377 +2012-12-21 13:00:00,3037.031152647975 +2012-12-21 14:00:00,3041.2897196261683 +2012-12-21 15:00:00,3087.707165109034 +2012-12-21 16:00:00,3047.5015576323985 +2012-12-21 17:00:00,3198.1246105919004 +2012-12-21 18:00:00,3359.2242990654204 +2012-12-21 19:00:00,3320.570093457944 +2012-12-21 20:00:00,3230.1464174454827 +2012-12-21 21:00:00,3130.626168224299 +2012-12-21 22:00:00,2940.6230529595014 +2012-12-21 23:00:00,2419.947040498442 +2012-12-22 00:00:00,2005.3831775700935 +2012-12-22 01:00:00,1604.7258566978194 +2012-12-22 02:00:00,1454.766355140187 +2012-12-22 03:00:00,1377.2118380062304 +2012-12-22 04:00:00,1354.6542056074766 +2012-12-22 05:00:00,1398.0903426791276 +2012-12-22 06:00:00,1534.6261682242991 +2012-12-22 07:00:00,1745.9750778816199 +2012-12-22 08:00:00,1888.1433021806854 +2012-12-22 09:00:00,2395.031152647975 +2012-12-22 10:00:00,2782.4548286604363 +2012-12-22 11:00:00,3024.9345794392525 +2012-12-22 12:00:00,3002.744548286604 +2012-12-22 13:00:00,3019.214953271028 +2012-12-22 14:00:00,3019.7320872274145 +2012-12-22 15:00:00,3038.0218068535823 +2012-12-22 16:00:00,3096.4984423676015 +2012-12-22 17:00:00,3126.330218068536 +2012-12-22 18:00:00,3309.7819314641742 +2012-12-22 19:00:00,3311.785046728972 +2012-12-22 20:00:00,3149.532710280374 +2012-12-22 21:00:00,3127.292834890966 +2012-12-22 22:00:00,2896.0031152647975 +2012-12-22 23:00:00,2406.5482866043612 +2012-12-23 00:00:00,1993.146417445483 +2012-12-23 01:00:00,1615.9595015576324 +2012-12-23 02:00:00,1522.3894080996886 +2012-12-23 03:00:00,1412.5046728971963 +2012-12-23 04:00:00,1298.2897196261683 +2012-12-23 05:00:00,1338.4423676012461 +2012-12-23 06:00:00,1523.1900311526479 +2012-12-23 07:00:00,1669.9563862928348 +2012-12-23 08:00:00,1804.0 +2012-12-23 09:00:00,2315.2305295950155 +2012-12-23 10:00:00,2687.1993769470405 +2012-12-23 11:00:00,2909.834890965732 +2012-12-23 12:00:00,2938.0654205607475 +2012-12-23 13:00:00,2890.551401869159 +2012-12-23 14:00:00,2913.429906542056 +2012-12-23 15:00:00,2857.816199376947 +2012-12-23 16:00:00,2934.588785046729 +2012-12-23 17:00:00,3049.3333333333335 +2012-12-23 18:00:00,3208.5545171339563 +2012-12-23 19:00:00,3203.841121495327 +2012-12-23 20:00:00,3093.5140186915887 +2012-12-23 21:00:00,3050.190031152648 +2012-12-23 22:00:00,2801.3395638629286 +2012-12-23 23:00:00,2294.1401869158876 +2012-12-24 00:00:00,1910.2897196261683 +2012-12-24 01:00:00,1605.0841121495328 +2012-12-24 02:00:00,1499.404984423676 +2012-12-24 03:00:00,1410.8909657320871 +2012-12-24 04:00:00,1409.1744548286604 +2012-12-24 05:00:00,1476.607476635514 +2012-12-24 06:00:00,1707.031152647975 +2012-12-24 07:00:00,1815.7414330218069 +2012-12-24 08:00:00,1980.576323987539 +2012-12-24 09:00:00,2361.323987538941 +2012-12-24 10:00:00,2759.551401869159 +2012-12-24 11:00:00,2950.0716510903426 +2012-12-24 12:00:00,3062.299065420561 +2012-12-24 13:00:00,2958.6573208722743 +2012-12-24 14:00:00,2972.202492211838 +2012-12-24 15:00:00,2947.068535825545 +2012-12-24 16:00:00,2884.323987538941 +2012-12-24 17:00:00,2957.8255451713394 +2012-12-24 18:00:00,2821.9657320872275 +2012-12-24 19:00:00,2330.8691588785045 +2012-12-24 20:00:00,1959.4454828660437 +2012-12-24 21:00:00,1801.0404984423676 +2012-12-24 22:00:00,1757.3146417445482 +2012-12-24 23:00:00,1490.747663551402 +2012-12-25 00:00:00,1371.0685358255453 +2012-12-25 01:00:00,1243.5358255451713 +2012-12-25 02:00:00,1204.5576323987539 +2012-12-25 03:00:00,1171.5015576323988 +2012-12-25 04:00:00,1179.9034267912773 +2012-12-25 05:00:00,1154.1246105919004 +2012-12-25 06:00:00,1175.1557632398753 +2012-12-25 07:00:00,1195.8442367601247 +2012-12-25 08:00:00,1214.3177570093458 +2012-12-25 09:00:00,1336.3364485981308 +2012-12-25 10:00:00,1521.3520249221183 +2012-12-25 11:00:00,1622.6043613707166 +2012-12-25 12:00:00,1728.0903426791276 +2012-12-25 13:00:00,1717.8878504672898 +2012-12-25 14:00:00,1677.5295950155764 +2012-12-25 15:00:00,1728.8193146417445 +2012-12-25 16:00:00,1661.981308411215 +2012-12-25 17:00:00,1807.4143302180685 +2012-12-25 18:00:00,2006.5389408099688 +2012-12-25 19:00:00,1963.031152647975 +2012-12-25 20:00:00,1957.8255451713396 +2012-12-25 21:00:00,1917.5046728971963 +2012-12-25 22:00:00,1841.9314641744547 +2012-12-25 23:00:00,1601.8940809968847 +2012-12-26 00:00:00,1481.4953271028037 +2012-12-26 01:00:00,1291.4797507788162 +2012-12-26 02:00:00,1245.2897196261683 +2012-12-26 03:00:00,1214.6542056074766 +2012-12-26 04:00:00,1210.8566978193146 +2012-12-26 05:00:00,1286.0529595015576 +2012-12-26 06:00:00,1470.4299065420562 +2012-12-26 07:00:00,1667.7102803738317 +2012-12-26 08:00:00,1817.6697819314643 +2012-12-26 09:00:00,2246.5451713395637 +2012-12-26 10:00:00,2583.8691588785045 +2012-12-26 11:00:00,2660.6230529595014 +2012-12-26 12:00:00,2755.6604361370714 +2012-12-26 13:00:00,2739.96261682243 +2012-12-26 14:00:00,2728.0934579439254 +2012-12-26 15:00:00,2740.8380062305296 +2012-12-26 16:00:00,2777.510903426791 +2012-12-26 17:00:00,2848.0841121495328 +2012-12-26 18:00:00,3086.3395638629286 +2012-12-26 19:00:00,3041.8629283489095 +2012-12-26 20:00:00,2925.0934579439254 +2012-12-26 21:00:00,2842.878504672897 +2012-12-26 22:00:00,2604.1028037383176 +2012-12-26 23:00:00,2137.9968847352025 +2012-12-27 00:00:00,1790.5919003115264 +2012-12-27 01:00:00,1444.2772585669782 +2012-12-27 02:00:00,1364.8006230529595 +2012-12-27 03:00:00,1311.3457943925234 +2012-12-27 04:00:00,1315.5295950155764 +2012-12-27 05:00:00,1328.0716510903426 +2012-12-27 06:00:00,1500.96261682243 +2012-12-27 07:00:00,1678.8878504672898 +2012-12-27 08:00:00,1834.563862928349 +2012-12-27 09:00:00,2272.9719626168226 +2012-12-27 10:00:00,2573.2242990654204 +2012-12-27 11:00:00,2697.006230529595 +2012-12-27 12:00:00,2800.613707165109 +2012-12-27 13:00:00,2809.1993769470405 +2012-12-27 14:00:00,2763.676012461059 +2012-12-27 15:00:00,2816.7040498442366 +2012-12-27 16:00:00,2754.6884735202493 +2012-12-27 17:00:00,2951.669781931464 +2012-12-27 18:00:00,3138.239875389408 +2012-12-27 19:00:00,3062.809968847352 +2012-12-27 20:00:00,3037.4859813084113 +2012-12-27 21:00:00,2871.532710280374 +2012-12-27 22:00:00,2649.7165109034268 +2012-12-27 23:00:00,2176.9595015576324 +2012-12-28 00:00:00,1818.5607476635514 +2012-12-28 01:00:00,1458.576323987539 +2012-12-28 02:00:00,1390.0903426791276 +2012-12-28 03:00:00,1304.4517133956385 +2012-12-28 04:00:00,1285.0623052959502 +2012-12-28 05:00:00,1322.4890965732088 +2012-12-28 06:00:00,1519.0591900311526 +2012-12-28 07:00:00,1706.5420560747664 +2012-12-28 08:00:00,1858.03738317757 +2012-12-28 09:00:00,2257.183800623053 +2012-12-28 10:00:00,2615.728971962617 +2012-12-28 11:00:00,2671.171339563863 +2012-12-28 12:00:00,2794.2616822429904 +2012-12-28 13:00:00,2756.8255451713394 +2012-12-28 14:00:00,2776.9221183800623 +2012-12-28 15:00:00,2832.355140186916 +2012-12-28 16:00:00,2831.03738317757 +2012-12-28 17:00:00,2954.03738317757 +2012-12-28 18:00:00,3141.7507788161993 +2012-12-28 19:00:00,3097.2959501557634 +2012-12-28 20:00:00,3012.7694704049845 +2012-12-28 21:00:00,2875.772585669782 +2012-12-28 22:00:00,2712.532710280374 +2012-12-28 23:00:00,2221.080996884735 +2012-12-29 00:00:00,1817.1433021806854 +2012-12-29 01:00:00,1487.7352024922118 +2012-12-29 02:00:00,1362.7507788161993 +2012-12-29 03:00:00,1273.4672897196263 +2012-12-29 04:00:00,1253.5919003115264 +2012-12-29 05:00:00,1291.2866043613708 +2012-12-29 06:00:00,1484.1806853582555 +2012-12-29 07:00:00,1731.816199376947 +2012-12-29 08:00:00,1849.3644859813085 +2012-12-29 09:00:00,2322.5295950155764 +2012-12-29 10:00:00,2659.4517133956388 +2012-12-29 11:00:00,2825.5077881619936 +2012-12-29 12:00:00,2810.11214953271 +2012-12-29 13:00:00,2789.2741433021806 +2012-12-29 14:00:00,2812.006230529595 +2012-12-29 15:00:00,2820.467289719626 +2012-12-29 16:00:00,2902.330218068536 +2012-12-29 17:00:00,2979.4454828660437 +2012-12-29 18:00:00,3181.0996884735205 +2012-12-29 19:00:00,3155.847352024922 +2012-12-29 20:00:00,2983.551401869159 +2012-12-29 21:00:00,2964.691588785047 +2012-12-29 22:00:00,2707.538940809969 +2012-12-29 23:00:00,2241.638629283489 +2012-12-30 00:00:00,1841.380062305296 +2012-12-30 01:00:00,1485.6791277258567 +2012-12-30 02:00:00,1415.361370716511 +2012-12-30 03:00:00,1342.9844236760125 +2012-12-30 04:00:00,1246.1931464174454 +2012-12-30 05:00:00,1274.4330218068535 +2012-12-30 06:00:00,1520.3302180685357 +2012-12-30 07:00:00,1604.9968847352025 +2012-12-30 08:00:00,1785.0 +2012-12-30 09:00:00,2225.1495327102803 +2012-12-30 10:00:00,2584.2741433021806 +2012-12-30 11:00:00,2804.495327102804 +2012-12-30 12:00:00,2837.7102803738317 +2012-12-30 13:00:00,2805.735202492212 +2012-12-30 14:00:00,2789.0404984423676 +2012-12-30 15:00:00,2803.98753894081 +2012-12-30 16:00:00,2886.1246105919004 +2012-12-30 17:00:00,2963.510903426791 +2012-12-30 18:00:00,3101.9345794392525 +2012-12-30 19:00:00,3069.467289719626 +2012-12-30 20:00:00,2973.190031152648 +2012-12-30 21:00:00,2899.06230529595 +2012-12-30 22:00:00,2620.0342679127725 +2012-12-30 23:00:00,2102.2679127725855 +2012-12-31 00:00:00,1750.7009345794393 +2012-12-31 01:00:00,1475.9906542056074 +2012-12-31 02:00:00,1393.398753894081 +2012-12-31 03:00:00,1343.2928348909657 +2012-12-31 04:00:00,1359.3738317757009 +2012-12-31 05:00:00,1405.252336448598 +2012-12-31 06:00:00,1641.3831775700935 +2012-12-31 07:00:00,1788.473520249221 +2012-12-31 08:00:00,1888.6448598130842 +2012-12-31 09:00:00,2265.0560747663553 +2012-12-31 10:00:00,2622.691588785047 +2012-12-31 11:00:00,2819.143302180685 +2012-12-31 12:00:00,2854.127725856698 +2012-12-31 13:00:00,2867.728971962617 +2012-12-31 14:00:00,2868.0654205607475 +2012-12-31 15:00:00,2843.728971962617 +2012-12-31 16:00:00,2825.8442367601247 +2012-12-31 17:00:00,2937.299065420561 +2012-12-31 18:00:00,2923.4517133956388 +2012-12-31 19:00:00,2532.760124610592 +2012-12-31 20:00:00,1950.386292834891 +2012-12-31 21:00:00,1749.6822429906542 +2012-12-31 22:00:00,1698.5171339563863 +2012-12-31 23:00:00,1464.6978193146417 +2013-01-01 00:00:00,1344.3520249221183 +2013-01-01 01:00:00,1231.0467289719627 +2013-01-01 02:00:00,1191.4890965732088 +2013-01-01 03:00:00,1162.1152647975077 +2013-01-01 04:00:00,1194.0623052959502 +2013-01-01 05:00:00,1166.0747663551401 +2013-01-01 06:00:00,1182.651090342679 +2013-01-01 07:00:00,1175.6853582554518 +2013-01-01 08:00:00,1195.981308411215 +2013-01-01 09:00:00,1306.9065420560748 +2013-01-01 10:00:00,1483.0498442367602 +2013-01-01 11:00:00,1518.8816199376947 +2013-01-01 12:00:00,1668.5140186915887 +2013-01-01 13:00:00,1623.1370716510903 +2013-01-01 14:00:00,1641.214953271028 +2013-01-01 15:00:00,1633.1744548286604 +2013-01-01 16:00:00,1631.1401869158879 +2013-01-01 17:00:00,1702.392523364486 +2013-01-01 18:00:00,1869.3021806853583 +2013-01-01 19:00:00,1868.3364485981308 +2013-01-01 20:00:00,1868.0467289719627 +2013-01-01 21:00:00,1817.8971962616822 +2013-01-01 22:00:00,1782.5856697819315 +2013-01-01 23:00:00,1530.8816199376947 +2013-01-02 00:00:00,1387.8473520249222 +2013-01-02 01:00:00,1221.214953271028 +2013-01-02 02:00:00,1187.0623052959502 +2013-01-02 03:00:00,1166.2679127725858 +2013-01-02 04:00:00,1191.7352024922118 +2013-01-02 05:00:00,1234.1370716510903 +2013-01-02 06:00:00,1408.411214953271 +2013-01-02 07:00:00,1625.0436137071652 +2013-01-02 08:00:00,1779.5327102803737 +2013-01-02 09:00:00,2209.4018691588785 +2013-01-02 10:00:00,2502.02492211838 +2013-01-02 11:00:00,2631.6105919003116 +2013-01-02 12:00:00,2683.0155763239877 +2013-01-02 13:00:00,2716.5732087227416 +2013-01-02 14:00:00,2690.096573208723 +2013-01-02 15:00:00,2768.286604361371 +2013-01-02 16:00:00,2732.9595015576324 +2013-01-02 17:00:00,2866.8971962616824 +2013-01-02 18:00:00,3069.2897196261683 +2013-01-02 19:00:00,3032.246105919003 +2013-01-02 20:00:00,2925.0498442367602 +2013-01-02 21:00:00,2788.7414330218066 +2013-01-02 22:00:00,2568.931464174455 +2013-01-02 23:00:00,2028.9408099688474 +2013-01-03 00:00:00,1671.146417445483 +2013-01-03 01:00:00,1364.9470404984424 +2013-01-03 02:00:00,1290.9252336448599 +2013-01-03 03:00:00,1243.5420560747664 +2013-01-03 04:00:00,1217.6822429906542 +2013-01-03 05:00:00,1256.1495327102805 +2013-01-03 06:00:00,1439.803738317757 +2013-01-03 07:00:00,1697.9096573208724 +2013-01-03 08:00:00,1829.9158878504672 +2013-01-03 09:00:00,2238.4080996884736 +2013-01-03 10:00:00,2533.1246105919004 +2013-01-03 11:00:00,2601.06230529595 +2013-01-03 12:00:00,2695.183800623053 +2013-01-03 13:00:00,2658.9906542056074 +2013-01-03 14:00:00,2659.5825545171338 +2013-01-03 15:00:00,2683.06230529595 +2013-01-03 16:00:00,2691.542056074766 +2013-01-03 17:00:00,2778.6230529595014 +2013-01-03 18:00:00,3003.6884735202493 +2013-01-03 19:00:00,2941.8006230529595 +2013-01-03 20:00:00,2896.8006230529595 +2013-01-03 21:00:00,2791.6230529595014 +2013-01-03 22:00:00,2526.8317757009345 +2013-01-03 23:00:00,2006.7227414330218 +2013-01-04 00:00:00,1664.2897196261683 +2013-01-04 01:00:00,1379.9065420560748 +2013-01-04 02:00:00,1292.4953271028037 +2013-01-04 03:00:00,1237.2429906542056 +2013-01-04 04:00:00,1217.0093457943926 +2013-01-04 05:00:00,1273.5732087227414 +2013-01-04 06:00:00,1452.6230529595016 +2013-01-04 07:00:00,1677.4018691588785 +2013-01-04 08:00:00,1835.386292834891 +2013-01-04 09:00:00,2255.9127725856697 +2013-01-04 10:00:00,2561.1464174454827 +2013-01-04 11:00:00,2635.9968847352025 +2013-01-04 12:00:00,2704.5545171339563 +2013-01-04 13:00:00,2678.0093457943926 +2013-01-04 14:00:00,2682.0654205607475 +2013-01-04 15:00:00,2694.373831775701 +2013-01-04 16:00:00,2698.5607476635514 +2013-01-04 17:00:00,2802.006230529595 +2013-01-04 18:00:00,3030.8442367601247 +2013-01-04 19:00:00,3007.043613707165 +2013-01-04 20:00:00,2886.2741433021806 +2013-01-04 21:00:00,2776.9065420560746 +2013-01-04 22:00:00,2596.878504672897 +2013-01-04 23:00:00,2139.5295950155764 +2013-01-05 00:00:00,1710.98753894081 +2013-01-05 01:00:00,1384.1806853582555 +2013-01-05 02:00:00,1282.4392523364486 +2013-01-05 03:00:00,1202.4299065420562 +2013-01-05 04:00:00,1185.7040498442368 +2013-01-05 05:00:00,1238.8878504672898 +2013-01-05 06:00:00,1425.1713395638628 +2013-01-05 07:00:00,1657.6822429906542 +2013-01-05 08:00:00,1770.993769470405 +2013-01-05 09:00:00,2265.576323987539 +2013-01-05 10:00:00,2561.6884735202493 +2013-01-05 11:00:00,2709.92523364486 +2013-01-05 12:00:00,2703.691588785047 +2013-01-05 13:00:00,2720.11214953271 +2013-01-05 14:00:00,2671.9127725856697 +2013-01-05 15:00:00,2711.828660436137 +2013-01-05 16:00:00,2769.6199376947043 +2013-01-05 17:00:00,2887.8753894080996 +2013-01-05 18:00:00,3060.255451713396 +2013-01-05 19:00:00,3077.0467289719627 +2013-01-05 20:00:00,2900.3426791277257 +2013-01-05 21:00:00,2816.411214953271 +2013-01-05 22:00:00,2614.8598130841124 +2013-01-05 23:00:00,2133.8847352024923 +2013-01-06 00:00:00,1733.2990654205607 +2013-01-06 01:00:00,1421.5700934579438 +2013-01-06 02:00:00,1343.747663551402 +2013-01-06 03:00:00,1291.8068535825546 +2013-01-06 04:00:00,1203.3551401869158 +2013-01-06 05:00:00,1228.2180685358255 +2013-01-06 06:00:00,1419.8753894080996 +2013-01-06 07:00:00,1627.0996884735202 +2013-01-06 08:00:00,1705.2056074766356 +2013-01-06 09:00:00,2215.373831775701 +2013-01-06 10:00:00,2524.947040498442 +2013-01-06 11:00:00,2692.663551401869 +2013-01-06 12:00:00,2697.2897196261683 +2013-01-06 13:00:00,2652.367601246106 +2013-01-06 14:00:00,2609.588785046729 +2013-01-06 15:00:00,2630.956386292835 +2013-01-06 16:00:00,2680.632398753894 +2013-01-06 17:00:00,2773.3426791277257 +2013-01-06 18:00:00,2960.473520249221 +2013-01-06 19:00:00,2957.8442367601247 +2013-01-06 20:00:00,2802.6230529595014 +2013-01-06 21:00:00,2800.2585669781934 +2013-01-06 22:00:00,2490.96261682243 +2013-01-06 23:00:00,1924.4828660436137 +2013-01-07 00:00:00,1607.7133956386292 +2013-01-07 01:00:00,1336.2834890965732 +2013-01-07 02:00:00,1260.0809968847352 +2013-01-07 03:00:00,1214.803738317757 +2013-01-07 04:00:00,1196.6105919003114 +2013-01-07 05:00:00,1251.8629283489097 +2013-01-07 06:00:00,1429.9376947040498 +2013-01-07 07:00:00,1632.8785046728972 +2013-01-07 08:00:00,1724.4267912772586 +2013-01-07 09:00:00,2220.090342679128 +2013-01-07 10:00:00,2515.0280373831774 +2013-01-07 11:00:00,2634.6884735202493 +2013-01-07 12:00:00,2665.1931464174454 +2013-01-07 13:00:00,2700.3769470404986 +2013-01-07 14:00:00,2700.06230529595 +2013-01-07 15:00:00,2685.7507788161993 +2013-01-07 16:00:00,2657.841121495327 +2013-01-07 17:00:00,2854.3177570093458 +2013-01-07 18:00:00,2970.654205607477 +2013-01-07 19:00:00,2924.0872274143303 +2013-01-07 20:00:00,2880.4984423676015 +2013-01-07 21:00:00,2734.3395638629286 +2013-01-07 22:00:00,2527.7383177570096 +2013-01-07 23:00:00,1995.3364485981308 +2013-01-08 00:00:00,1645.1433021806854 +2013-01-08 01:00:00,1365.9034267912773 +2013-01-08 02:00:00,1289.2741433021806 +2013-01-08 03:00:00,1254.785046728972 +2013-01-08 04:00:00,1226.613707165109 +2013-01-08 05:00:00,1268.8909657320871 +2013-01-08 06:00:00,1445.4330218068535 +2013-01-08 07:00:00,1700.3177570093458 +2013-01-08 08:00:00,1836.361370716511 +2013-01-08 09:00:00,2234.0342679127725 +2013-01-08 10:00:00,2552.993769470405 +2013-01-08 11:00:00,2606.6947040498444 +2013-01-08 12:00:00,2719.8535825545173 +2013-01-08 13:00:00,2716.143302180685 +2013-01-08 14:00:00,2676.3831775700933 +2013-01-08 15:00:00,2698.6884735202493 +2013-01-08 16:00:00,2709.3831775700933 +2013-01-08 17:00:00,2822.847352024922 +2013-01-08 18:00:00,3054.707165109034 +2013-01-08 19:00:00,2958.271028037383 +2013-01-08 20:00:00,2908.336448598131 +2013-01-08 21:00:00,2808.4018691588785 +2013-01-08 22:00:00,2519.638629283489 +2013-01-08 23:00:00,2027.0685358255453 +2013-01-09 00:00:00,1677.1495327102805 +2013-01-09 01:00:00,1389.4267912772586 +2013-01-09 02:00:00,1311.9408099688474 +2013-01-09 03:00:00,1275.0218068535826 +2013-01-09 04:00:00,1257.4205607476636 +2013-01-09 05:00:00,1300.3894080996886 +2013-01-09 06:00:00,1506.6760124610591 +2013-01-09 07:00:00,1719.2367601246106 +2013-01-09 08:00:00,1867.3177570093458 +2013-01-09 09:00:00,2278.5358255451715 +2013-01-09 10:00:00,2582.255451713396 +2013-01-09 11:00:00,2650.8629283489095 +2013-01-09 12:00:00,2742.3956386292834 +2013-01-09 13:00:00,2752.133956386293 +2013-01-09 14:00:00,2696.404984423676 +2013-01-09 15:00:00,2772.816199376947 +2013-01-09 16:00:00,2792.7757009345796 +2013-01-09 17:00:00,2832.423676012461 +2013-01-09 18:00:00,3081.697819314642 +2013-01-09 19:00:00,2997.330218068536 +2013-01-09 20:00:00,2936.5545171339563 +2013-01-09 21:00:00,2865.183800623053 +2013-01-09 22:00:00,2569.0560747663553 +2013-01-09 23:00:00,2065.4984423676015 +2013-01-10 00:00:00,1707.2897196261683 +2013-01-10 01:00:00,1430.0778816199377 +2013-01-10 02:00:00,1364.4018691588785 +2013-01-10 03:00:00,1316.342679127726 +2013-01-10 04:00:00,1300.1183800623053 +2013-01-10 05:00:00,1341.4890965732088 +2013-01-10 06:00:00,1528.595015576324 +2013-01-10 07:00:00,1754.8473520249222 +2013-01-10 08:00:00,1890.4517133956385 +2013-01-10 09:00:00,2281.165109034268 +2013-01-10 10:00:00,2602.367601246106 +2013-01-10 11:00:00,2660.700934579439 +2013-01-10 12:00:00,2764.98753894081 +2013-01-10 13:00:00,2766.88785046729 +2013-01-10 14:00:00,2730.1090342679126 +2013-01-10 15:00:00,2791.669781931464 +2013-01-10 16:00:00,2752.894080996885 +2013-01-10 17:00:00,2829.4330218068535 +2013-01-10 18:00:00,3048.127725856698 +2013-01-10 19:00:00,2966.7165109034268 +2013-01-10 20:00:00,2938.7476635514017 +2013-01-10 21:00:00,2796.526479750779 +2013-01-10 22:00:00,2541.878504672897 +2013-01-10 23:00:00,2038.3457943925234 +2013-01-11 00:00:00,1681.9096573208724 +2013-01-11 01:00:00,1413.747663551402 +2013-01-11 02:00:00,1340.2834890965732 +2013-01-11 03:00:00,1290.7819314641745 +2013-01-11 04:00:00,1267.981308411215 +2013-01-11 05:00:00,1366.7507788161993 +2013-01-11 06:00:00,1518.348909657321 +2013-01-11 07:00:00,1701.6417445482866 +2013-01-11 08:00:00,1841.4299065420562 +2013-01-11 09:00:00,2280.0716510903426 +2013-01-11 10:00:00,2613.171339563863 +2013-01-11 11:00:00,2664.8442367601247 +2013-01-11 12:00:00,2732.7165109034268 +2013-01-11 13:00:00,2764.177570093458 +2013-01-11 14:00:00,2728.2492211838007 +2013-01-11 15:00:00,2774.0093457943926 +2013-01-11 16:00:00,2771.457943925234 +2013-01-11 17:00:00,2821.5607476635514 +2013-01-11 18:00:00,3053.177570093458 +2013-01-11 19:00:00,2971.2056074766356 +2013-01-11 20:00:00,2941.772585669782 +2013-01-11 21:00:00,2875.308411214953 +2013-01-11 22:00:00,2614.956386292835 +2013-01-11 23:00:00,2152.9003115264795 +2013-01-12 00:00:00,1707.1713395638628 +2013-01-12 01:00:00,1417.9470404984424 +2013-01-12 02:00:00,1322.404984423676 +2013-01-12 03:00:00,1240.4267912772586 +2013-01-12 04:00:00,1232.619937694704 +2013-01-12 05:00:00,1273.2928348909657 +2013-01-12 06:00:00,1459.6978193146417 +2013-01-12 07:00:00,1660.3457943925234 +2013-01-12 08:00:00,1778.398753894081 +2013-01-12 09:00:00,2254.638629283489 +2013-01-12 10:00:00,2558.292834890966 +2013-01-12 11:00:00,2733.822429906542 +2013-01-12 12:00:00,2730.7258566978194 +2013-01-12 13:00:00,2719.6666666666665 +2013-01-12 14:00:00,2735.202492211838 +2013-01-12 15:00:00,2742.096573208723 +2013-01-12 16:00:00,2833.2585669781934 +2013-01-12 17:00:00,2838.190031152648 +2013-01-12 18:00:00,2953.1028037383176 +2013-01-12 19:00:00,2980.8909657320874 +2013-01-12 20:00:00,2894.7040498442366 +2013-01-12 21:00:00,2796.9158878504672 +2013-01-12 22:00:00,2579.5295950155764 +2013-01-12 23:00:00,2097.816199376947 +2013-01-13 00:00:00,1697.4143302180685 +2013-01-13 01:00:00,1417.576323987539 +2013-01-13 02:00:00,1350.638629283489 +2013-01-13 03:00:00,1297.386292834891 +2013-01-13 04:00:00,1212.778816199377 +2013-01-13 05:00:00,1236.6666666666667 +2013-01-13 06:00:00,1428.7632398753894 +2013-01-13 07:00:00,1586.657320872274 +2013-01-13 08:00:00,1706.9283489096574 +2013-01-13 09:00:00,2170.5794392523367 +2013-01-13 10:00:00,2517.239875389408 +2013-01-13 11:00:00,2703.5545171339563 +2013-01-13 12:00:00,2701.557632398754 +2013-01-13 13:00:00,2677.8629283489095 +2013-01-13 14:00:00,2646.8068535825546 +2013-01-13 15:00:00,2594.1308411214955 +2013-01-13 16:00:00,2635.1931464174454 +2013-01-13 17:00:00,2696.5233644859813 +2013-01-13 18:00:00,2818.697819314642 +2013-01-13 19:00:00,2839.7570093457944 +2013-01-13 20:00:00,2766.9844236760123 +2013-01-13 21:00:00,2673.9065420560746 +2013-01-13 22:00:00,2411.551401869159 +2013-01-13 23:00:00,1891.98753894081 +2013-01-14 00:00:00,1590.2990654205607 +2013-01-14 01:00:00,1342.6168224299065 +2013-01-14 02:00:00,1287.1869158878505 +2013-01-14 03:00:00,1269.4859813084113 +2013-01-14 04:00:00,1243.0249221183801 +2013-01-14 05:00:00,1270.3582554517134 +2013-01-14 06:00:00,1441.6822429906542 +2013-01-14 07:00:00,1648.3084112149534 +2013-01-14 08:00:00,1808.8099688473521 +2013-01-14 09:00:00,2204.9844236760123 +2013-01-14 10:00:00,2539.2305295950155 +2013-01-14 11:00:00,2585.7040498442366 +2013-01-14 12:00:00,2630.676012461059 +2013-01-14 13:00:00,2676.2585669781934 +2013-01-14 14:00:00,2616.2803738317757 +2013-01-14 15:00:00,2715.031152647975 +2013-01-14 16:00:00,2658.9968847352025 +2013-01-14 17:00:00,2703.785046728972 +2013-01-14 18:00:00,2885.595015576324 +2013-01-14 19:00:00,2901.3395638629286 +2013-01-14 20:00:00,2771.956386292835 +2013-01-14 21:00:00,2679.0186915887853 +2013-01-14 22:00:00,2418.467289719626 +2013-01-14 23:00:00,1984.5732087227414 +2013-01-15 00:00:00,1654.4859813084113 +2013-01-15 01:00:00,1416.5545171339563 +2013-01-15 02:00:00,1321.7912772585669 +2013-01-15 03:00:00,1268.4610591900312 +2013-01-15 04:00:00,1269.3520249221183 +2013-01-15 05:00:00,1311.8130841121495 +2013-01-15 06:00:00,1497.9252336448599 +2013-01-15 07:00:00,1689.4392523364486 +2013-01-15 08:00:00,1845.2772585669782 +2013-01-15 09:00:00,2240.557632398754 +2013-01-15 10:00:00,2494.6884735202493 +2013-01-15 11:00:00,2555.323987538941 +2013-01-15 12:00:00,2602.866043613707 +2013-01-15 13:00:00,2618.4205607476633 +2013-01-15 14:00:00,2652.183800623053 +2013-01-15 15:00:00,2603.4828660436137 +2013-01-15 16:00:00,2675.663551401869 +2013-01-15 17:00:00,2733.0716510903426 +2013-01-15 18:00:00,2922.208722741433 +2013-01-15 19:00:00,2897.9906542056074 +2013-01-15 20:00:00,2782.8317757009345 +2013-01-15 21:00:00,2677.442367601246 +2013-01-15 22:00:00,2451.7040498442366 +2013-01-15 23:00:00,1965.9532710280373 +2013-01-16 00:00:00,1625.3364485981308 +2013-01-16 01:00:00,1382.9532710280373 +2013-01-16 02:00:00,1307.803738317757 +2013-01-16 03:00:00,1276.271028037383 +2013-01-16 04:00:00,1247.1246105919004 +2013-01-16 05:00:00,1286.8629283489097 +2013-01-16 06:00:00,1487.1713395638628 +2013-01-16 07:00:00,1685.9532710280373 +2013-01-16 08:00:00,1860.9657320872275 +2013-01-16 09:00:00,2264.872274143302 +2013-01-16 10:00:00,2535.92523364486 +2013-01-16 11:00:00,2592.489096573209 +2013-01-16 12:00:00,2644.221183800623 +2013-01-16 13:00:00,2668.7383177570096 +2013-01-16 14:00:00,2668.9439252336447 +2013-01-16 15:00:00,2666.314641744548 +2013-01-16 16:00:00,2678.5140186915887 +2013-01-16 17:00:00,2750.0218068535823 +2013-01-16 18:00:00,2928.2242990654204 +2013-01-16 19:00:00,2917.3426791277257 +2013-01-16 20:00:00,2842.894080996885 +2013-01-16 21:00:00,2731.5545171339563 +2013-01-16 22:00:00,2487.373831775701 +2013-01-16 23:00:00,2005.3644859813085 +2013-01-17 00:00:00,1654.4797507788162 +2013-01-17 01:00:00,1392.981308411215 +2013-01-17 02:00:00,1309.9408099688474 +2013-01-17 03:00:00,1267.2118380062304 +2013-01-17 04:00:00,1238.239875389408 +2013-01-17 05:00:00,1291.7570093457944 +2013-01-17 06:00:00,1485.6292834890967 +2013-01-17 07:00:00,1709.1588785046729 +2013-01-17 08:00:00,1841.9470404984424 +2013-01-17 09:00:00,2248.9003115264795 +2013-01-17 10:00:00,2603.6884735202493 +2013-01-17 11:00:00,2634.588785046729 +2013-01-17 12:00:00,2719.8971962616824 +2013-01-17 13:00:00,2760.1993769470405 +2013-01-17 14:00:00,2759.8255451713394 +2013-01-17 15:00:00,2787.127725856698 +2013-01-17 16:00:00,2802.909657320872 +2013-01-17 17:00:00,2881.700934579439 +2013-01-17 18:00:00,3061.510903426791 +2013-01-17 19:00:00,3015.8504672897197 +2013-01-17 20:00:00,2930.8598130841124 +2013-01-17 21:00:00,2798.9781931464177 +2013-01-17 22:00:00,2573.1152647975077 +2013-01-17 23:00:00,2019.7507788161993 +2013-01-18 00:00:00,1668.7912772585669 +2013-01-18 01:00:00,1399.0 +2013-01-18 02:00:00,1338.3582554517134 +2013-01-18 03:00:00,1289.1090342679129 +2013-01-18 04:00:00,1280.5856697819315 +2013-01-18 05:00:00,1319.8566978193146 +2013-01-18 06:00:00,1529.4890965732088 +2013-01-18 07:00:00,1749.2585669781931 +2013-01-18 08:00:00,1894.2803738317757 +2013-01-18 09:00:00,2282.632398753894 +2013-01-18 10:00:00,2668.510903426791 +2013-01-18 11:00:00,2674.847352024922 +2013-01-18 12:00:00,2791.8535825545173 +2013-01-18 13:00:00,2841.3800623052957 +2013-01-18 14:00:00,2771.3426791277257 +2013-01-18 15:00:00,2838.323987538941 +2013-01-18 16:00:00,2827.8317757009345 +2013-01-18 17:00:00,2944.778816199377 +2013-01-18 18:00:00,3083.6105919003116 +2013-01-18 19:00:00,3027.4704049844236 +2013-01-18 20:00:00,2978.4828660436137 +2013-01-18 21:00:00,2888.0934579439254 +2013-01-18 22:00:00,2629.626168224299 +2013-01-18 23:00:00,2114.5981308411215 +2013-01-19 00:00:00,1711.5576323987539 +2013-01-19 01:00:00,1418.5700934579438 +2013-01-19 02:00:00,1315.5202492211838 +2013-01-19 03:00:00,1223.1090342679129 +2013-01-19 04:00:00,1201.797507788162 +2013-01-19 05:00:00,1233.8566978193146 +2013-01-19 06:00:00,1444.2834890965732 +2013-01-19 07:00:00,1602.4672897196263 +2013-01-19 08:00:00,1749.4610591900312 +2013-01-19 09:00:00,2235.3769470404986 +2013-01-19 10:00:00,2531.1495327102803 +2013-01-19 11:00:00,2654.5919003115264 +2013-01-19 12:00:00,2632.1931464174454 +2013-01-19 13:00:00,2644.538940809969 +2013-01-19 14:00:00,2666.442367601246 +2013-01-19 15:00:00,2656.006230529595 +2013-01-19 16:00:00,2729.373831775701 +2013-01-19 17:00:00,2724.5077881619936 +2013-01-19 18:00:00,2936.5140186915887 +2013-01-19 19:00:00,2917.828660436137 +2013-01-19 20:00:00,2786.052959501558 +2013-01-19 21:00:00,2716.828660436137 +2013-01-19 22:00:00,2465.277258566978 +2013-01-19 23:00:00,2031.632398753894 +2013-01-20 00:00:00,1661.2834890965732 +2013-01-20 01:00:00,1393.392523364486 +2013-01-20 02:00:00,1317.7227414330218 +2013-01-20 03:00:00,1254.5545171339563 +2013-01-20 04:00:00,1208.9408099688474 +2013-01-20 05:00:00,1234.1713395638628 +2013-01-20 06:00:00,1438.0778816199377 +2013-01-20 07:00:00,1618.2741433021806 +2013-01-20 08:00:00,1716.6448598130842 +2013-01-20 09:00:00,2165.1308411214955 +2013-01-20 10:00:00,2530.2803738317757 +2013-01-20 11:00:00,2693.5919003115264 +2013-01-20 12:00:00,2688.11214953271 +2013-01-20 13:00:00,2679.1619937694704 +2013-01-20 14:00:00,2652.9813084112147 +2013-01-20 15:00:00,2613.1619937694704 +2013-01-20 16:00:00,2731.4454828660437 +2013-01-20 17:00:00,2842.5607476635514 +2013-01-20 18:00:00,2867.613707165109 +2013-01-20 19:00:00,2865.5140186915887 +2013-01-20 20:00:00,2769.489096573209 +2013-01-20 21:00:00,2712.7102803738317 +2013-01-20 22:00:00,2408.8971962616824 +2013-01-20 23:00:00,1865.816199376947 +2013-01-21 00:00:00,1564.177570093458 +2013-01-21 01:00:00,1315.3894080996886 +2013-01-21 02:00:00,1268.2118380062304 +2013-01-21 03:00:00,1225.785046728972 +2013-01-21 04:00:00,1202.7881619937696 +2013-01-21 05:00:00,1251.1495327102805 +2013-01-21 06:00:00,1438.2772585669782 +2013-01-21 07:00:00,1654.6417445482866 +2013-01-21 08:00:00,1797.657320872274 +2013-01-21 09:00:00,2199.557632398754 +2013-01-21 10:00:00,2543.797507788162 +2013-01-21 11:00:00,2604.8535825545173 +2013-01-21 12:00:00,2648.277258566978 +2013-01-21 13:00:00,2726.9657320872275 +2013-01-21 14:00:00,2673.5669781931465 +2013-01-21 15:00:00,2663.691588785047 +2013-01-21 16:00:00,2665.4330218068535 +2013-01-21 17:00:00,2717.878504672897 +2013-01-21 18:00:00,2920.2492211838007 +2013-01-21 19:00:00,2886.6604361370714 +2013-01-21 20:00:00,2834.330218068536 +2013-01-21 21:00:00,2685.632398753894 +2013-01-21 22:00:00,2468.9781931464177 +2013-01-21 23:00:00,1965.4485981308412 +2013-01-22 00:00:00,1648.5389408099688 +2013-01-22 01:00:00,1382.2087227414331 +2013-01-22 02:00:00,1314.8878504672898 +2013-01-22 03:00:00,1255.4859813084113 +2013-01-22 04:00:00,1237.5077881619939 +2013-01-22 05:00:00,1294.3239875389409 +2013-01-22 06:00:00,1467.9906542056074 +2013-01-22 07:00:00,1694.018691588785 +2013-01-22 08:00:00,1840.271028037383 +2013-01-22 09:00:00,2241.2741433021806 +2013-01-22 10:00:00,2543.121495327103 +2013-01-22 11:00:00,2601.302180685358 +2013-01-22 12:00:00,2660.9221183800623 +2013-01-22 13:00:00,2673.4517133956388 +2013-01-22 14:00:00,2667.785046728972 +2013-01-22 15:00:00,2679.473520249221 +2013-01-22 16:00:00,2647.791277258567 +2013-01-22 17:00:00,2728.3800623052957 +2013-01-22 18:00:00,2923.105919003115 +2013-01-22 19:00:00,2883.239875389408 +2013-01-22 20:00:00,2805.0093457943926 +2013-01-22 21:00:00,2645.467289719626 +2013-01-22 22:00:00,2432.196261682243 +2013-01-22 23:00:00,1927.5109034267912 +2013-01-23 00:00:00,1589.2461059190032 +2013-01-23 01:00:00,1339.981308411215 +2013-01-23 02:00:00,1232.8691588785048 +2013-01-23 03:00:00,1191.1931464174454 +2013-01-23 04:00:00,1155.766355140187 +2013-01-23 05:00:00,1198.7071651090343 +2013-01-23 06:00:00,1373.9470404984424 +2013-01-23 07:00:00,1638.233644859813 +2013-01-23 08:00:00,1790.5514018691588 +2013-01-23 09:00:00,2233.713395638629 +2013-01-23 10:00:00,2573.0031152647975 +2013-01-23 11:00:00,2587.314641744548 +2013-01-23 12:00:00,2663.735202492212 +2013-01-23 13:00:00,2725.663551401869 +2013-01-23 14:00:00,2734.919003115265 +2013-01-23 15:00:00,2734.8317757009345 +2013-01-23 16:00:00,2718.4984423676015 +2013-01-23 17:00:00,2842.4392523364486 +2013-01-23 18:00:00,3027.2803738317757 +2013-01-23 19:00:00,2936.576323987539 +2013-01-23 20:00:00,2908.9844236760123 +2013-01-23 21:00:00,2739.5015576323985 +2013-01-23 22:00:00,2502.292834890966 +2013-01-23 23:00:00,1996.0436137071652 +2013-01-24 00:00:00,1642.7009345794393 +2013-01-24 01:00:00,1366.4018691588785 +2013-01-24 02:00:00,1304.1869158878505 +2013-01-24 03:00:00,1237.7570093457944 +2013-01-24 04:00:00,1225.9158878504672 +2013-01-24 05:00:00,1250.454828660436 +2013-01-24 06:00:00,1450.9003115264798 +2013-01-24 07:00:00,1687.2118380062304 +2013-01-24 08:00:00,1841.8878504672898 +2013-01-24 09:00:00,2258.239875389408 +2013-01-24 10:00:00,2591.8909657320874 +2013-01-24 11:00:00,2613.93769470405 +2013-01-24 12:00:00,2684.133956386293 +2013-01-24 13:00:00,2723.152647975078 +2013-01-24 14:00:00,2655.5919003115264 +2013-01-24 15:00:00,2691.735202492212 +2013-01-24 16:00:00,2713.2305295950155 +2013-01-24 17:00:00,2812.601246105919 +2013-01-24 18:00:00,2997.0404984423676 +2013-01-24 19:00:00,2996.152647975078 +2013-01-24 20:00:00,2889.856697819315 +2013-01-24 21:00:00,2766.5545171339563 +2013-01-24 22:00:00,2515.5732087227416 +2013-01-24 23:00:00,1992.2679127725858 +2013-01-25 00:00:00,1624.5389408099688 +2013-01-25 01:00:00,1348.9750778816199 +2013-01-25 02:00:00,1278.8598130841121 +2013-01-25 03:00:00,1273.4922118380061 +2013-01-25 04:00:00,1258.4672897196263 +2013-01-25 05:00:00,1270.7912772585669 +2013-01-25 06:00:00,1446.454828660436 +2013-01-25 07:00:00,1711.4890965732088 +2013-01-25 08:00:00,1858.9563862928348 +2013-01-25 09:00:00,2290.5171339563863 +2013-01-25 10:00:00,2612.697819314642 +2013-01-25 11:00:00,2660.6573208722743 +2013-01-25 12:00:00,2715.2242990654204 +2013-01-25 13:00:00,2786.6292834890965 +2013-01-25 14:00:00,2764.6947040498444 +2013-01-25 15:00:00,2795.121495327103 +2013-01-25 16:00:00,2794.7757009345796 +2013-01-25 17:00:00,2894.4174454828662 +2013-01-25 18:00:00,3043.9501557632398 +2013-01-25 19:00:00,3012.059190031153 +2013-01-25 20:00:00,2916.7102803738317 +2013-01-25 21:00:00,2822.7040498442366 +2013-01-25 22:00:00,2632.0560747663553 +2013-01-25 23:00:00,2118.3956386292834 +2013-01-26 00:00:00,1714.3956386292834 +2013-01-26 01:00:00,1427.03738317757 +2013-01-26 02:00:00,1318.202492211838 +2013-01-26 03:00:00,1236.8566978193146 +2013-01-26 04:00:00,1262.4704049844236 +2013-01-26 05:00:00,1288.9595015576324 +2013-01-26 06:00:00,1510.993769470405 +2013-01-26 07:00:00,1708.183800623053 +2013-01-26 08:00:00,1834.588785046729 +2013-01-26 09:00:00,2282.744548286604 +2013-01-26 10:00:00,2597.314641744548 +2013-01-26 11:00:00,2704.2429906542056 +2013-01-26 12:00:00,2706.5607476635514 +2013-01-26 13:00:00,2731.8442367601247 +2013-01-26 14:00:00,2692.866043613707 +2013-01-26 15:00:00,2742.551401869159 +2013-01-26 16:00:00,2788.691588785047 +2013-01-26 17:00:00,2814.557632398754 +2013-01-26 18:00:00,2982.090342679128 +2013-01-26 19:00:00,3050.0186915887853 +2013-01-26 20:00:00,2891.7196261682243 +2013-01-26 21:00:00,2835.866043613707 +2013-01-26 22:00:00,2593.613707165109 +2013-01-26 23:00:00,2090.031152647975 +2013-01-27 00:00:00,1682.6978193146417 +2013-01-27 01:00:00,1402.7725856697818 +2013-01-27 02:00:00,1331.7943925233644 +2013-01-27 03:00:00,1269.1900311526479 +2013-01-27 04:00:00,1212.4330218068535 +2013-01-27 05:00:00,1261.4423676012461 +2013-01-27 06:00:00,1444.361370716511 +2013-01-27 07:00:00,1671.2429906542056 +2013-01-27 08:00:00,1781.0249221183801 +2013-01-27 09:00:00,2244.919003115265 +2013-01-27 10:00:00,2569.2242990654204 +2013-01-27 11:00:00,2756.6479750778817 +2013-01-27 12:00:00,2751.7320872274145 +2013-01-27 13:00:00,2753.7507788161993 +2013-01-27 14:00:00,2738.3520249221183 +2013-01-27 15:00:00,2733.096573208723 +2013-01-27 16:00:00,2812.8691588785045 +2013-01-27 17:00:00,2801.4454828660437 +2013-01-27 18:00:00,2919.7943925233644 +2013-01-27 19:00:00,2933.8068535825546 +2013-01-27 20:00:00,2796.1464174454827 +2013-01-27 21:00:00,2759.2679127725855 +2013-01-27 22:00:00,2425.3644859813085 +2013-01-27 23:00:00,1864.1152647975077 +2013-01-28 00:00:00,1552.6760124610591 +2013-01-28 01:00:00,1318.4080996884736 +2013-01-28 02:00:00,1257.6261682242991 +2013-01-28 03:00:00,1222.01246105919 +2013-01-28 04:00:00,1228.4423676012461 +2013-01-28 05:00:00,1278.3644859813085 +2013-01-28 06:00:00,1467.747663551402 +2013-01-28 07:00:00,1670.031152647975 +2013-01-28 08:00:00,1814.0218068535826 +2013-01-28 09:00:00,2220.5825545171338 +2013-01-28 10:00:00,2527.9127725856697 +2013-01-28 11:00:00,2618.06230529595 +2013-01-28 12:00:00,2660.700934579439 +2013-01-28 13:00:00,2693.6510903426793 +2013-01-28 14:00:00,2692.613707165109 +2013-01-28 15:00:00,2713.090342679128 +2013-01-28 16:00:00,2671.6479750778817 +2013-01-28 17:00:00,2784.8598130841124 +2013-01-28 18:00:00,2916.308411214953 +2013-01-28 19:00:00,2902.5358255451715 +2013-01-28 20:00:00,2825.386292834891 +2013-01-28 21:00:00,2704.894080996885 +2013-01-28 22:00:00,2490.4859813084113 +2013-01-28 23:00:00,1985.177570093458 +2013-01-29 00:00:00,1623.7102803738317 +2013-01-29 01:00:00,1333.0404984423676 +2013-01-29 02:00:00,1252.1370716510903 +2013-01-29 03:00:00,1214.6043613707166 +2013-01-29 04:00:00,1209.3894080996886 +2013-01-29 05:00:00,1270.8099688473521 +2013-01-29 06:00:00,1483.342679127726 +2013-01-29 07:00:00,1703.7383177570093 +2013-01-29 08:00:00,1848.576323987539 +2013-01-29 09:00:00,2255.8504672897197 +2013-01-29 10:00:00,2566.6479750778817 +2013-01-29 11:00:00,2600.7102803738317 +2013-01-29 12:00:00,2669.1370716510905 +2013-01-29 13:00:00,2712.841121495327 +2013-01-29 14:00:00,2671.0996884735205 +2013-01-29 15:00:00,2726.0404984423676 +2013-01-29 16:00:00,2707.0778816199377 +2013-01-29 17:00:00,2750.5171339563863 +2013-01-29 18:00:00,2908.638629283489 +2013-01-29 19:00:00,2920.9065420560746 +2013-01-29 20:00:00,2875.0218068535823 +2013-01-29 21:00:00,2738.080996884735 +2013-01-29 22:00:00,2477.5358255451715 +2013-01-29 23:00:00,1971.4299065420562 +2013-01-30 00:00:00,1625.4485981308412 +2013-01-30 01:00:00,1365.797507788162 +2013-01-30 02:00:00,1281.8816199376947 +2013-01-30 03:00:00,1219.9376947040498 +2013-01-30 04:00:00,1225.2461059190032 +2013-01-30 05:00:00,1265.545171339564 +2013-01-30 06:00:00,1479.8566978193146 +2013-01-30 07:00:00,1717.3457943925234 +2013-01-30 08:00:00,1862.7071651090343 +2013-01-30 09:00:00,2228.448598130841 +2013-01-30 10:00:00,2578.766355140187 +2013-01-30 11:00:00,2616.4517133956388 +2013-01-30 12:00:00,2706.8753894080996 +2013-01-30 13:00:00,2737.0218068535823 +2013-01-30 14:00:00,2686.314641744548 +2013-01-30 15:00:00,2746.4641744548285 +2013-01-30 16:00:00,2759.601246105919 +2013-01-30 17:00:00,2791.7507788161993 +2013-01-30 18:00:00,2932.97507788162 +2013-01-30 19:00:00,2975.0872274143303 +2013-01-30 20:00:00,2891.532710280374 +2013-01-30 21:00:00,2754.9345794392525 +2013-01-30 22:00:00,2512.828660436137 +2013-01-30 23:00:00,1965.4018691588785 +2013-01-31 00:00:00,1608.1401869158879 +2013-01-31 01:00:00,1326.728971962617 +2013-01-31 02:00:00,1249.8504672897195 +2013-01-31 03:00:00,1209.9376947040498 +2013-01-31 04:00:00,1183.7414330218069 +2013-01-31 05:00:00,1224.9252336448599 +2013-01-31 06:00:00,1453.8598130841121 +2013-01-31 07:00:00,1673.3894080996886 +2013-01-31 08:00:00,1813.2087227414331 +2013-01-31 09:00:00,2205.442367601246 +2013-01-31 10:00:00,2529.5919003115264 +2013-01-31 11:00:00,2602.4548286604363 +2013-01-31 12:00:00,2706.308411214953 +2013-01-31 13:00:00,2721.479750778816 +2013-01-31 14:00:00,2679.3707165109035 +2013-01-31 15:00:00,2717.0872274143303 +2013-01-31 16:00:00,2702.345794392523 +2013-01-31 17:00:00,2766.7694704049845 +2013-01-31 18:00:00,2919.5171339563863 +2013-01-31 19:00:00,2929.0 +2013-01-31 20:00:00,2902.2367601246106 +2013-01-31 21:00:00,2738.3115264797507 +2013-01-31 22:00:00,2473.489096573209 +2013-01-31 23:00:00,1958.398753894081 +2013-02-01 00:00:00,1601.6760124610591 +2013-02-01 01:00:00,1316.3956386292834 +2013-02-01 02:00:00,1255.5576323987539 +2013-02-01 03:00:00,1211.0809968847352 +2013-02-01 04:00:00,1189.8816199376947 +2013-02-01 05:00:00,1231.2056074766356 +2013-02-01 06:00:00,1433.2056074766356 +2013-02-01 07:00:00,1676.4579439252336 +2013-02-01 08:00:00,1811.6417445482866 +2013-02-01 09:00:00,2212.676012461059 +2013-02-01 10:00:00,2560.2056074766356 +2013-02-01 11:00:00,2606.931464174455 +2013-02-01 12:00:00,2726.457943925234 +2013-02-01 13:00:00,2757.822429906542 +2013-02-01 14:00:00,2691.9719626168226 +2013-02-01 15:00:00,2763.570093457944 +2013-02-01 16:00:00,2792.2959501557634 +2013-02-01 17:00:00,2819.644859813084 +2013-02-01 18:00:00,2973.7757009345796 +2013-02-01 19:00:00,3008.361370716511 +2013-02-01 20:00:00,2962.292834890966 +2013-02-01 21:00:00,2820.644859813084 +2013-02-01 22:00:00,2604.461059190031 +2013-02-01 23:00:00,2088.2367601246106 +2013-02-02 00:00:00,1656.4890965732088 +2013-02-02 01:00:00,1370.1308411214952 +2013-02-02 02:00:00,1261.411214953271 +2013-02-02 03:00:00,1181.5856697819315 +2013-02-02 04:00:00,1184.2616822429907 +2013-02-02 05:00:00,1215.2585669781931 +2013-02-02 06:00:00,1414.0498442367602 +2013-02-02 07:00:00,1646.5046728971963 +2013-02-02 08:00:00,1782.7757009345794 +2013-02-02 09:00:00,2260.7757009345796 +2013-02-02 10:00:00,2553.753894080997 +2013-02-02 11:00:00,2691.7414330218066 +2013-02-02 12:00:00,2643.797507788162 +2013-02-02 13:00:00,2687.1152647975077 +2013-02-02 14:00:00,2654.0218068535823 +2013-02-02 15:00:00,2636.0155763239877 +2013-02-02 16:00:00,2741.9844236760123 +2013-02-02 17:00:00,2731.4454828660437 +2013-02-02 18:00:00,2848.588785046729 +2013-02-02 19:00:00,2966.504672897196 +2013-02-02 20:00:00,2805.323987538941 +2013-02-02 21:00:00,2709.7507788161993 +2013-02-02 22:00:00,2471.1370716510905 +2013-02-02 23:00:00,2017.0841121495328 +2013-02-03 00:00:00,1631.214953271028 +2013-02-03 01:00:00,1361.3208722741433 +2013-02-03 02:00:00,1286.7694704049845 +2013-02-03 03:00:00,1242.5856697819315 +2013-02-03 04:00:00,1135.7071651090343 +2013-02-03 05:00:00,1163.2492211838007 +2013-02-03 06:00:00,1355.3644859813085 +2013-02-03 07:00:00,1564.3956386292834 +2013-02-03 08:00:00,1677.0965732087227 +2013-02-03 09:00:00,2139.1744548286606 +2013-02-03 10:00:00,2494.9813084112147 +2013-02-03 11:00:00,2617.448598130841 +2013-02-03 12:00:00,2574.080996884735 +2013-02-03 13:00:00,2577.856697819315 +2013-02-03 14:00:00,2564.177570093458 +2013-02-03 15:00:00,2541.551401869159 +2013-02-03 16:00:00,2609.8753894080996 +2013-02-03 17:00:00,2590.526479750779 +2013-02-03 18:00:00,2690.510903426791 +2013-02-03 19:00:00,2770.2803738317757 +2013-02-03 20:00:00,2650.1152647975077 +2013-02-03 21:00:00,2605.576323987539 +2013-02-03 22:00:00,2369.330218068536 +2013-02-03 23:00:00,1846.9283489096574 +2013-02-04 00:00:00,1506.6978193146417 +2013-02-04 01:00:00,1247.0218068535826 +2013-02-04 02:00:00,1188.5514018691588 +2013-02-04 03:00:00,1163.822429906542 +2013-02-04 04:00:00,1138.7009345794393 +2013-02-04 05:00:00,1185.0996884735202 +2013-02-04 06:00:00,1385.6604361370717 +2013-02-04 07:00:00,1605.1993769470405 +2013-02-04 08:00:00,1697.8878504672898 +2013-02-04 09:00:00,2148.3956386292834 +2013-02-04 10:00:00,2393.713395638629 +2013-02-04 11:00:00,2482.8535825545173 +2013-02-04 12:00:00,2495.495327102804 +2013-02-04 13:00:00,2532.791277258567 +2013-02-04 14:00:00,2521.919003115265 +2013-02-04 15:00:00,2528.4205607476633 +2013-02-04 16:00:00,2555.1931464174454 +2013-02-04 17:00:00,2577.286604361371 +2013-02-04 18:00:00,2741.526479750779 +2013-02-04 19:00:00,2789.292834890966 +2013-02-04 20:00:00,2716.277258566978 +2013-02-04 21:00:00,2603.6573208722743 +2013-02-04 22:00:00,2347.9501557632398 +2013-02-04 23:00:00,1937.6168224299065 +2013-02-05 00:00:00,1589.9968847352025 +2013-02-05 01:00:00,1324.2647975077882 +2013-02-05 02:00:00,1269.3395638629283 +2013-02-05 03:00:00,1230.1495327102805 +2013-02-05 04:00:00,1205.834890965732 +2013-02-05 05:00:00,1231.3115264797507 +2013-02-05 06:00:00,1422.1028037383178 +2013-02-05 07:00:00,1666.0716510903426 +2013-02-05 08:00:00,1799.981308411215 +2013-02-05 09:00:00,2213.171339563863 +2013-02-05 10:00:00,2435.4205607476633 +2013-02-05 11:00:00,2494.1495327102803 +2013-02-05 12:00:00,2559.909657320872 +2013-02-05 13:00:00,2528.5482866043612 +2013-02-05 14:00:00,2550.2492211838007 +2013-02-05 15:00:00,2568.894080996885 +2013-02-05 16:00:00,2610.6199376947043 +2013-02-05 17:00:00,2601.467289719626 +2013-02-05 18:00:00,2747.1401869158876 +2013-02-05 19:00:00,2798.841121495327 +2013-02-05 20:00:00,2715.8909657320874 +2013-02-05 21:00:00,2600.02492211838 +2013-02-05 22:00:00,2357.613707165109 +2013-02-05 23:00:00,1931.6417445482866 +2013-02-06 00:00:00,1594.3364485981308 +2013-02-06 01:00:00,1346.4485981308412 +2013-02-06 02:00:00,1280.9127725856697 +2013-02-06 03:00:00,1249.632398753894 +2013-02-06 04:00:00,1227.1246105919004 +2013-02-06 05:00:00,1244.98753894081 +2013-02-06 06:00:00,1428.3302180685357 +2013-02-06 07:00:00,1649.0467289719627 +2013-02-06 08:00:00,1800.4517133956385 +2013-02-06 09:00:00,2201.5825545171338 +2013-02-06 10:00:00,2426.121495327103 +2013-02-06 11:00:00,2482.713395638629 +2013-02-06 12:00:00,2514.4548286604363 +2013-02-06 13:00:00,2492.841121495327 +2013-02-06 14:00:00,2507.4922118380064 +2013-02-06 15:00:00,2531.8971962616824 +2013-02-06 16:00:00,2556.4392523364486 +2013-02-06 17:00:00,2572.330218068536 +2013-02-06 18:00:00,2737.5669781931465 +2013-02-06 19:00:00,2782.834890965732 +2013-02-06 20:00:00,2717.11214953271 +2013-02-06 21:00:00,2600.3800623052957 +2013-02-06 22:00:00,2335.5077881619936 +2013-02-06 23:00:00,1936.3021806853583 +2013-02-07 00:00:00,1606.3520249221183 +2013-02-07 01:00:00,1371.0031152647975 +2013-02-07 02:00:00,1303.0093457943926 +2013-02-07 03:00:00,1255.8753894080996 +2013-02-07 04:00:00,1206.7071651090343 +2013-02-07 05:00:00,1237.1370716510903 +2013-02-07 06:00:00,1418.651090342679 +2013-02-07 07:00:00,1661.1401869158879 +2013-02-07 08:00:00,1810.0404984423676 +2013-02-07 09:00:00,2196.489096573209 +2013-02-07 10:00:00,2420.202492211838 +2013-02-07 11:00:00,2442.239875389408 +2013-02-07 12:00:00,2482.9501557632398 +2013-02-07 13:00:00,2486.404984423676 +2013-02-07 14:00:00,2528.2492211838007 +2013-02-07 15:00:00,2493.121495327103 +2013-02-07 16:00:00,2517.3707165109035 +2013-02-07 17:00:00,2518.2056074766356 +2013-02-07 18:00:00,2703.2585669781934 +2013-02-07 19:00:00,2769.595015576324 +2013-02-07 20:00:00,2658.9501557632398 +2013-02-07 21:00:00,2573.1869158878503 +2013-02-07 22:00:00,2338.196261682243 +2013-02-07 23:00:00,1901.7414330218069 +2013-02-08 00:00:00,1551.4299065420562 +2013-02-08 01:00:00,1287.214953271028 +2013-02-08 02:00:00,1220.0809968847352 +2013-02-08 03:00:00,1180.9750778816199 +2013-02-08 04:00:00,1162.4984423676012 +2013-02-08 05:00:00,1198.0965732087227 +2013-02-08 06:00:00,1407.7071651090343 +2013-02-08 07:00:00,1596.9190031152648 +2013-02-08 08:00:00,1804.9283489096574 +2013-02-08 09:00:00,2201.4205607476633 +2013-02-08 10:00:00,2434.7258566978194 +2013-02-08 11:00:00,2482.878504672897 +2013-02-08 12:00:00,2528.669781931464 +2013-02-08 13:00:00,2528.5233644859813 +2013-02-08 14:00:00,2533.878504672897 +2013-02-08 15:00:00,2526.9781931464177 +2013-02-08 16:00:00,2577.8691588785045 +2013-02-08 17:00:00,2584.1464174454827 +2013-02-08 18:00:00,2738.190031152648 +2013-02-08 19:00:00,2815.9003115264795 +2013-02-08 20:00:00,2733.221183800623 +2013-02-08 21:00:00,2608.7258566978194 +2013-02-08 22:00:00,2419.461059190031 +2013-02-08 23:00:00,2027.5295950155764 +2013-02-09 00:00:00,1607.3551401869158 +2013-02-09 01:00:00,1330.7881619937696 +2013-02-09 02:00:00,1217.4922118380061 +2013-02-09 03:00:00,1140.454828660436 +2013-02-09 04:00:00,1139.7694704049845 +2013-02-09 05:00:00,1173.2647975077882 +2013-02-09 06:00:00,1392.5420560747664 +2013-02-09 07:00:00,1563.1121495327102 +2013-02-09 08:00:00,1715.1526479750778 +2013-02-09 09:00:00,2146.3489096573207 +2013-02-09 10:00:00,2437.822429906542 +2013-02-09 11:00:00,2528.9906542056074 +2013-02-09 12:00:00,2529.0934579439254 +2013-02-09 13:00:00,2531.0155763239877 +2013-02-09 14:00:00,2517.286604361371 +2013-02-09 15:00:00,2520.588785046729 +2013-02-09 16:00:00,2566.722741433022 +2013-02-09 17:00:00,2600.0778816199377 +2013-02-09 18:00:00,2706.2056074766356 +2013-02-09 19:00:00,2823.909657320872 +2013-02-09 20:00:00,2722.9501557632398 +2013-02-09 21:00:00,2587.2803738317757 +2013-02-09 22:00:00,2401.1308411214955 +2013-02-09 23:00:00,1996.9190031152648 +2013-02-10 00:00:00,1620.5046728971963 +2013-02-10 01:00:00,1338.5327102803737 +2013-02-10 02:00:00,1273.5856697819315 +2013-02-10 03:00:00,1220.8909657320871 +2013-02-10 04:00:00,1132.411214953271 +2013-02-10 05:00:00,1167.5794392523364 +2013-02-10 06:00:00,1368.619937694704 +2013-02-10 07:00:00,1558.8940809968847 +2013-02-10 08:00:00,1694.2429906542056 +2013-02-10 09:00:00,2122.9221183800623 +2013-02-10 10:00:00,2419.059190031153 +2013-02-10 11:00:00,2544.2492211838007 +2013-02-10 12:00:00,2553.6355140186915 +2013-02-10 13:00:00,2502.6168224299067 +2013-02-10 14:00:00,2484.01246105919 +2013-02-10 15:00:00,2501.5015576323985 +2013-02-10 16:00:00,2549.127725856698 +2013-02-10 17:00:00,2562.202492211838 +2013-02-10 18:00:00,2678.2585669781934 +2013-02-10 19:00:00,2679.728971962617 +2013-02-10 20:00:00,2604.7196261682243 +2013-02-10 21:00:00,2522.0841121495328 +2013-02-10 22:00:00,2262.2741433021806 +2013-02-10 23:00:00,1803.0903426791276 +2013-02-11 00:00:00,1517.2087227414331 +2013-02-11 01:00:00,1259.7694704049845 +2013-02-11 02:00:00,1192.8504672897195 +2013-02-11 03:00:00,1148.7445482866044 +2013-02-11 04:00:00,1140.367601246106 +2013-02-11 05:00:00,1187.5607476635514 +2013-02-11 06:00:00,1390.632398753894 +2013-02-11 07:00:00,1606.0031152647975 +2013-02-11 08:00:00,1737.0623052959502 +2013-02-11 09:00:00,2155.7881619937693 +2013-02-11 10:00:00,2422.255451713396 +2013-02-11 11:00:00,2505.847352024922 +2013-02-11 12:00:00,2536.760124610592 +2013-02-11 13:00:00,2606.5358255451715 +2013-02-11 14:00:00,2562.5233644859813 +2013-02-11 15:00:00,2576.9532710280373 +2013-02-11 16:00:00,2637.1557632398753 +2013-02-11 17:00:00,2658.9781931464177 +2013-02-11 18:00:00,2756.510903426791 +2013-02-11 19:00:00,2795.355140186916 +2013-02-11 20:00:00,2712.473520249221 +2013-02-11 21:00:00,2615.7258566978194 +2013-02-11 22:00:00,2327.1152647975077 +2013-02-11 23:00:00,1935.3271028037384 +2013-02-12 00:00:00,1606.398753894081 +2013-02-12 01:00:00,1315.0716510903426 +2013-02-12 02:00:00,1241.9065420560748 +2013-02-12 03:00:00,1196.601246105919 +2013-02-12 04:00:00,1183.5607476635514 +2013-02-12 05:00:00,1206.3084112149534 +2013-02-12 06:00:00,1409.8971962616822 +2013-02-12 07:00:00,1630.4143302180685 +2013-02-12 08:00:00,1747.9003115264798 +2013-02-12 09:00:00,2144.105919003115 +2013-02-12 10:00:00,2387.6417445482866 +2013-02-12 11:00:00,2466.722741433022 +2013-02-12 12:00:00,2537.271028037383 +2013-02-12 13:00:00,2518.8442367601247 +2013-02-12 14:00:00,2540.0467289719627 +2013-02-12 15:00:00,2534.052959501558 +2013-02-12 16:00:00,2576.707165109034 +2013-02-12 17:00:00,2594.841121495327 +2013-02-12 18:00:00,2761.7632398753894 +2013-02-12 19:00:00,2784.9595015576324 +2013-02-12 20:00:00,2669.728971962617 +2013-02-12 21:00:00,2581.3956386292834 +2013-02-12 22:00:00,2322.993769470405 +2013-02-12 23:00:00,1894.5545171339563 +2013-02-13 00:00:00,1575.3582554517134 +2013-02-13 01:00:00,1329.9595015576324 +2013-02-13 02:00:00,1269.981308411215 +2013-02-13 03:00:00,1226.797507788162 +2013-02-13 04:00:00,1183.8286604361372 +2013-02-13 05:00:00,1211.7881619937696 +2013-02-13 06:00:00,1437.146417445483 +2013-02-13 07:00:00,1652.1028037383178 +2013-02-13 08:00:00,1797.9906542056074 +2013-02-13 09:00:00,2178.1495327102803 +2013-02-13 10:00:00,2443.3115264797507 +2013-02-13 11:00:00,2493.551401869159 +2013-02-13 12:00:00,2553.271028037383 +2013-02-13 13:00:00,2570.0467289719627 +2013-02-13 14:00:00,2553.1308411214955 +2013-02-13 15:00:00,2565.323987538941 +2013-02-13 16:00:00,2596.3707165109035 +2013-02-13 17:00:00,2598.663551401869 +2013-02-13 18:00:00,2737.828660436137 +2013-02-13 19:00:00,2838.7383177570096 +2013-02-13 20:00:00,2742.1308411214955 +2013-02-13 21:00:00,2658.043613707165 +2013-02-13 22:00:00,2371.607476635514 +2013-02-13 23:00:00,1934.6604361370717 +2013-02-14 00:00:00,1561.747663551402 +2013-02-14 01:00:00,1293.8130841121495 +2013-02-14 02:00:00,1230.2554517133956 +2013-02-14 03:00:00,1171.0778816199377 +2013-02-14 04:00:00,1170.9408099688474 +2013-02-14 05:00:00,1211.0436137071652 +2013-02-14 06:00:00,1410.2616822429907 +2013-02-14 07:00:00,1643.8380062305296 +2013-02-14 08:00:00,1794.2118380062304 +2013-02-14 09:00:00,2207.9003115264795 +2013-02-14 10:00:00,2442.255451713396 +2013-02-14 11:00:00,2488.803738317757 +2013-02-14 12:00:00,2573.9501557632398 +2013-02-14 13:00:00,2592.691588785047 +2013-02-14 14:00:00,2567.772585669782 +2013-02-14 15:00:00,2593.1495327102803 +2013-02-14 16:00:00,2579.9813084112147 +2013-02-14 17:00:00,2589.090342679128 +2013-02-14 18:00:00,2744.956386292835 +2013-02-14 19:00:00,2805.866043613707 +2013-02-14 20:00:00,2724.068535825545 +2013-02-14 21:00:00,2631.07476635514 +2013-02-14 22:00:00,2352.3800623052957 +2013-02-14 23:00:00,1939.0778816199377 +2013-02-15 00:00:00,1565.5669781931465 +2013-02-15 01:00:00,1300.3520249221183 +2013-02-15 02:00:00,1253.4797507788162 +2013-02-15 03:00:00,1198.01246105919 +2013-02-15 04:00:00,1176.4859813084113 +2013-02-15 05:00:00,1223.417445482866 +2013-02-15 06:00:00,1411.6542056074766 +2013-02-15 07:00:00,1669.5171339563863 +2013-02-15 08:00:00,1807.6604361370717 +2013-02-15 09:00:00,2191.386292834891 +2013-02-15 10:00:00,2425.3831775700933 +2013-02-15 11:00:00,2470.0 +2013-02-15 12:00:00,2534.299065420561 +2013-02-15 13:00:00,2550.931464174455 +2013-02-15 14:00:00,2606.052959501558 +2013-02-15 15:00:00,2576.866043613707 +2013-02-15 16:00:00,2599.6043613707166 +2013-02-15 17:00:00,2647.1090342679126 +2013-02-15 18:00:00,2734.5077881619936 +2013-02-15 19:00:00,2824.7165109034268 +2013-02-15 20:00:00,2761.5015576323985 +2013-02-15 21:00:00,2647.947040498442 +2013-02-15 22:00:00,2444.4922118380064 +2013-02-15 23:00:00,2029.6697819314643 +2013-02-16 00:00:00,1651.8099688473521 +2013-02-16 01:00:00,1406.3115264797507 +2013-02-16 02:00:00,1280.8193146417445 +2013-02-16 03:00:00,1183.1713395638628 +2013-02-16 04:00:00,1159.1059190031153 +2013-02-16 05:00:00,1186.6105919003114 +2013-02-16 06:00:00,1392.3271028037384 +2013-02-16 07:00:00,1603.5233644859813 +2013-02-16 08:00:00,1732.6105919003114 +2013-02-16 09:00:00,2164.822429906542 +2013-02-16 10:00:00,2450.7383177570096 +2013-02-16 11:00:00,2564.6105919003116 +2013-02-16 12:00:00,2545.7414330218066 +2013-02-16 13:00:00,2595.1401869158876 +2013-02-16 14:00:00,2545.5451713395637 +2013-02-16 15:00:00,2572.8971962616824 +2013-02-16 16:00:00,2598.8193146417448 +2013-02-16 17:00:00,2614.5545171339563 +2013-02-16 18:00:00,2776.03738317757 +2013-02-16 19:00:00,2854.968847352025 +2013-02-16 20:00:00,2759.0404984423676 +2013-02-16 21:00:00,2629.436137071651 +2013-02-16 22:00:00,2427.1464174454827 +2013-02-16 23:00:00,2028.6915887850466 +2013-02-17 00:00:00,1632.056074766355 +2013-02-17 01:00:00,1386.9595015576324 +2013-02-17 02:00:00,1311.1370716510903 +2013-02-17 03:00:00,1221.6884735202493 +2013-02-17 04:00:00,1151.0280373831777 +2013-02-17 05:00:00,1195.0404984423676 +2013-02-17 06:00:00,1392.7196261682243 +2013-02-17 07:00:00,1597.7227414330218 +2013-02-17 08:00:00,1704.0716510903426 +2013-02-17 09:00:00,2088.4205607476633 +2013-02-17 10:00:00,2415.233644859813 +2013-02-17 11:00:00,2550.3956386292834 +2013-02-17 12:00:00,2572.3489096573207 +2013-02-17 13:00:00,2547.3520249221183 +2013-02-17 14:00:00,2548.096573208723 +2013-02-17 15:00:00,2554.638629283489 +2013-02-17 16:00:00,2603.9345794392525 +2013-02-17 17:00:00,2592.92523364486 +2013-02-17 18:00:00,2717.4267912772584 +2013-02-17 19:00:00,2757.713395638629 +2013-02-17 20:00:00,2670.264797507788 +2013-02-17 21:00:00,2567.6666666666665 +2013-02-17 22:00:00,2321.542056074766 +2013-02-17 23:00:00,1859.0872274143303 +2013-02-18 00:00:00,1528.202492211838 +2013-02-18 01:00:00,1264.7196261682243 +2013-02-18 02:00:00,1220.4766355140187 +2013-02-18 03:00:00,1183.7694704049845 +2013-02-18 04:00:00,1206.7196261682243 +2013-02-18 05:00:00,1228.613707165109 +2013-02-18 06:00:00,1431.8785046728972 +2013-02-18 07:00:00,1636.8847352024923 +2013-02-18 08:00:00,1801.0934579439252 +2013-02-18 09:00:00,2181.227414330218 +2013-02-18 10:00:00,2427.190031152648 +2013-02-18 11:00:00,2537.221183800623 +2013-02-18 12:00:00,2547.5607476635514 +2013-02-18 13:00:00,2559.398753894081 +2013-02-18 14:00:00,2538.1464174454827 +2013-02-18 15:00:00,2561.9844236760123 +2013-02-18 16:00:00,2562.7757009345796 +2013-02-18 17:00:00,2619.3520249221183 +2013-02-18 18:00:00,2754.330218068536 +2013-02-18 19:00:00,2818.4828660436137 +2013-02-18 20:00:00,2738.669781931464 +2013-02-18 21:00:00,2637.6168224299067 +2013-02-18 22:00:00,2378.7383177570096 +2013-02-18 23:00:00,1953.657320872274 +2013-02-19 00:00:00,1617.5482866043615 +2013-02-19 01:00:00,1341.2866043613708 +2013-02-19 02:00:00,1268.3738317757009 +2013-02-19 03:00:00,1217.4672897196263 +2013-02-19 04:00:00,1221.0623052959502 +2013-02-19 05:00:00,1265.9065420560748 +2013-02-19 06:00:00,1459.2803738317757 +2013-02-19 07:00:00,1653.7943925233644 +2013-02-19 08:00:00,1801.7538940809968 +2013-02-19 09:00:00,2182.4454828660437 +2013-02-19 10:00:00,2436.4641744548285 +2013-02-19 11:00:00,2524.5732087227416 +2013-02-19 12:00:00,2565.0218068535823 +2013-02-19 13:00:00,2548.8193146417448 +2013-02-19 14:00:00,2546.968847352025 +2013-02-19 15:00:00,2607.1682242990655 +2013-02-19 16:00:00,2606.803738317757 +2013-02-19 17:00:00,2607.6168224299067 +2013-02-19 18:00:00,2717.4548286604363 +2013-02-19 19:00:00,2828.314641744548 +2013-02-19 20:00:00,2717.0280373831774 +2013-02-19 21:00:00,2610.97507788162 +2013-02-19 22:00:00,2361.504672897196 +2013-02-19 23:00:00,1923.6355140186915 +2013-02-20 00:00:00,1567.386292834891 +2013-02-20 01:00:00,1292.4766355140187 +2013-02-20 02:00:00,1223.4797507788162 +2013-02-20 03:00:00,1168.214953271028 +2013-02-20 04:00:00,1174.6292834890967 +2013-02-20 05:00:00,1204.1308411214952 +2013-02-20 06:00:00,1379.785046728972 +2013-02-20 07:00:00,1641.853582554517 +2013-02-20 08:00:00,1764.6105919003114 +2013-02-20 09:00:00,2166.9595015576324 +2013-02-20 10:00:00,2620.429906542056 +2013-02-20 11:00:00,2562.691588785047 +2013-02-20 12:00:00,2655.11214953271 +2013-02-20 13:00:00,2659.7632398753894 +2013-02-20 14:00:00,2611.940809968847 +2013-02-20 15:00:00,2674.07476635514 +2013-02-20 16:00:00,2641.4704049844236 +2013-02-20 17:00:00,2700.1152647975077 +2013-02-20 18:00:00,2825.654205607477 +2013-02-20 19:00:00,2852.9595015576324 +2013-02-20 20:00:00,2815.92523364486 +2013-02-20 21:00:00,2711.9844236760123 +2013-02-20 22:00:00,2467.2803738317757 +2013-02-20 23:00:00,1945.0249221183801 +2013-02-21 00:00:00,1563.411214953271 +2013-02-21 01:00:00,1284.981308411215 +2013-02-21 02:00:00,1221.7383177570093 +2013-02-21 03:00:00,1176.4984423676012 +2013-02-21 04:00:00,1182.6978193146417 +2013-02-21 05:00:00,1224.981308411215 +2013-02-21 06:00:00,1437.3395638629283 +2013-02-21 07:00:00,1652.8598130841121 +2013-02-21 08:00:00,1790.146417445483 +2013-02-21 09:00:00,2196.3769470404986 +2013-02-21 10:00:00,2558.2959501557634 +2013-02-21 11:00:00,2590.196261682243 +2013-02-21 12:00:00,2676.3644859813085 +2013-02-21 13:00:00,2717.0 +2013-02-21 14:00:00,2691.2834890965732 +2013-02-21 15:00:00,2725.196261682243 +2013-02-21 16:00:00,2682.6884735202493 +2013-02-21 17:00:00,2783.314641744548 +2013-02-21 18:00:00,2910.676012461059 +2013-02-21 19:00:00,2897.0996884735205 +2013-02-21 20:00:00,2859.856697819315 +2013-02-21 21:00:00,2746.2959501557634 +2013-02-21 22:00:00,2504.330218068536 +2013-02-21 23:00:00,1959.766355140187 +2013-02-22 00:00:00,1570.0280373831777 +2013-02-22 01:00:00,1292.7414330218069 +2013-02-22 02:00:00,1209.0841121495328 +2013-02-22 03:00:00,1169.2834890965732 +2013-02-22 04:00:00,1185.4018691588785 +2013-02-22 05:00:00,1236.7538940809968 +2013-02-22 06:00:00,1450.7725856697818 +2013-02-22 07:00:00,1662.031152647975 +2013-02-22 08:00:00,1808.0404984423676 +2013-02-22 09:00:00,2239.9906542056074 +2013-02-22 10:00:00,2598.663551401869 +2013-02-22 11:00:00,2673.3177570093458 +2013-02-22 12:00:00,2717.4766355140187 +2013-02-22 13:00:00,2734.6199376947043 +2013-02-22 14:00:00,2685.0654205607475 +2013-02-22 15:00:00,2692.909657320872 +2013-02-22 16:00:00,2684.0093457943926 +2013-02-22 17:00:00,2743.588785046729 +2013-02-22 18:00:00,2864.7507788161993 +2013-02-22 19:00:00,2885.6947040498444 +2013-02-22 20:00:00,2815.4828660436137 +2013-02-22 21:00:00,2670.9127725856697 +2013-02-22 22:00:00,2498.6105919003116 +2013-02-22 23:00:00,2038.2990654205607 +2013-02-23 00:00:00,1635.1557632398753 +2013-02-23 01:00:00,1387.4143302180685 +2013-02-23 02:00:00,1274.9345794392523 +2013-02-23 03:00:00,1166.9470404984424 +2013-02-23 04:00:00,1148.8691588785048 +2013-02-23 05:00:00,1189.872274143302 +2013-02-23 06:00:00,1410.4205607476636 +2013-02-23 07:00:00,1586.1993769470405 +2013-02-23 08:00:00,1748.7165109034268 +2013-02-23 09:00:00,2202.0498442367602 +2013-02-23 10:00:00,2504.6573208722743 +2013-02-23 11:00:00,2660.429906542056 +2013-02-23 12:00:00,2621.7165109034268 +2013-02-23 13:00:00,2657.520249221184 +2013-02-23 14:00:00,2618.3177570093458 +2013-02-23 15:00:00,2561.7507788161993 +2013-02-23 16:00:00,2621.1090342679126 +2013-02-23 17:00:00,2677.6573208722743 +2013-02-23 18:00:00,2731.809968847352 +2013-02-23 19:00:00,2864.8598130841124 +2013-02-23 20:00:00,2742.302180685358 +2013-02-23 21:00:00,2687.797507788162 +2013-02-23 22:00:00,2417.6168224299067 +2013-02-23 23:00:00,1982.473520249221 +2013-02-24 00:00:00,1561.239875389408 +2013-02-24 01:00:00,1329.0623052959502 +2013-02-24 02:00:00,1250.380062305296 +2013-02-24 03:00:00,1171.3177570093458 +2013-02-24 04:00:00,1095.361370716511 +2013-02-24 05:00:00,1153.7320872274142 +2013-02-24 06:00:00,1348.607476635514 +2013-02-24 07:00:00,1538.7538940809968 +2013-02-24 08:00:00,1640.816199376947 +2013-02-24 09:00:00,2104.9781931464177 +2013-02-24 10:00:00,2426.9221183800623 +2013-02-24 11:00:00,2582.1557632398753 +2013-02-24 12:00:00,2592.5545171339563 +2013-02-24 13:00:00,2539.613707165109 +2013-02-24 14:00:00,2537.2834890965732 +2013-02-24 15:00:00,2539.9003115264795 +2013-02-24 16:00:00,2579.01246105919 +2013-02-24 17:00:00,2618.5981308411215 +2013-02-24 18:00:00,2630.133956386293 +2013-02-24 19:00:00,2786.3769470404986 +2013-02-24 20:00:00,2667.2741433021806 +2013-02-24 21:00:00,2628.2242990654204 +2013-02-24 22:00:00,2353.7881619937693 +2013-02-24 23:00:00,1811.0249221183801 +2013-02-25 00:00:00,1481.9283489096574 +2013-02-25 01:00:00,1207.5358255451713 +2013-02-25 02:00:00,1140.183800623053 +2013-02-25 03:00:00,1112.0716510903426 +2013-02-25 04:00:00,1123.202492211838 +2013-02-25 05:00:00,1167.8130841121495 +2013-02-25 06:00:00,1387.4828660436137 +2013-02-25 07:00:00,1575.9563862928348 +2013-02-25 08:00:00,1729.9003115264798 +2013-02-25 09:00:00,2172.9844236760123 +2013-02-25 10:00:00,2421.373831775701 +2013-02-25 11:00:00,2560.3208722741433 +2013-02-25 12:00:00,2581.6479750778817 +2013-02-25 13:00:00,2555.2616822429904 +2013-02-25 14:00:00,2583.700934579439 +2013-02-25 15:00:00,2573.542056074766 +2013-02-25 16:00:00,2581.632398753894 +2013-02-25 17:00:00,2661.461059190031 +2013-02-25 18:00:00,2733.4984423676015 +2013-02-25 19:00:00,2806.473520249221 +2013-02-25 20:00:00,2753.1682242990655 +2013-02-25 21:00:00,2629.526479750779 +2013-02-25 22:00:00,2403.538940809969 +2013-02-25 23:00:00,1928.8255451713396 +2013-02-26 00:00:00,1572.5233644859813 +2013-02-26 01:00:00,1292.3177570093458 +2013-02-26 02:00:00,1216.588785046729 +2013-02-26 03:00:00,1172.056074766355 +2013-02-26 04:00:00,1189.0716510903426 +2013-02-26 05:00:00,1223.8785046728972 +2013-02-26 06:00:00,1416.1246105919004 +2013-02-26 07:00:00,1624.361370716511 +2013-02-26 08:00:00,1758.8130841121495 +2013-02-26 09:00:00,2177.6884735202493 +2013-02-26 10:00:00,2461.2897196261683 +2013-02-26 11:00:00,2579.0654205607475 +2013-02-26 12:00:00,2600.7196261682243 +2013-02-26 13:00:00,2594.607476635514 +2013-02-26 14:00:00,2542.7196261682243 +2013-02-26 15:00:00,2627.691588785047 +2013-02-26 16:00:00,2578.392523364486 +2013-02-26 17:00:00,2658.8006230529595 +2013-02-26 18:00:00,2742.7819314641742 +2013-02-26 19:00:00,2845.0218068535823 +2013-02-26 20:00:00,2771.271028037383 +2013-02-26 21:00:00,2640.778816199377 +2013-02-26 22:00:00,2405.323987538941 +2013-02-26 23:00:00,1905.0031152647975 +2013-02-27 00:00:00,1497.3146417445482 +2013-02-27 01:00:00,1250.632398753894 +2013-02-27 02:00:00,1174.822429906542 +2013-02-27 03:00:00,1137.398753894081 +2013-02-27 04:00:00,1164.6822429906542 +2013-02-27 05:00:00,1207.9376947040498 +2013-02-27 06:00:00,1407.146417445483 +2013-02-27 07:00:00,1594.1214953271028 +2013-02-27 08:00:00,1760.6853582554518 +2013-02-27 09:00:00,2193.0872274143303 +2013-02-27 10:00:00,2479.772585669782 +2013-02-27 11:00:00,2586.0654205607475 +2013-02-27 12:00:00,2609.6728971962616 +2013-02-27 13:00:00,2656.2367601246106 +2013-02-27 14:00:00,2644.6043613707166 +2013-02-27 15:00:00,2678.744548286604 +2013-02-27 16:00:00,2630.697819314642 +2013-02-27 17:00:00,2686.9439252336447 +2013-02-27 18:00:00,2770.5856697819313 +2013-02-27 19:00:00,2879.461059190031 +2013-02-27 20:00:00,2774.080996884735 +2013-02-27 21:00:00,2630.1308411214955 +2013-02-27 22:00:00,2390.809968847352 +2013-02-27 23:00:00,1876.2367601246106 +2013-02-28 00:00:00,1530.8598130841121 +2013-02-28 01:00:00,1264.7196261682243 +2013-02-28 02:00:00,1180.3457943925234 +2013-02-28 03:00:00,1147.5669781931465 +2013-02-28 04:00:00,1149.6728971962616 +2013-02-28 05:00:00,1201.7943925233644 +2013-02-28 06:00:00,1398.4859813084113 +2013-02-28 07:00:00,1603.2554517133956 +2013-02-28 08:00:00,1763.4672897196263 +2013-02-28 09:00:00,2179.4392523364486 +2013-02-28 10:00:00,2440.2492211838007 +2013-02-28 11:00:00,2548.7258566978194 +2013-02-28 12:00:00,2586.246105919003 +2013-02-28 13:00:00,2570.9719626168226 +2013-02-28 14:00:00,2607.2897196261683 +2013-02-28 15:00:00,2598.5233644859813 +2013-02-28 16:00:00,2590.7040498442366 +2013-02-28 17:00:00,2670.3271028037384 +2013-02-28 18:00:00,2750.744548286604 +2013-02-28 19:00:00,2859.373831775701 +2013-02-28 20:00:00,2772.246105919003 +2013-02-28 21:00:00,2629.9657320872275 +2013-02-28 22:00:00,2404.791277258567 +2013-02-28 23:00:00,1924.7383177570093 +2013-03-01 00:00:00,1537.619937694704 +2013-03-01 01:00:00,1259.0 +2013-03-01 02:00:00,1179.0218068535826 +2013-03-01 03:00:00,1132.3831775700935 +2013-03-01 04:00:00,1146.6230529595016 +2013-03-01 05:00:00,1189.5420560747664 +2013-03-01 06:00:00,1406.1433021806854 +2013-03-01 07:00:00,1587.8473520249222 +2013-03-01 08:00:00,1771.146417445483 +2013-03-01 09:00:00,2184.489096573209 +2013-03-01 10:00:00,2463.473520249221 +2013-03-01 11:00:00,2558.778816199377 +2013-03-01 12:00:00,2591.336448598131 +2013-03-01 13:00:00,2577.919003115265 +2013-03-01 14:00:00,2575.436137071651 +2013-03-01 15:00:00,2630.9345794392525 +2013-03-01 16:00:00,2622.4704049844236 +2013-03-01 17:00:00,2657.7040498442366 +2013-03-01 18:00:00,2756.11214953271 +2013-03-01 19:00:00,2843.9003115264795 +2013-03-01 20:00:00,2807.707165109034 +2013-03-01 21:00:00,2672.1993769470405 +2013-03-01 22:00:00,2498.5856697819313 +2013-03-01 23:00:00,2028.392523364486 +2013-03-02 00:00:00,1633.3894080996886 +2013-03-02 01:00:00,1375.1526479750778 +2013-03-02 02:00:00,1252.3520249221183 +2013-03-02 03:00:00,1159.4890965732088 +2013-03-02 04:00:00,1138.601246105919 +2013-03-02 05:00:00,1183.8473520249222 +2013-03-02 06:00:00,1403.9345794392523 +2013-03-02 07:00:00,1584.7165109034268 +2013-03-02 08:00:00,1717.582554517134 +2013-03-02 09:00:00,2170.0186915887853 +2013-03-02 10:00:00,2489.6884735202493 +2013-03-02 11:00:00,2606.97507788162 +2013-03-02 12:00:00,2621.373831775701 +2013-03-02 13:00:00,2565.01246105919 +2013-03-02 14:00:00,2617.791277258567 +2013-03-02 15:00:00,2571.227414330218 +2013-03-02 16:00:00,2642.5482866043612 +2013-03-02 17:00:00,2624.713395638629 +2013-03-02 18:00:00,2710.557632398754 +2013-03-02 19:00:00,2880.8193146417448 +2013-03-02 20:00:00,2756.0996884735205 +2013-03-02 21:00:00,2705.6947040498444 +2013-03-02 22:00:00,2467.052959501558 +2013-03-02 23:00:00,2021.3831775700935 +2013-03-03 00:00:00,1616.2803738317757 +2013-03-03 01:00:00,1355.9968847352025 +2013-03-03 02:00:00,1269.8940809968847 +2013-03-03 03:00:00,1203.5482866043615 +2013-03-03 04:00:00,1134.1308411214952 +2013-03-03 05:00:00,1204.760124610592 +2013-03-03 06:00:00,1374.8660436137072 +2013-03-03 07:00:00,1550.9968847352025 +2013-03-03 08:00:00,1683.8660436137072 +2013-03-03 09:00:00,2116.3831775700933 +2013-03-03 10:00:00,2445.143302180685 +2013-03-03 11:00:00,2585.6666666666665 +2013-03-03 12:00:00,2564.669781931464 +2013-03-03 13:00:00,2537.495327102804 +2013-03-03 14:00:00,2508.3831775700933 +2013-03-03 15:00:00,2538.3115264797507 +2013-03-03 16:00:00,2621.5669781931465 +2013-03-03 17:00:00,2599.8380062305296 +2013-03-03 18:00:00,2703.068535825545 +2013-03-03 19:00:00,2813.713395638629 +2013-03-03 20:00:00,2659.931464174455 +2013-03-03 21:00:00,2633.5732087227416 +2013-03-03 22:00:00,2388.735202492212 +2013-03-03 23:00:00,1834.4267912772586 +2013-03-04 00:00:00,1509.638629283489 +2013-03-04 01:00:00,1232.2990654205607 +2013-03-04 02:00:00,1187.4454828660437 +2013-03-04 03:00:00,1159.5669781931465 +2013-03-04 04:00:00,1165.392523364486 +2013-03-04 05:00:00,1209.1713395638628 +2013-03-04 06:00:00,1405.2367601246106 +2013-03-04 07:00:00,1586.6978193146417 +2013-03-04 08:00:00,1709.8847352024923 +2013-03-04 09:00:00,2157.436137071651 +2013-03-04 10:00:00,2474.127725856698 +2013-03-04 11:00:00,2531.5140186915887 +2013-03-04 12:00:00,2561.8193146417448 +2013-03-04 13:00:00,2610.4143302180687 +2013-03-04 14:00:00,2585.601246105919 +2013-03-04 15:00:00,2622.0654205607475 +2013-03-04 16:00:00,2626.9657320872275 +2013-03-04 17:00:00,2697.9844236760123 +2013-03-04 18:00:00,2787.7757009345796 +2013-03-04 19:00:00,2821.2180685358258 +2013-03-04 20:00:00,2802.299065420561 +2013-03-04 21:00:00,2660.3271028037384 +2013-03-04 22:00:00,2472.4205607476633 +2013-03-04 23:00:00,1946.7009345794393 +2013-03-05 00:00:00,1576.1121495327102 +2013-03-05 01:00:00,1295.981308411215 +2013-03-05 02:00:00,1248.5420560747664 +2013-03-05 03:00:00,1203.7227414330218 +2013-03-05 04:00:00,1221.6479750778817 +2013-03-05 05:00:00,1259.0529595015576 +2013-03-05 06:00:00,1435.2866043613708 +2013-03-05 07:00:00,1640.9221183800623 +2013-03-05 08:00:00,1807.361370716511 +2013-03-05 09:00:00,2192.059190031153 +2013-03-05 10:00:00,2517.246105919003 +2013-03-05 11:00:00,2579.183800623053 +2013-03-05 12:00:00,2692.4330218068535 +2013-03-05 13:00:00,2650.866043613707 +2013-03-05 14:00:00,2624.5077881619936 +2013-03-05 15:00:00,2665.0872274143303 +2013-03-05 16:00:00,2635.778816199377 +2013-03-05 17:00:00,2741.735202492212 +2013-03-05 18:00:00,2809.7414330218066 +2013-03-05 19:00:00,2865.0404984423676 +2013-03-05 20:00:00,2852.133956386293 +2013-03-05 21:00:00,2747.632398753894 +2013-03-05 22:00:00,2498.9844236760123 +2013-03-05 23:00:00,1943.4330218068535 +2013-03-06 00:00:00,1531.2616822429907 +2013-03-06 01:00:00,1302.165109034268 +2013-03-06 02:00:00,1244.1900311526479 +2013-03-06 03:00:00,1202.9283489096574 +2013-03-06 04:00:00,1224.8255451713396 +2013-03-06 05:00:00,1240.0342679127725 +2013-03-06 06:00:00,1421.177570093458 +2013-03-06 07:00:00,1640.3115264797507 +2013-03-06 08:00:00,1796.4641744548287 +2013-03-06 09:00:00,2196.878504672897 +2013-03-06 10:00:00,2533.6884735202493 +2013-03-06 11:00:00,2597.8068535825546 +2013-03-06 12:00:00,2682.4174454828662 +2013-03-06 13:00:00,2678.489096573209 +2013-03-06 14:00:00,2642.461059190031 +2013-03-06 15:00:00,2698.9781931464177 +2013-03-06 16:00:00,2705.3489096573207 +2013-03-06 17:00:00,2757.2679127725855 +2013-03-06 18:00:00,2849.2523364485983 +2013-03-06 19:00:00,2863.6947040498444 +2013-03-06 20:00:00,2851.3395638629286 +2013-03-06 21:00:00,2743.3052959501556 +2013-03-06 22:00:00,2466.2523364485983 +2013-03-06 23:00:00,1950.2990654205607 +2013-03-07 00:00:00,1583.613707165109 +2013-03-07 01:00:00,1317.993769470405 +2013-03-07 02:00:00,1254.7507788161993 +2013-03-07 03:00:00,1213.392523364486 +2013-03-07 04:00:00,1228.8909657320871 +2013-03-07 05:00:00,1254.7507788161993 +2013-03-07 06:00:00,1439.8629283489097 +2013-03-07 07:00:00,1662.006230529595 +2013-03-07 08:00:00,1800.2834890965732 +2013-03-07 09:00:00,2198.2803738317757 +2013-03-07 10:00:00,2563.822429906542 +2013-03-07 11:00:00,2611.940809968847 +2013-03-07 12:00:00,2684.940809968847 +2013-03-07 13:00:00,2674.878504672897 +2013-03-07 14:00:00,2657.6043613707166 +2013-03-07 15:00:00,2727.0778816199377 +2013-03-07 16:00:00,2683.0560747663553 +2013-03-07 17:00:00,2744.9813084112147 +2013-03-07 18:00:00,2836.5077881619936 +2013-03-07 19:00:00,2906.4859813084113 +2013-03-07 20:00:00,2834.722741433022 +2013-03-07 21:00:00,2740.5825545171338 +2013-03-07 22:00:00,2522.467289719626 +2013-03-07 23:00:00,1959.98753894081 +2013-03-08 00:00:00,1590.3302180685357 +2013-03-08 01:00:00,1330.398753894081 +2013-03-08 02:00:00,1260.651090342679 +2013-03-08 03:00:00,1206.177570093458 +2013-03-08 04:00:00,1213.526479750779 +2013-03-08 05:00:00,1244.2866043613708 +2013-03-08 06:00:00,1429.6728971962616 +2013-03-08 07:00:00,1653.1121495327102 +2013-03-08 08:00:00,1794.5389408099688 +2013-03-08 09:00:00,2215.7819314641742 +2013-03-08 10:00:00,2552.3489096573207 +2013-03-08 11:00:00,2645.479750778816 +2013-03-08 12:00:00,2737.158878504673 +2013-03-08 13:00:00,2698.3115264797507 +2013-03-08 14:00:00,2653.5981308411215 +2013-03-08 15:00:00,2663.5825545171338 +2013-03-08 16:00:00,2671.292834890966 +2013-03-08 17:00:00,2725.127725856698 +2013-03-08 18:00:00,2791.6884735202493 +2013-03-08 19:00:00,2855.264797507788 +2013-03-08 20:00:00,2820.5171339563863 +2013-03-08 21:00:00,2734.828660436137 +2013-03-08 22:00:00,2522.644859813084 +2013-03-08 23:00:00,2049.638629283489 +2013-03-09 00:00:00,1640.8317757009345 +2013-03-09 01:00:00,1387.2616822429907 +2013-03-09 02:00:00,1284.8753894080996 +2013-03-09 03:00:00,1196.0529595015576 +2013-03-09 04:00:00,1170.545171339564 +2013-03-09 05:00:00,1210.411214953271 +2013-03-09 06:00:00,1392.9968847352025 +2013-03-09 07:00:00,1590.1557632398753 +2013-03-09 08:00:00,1738.8878504672898 +2013-03-09 09:00:00,2217.6355140186915 +2013-03-09 10:00:00,2514.4548286604363 +2013-03-09 11:00:00,2686.330218068536 +2013-03-09 12:00:00,2692.822429906542 +2013-03-09 13:00:00,2657.9595015576324 +2013-03-09 14:00:00,2660.052959501558 +2013-03-09 15:00:00,2638.8130841121497 +2013-03-09 16:00:00,2642.8255451713394 +2013-03-09 17:00:00,2700.872274143302 +2013-03-09 18:00:00,2694.940809968847 +2013-03-09 19:00:00,2910.735202492212 +2013-03-09 20:00:00,2770.9345794392525 +2013-03-09 21:00:00,2667.03738317757 +2013-03-09 22:00:00,2493.866043613707 +2013-03-09 23:00:00,2020.9844236760125 +2013-03-10 00:00:00,1622.367601246106 +2013-03-10 01:00:00,1370.5233644859813 +2013-03-10 02:00:00,1288.3551401869158 +2013-03-10 03:00:00,1222.9252336448599 +2013-03-10 04:00:00,1145.9532710280373 +2013-03-10 05:00:00,1180.3115264797507 +2013-03-10 06:00:00,1361.9283489096574 +2013-03-10 07:00:00,1547.8442367601247 +2013-03-10 08:00:00,1637.1121495327102 +2013-03-10 09:00:00,2101.0872274143303 +2013-03-10 10:00:00,2454.722741433022 +2013-03-10 11:00:00,2655.02492211838 +2013-03-10 12:00:00,2623.8006230529595 +2013-03-10 13:00:00,2560.510903426791 +2013-03-10 14:00:00,2578.6604361370714 +2013-03-10 15:00:00,2547.398753894081 +2013-03-10 16:00:00,2588.97507788162 +2013-03-10 17:00:00,2608.766355140187 +2013-03-10 18:00:00,2608.5669781931465 +2013-03-10 19:00:00,2761.302180685358 +2013-03-10 20:00:00,2687.3395638629286 +2013-03-10 21:00:00,2601.9968847352025 +2013-03-10 22:00:00,2329.7757009345796 +2013-03-10 23:00:00,1811.6261682242991 +2013-03-11 00:00:00,1491.8317757009345 +2013-03-11 01:00:00,1227.2990654205607 +2013-03-11 02:00:00,1194.0841121495328 +2013-03-11 03:00:00,1127.2616822429907 +2013-03-11 04:00:00,1147.127725856698 +2013-03-11 05:00:00,1185.9844236760125 +2013-03-11 06:00:00,1378.834890965732 +2013-03-11 07:00:00,1576.5295950155764 +2013-03-11 08:00:00,1715.8847352024923 +2013-03-11 09:00:00,2123.713395638629 +2013-03-11 10:00:00,2474.096573208723 +2013-03-11 11:00:00,2561.3333333333335 +2013-03-11 12:00:00,2588.510903426791 +2013-03-11 13:00:00,2601.323987538941 +2013-03-11 14:00:00,2575.97507788162 +2013-03-11 15:00:00,2608.096573208723 +2013-03-11 16:00:00,2602.6947040498444 +2013-03-11 17:00:00,2677.9283489096574 +2013-03-11 18:00:00,2751.2118380062307 +2013-03-11 19:00:00,2790.816199376947 +2013-03-11 20:00:00,2783.940809968847 +2013-03-11 21:00:00,2656.1246105919004 +2013-03-11 22:00:00,2422.355140186916 +2013-03-11 23:00:00,1963.797507788162 +2013-03-12 00:00:00,1561.3146417445482 +2013-03-12 01:00:00,1281.6635514018692 +2013-03-12 02:00:00,1213.6635514018692 +2013-03-12 03:00:00,1157.417445482866 +2013-03-12 04:00:00,1190.0747663551401 +2013-03-12 05:00:00,1251.196261682243 +2013-03-12 06:00:00,1408.177570093458 +2013-03-12 07:00:00,1626.5732087227414 +2013-03-12 08:00:00,1743.6448598130842 +2013-03-12 09:00:00,2164.7476635514017 +2013-03-12 10:00:00,2527.797507788162 +2013-03-12 11:00:00,2615.133956386293 +2013-03-12 12:00:00,2665.0467289719627 +2013-03-12 13:00:00,2671.1993769470405 +2013-03-12 14:00:00,2630.302180685358 +2013-03-12 15:00:00,2687.7165109034268 +2013-03-12 16:00:00,2626.931464174455 +2013-03-12 17:00:00,2632.2585669781934 +2013-03-12 18:00:00,2752.386292834891 +2013-03-12 19:00:00,2802.171339563863 +2013-03-12 20:00:00,2741.0498442367602 +2013-03-12 21:00:00,2677.931464174455 +2013-03-12 22:00:00,2357.07476635514 +2013-03-12 23:00:00,1926.6978193146417 +2013-03-13 00:00:00,1547.1619937694704 +2013-03-13 01:00:00,1257.6292834890967 +2013-03-13 02:00:00,1184.5109034267912 +2013-03-13 03:00:00,1149.619937694704 +2013-03-13 04:00:00,1161.3520249221183 +2013-03-13 05:00:00,1198.8847352024923 +2013-03-13 06:00:00,1376.8317757009345 +2013-03-13 07:00:00,1590.9158878504672 +2013-03-13 08:00:00,1703.0685358255453 +2013-03-13 09:00:00,2137.392523364486 +2013-03-13 10:00:00,2435.2897196261683 +2013-03-13 11:00:00,2505.0218068535823 +2013-03-13 12:00:00,2582.208722741433 +2013-03-13 13:00:00,2559.202492211838 +2013-03-13 14:00:00,2553.495327102804 +2013-03-13 15:00:00,2549.9283489096574 +2013-03-13 16:00:00,2524.4641744548285 +2013-03-13 17:00:00,2575.8691588785045 +2013-03-13 18:00:00,2651.411214953271 +2013-03-13 19:00:00,2798.9968847352025 +2013-03-13 20:00:00,2714.7040498442366 +2013-03-13 21:00:00,2604.6168224299067 +2013-03-13 22:00:00,2369.6728971962616 +2013-03-13 23:00:00,1872.386292834891 +2013-03-14 00:00:00,1504.9283489096574 +2013-03-14 01:00:00,1228.2461059190032 +2013-03-14 02:00:00,1154.0155763239875 +2013-03-14 03:00:00,1105.9906542056074 +2013-03-14 04:00:00,1120.8255451713396 +2013-03-14 05:00:00,1169.5576323987539 +2013-03-14 06:00:00,1357.006230529595 +2013-03-14 07:00:00,1569.0093457943926 +2013-03-14 08:00:00,1716.6728971962616 +2013-03-14 09:00:00,2132.03738317757 +2013-03-14 10:00:00,2407.4330218068535 +2013-03-14 11:00:00,2567.97507788162 +2013-03-14 12:00:00,2616.8691588785045 +2013-03-14 13:00:00,2587.3426791277257 +2013-03-14 14:00:00,2588.8753894080996 +2013-03-14 15:00:00,2616.227414330218 +2013-03-14 16:00:00,2538.919003115265 +2013-03-14 17:00:00,2650.165109034268 +2013-03-14 18:00:00,2682.8130841121497 +2013-03-14 19:00:00,2801.5015576323985 +2013-03-14 20:00:00,2769.6666666666665 +2013-03-14 21:00:00,2636.264797507788 +2013-03-14 22:00:00,2412.2242990654204 +2013-03-14 23:00:00,1898.1308411214952 +2013-03-15 00:00:00,1526.7040498442368 +2013-03-15 01:00:00,1233.03738317757 +2013-03-15 02:00:00,1157.2834890965732 +2013-03-15 03:00:00,1116.6760124610591 +2013-03-15 04:00:00,1127.0591900311526 +2013-03-15 05:00:00,1176.0965732087227 +2013-03-15 06:00:00,1367.9657320872275 +2013-03-15 07:00:00,1542.5732087227414 +2013-03-15 08:00:00,1714.0685358255453 +2013-03-15 09:00:00,2136.753894080997 +2013-03-15 10:00:00,2466.5545171339563 +2013-03-15 11:00:00,2537.6947040498444 +2013-03-15 12:00:00,2568.423676012461 +2013-03-15 13:00:00,2582.302180685358 +2013-03-15 14:00:00,2552.7258566978194 +2013-03-15 15:00:00,2606.361370716511 +2013-03-15 16:00:00,2583.3800623052957 +2013-03-15 17:00:00,2655.0996884735205 +2013-03-15 18:00:00,2720.6666666666665 +2013-03-15 19:00:00,2847.4984423676015 +2013-03-15 20:00:00,2789.931464174455 +2013-03-15 21:00:00,2659.345794392523 +2013-03-15 22:00:00,2473.4859813084113 +2013-03-15 23:00:00,2022.2554517133956 +2013-03-16 00:00:00,1621.146417445483 +2013-03-16 01:00:00,1363.7507788161993 +2013-03-16 02:00:00,1249.6760124610591 +2013-03-16 03:00:00,1159.2959501557632 +2013-03-16 04:00:00,1135.5171339563863 +2013-03-16 05:00:00,1182.3551401869158 +2013-03-16 06:00:00,1356.638629283489 +2013-03-16 07:00:00,1574.398753894081 +2013-03-16 08:00:00,1678.3894080996886 +2013-03-16 09:00:00,2178.080996884735 +2013-03-16 10:00:00,2494.1401869158876 +2013-03-16 11:00:00,2679.5077881619936 +2013-03-16 12:00:00,2624.336448598131 +2013-03-16 13:00:00,2616.2180685358258 +2013-03-16 14:00:00,2617.9501557632398 +2013-03-16 15:00:00,2625.411214953271 +2013-03-16 16:00:00,2710.7943925233644 +2013-03-16 17:00:00,2670.2959501557634 +2013-03-16 18:00:00,2773.822429906542 +2013-03-16 19:00:00,2913.8130841121497 +2013-03-16 20:00:00,2774.0716510903426 +2013-03-16 21:00:00,2741.9003115264795 +2013-03-16 22:00:00,2541.766355140187 +2013-03-16 23:00:00,2042.6635514018692 +2013-03-17 00:00:00,1640.3551401869158 +2013-03-17 01:00:00,1374.386292834891 +2013-03-17 02:00:00,1295.6635514018692 +2013-03-17 03:00:00,1229.526479750779 +2013-03-17 04:00:00,1145.4392523364486 +2013-03-17 05:00:00,1187.2741433021806 +2013-03-17 06:00:00,1360.417445482866 +2013-03-17 07:00:00,1562.3177570093458 +2013-03-17 08:00:00,1672.0155763239875 +2013-03-17 09:00:00,2147.8753894080996 +2013-03-17 10:00:00,2501.0031152647975 +2013-03-17 11:00:00,2660.669781931464 +2013-03-17 12:00:00,2652.1464174454827 +2013-03-17 13:00:00,2595.2897196261683 +2013-03-17 14:00:00,2551.9003115264795 +2013-03-17 15:00:00,2541.0093457943926 +2013-03-17 16:00:00,2570.766355140187 +2013-03-17 17:00:00,2589.691588785047 +2013-03-17 18:00:00,2580.0031152647975 +2013-03-17 19:00:00,2769.5171339563863 +2013-03-17 20:00:00,2699.607476635514 +2013-03-17 21:00:00,2590.2429906542056 +2013-03-17 22:00:00,2324.5919003115264 +2013-03-17 23:00:00,1810.8971962616822 +2013-03-18 00:00:00,1469.7570093457944 +2013-03-18 01:00:00,1212.803738317757 +2013-03-18 02:00:00,1148.5576323987539 +2013-03-18 03:00:00,1109.473520249221 +2013-03-18 04:00:00,1116.2679127725858 +2013-03-18 05:00:00,1171.6168224299065 +2013-03-18 06:00:00,1339.5482866043615 +2013-03-18 07:00:00,1536.7912772585669 +2013-03-18 08:00:00,1681.8130841121495 +2013-03-18 09:00:00,2102.8193146417448 +2013-03-18 10:00:00,2428.1744548286606 +2013-03-18 11:00:00,2600.557632398754 +2013-03-18 12:00:00,2573.93769470405 +2013-03-18 13:00:00,2608.2523364485983 +2013-03-18 14:00:00,2608.8006230529595 +2013-03-18 15:00:00,2619.2056074766356 +2013-03-18 16:00:00,2556.4080996884736 +2013-03-18 17:00:00,2688.526479750779 +2013-03-18 18:00:00,2648.1869158878503 +2013-03-18 19:00:00,2783.613707165109 +2013-03-18 20:00:00,2761.5669781931465 +2013-03-18 21:00:00,2651.5669781931465 +2013-03-18 22:00:00,2454.059190031153 +2013-03-18 23:00:00,1941.7632398753894 +2013-03-19 00:00:00,1569.6915887850466 +2013-03-19 01:00:00,1287.1744548286604 +2013-03-19 02:00:00,1199.6105919003114 +2013-03-19 03:00:00,1151.8785046728972 +2013-03-19 04:00:00,1148.0031152647975 +2013-03-19 05:00:00,1202.6760124610591 +2013-03-19 06:00:00,1373.0 +2013-03-19 07:00:00,1557.196261682243 +2013-03-19 08:00:00,1696.6230529595016 +2013-03-19 09:00:00,2139.0 +2013-03-19 10:00:00,2486.956386292835 +2013-03-19 11:00:00,2569.676012461059 +2013-03-19 12:00:00,2659.0778816199377 +2013-03-19 13:00:00,2656.8317757009345 +2013-03-19 14:00:00,2624.822429906542 +2013-03-19 15:00:00,2674.6417445482866 +2013-03-19 16:00:00,2624.01246105919 +2013-03-19 17:00:00,2692.8816199376947 +2013-03-19 18:00:00,2745.495327102804 +2013-03-19 19:00:00,2818.3333333333335 +2013-03-19 20:00:00,2783.367601246106 +2013-03-19 21:00:00,2638.4548286604363 +2013-03-19 22:00:00,2454.8255451713394 +2013-03-19 23:00:00,1907.4859813084113 +2013-03-20 00:00:00,1525.9221183800623 +2013-03-20 01:00:00,1241.5919003115264 +2013-03-20 02:00:00,1190.2056074766356 +2013-03-20 03:00:00,1133.0654205607477 +2013-03-20 04:00:00,1147.576323987539 +2013-03-20 05:00:00,1202.03738317757 +2013-03-20 06:00:00,1371.7943925233644 +2013-03-20 07:00:00,1542.1370716510903 +2013-03-20 08:00:00,1695.3177570093458 +2013-03-20 09:00:00,2128.9221183800623 +2013-03-20 10:00:00,2481.1931464174454 +2013-03-20 11:00:00,2506.436137071651 +2013-03-20 12:00:00,2607.8006230529595 +2013-03-20 13:00:00,2569.940809968847 +2013-03-20 14:00:00,2604.785046728972 +2013-03-20 15:00:00,2578.919003115265 +2013-03-20 16:00:00,2609.676012461059 +2013-03-20 17:00:00,2655.2741433021806 +2013-03-20 18:00:00,2691.5545171339563 +2013-03-20 19:00:00,2838.9283489096574 +2013-03-20 20:00:00,2800.5669781931465 +2013-03-20 21:00:00,2661.8847352024923 +2013-03-20 22:00:00,2476.4704049844236 +2013-03-20 23:00:00,1919.2866043613708 +2013-03-21 00:00:00,1563.6448598130842 +2013-03-21 01:00:00,1260.9252336448599 +2013-03-21 02:00:00,1206.6292834890967 +2013-03-21 03:00:00,1153.2741433021806 +2013-03-21 04:00:00,1166.9408099688474 +2013-03-21 05:00:00,1213.2959501557632 +2013-03-21 06:00:00,1380.3831775700935 +2013-03-21 07:00:00,1568.5669781931465 +2013-03-21 08:00:00,1701.6542056074766 +2013-03-21 09:00:00,2135.6666666666665 +2013-03-21 10:00:00,2484.0841121495328 +2013-03-21 11:00:00,2538.8691588785045 +2013-03-21 12:00:00,2629.264797507788 +2013-03-21 13:00:00,2605.5295950155764 +2013-03-21 14:00:00,2611.3520249221183 +2013-03-21 15:00:00,2645.576323987539 +2013-03-21 16:00:00,2619.2056074766356 +2013-03-21 17:00:00,2665.2679127725855 +2013-03-21 18:00:00,2677.9844236760123 +2013-03-21 19:00:00,2802.1090342679126 +2013-03-21 20:00:00,2836.2492211838007 +2013-03-21 21:00:00,2707.1682242990655 +2013-03-21 22:00:00,2481.0342679127725 +2013-03-21 23:00:00,1920.0249221183801 +2013-03-22 00:00:00,1539.9719626168223 +2013-03-22 01:00:00,1276.1806853582555 +2013-03-22 02:00:00,1209.6947040498442 +2013-03-22 03:00:00,1175.3707165109033 +2013-03-22 04:00:00,1182.127725856698 +2013-03-22 05:00:00,1228.8753894080996 +2013-03-22 06:00:00,1399.1931464174454 +2013-03-22 07:00:00,1610.2087227414331 +2013-03-22 08:00:00,1727.4299065420562 +2013-03-22 09:00:00,2157.2180685358258 +2013-03-22 10:00:00,2523.570093457944 +2013-03-22 11:00:00,2626.504672897196 +2013-03-22 12:00:00,2690.5077881619936 +2013-03-22 13:00:00,2638.02492211838 +2013-03-22 14:00:00,2631.0872274143303 +2013-03-22 15:00:00,2713.3707165109035 +2013-03-22 16:00:00,2668.97507788162 +2013-03-22 17:00:00,2722.707165109034 +2013-03-22 18:00:00,2737.3520249221183 +2013-03-22 19:00:00,2883.3489096573207 +2013-03-22 20:00:00,2868.7258566978194 +2013-03-22 21:00:00,2716.1464174454827 +2013-03-22 22:00:00,2571.9345794392525 +2013-03-22 23:00:00,2053.0218068535823 +2013-03-23 00:00:00,1663.1121495327102 +2013-03-23 01:00:00,1395.5514018691588 +2013-03-23 02:00:00,1282.165109034268 +2013-03-23 03:00:00,1186.8130841121495 +2013-03-23 04:00:00,1156.9158878504672 +2013-03-23 05:00:00,1187.5171339563863 +2013-03-23 06:00:00,1374.0934579439252 +2013-03-23 07:00:00,1552.816199376947 +2013-03-23 08:00:00,1673.9158878504672 +2013-03-23 09:00:00,2183.5451713395637 +2013-03-23 10:00:00,2494.504672897196 +2013-03-23 11:00:00,2643.894080996885 +2013-03-23 12:00:00,2617.93769470405 +2013-03-23 13:00:00,2620.638629283489 +2013-03-23 14:00:00,2589.9065420560746 +2013-03-23 15:00:00,2602.4454828660437 +2013-03-23 16:00:00,2672.9719626168226 +2013-03-23 17:00:00,2689.894080996885 +2013-03-23 18:00:00,2675.457943925234 +2013-03-23 19:00:00,2874.489096573209 +2013-03-23 20:00:00,2792.644859813084 +2013-03-23 21:00:00,2738.3520249221183 +2013-03-23 22:00:00,2536.772585669782 +2013-03-23 23:00:00,2041.4454828660437 +2013-03-24 00:00:00,1629.1370716510903 +2013-03-24 01:00:00,1373.8816199376947 +2013-03-24 02:00:00,1293.1931464174454 +2013-03-24 03:00:00,1217.0591900311526 +2013-03-24 04:00:00,1135.8971962616822 +2013-03-24 05:00:00,1171.1121495327102 +2013-03-24 06:00:00,1349.3084112149534 +2013-03-24 07:00:00,1502.5389408099688 +2013-03-24 08:00:00,1665.5482866043615 +2013-03-24 09:00:00,2138.090342679128 +2013-03-24 10:00:00,2451.158878504673 +2013-03-24 11:00:00,2642.7383177570096 +2013-03-24 12:00:00,2597.785046728972 +2013-03-24 13:00:00,2600.8816199376947 +2013-03-24 14:00:00,2564.6822429906542 +2013-03-24 15:00:00,2568.7040498442366 +2013-03-24 16:00:00,2633.685358255452 +2013-03-24 17:00:00,2622.700934579439 +2013-03-24 18:00:00,2582.841121495327 +2013-03-24 19:00:00,2762.8847352024923 +2013-03-24 20:00:00,2705.8691588785045 +2013-03-24 21:00:00,2642.355140186916 +2013-03-24 22:00:00,2386.5015576323985 +2013-03-24 23:00:00,1810.4080996884736 +2013-03-25 00:00:00,1486.5919003115264 +2013-03-25 01:00:00,1227.7570093457944 +2013-03-25 02:00:00,1172.766355140187 +2013-03-25 03:00:00,1130.7071651090343 +2013-03-25 04:00:00,1138.728971962617 +2013-03-25 05:00:00,1206.8193146417445 +2013-03-25 06:00:00,1383.0529595015576 +2013-03-25 07:00:00,1568.9127725856697 +2013-03-25 08:00:00,1734.7196261682243 +2013-03-25 09:00:00,2142.0498442367602 +2013-03-25 10:00:00,2504.0093457943926 +2013-03-25 11:00:00,2649.510903426791 +2013-03-25 12:00:00,2711.697819314642 +2013-03-25 13:00:00,2705.1401869158876 +2013-03-25 14:00:00,2695.2367601246106 +2013-03-25 15:00:00,2727.903426791277 +2013-03-25 16:00:00,2721.735202492212 +2013-03-25 17:00:00,2778.669781931464 +2013-03-25 18:00:00,2806.8753894080996 +2013-03-25 19:00:00,2891.1682242990655 +2013-03-25 20:00:00,2850.707165109034 +2013-03-25 21:00:00,2755.1401869158876 +2013-03-25 22:00:00,2526.286604361371 +2013-03-25 23:00:00,1987.4392523364486 +2013-03-26 00:00:00,1641.6915887850466 +2013-03-26 01:00:00,1355.1121495327102 +2013-03-26 02:00:00,1280.8286604361372 +2013-03-26 03:00:00,1224.853582554517 +2013-03-26 04:00:00,1228.2305295950155 +2013-03-26 05:00:00,1272.5794392523364 +2013-03-26 06:00:00,1428.0872274143303 +2013-03-26 07:00:00,1647.6261682242991 +2013-03-26 08:00:00,1780.4610591900312 +2013-03-26 09:00:00,2190.6479750778817 +2013-03-26 10:00:00,2602.11214953271 +2013-03-26 11:00:00,2724.791277258567 +2013-03-26 12:00:00,2802.4267912772584 +2013-03-26 13:00:00,2792.9844236760123 +2013-03-26 14:00:00,2753.3582554517134 +2013-03-26 15:00:00,2782.277258566978 +2013-03-26 16:00:00,2748.6604361370714 +2013-03-26 17:00:00,2806.473520249221 +2013-03-26 18:00:00,2896.345794392523 +2013-03-26 19:00:00,2953.785046728972 +2013-03-26 20:00:00,2878.314641744548 +2013-03-26 21:00:00,2766.5919003115264 +2013-03-26 22:00:00,2531.277258566978 +2013-03-26 23:00:00,1962.607476635514 +2013-03-27 00:00:00,1597.1090342679129 +2013-03-27 01:00:00,1312.3239875389409 +2013-03-27 02:00:00,1245.9034267912773 +2013-03-27 03:00:00,1200.872274143302 +2013-03-27 04:00:00,1207.1900311526479 +2013-03-27 05:00:00,1268.8442367601247 +2013-03-27 06:00:00,1415.127725856698 +2013-03-27 07:00:00,1644.8068535825546 +2013-03-27 08:00:00,1782.822429906542 +2013-03-27 09:00:00,2176.576323987539 +2013-03-27 10:00:00,2549.1931464174454 +2013-03-27 11:00:00,2668.940809968847 +2013-03-27 12:00:00,2761.0716510903426 +2013-03-27 13:00:00,2752.5451713395637 +2013-03-27 14:00:00,2731.1619937694704 +2013-03-27 15:00:00,2793.143302180685 +2013-03-27 16:00:00,2742.031152647975 +2013-03-27 17:00:00,2761.5981308411215 +2013-03-27 18:00:00,2827.6417445482866 +2013-03-27 19:00:00,2950.7943925233644 +2013-03-27 20:00:00,2931.6510903426793 +2013-03-27 21:00:00,2797.5794392523367 +2013-03-27 22:00:00,2584.214953271028 +2013-03-27 23:00:00,1992.2866043613708 +2013-03-28 00:00:00,1615.8785046728972 +2013-03-28 01:00:00,1345.404984423676 +2013-03-28 02:00:00,1292.165109034268 +2013-03-28 03:00:00,1219.6542056074766 +2013-03-28 04:00:00,1210.4330218068535 +2013-03-28 05:00:00,1246.6822429906542 +2013-03-28 06:00:00,1422.4485981308412 +2013-03-28 07:00:00,1635.872274143302 +2013-03-28 08:00:00,1753.165109034268 +2013-03-28 09:00:00,2195.1370716510905 +2013-03-28 10:00:00,2574.489096573209 +2013-03-28 11:00:00,2704.7570093457944 +2013-03-28 12:00:00,2781.7476635514017 +2013-03-28 13:00:00,2763.3707165109035 +2013-03-28 14:00:00,2774.685358255452 +2013-03-28 15:00:00,2810.2523364485983 +2013-03-28 16:00:00,2794.323987538941 +2013-03-28 17:00:00,2822.7320872274145 +2013-03-28 18:00:00,2847.7258566978194 +2013-03-28 19:00:00,2975.7258566978194 +2013-03-28 20:00:00,2955.909657320872 +2013-03-28 21:00:00,2825.92523364486 +2013-03-28 22:00:00,2594.1090342679126 +2013-03-28 23:00:00,2053.1370716510905 +2013-03-29 00:00:00,1656.342679127726 +2013-03-29 01:00:00,1347.1339563862928 +2013-03-29 02:00:00,1257.423676012461 +2013-03-29 03:00:00,1224.1183800623053 +2013-03-29 04:00:00,1226.4423676012461 +2013-03-29 05:00:00,1291.417445482866 +2013-03-29 06:00:00,1473.6105919003114 +2013-03-29 07:00:00,1668.0529595015576 +2013-03-29 08:00:00,1790.5981308411215 +2013-03-29 09:00:00,2227.277258566978 +2013-03-29 10:00:00,2631.323987538941 +2013-03-29 11:00:00,2728.6604361370714 +2013-03-29 12:00:00,2823.03738317757 +2013-03-29 13:00:00,2821.9501557632398 +2013-03-29 14:00:00,2817.02492211838 +2013-03-29 15:00:00,2864.3489096573207 +2013-03-29 16:00:00,2891.345794392523 +2013-03-29 17:00:00,2947.3333333333335 +2013-03-29 18:00:00,3026.993769470405 +2013-03-29 19:00:00,3032.5981308411215 +2013-03-29 20:00:00,3019.847352024922 +2013-03-29 21:00:00,2881.700934579439 +2013-03-29 22:00:00,2679.1744548286606 +2013-03-29 23:00:00,2102.856697819315 +2013-03-30 00:00:00,1707.1401869158879 +2013-03-30 01:00:00,1461.473520249221 +2013-03-30 02:00:00,1355.3239875389409 +2013-03-30 03:00:00,1249.8909657320871 +2013-03-30 04:00:00,1212.0591900311526 +2013-03-30 05:00:00,1277.9719626168223 +2013-03-30 06:00:00,1490.0747663551401 +2013-03-30 07:00:00,1650.6853582554518 +2013-03-30 08:00:00,1752.8068535825546 +2013-03-30 09:00:00,2239.6791277258567 +2013-03-30 10:00:00,2585.5856697819313 +2013-03-30 11:00:00,2760.0404984423676 +2013-03-30 12:00:00,2759.277258566978 +2013-03-30 13:00:00,2777.685358255452 +2013-03-30 14:00:00,2765.7040498442366 +2013-03-30 15:00:00,2684.3644859813085 +2013-03-30 16:00:00,2805.947040498442 +2013-03-30 17:00:00,2795.227414330218 +2013-03-30 18:00:00,2798.302180685358 +2013-03-30 19:00:00,2958.5981308411215 +2013-03-30 20:00:00,2887.3644859813085 +2013-03-30 21:00:00,2832.423676012461 +2013-03-30 22:00:00,2608.903426791277 +2013-03-30 23:00:00,2124.07476635514 +2013-03-31 00:00:00,1685.404984423676 +2013-03-31 01:00:00,54.70716510903427 +2013-03-31 02:00:00,1408.6791277258567 +2013-03-31 03:00:00,1294.7165109034268 +2013-03-31 04:00:00,1169.1339563862928 +2013-03-31 05:00:00,1236.797507788162 +2013-03-31 06:00:00,1420.7320872274142 +2013-03-31 07:00:00,1585.2118380062304 +2013-03-31 08:00:00,1673.1401869158879 +2013-03-31 09:00:00,2130.2305295950155 +2013-03-31 10:00:00,2453.722741433022 +2013-03-31 11:00:00,2654.947040498442 +2013-03-31 12:00:00,2642.7632398753894 +2013-03-31 13:00:00,2626.0 +2013-03-31 14:00:00,2556.336448598131 +2013-03-31 15:00:00,2542.6168224299067 +2013-03-31 16:00:00,2593.190031152648 +2013-03-31 17:00:00,2544.2523364485983 +2013-03-31 18:00:00,2502.11214953271 +2013-03-31 19:00:00,2472.2523364485983 +2013-03-31 20:00:00,2224.4267912772584 +2013-03-31 21:00:00,2207.9906542056074 +2013-03-31 22:00:00,2102.6043613707166 +2013-03-31 23:00:00,1724.3302180685357 +2013-04-01 00:00:00,1484.1495327102805 +2013-04-01 01:00:00,1253.436137071651 +2013-04-01 02:00:00,1190.9003115264798 +2013-04-01 03:00:00,1166.4423676012461 +2013-04-01 04:00:00,1155.2990654205607 +2013-04-01 05:00:00,1252.8940809968847 +2013-04-01 06:00:00,1413.7196261682243 +2013-04-01 07:00:00,1590.1214953271028 +2013-04-01 08:00:00,1636.5607476635514 +2013-04-01 09:00:00,2054.096573208723 +2013-04-01 10:00:00,2313.6043613707166 +2013-04-01 11:00:00,2413.9906542056074 +2013-04-01 12:00:00,2439.903426791277 +2013-04-01 13:00:00,2509.5545171339563 +2013-04-01 14:00:00,2485.654205607477 +2013-04-01 15:00:00,2528.834890965732 +2013-04-01 16:00:00,2738.1464174454827 +2013-04-01 17:00:00,2585.143302180685 +2013-04-01 18:00:00,2565.1401869158876 +2013-04-01 19:00:00,2582.6105919003116 +2013-04-01 20:00:00,2623.4174454828662 +2013-04-01 21:00:00,2620.3831775700933 +2013-04-01 22:00:00,2351.4641744548285 +2013-04-01 23:00:00,1977.638629283489 +2013-04-02 00:00:00,1598.8006230529595 +2013-04-02 01:00:00,1326.398753894081 +2013-04-02 02:00:00,1244.803738317757 +2013-04-02 03:00:00,1187.6666666666667 +2013-04-02 04:00:00,1143.8411214953271 +2013-04-02 05:00:00,1205.563862928349 +2013-04-02 06:00:00,1408.4267912772586 +2013-04-02 07:00:00,1622.4672897196263 +2013-04-02 08:00:00,1725.526479750779 +2013-04-02 09:00:00,2150.4548286604363 +2013-04-02 10:00:00,2414.5669781931465 +2013-04-02 11:00:00,2626.5482866043612 +2013-04-02 12:00:00,2686.3582554517134 +2013-04-02 13:00:00,2651.878504672897 +2013-04-02 14:00:00,2630.7570093457944 +2013-04-02 15:00:00,2663.6573208722743 +2013-04-02 16:00:00,2658.931464174455 +2013-04-02 17:00:00,2668.9968847352025 +2013-04-02 18:00:00,2672.9345794392525 +2013-04-02 19:00:00,2680.3582554517134 +2013-04-02 20:00:00,2799.9595015576324 +2013-04-02 21:00:00,2757.1090342679126 +2013-04-02 22:00:00,2522.302180685358 +2013-04-02 23:00:00,1970.9314641744547 +2013-04-03 00:00:00,1584.8878504672898 +2013-04-03 01:00:00,1299.9719626168223 +2013-04-03 02:00:00,1211.01246105919 +2013-04-03 03:00:00,1166.4080996884736 +2013-04-03 04:00:00,1149.0155763239875 +2013-04-03 05:00:00,1221.0716510903426 +2013-04-03 06:00:00,1411.6666666666667 +2013-04-03 07:00:00,1612.1433021806854 +2013-04-03 08:00:00,1701.8473520249222 +2013-04-03 09:00:00,2159.2242990654204 +2013-04-03 10:00:00,2483.744548286604 +2013-04-03 11:00:00,2613.919003115265 +2013-04-03 12:00:00,2625.3177570093458 +2013-04-03 13:00:00,2633.3769470404986 +2013-04-03 14:00:00,2595.5482866043612 +2013-04-03 15:00:00,2598.489096573209 +2013-04-03 16:00:00,2634.9906542056074 +2013-04-03 17:00:00,2595.7383177570096 +2013-04-03 18:00:00,2631.6168224299067 +2013-04-03 19:00:00,2679.367601246106 +2013-04-03 20:00:00,2735.7943925233644 +2013-04-03 21:00:00,2701.909657320872 +2013-04-03 22:00:00,2474.6884735202493 +2013-04-03 23:00:00,1957.2741433021806 +2013-04-04 00:00:00,1577.5077881619939 +2013-04-04 01:00:00,1289.803738317757 +2013-04-04 02:00:00,1213.0809968847352 +2013-04-04 03:00:00,1165.3302180685357 +2013-04-04 04:00:00,1146.576323987539 +2013-04-04 05:00:00,1207.9781931464174 +2013-04-04 06:00:00,1410.7757009345794 +2013-04-04 07:00:00,1592.367601246106 +2013-04-04 08:00:00,1707.9781931464174 +2013-04-04 09:00:00,2124.7819314641742 +2013-04-04 10:00:00,2641.3956386292834 +2013-04-04 11:00:00,2661.563862928349 +2013-04-04 12:00:00,2637.1993769470405 +2013-04-04 13:00:00,2640.3271028037384 +2013-04-04 14:00:00,2642.4922118380064 +2013-04-04 15:00:00,2616.7165109034268 +2013-04-04 16:00:00,2631.841121495327 +2013-04-04 17:00:00,2626.872274143302 +2013-04-04 18:00:00,2659.308411214953 +2013-04-04 19:00:00,2664.3115264797507 +2013-04-04 20:00:00,2747.4330218068535 +2013-04-04 21:00:00,2725.5981308411215 +2013-04-04 22:00:00,2499.0841121495328 +2013-04-04 23:00:00,1981.3956386292834 +2013-04-05 00:00:00,1583.4859813084113 +2013-04-05 01:00:00,1294.2429906542056 +2013-04-05 02:00:00,1211.4018691588785 +2013-04-05 03:00:00,1171.9283489096574 +2013-04-05 04:00:00,1145.5171339563863 +2013-04-05 05:00:00,1210.7227414330218 +2013-04-05 06:00:00,1423.7258566978194 +2013-04-05 07:00:00,1591.9345794392523 +2013-04-05 08:00:00,1727.7632398753894 +2013-04-05 09:00:00,2124.4392523364486 +2013-04-05 10:00:00,2432.5545171339563 +2013-04-05 11:00:00,2534.685358255452 +2013-04-05 12:00:00,2672.3052959501556 +2013-04-05 13:00:00,2714.3800623052957 +2013-04-05 14:00:00,2589.6573208722743 +2013-04-05 15:00:00,2604.0498442367602 +2013-04-05 16:00:00,2641.6292834890965 +2013-04-05 17:00:00,2593.993769470405 +2013-04-05 18:00:00,2623.735202492212 +2013-04-05 19:00:00,2657.299065420561 +2013-04-05 20:00:00,2728.4174454828662 +2013-04-05 21:00:00,2697.8130841121497 +2013-04-05 22:00:00,2512.6573208722743 +2013-04-05 23:00:00,2043.386292834891 +2013-04-06 00:00:00,1640.6479750778817 +2013-04-06 01:00:00,1389.7383177570093 +2013-04-06 02:00:00,1283.7507788161993 +2013-04-06 03:00:00,1178.1028037383178 +2013-04-06 04:00:00,1124.1214953271028 +2013-04-06 05:00:00,1192.576323987539 +2013-04-06 06:00:00,1400.9034267912773 +2013-04-06 07:00:00,1554.214953271028 +2013-04-06 08:00:00,1668.6417445482866 +2013-04-06 09:00:00,2122.93769470405 +2013-04-06 10:00:00,2432.0404984423676 +2013-04-06 11:00:00,2592.271028037383 +2013-04-06 12:00:00,2590.0498442367602 +2013-04-06 13:00:00,2576.872274143302 +2013-04-06 14:00:00,2552.613707165109 +2013-04-06 15:00:00,2603.2741433021806 +2013-04-06 16:00:00,2608.2056074766356 +2013-04-06 17:00:00,2631.7196261682243 +2013-04-06 18:00:00,2613.3271028037384 +2013-04-06 19:00:00,2657.816199376947 +2013-04-06 20:00:00,2701.0093457943926 +2013-04-06 21:00:00,2683.0404984423676 +2013-04-06 22:00:00,2515.171339563863 +2013-04-06 23:00:00,2065.286604361371 +2013-04-07 00:00:00,1636.7383177570093 +2013-04-07 01:00:00,1375.3769470404984 +2013-04-07 02:00:00,1304.3364485981308 +2013-04-07 03:00:00,1231.9190031152648 +2013-04-07 04:00:00,1131.1931464174454 +2013-04-07 05:00:00,1202.8753894080996 +2013-04-07 06:00:00,1381.7632398753894 +2013-04-07 07:00:00,1548.657320872274 +2013-04-07 08:00:00,1635.747663551402 +2013-04-07 09:00:00,2064.127725856698 +2013-04-07 10:00:00,2429.059190031153 +2013-04-07 11:00:00,2588.0 +2013-04-07 12:00:00,2571.059190031153 +2013-04-07 13:00:00,2575.532710280374 +2013-04-07 14:00:00,2560.947040498442 +2013-04-07 15:00:00,2591.4454828660437 +2013-04-07 16:00:00,2616.3520249221183 +2013-04-07 17:00:00,2615.5607476635514 +2013-04-07 18:00:00,2609.1152647975077 +2013-04-07 19:00:00,2669.3956386292834 +2013-04-07 20:00:00,2671.8130841121497 +2013-04-07 21:00:00,2674.4018691588785 +2013-04-07 22:00:00,2414.5482866043612 +2013-04-07 23:00:00,1860.728971962617 +2013-04-08 00:00:00,1521.9657320872275 +2013-04-08 01:00:00,1264.9408099688474 +2013-04-08 02:00:00,1208.7632398753894 +2013-04-08 03:00:00,1156.5669781931465 +2013-04-08 04:00:00,1142.2616822429907 +2013-04-08 05:00:00,1220.0591900311526 +2013-04-08 06:00:00,1431.3146417445482 +2013-04-08 07:00:00,1593.2087227414331 +2013-04-08 08:00:00,1715.7040498442368 +2013-04-08 09:00:00,2128.676012461059 +2013-04-08 10:00:00,2441.5015576323985 +2013-04-08 11:00:00,2620.6728971962616 +2013-04-08 12:00:00,2619.467289719626 +2013-04-08 13:00:00,2627.299065420561 +2013-04-08 14:00:00,2659.0498442367602 +2013-04-08 15:00:00,2661.9657320872275 +2013-04-08 16:00:00,2670.8006230529595 +2013-04-08 17:00:00,2682.0498442367602 +2013-04-08 18:00:00,2659.791277258567 +2013-04-08 19:00:00,2708.1028037383176 +2013-04-08 20:00:00,2787.127725856698 +2013-04-08 21:00:00,2733.0560747663553 +2013-04-08 22:00:00,2499.090342679128 +2013-04-08 23:00:00,2022.0747663551401 +2013-04-09 00:00:00,1711.0249221183801 +2013-04-09 01:00:00,1419.981308411215 +2013-04-09 02:00:00,1283.214953271028 +2013-04-09 03:00:00,1204.4797507788162 +2013-04-09 04:00:00,1180.4672897196263 +2013-04-09 05:00:00,1252.380062305296 +2013-04-09 06:00:00,1447.3208722741433 +2013-04-09 07:00:00,1633.5919003115264 +2013-04-09 08:00:00,1740.526479750779 +2013-04-09 09:00:00,2180.308411214953 +2013-04-09 10:00:00,2494.4859813084113 +2013-04-09 11:00:00,2601.5981308411215 +2013-04-09 12:00:00,2652.1152647975077 +2013-04-09 13:00:00,2636.177570093458 +2013-04-09 14:00:00,2642.4454828660437 +2013-04-09 15:00:00,2630.3177570093458 +2013-04-09 16:00:00,2644.6573208722743 +2013-04-09 17:00:00,2625.0872274143303 +2013-04-09 18:00:00,2675.3271028037384 +2013-04-09 19:00:00,2658.052959501558 +2013-04-09 20:00:00,2744.2741433021806 +2013-04-09 21:00:00,2721.0467289719627 +2013-04-09 22:00:00,2475.8971962616824 +2013-04-09 23:00:00,1951.5732087227414 +2013-04-10 00:00:00,1587.271028037383 +2013-04-10 01:00:00,1334.5794392523364 +2013-04-10 02:00:00,1260.1121495327102 +2013-04-10 03:00:00,1232.9127725856697 +2013-04-10 04:00:00,1200.7165109034268 +2013-04-10 05:00:00,1271.8317757009345 +2013-04-10 06:00:00,1450.7570093457944 +2013-04-10 07:00:00,1668.2274143302182 +2013-04-10 08:00:00,1781.6105919003114 +2013-04-10 09:00:00,2183.931464174455 +2013-04-10 10:00:00,2500.221183800623 +2013-04-10 11:00:00,2675.1869158878503 +2013-04-10 12:00:00,2687.096573208723 +2013-04-10 13:00:00,2678.171339563863 +2013-04-10 14:00:00,2685.1682242990655 +2013-04-10 15:00:00,2701.563862928349 +2013-04-10 16:00:00,2695.510903426791 +2013-04-10 17:00:00,2680.1557632398753 +2013-04-10 18:00:00,2696.373831775701 +2013-04-10 19:00:00,2759.872274143302 +2013-04-10 20:00:00,2772.1557632398753 +2013-04-10 21:00:00,2752.355140186916 +2013-04-10 22:00:00,2531.171339563863 +2013-04-10 23:00:00,1988.3551401869158 +2013-04-11 00:00:00,1626.2928348909657 +2013-04-11 01:00:00,1369.968847352025 +2013-04-11 02:00:00,1308.96261682243 +2013-04-11 03:00:00,1264.6479750778817 +2013-04-11 04:00:00,1252.8068535825546 +2013-04-11 05:00:00,1297.6292834890967 +2013-04-11 06:00:00,1460.853582554517 +2013-04-11 07:00:00,1683.7632398753894 +2013-04-11 08:00:00,1789.6417445482866 +2013-04-11 09:00:00,2190.239875389408 +2013-04-11 10:00:00,2519.3395638629286 +2013-04-11 11:00:00,2685.1401869158876 +2013-04-11 12:00:00,2702.663551401869 +2013-04-11 13:00:00,2701.152647975078 +2013-04-11 14:00:00,2704.271028037383 +2013-04-11 15:00:00,2703.878504672897 +2013-04-11 16:00:00,2723.9532710280373 +2013-04-11 17:00:00,2668.697819314642 +2013-04-11 18:00:00,2693.3800623052957 +2013-04-11 19:00:00,2737.1931464174454 +2013-04-11 20:00:00,2741.563862928349 +2013-04-11 21:00:00,2724.1370716510905 +2013-04-11 22:00:00,2481.92523364486 +2013-04-11 23:00:00,1965.3115264797507 +2013-04-12 00:00:00,1599.1028037383178 +2013-04-12 01:00:00,1317.651090342679 +2013-04-12 02:00:00,1278.803738317757 +2013-04-12 03:00:00,1217.7757009345794 +2013-04-12 04:00:00,1194.7570093457944 +2013-04-12 05:00:00,1252.031152647975 +2013-04-12 06:00:00,1450.4080996884736 +2013-04-12 07:00:00,1663.0155763239875 +2013-04-12 08:00:00,1765.613707165109 +2013-04-12 09:00:00,2179.0654205607475 +2013-04-12 10:00:00,2488.5732087227416 +2013-04-12 11:00:00,2672.0654205607475 +2013-04-12 12:00:00,2694.822429906542 +2013-04-12 13:00:00,2644.3894080996884 +2013-04-12 14:00:00,2665.5981308411215 +2013-04-12 15:00:00,2689.0404984423676 +2013-04-12 16:00:00,2675.0716510903426 +2013-04-12 17:00:00,2688.7943925233644 +2013-04-12 18:00:00,2734.0093457943926 +2013-04-12 19:00:00,2683.7383177570096 +2013-04-12 20:00:00,2769.6884735202493 +2013-04-12 21:00:00,2753.190031152648 +2013-04-12 22:00:00,2566.1183800623053 +2013-04-12 23:00:00,2072.367601246106 +2013-04-13 00:00:00,1701.3520249221183 +2013-04-13 01:00:00,1428.657320872274 +2013-04-13 02:00:00,1317.2585669781931 +2013-04-13 03:00:00,1219.4205607476636 +2013-04-13 04:00:00,1142.981308411215 +2013-04-13 05:00:00,1214.423676012461 +2013-04-13 06:00:00,1409.6604361370717 +2013-04-13 07:00:00,1574.4704049844236 +2013-04-13 08:00:00,1690.1744548286604 +2013-04-13 09:00:00,2126.8504672897197 +2013-04-13 10:00:00,2480.697819314642 +2013-04-13 11:00:00,2647.6292834890965 +2013-04-13 12:00:00,2684.0498442367602 +2013-04-13 13:00:00,2676.059190031153 +2013-04-13 14:00:00,2900.542056074766 +2013-04-13 15:00:00,2846.8193146417448 +2013-04-13 16:00:00,2851.4392523364486 +2013-04-13 17:00:00,2885.5919003115264 +2013-04-13 18:00:00,2747.3177570093458 +2013-04-13 19:00:00,2731.1806853582552 +2013-04-13 20:00:00,2838.5358255451715 +2013-04-13 21:00:00,2747.551401869159 +2013-04-13 22:00:00,2548.8909657320874 +2013-04-13 23:00:00,2064.8255451713394 +2013-04-14 00:00:00,1675.9096573208724 +2013-04-14 01:00:00,1394.8691588785048 +2013-04-14 02:00:00,1319.545171339564 +2013-04-14 03:00:00,1246.576323987539 +2013-04-14 04:00:00,1139.2492211838007 +2013-04-14 05:00:00,1199.9376947040498 +2013-04-14 06:00:00,1379.3052959501558 +2013-04-14 07:00:00,1547.8629283489097 +2013-04-14 08:00:00,1641.0903426791276 +2013-04-14 09:00:00,2091.96261682243 +2013-04-14 10:00:00,2527.2056074766356 +2013-04-14 11:00:00,2750.9595015576324 +2013-04-14 12:00:00,2960.903426791277 +2013-04-14 13:00:00,2865.766355140187 +2013-04-14 14:00:00,2814.1308411214955 +2013-04-14 15:00:00,2913.6479750778817 +2013-04-14 16:00:00,2875.9003115264795 +2013-04-14 17:00:00,2925.607476635514 +2013-04-14 18:00:00,2782.88785046729 +2013-04-14 19:00:00,2819.1401869158876 +2013-04-14 20:00:00,2819.834890965732 +2013-04-14 21:00:00,2771.654205607477 +2013-04-14 22:00:00,2464.448598130841 +2013-04-14 23:00:00,1895.968847352025 +2013-04-15 00:00:00,1576.5482866043615 +2013-04-15 01:00:00,1283.9563862928348 +2013-04-15 02:00:00,1239.1121495327102 +2013-04-15 03:00:00,1200.3208722741433 +2013-04-15 04:00:00,1189.5700934579438 +2013-04-15 05:00:00,1308.380062305296 +2013-04-15 06:00:00,1446.7071651090343 +2013-04-15 07:00:00,1600.2429906542056 +2013-04-15 08:00:00,1754.3738317757009 +2013-04-15 09:00:00,2148.510903426791 +2013-04-15 10:00:00,2532.88785046729 +2013-04-15 11:00:00,2889.2679127725855 +2013-04-15 12:00:00,2859.947040498442 +2013-04-15 13:00:00,2939.968847352025 +2013-04-15 14:00:00,2939.5856697819313 +2013-04-15 15:00:00,2956.5919003115264 +2013-04-15 16:00:00,2955.4859813084113 +2013-04-15 17:00:00,2930.760124610592 +2013-04-15 18:00:00,2897.11214953271 +2013-04-15 19:00:00,2897.4080996884736 +2013-04-15 20:00:00,2869.5233644859813 +2013-04-15 21:00:00,2766.4859813084113 +2013-04-15 22:00:00,2560.1993769470405 +2013-04-15 23:00:00,2037.031152647975 +2013-04-16 00:00:00,1665.8130841121495 +2013-04-16 01:00:00,1369.8411214953271 +2013-04-16 02:00:00,1271.7414330218069 +2013-04-16 03:00:00,1237.2834890965732 +2013-04-16 04:00:00,1236.2834890965732 +2013-04-16 05:00:00,1313.4485981308412 +2013-04-16 06:00:00,1462.9065420560748 +2013-04-16 07:00:00,1656.380062305296 +2013-04-16 08:00:00,1754.177570093458 +2013-04-16 09:00:00,2145.0342679127725 +2013-04-16 10:00:00,2531.6168224299067 +2013-04-16 11:00:00,2891.221183800623 +2013-04-16 12:00:00,2871.6510903426793 +2013-04-16 13:00:00,2963.956386292835 +2013-04-16 14:00:00,3015.4859813084113 +2013-04-16 15:00:00,3029.1183800623053 +2013-04-16 16:00:00,3059.7320872274145 +2013-04-16 17:00:00,3007.373831775701 +2013-04-16 18:00:00,2890.5451713395637 +2013-04-16 19:00:00,2879.1308411214955 +2013-04-16 20:00:00,2852.5732087227416 +2013-04-16 21:00:00,2881.6105919003116 +2013-04-16 22:00:00,2588.760124610592 +2013-04-16 23:00:00,2005.3177570093458 +2013-04-17 00:00:00,1643.0996884735202 +2013-04-17 01:00:00,1351.0965732087227 +2013-04-17 02:00:00,1279.5327102803737 +2013-04-17 03:00:00,1214.563862928349 +2013-04-17 04:00:00,1192.3239875389409 +2013-04-17 05:00:00,1264.9968847352025 +2013-04-17 06:00:00,1454.613707165109 +2013-04-17 07:00:00,1613.9408099688474 +2013-04-17 08:00:00,1716.2087227414331 +2013-04-17 09:00:00,2168.0031152647975 +2013-04-17 10:00:00,2589.5482866043612 +2013-04-17 11:00:00,3136.7694704049845 +2013-04-17 12:00:00,2926.208722741433 +2013-04-17 13:00:00,3060.8847352024923 +2013-04-17 14:00:00,3030.3052959501556 +2013-04-17 15:00:00,3088.8006230529595 +2013-04-17 16:00:00,3042.302180685358 +2013-04-17 17:00:00,2908.214953271028 +2013-04-17 18:00:00,2895.1557632398753 +2013-04-17 19:00:00,2847.308411214953 +2013-04-17 20:00:00,2828.442367601246 +2013-04-17 21:00:00,2821.7102803738317 +2013-04-17 22:00:00,2597.7507788161993 +2013-04-17 23:00:00,2007.3115264797507 +2013-04-18 00:00:00,1613.4517133956385 +2013-04-18 01:00:00,1330.0529595015576 +2013-04-18 02:00:00,1268.8006230529595 +2013-04-18 03:00:00,1217.9781931464174 +2013-04-18 04:00:00,1196.4143302180685 +2013-04-18 05:00:00,1277.6604361370717 +2013-04-18 06:00:00,1455.778816199377 +2013-04-18 07:00:00,1636.1059190031153 +2013-04-18 08:00:00,1730.0342679127725 +2013-04-18 09:00:00,2150.143302180685 +2013-04-18 10:00:00,2652.4641744548285 +2013-04-18 11:00:00,2886.697819314642 +2013-04-18 12:00:00,2908.8598130841124 +2013-04-18 13:00:00,2988.5358255451715 +2013-04-18 14:00:00,3024.5732087227416 +2013-04-18 15:00:00,3033.685358255452 +2013-04-18 16:00:00,3071.7694704049845 +2013-04-18 17:00:00,3029.345794392523 +2013-04-18 18:00:00,2974.5825545171338 +2013-04-18 19:00:00,2954.947040498442 +2013-04-18 20:00:00,2949.7476635514017 +2013-04-18 21:00:00,2939.277258566978 +2013-04-18 22:00:00,2627.0778816199377 +2013-04-18 23:00:00,1972.1557632398753 +2013-04-19 00:00:00,1609.5233644859813 +2013-04-19 01:00:00,1335.4205607476636 +2013-04-19 02:00:00,1270.2897196261683 +2013-04-19 03:00:00,1226.7133956386292 +2013-04-19 04:00:00,1203.1214953271028 +2013-04-19 05:00:00,1263.4267912772586 +2013-04-19 06:00:00,1432.398753894081 +2013-04-19 07:00:00,1611.9065420560748 +2013-04-19 08:00:00,1722.3769470404984 +2013-04-19 09:00:00,2112.7757009345796 +2013-04-19 10:00:00,2529.940809968847 +2013-04-19 11:00:00,2680.6199376947043 +2013-04-19 12:00:00,2986.570093457944 +2013-04-19 13:00:00,2927.0498442367602 +2013-04-19 14:00:00,3042.9781931464177 +2013-04-19 15:00:00,3073.6230529595014 +2013-04-19 16:00:00,3102.105919003115 +2013-04-19 17:00:00,2994.7507788161993 +2013-04-19 18:00:00,3004.0280373831774 +2013-04-19 19:00:00,3028.4267912772584 +2013-04-19 20:00:00,2905.6947040498444 +2013-04-19 21:00:00,2896.5451713395637 +2013-04-19 22:00:00,2665.7694704049845 +2013-04-19 23:00:00,2128.97507788162 +2013-04-20 00:00:00,1705.5233644859813 +2013-04-20 01:00:00,1452.7258566978194 +2013-04-20 02:00:00,1355.760124610592 +2013-04-20 03:00:00,1235.3956386292834 +2013-04-20 04:00:00,1162.0778816199377 +2013-04-20 05:00:00,1218.1744548286604 +2013-04-20 06:00:00,1411.7196261682243 +2013-04-20 07:00:00,1561.7507788161993 +2013-04-20 08:00:00,1645.0685358255453 +2013-04-20 09:00:00,2085.3769470404986 +2013-04-20 10:00:00,2589.722741433022 +2013-04-20 11:00:00,2781.4454828660437 +2013-04-20 12:00:00,3170.834890965732 +2013-04-20 13:00:00,2984.2305295950155 +2013-04-20 14:00:00,2943.5451713395637 +2013-04-20 15:00:00,2996.457943925234 +2013-04-20 16:00:00,3009.0218068535823 +2013-04-20 17:00:00,3014.127725856698 +2013-04-20 18:00:00,2964.685358255452 +2013-04-20 19:00:00,2933.8691588785045 +2013-04-20 20:00:00,2883.121495327103 +2013-04-20 21:00:00,2853.171339563863 +2013-04-20 22:00:00,2633.713395638629 +2013-04-20 23:00:00,2102.429906542056 +2013-04-21 00:00:00,1668.8660436137072 +2013-04-21 01:00:00,1393.1059190031153 +2013-04-21 02:00:00,1331.7383177570093 +2013-04-21 03:00:00,1260.392523364486 +2013-04-21 04:00:00,1148.018691588785 +2013-04-21 05:00:00,1211.3084112149534 +2013-04-21 06:00:00,1381.454828660436 +2013-04-21 07:00:00,1563.7881619937696 +2013-04-21 08:00:00,1613.3021806853583 +2013-04-21 09:00:00,2066.3707165109035 +2013-04-21 10:00:00,2572.0716510903426 +2013-04-21 11:00:00,2774.264797507788 +2013-04-21 12:00:00,2829.246105919003 +2013-04-21 13:00:00,2805.8847352024923 +2013-04-21 14:00:00,2888.940809968847 +2013-04-21 15:00:00,3174.03738317757 +2013-04-21 16:00:00,2964.7943925233644 +2013-04-21 17:00:00,3016.4766355140187 +2013-04-21 18:00:00,2943.5451713395637 +2013-04-21 19:00:00,2907.0934579439254 +2013-04-21 20:00:00,2873.8504672897197 +2013-04-21 21:00:00,2813.361370716511 +2013-04-21 22:00:00,2482.4922118380064 +2013-04-21 23:00:00,1899.98753894081 +2013-04-22 00:00:00,1565.8317757009345 +2013-04-22 01:00:00,1274.392523364486 +2013-04-22 02:00:00,1216.5077881619939 +2013-04-22 03:00:00,1182.0872274143303 +2013-04-22 04:00:00,1173.5669781931465 +2013-04-22 05:00:00,1252.183800623053 +2013-04-22 06:00:00,1418.993769470405 +2013-04-22 07:00:00,1616.6261682242991 +2013-04-22 08:00:00,1680.7227414330218 +2013-04-22 09:00:00,2046.6635514018692 +2013-04-22 10:00:00,2511.8380062305296 +2013-04-22 11:00:00,2717.489096573209 +2013-04-22 12:00:00,2909.0 +2013-04-22 13:00:00,2874.9595015576324 +2013-04-22 14:00:00,2923.903426791277 +2013-04-22 15:00:00,3007.0093457943926 +2013-04-22 16:00:00,2996.165109034268 +2013-04-22 17:00:00,3000.557632398754 +2013-04-22 18:00:00,3014.6168224299067 +2013-04-22 19:00:00,2979.5233644859813 +2013-04-22 20:00:00,2910.5233644859813 +2013-04-22 21:00:00,2896.0654205607475 +2013-04-22 22:00:00,2642.9439252336447 +2013-04-22 23:00:00,2010.5140186915887 +2013-04-23 00:00:00,1614.8971962616822 +2013-04-23 01:00:00,1328.6697819314643 +2013-04-23 02:00:00,1255.6915887850466 +2013-04-23 03:00:00,1208.1526479750778 +2013-04-23 04:00:00,1191.4330218068535 +2013-04-23 05:00:00,1261.177570093458 +2013-04-23 06:00:00,1475.4859813084113 +2013-04-23 07:00:00,1571.1121495327102 +2013-04-23 08:00:00,1694.404984423676 +2013-04-23 09:00:00,2255.5482866043612 +2013-04-23 10:00:00,2776.336448598131 +2013-04-23 11:00:00,2825.006230529595 +2013-04-23 12:00:00,2909.264797507788 +2013-04-23 13:00:00,2990.4984423676015 +2013-04-23 14:00:00,2976.1869158878503 +2013-04-23 15:00:00,3027.9595015576324 +2013-04-23 16:00:00,3011.196261682243 +2013-04-23 17:00:00,3007.158878504673 +2013-04-23 18:00:00,2978.903426791277 +2013-04-23 19:00:00,2972.361370716511 +2013-04-23 20:00:00,2856.006230529595 +2013-04-23 21:00:00,2839.239875389408 +2013-04-23 22:00:00,2590.626168224299 +2013-04-23 23:00:00,2013.5420560747664 +2013-04-24 00:00:00,1629.6697819314643 +2013-04-24 01:00:00,1354.5794392523364 +2013-04-24 02:00:00,1283.6230529595016 +2013-04-24 03:00:00,1254.8753894080996 +2013-04-24 04:00:00,1225.03738317757 +2013-04-24 05:00:00,1270.9314641744547 +2013-04-24 06:00:00,1434.0778816199377 +2013-04-24 07:00:00,1609.1806853582555 +2013-04-24 08:00:00,1731.0996884735202 +2013-04-24 09:00:00,2270.361370716511 +2013-04-24 10:00:00,2871.355140186916 +2013-04-24 11:00:00,2964.5732087227416 +2013-04-24 12:00:00,2956.271028037383 +2013-04-24 13:00:00,2989.495327102804 +2013-04-24 14:00:00,3033.0560747663553 +2013-04-24 15:00:00,3053.3395638629286 +2013-04-24 16:00:00,3016.1744548286606 +2013-04-24 17:00:00,3060.6947040498444 +2013-04-24 18:00:00,3042.3707165109035 +2013-04-24 19:00:00,2955.7632398753894 +2013-04-24 20:00:00,2945.158878504673 +2013-04-24 21:00:00,2951.404984423676 +2013-04-24 22:00:00,2681.538940809969 +2013-04-24 23:00:00,2086.872274143302 +2013-04-25 00:00:00,1690.6635514018692 +2013-04-25 01:00:00,1345.7165109034268 +2013-04-25 02:00:00,1273.1121495327102 +2013-04-25 03:00:00,1230.380062305296 +2013-04-25 04:00:00,1199.2834890965732 +2013-04-25 05:00:00,1275.4299065420562 +2013-04-25 06:00:00,1426.4267912772586 +2013-04-25 07:00:00,1616.1152647975077 +2013-04-25 08:00:00,1719.3302180685357 +2013-04-25 09:00:00,2235.202492211838 +2013-04-25 10:00:00,2783.92523364486 +2013-04-25 11:00:00,2919.5077881619936 +2013-04-25 12:00:00,3090.0841121495328 +2013-04-25 13:00:00,3155.728971962617 +2013-04-25 14:00:00,3179.595015576324 +2013-04-25 15:00:00,3206.722741433022 +2013-04-25 16:00:00,3224.9781931464177 +2013-04-25 17:00:00,3229.2523364485983 +2013-04-25 18:00:00,3139.9532710280373 +2013-04-25 19:00:00,3065.052959501558 +2013-04-25 20:00:00,2993.1806853582552 +2013-04-25 21:00:00,2941.392523364486 +2013-04-25 22:00:00,2671.3395638629286 +2013-04-25 23:00:00,1998.1401869158879 +2013-04-26 00:00:00,1618.1339563862928 +2013-04-26 01:00:00,1330.651090342679 +2013-04-26 02:00:00,1262.8691588785048 +2013-04-26 03:00:00,1219.01246105919 +2013-04-26 04:00:00,1190.8629283489097 +2013-04-26 05:00:00,1269.9563862928348 +2013-04-26 06:00:00,1473.5015576323988 +2013-04-26 07:00:00,1687.9501557632398 +2013-04-26 08:00:00,1781.214953271028 +2013-04-26 09:00:00,2277.286604361371 +2013-04-26 10:00:00,2768.2367601246106 +2013-04-26 11:00:00,2898.841121495327 +2013-04-26 12:00:00,3047.461059190031 +2013-04-26 13:00:00,3075.772585669782 +2013-04-26 14:00:00,3054.0155763239877 +2013-04-26 15:00:00,3178.190031152648 +2013-04-26 16:00:00,3268.221183800623 +2013-04-26 17:00:00,3290.404984423676 +2013-04-26 18:00:00,3180.9065420560746 +2013-04-26 19:00:00,3042.7507788161993 +2013-04-26 20:00:00,2947.2242990654204 +2013-04-26 21:00:00,2893.5794392523367 +2013-04-26 22:00:00,2673.5607476635514 +2013-04-26 23:00:00,2089.9283489096574 +2013-04-27 00:00:00,1691.5732087227414 +2013-04-27 01:00:00,1432.4579439252336 +2013-04-27 02:00:00,1327.4080996884736 +2013-04-27 03:00:00,1219.6728971962616 +2013-04-27 04:00:00,1150.7040498442368 +2013-04-27 05:00:00,1214.7258566978194 +2013-04-27 06:00:00,1402.8909657320871 +2013-04-27 07:00:00,1570.0249221183801 +2013-04-27 08:00:00,1633.3457943925234 +2013-04-27 09:00:00,2329.1246105919004 +2013-04-27 10:00:00,2623.121495327103 +2013-04-27 11:00:00,2733.5140186915887 +2013-04-27 12:00:00,2739.5856697819313 +2013-04-27 13:00:00,2769.8535825545173 +2013-04-27 14:00:00,2796.479750778816 +2013-04-27 15:00:00,2809.5451713395637 +2013-04-27 16:00:00,2842.314641744548 +2013-04-27 17:00:00,2791.386292834891 +2013-04-27 18:00:00,2744.059190031153 +2013-04-27 19:00:00,2706.8971962616824 +2013-04-27 20:00:00,2720.479750778816 +2013-04-27 21:00:00,2694.0280373831774 +2013-04-27 22:00:00,2499.0155763239877 +2013-04-27 23:00:00,2009.271028037383 +2013-04-28 00:00:00,1574.436137071651 +2013-04-28 01:00:00,1304.7227414330218 +2013-04-28 02:00:00,1248.4080996884736 +2013-04-28 03:00:00,1191.5669781931465 +2013-04-28 04:00:00,1072.6728971962616 +2013-04-28 05:00:00,1139.9283489096574 +2013-04-28 06:00:00,1324.7538940809968 +2013-04-28 07:00:00,1482.6604361370717 +2013-04-28 08:00:00,1532.01246105919 +2013-04-28 09:00:00,2054.227414330218 +2013-04-28 10:00:00,2519.208722741433 +2013-04-28 11:00:00,2555.096573208723 +2013-04-28 12:00:00,2599.919003115265 +2013-04-28 13:00:00,2585.2679127725855 +2013-04-28 14:00:00,2547.1370716510905 +2013-04-28 15:00:00,2552.398753894081 +2013-04-28 16:00:00,2592.4517133956388 +2013-04-28 17:00:00,2599.778816199377 +2013-04-28 18:00:00,2570.0467289719627 +2013-04-28 19:00:00,2565.9532710280373 +2013-04-28 20:00:00,2604.2834890965732 +2013-04-28 21:00:00,2610.3894080996884 +2013-04-28 22:00:00,2384.909657320872 +2013-04-28 23:00:00,1809.7320872274142 +2013-04-29 00:00:00,1476.2056074766356 +2013-04-29 01:00:00,1219.271028037383 +2013-04-29 02:00:00,1167.9844236760125 +2013-04-29 03:00:00,1126.0249221183801 +2013-04-29 04:00:00,1114.3520249221183 +2013-04-29 05:00:00,1200.6230529595016 +2013-04-29 06:00:00,1344.657320872274 +2013-04-29 07:00:00,1527.1682242990655 +2013-04-29 08:00:00,1568.9532710280373 +2013-04-29 09:00:00,2085.6479750778817 +2013-04-29 10:00:00,2489.183800623053 +2013-04-29 11:00:00,2544.043613707165 +2013-04-29 12:00:00,2579.1246105919004 +2013-04-29 13:00:00,2603.457943925234 +2013-04-29 14:00:00,2588.423676012461 +2013-04-29 15:00:00,2599.0342679127725 +2013-04-29 16:00:00,2623.9439252336447 +2013-04-29 17:00:00,2636.221183800623 +2013-04-29 18:00:00,2617.7258566978194 +2013-04-29 19:00:00,2586.3489096573207 +2013-04-29 20:00:00,2603.3644859813085 +2013-04-29 21:00:00,2641.9345794392525 +2013-04-29 22:00:00,2456.01246105919 +2013-04-29 23:00:00,1891.8785046728972 +2013-04-30 00:00:00,1512.1339563862928 +2013-04-30 01:00:00,1224.4485981308412 +2013-04-30 02:00:00,1174.1370716510903 +2013-04-30 03:00:00,1125.6604361370717 +2013-04-30 04:00:00,1099.563862928349 +2013-04-30 05:00:00,1177.6978193146417 +2013-04-30 06:00:00,1353.4797507788162 +2013-04-30 07:00:00,1516.6448598130842 +2013-04-30 08:00:00,1667.9190031152648 +2013-04-30 09:00:00,2136.208722741433 +2013-04-30 10:00:00,2526.9906542056074 +2013-04-30 11:00:00,2613.158878504673 +2013-04-30 12:00:00,2671.152647975078 +2013-04-30 13:00:00,2625.096573208723 +2013-04-30 14:00:00,2630.2056074766356 +2013-04-30 15:00:00,2666.8255451713394 +2013-04-30 16:00:00,2641.1152647975077 +2013-04-30 17:00:00,2631.532710280374 +2013-04-30 18:00:00,2681.8255451713394 +2013-04-30 19:00:00,2703.4330218068535 +2013-04-30 20:00:00,2727.0280373831774 +2013-04-30 21:00:00,2748.7819314641742 +2013-04-30 22:00:00,2525.3831775700933 +2013-04-30 23:00:00,1980.4922118380061 +2013-05-01 00:00:00,1587.146417445483 +2013-05-01 01:00:00,1274.3177570093458 +2013-05-01 02:00:00,1161.7102803738317 +2013-05-01 03:00:00,1314.8940809968847 +2013-05-01 04:00:00,1278.342679127726 +2013-05-01 05:00:00,1352.728971962617 +2013-05-01 06:00:00,1517.4267912772586 +2013-05-01 07:00:00,1700.1339563862928 +2013-05-01 08:00:00,1767.4797507788162 +2013-05-01 09:00:00,2078.457943925234 +2013-05-01 10:00:00,2330.856697819315 +2013-05-01 11:00:00,2431.663551401869 +2013-05-01 12:00:00,2478.7507788161993 +2013-05-01 13:00:00,2463.436137071651 +2013-05-01 14:00:00,2462.233644859813 +2013-05-01 15:00:00,2471.6417445482866 +2013-05-01 16:00:00,2523.722741433022 +2013-05-01 17:00:00,2530.271028037383 +2013-05-01 18:00:00,2495.6947040498444 +2013-05-01 19:00:00,2491.735202492212 +2013-05-01 20:00:00,2505.947040498442 +2013-05-01 21:00:00,2525.557632398754 +2013-05-01 22:00:00,2292.1152647975077 +2013-05-01 23:00:00,1906.233644859813 +2013-05-02 00:00:00,1579.8909657320871 +2013-05-02 01:00:00,1437.1744548286604 +2013-05-02 02:00:00,1366.816199376947 +2013-05-02 03:00:00,1315.545171339564 +2013-05-02 04:00:00,1292.0965732087227 +2013-05-02 05:00:00,1364.9376947040498 +2013-05-02 06:00:00,1552.1214953271028 +2013-05-02 07:00:00,1727.8442367601247 +2013-05-02 08:00:00,1840.233644859813 +2013-05-02 09:00:00,2166.510903426791 +2013-05-02 10:00:00,2377.090342679128 +2013-05-02 11:00:00,2493.196261682243 +2013-05-02 12:00:00,2576.221183800623 +2013-05-02 13:00:00,2611.1744548286606 +2013-05-02 14:00:00,2601.3426791277257 +2013-05-02 15:00:00,2621.8255451713394 +2013-05-02 16:00:00,2836.570093457944 +2013-05-02 17:00:00,3063.9439252336447 +2013-05-02 18:00:00,2882.4766355140187 +2013-05-02 19:00:00,2861.7694704049845 +2013-05-02 20:00:00,2807.4330218068535 +2013-05-02 21:00:00,2827.697819314642 +2013-05-02 22:00:00,2592.314641744548 +2013-05-02 23:00:00,2170.105919003115 +2013-05-03 00:00:00,1635.0996884735202 +2013-05-03 01:00:00,1394.0249221183801 +2013-05-03 02:00:00,1321.1183800623053 +2013-05-03 03:00:00,1254.417445482866 +2013-05-03 04:00:00,1244.2772585669782 +2013-05-03 05:00:00,1295.3052959501558 +2013-05-03 06:00:00,1472.3831775700935 +2013-05-03 07:00:00,1650.7912772585669 +2013-05-03 08:00:00,1744.2554517133956 +2013-05-03 09:00:00,2162.121495327103 +2013-05-03 10:00:00,2475.323987538941 +2013-05-03 11:00:00,2567.6884735202493 +2013-05-03 12:00:00,2589.6417445482866 +2013-05-03 13:00:00,3050.277258566978 +2013-05-03 14:00:00,3036.3177570093458 +2013-05-03 15:00:00,3048.97507788162 +2013-05-03 16:00:00,3076.4922118380064 +2013-05-03 17:00:00,3083.822429906542 +2013-05-03 18:00:00,3000.2180685358258 +2013-05-03 19:00:00,2981.2897196261683 +2013-05-03 20:00:00,2964.638629283489 +2013-05-03 21:00:00,2917.3395638629286 +2013-05-03 22:00:00,2703.894080996885 +2013-05-03 23:00:00,2153.8753894080996 +2013-05-04 00:00:00,1704.3831775700935 +2013-05-04 01:00:00,1463.4797507788162 +2013-05-04 02:00:00,1370.4579439252336 +2013-05-04 03:00:00,1299.2242990654206 +2013-05-04 04:00:00,1262.638629283489 +2013-05-04 05:00:00,1285.2834890965732 +2013-05-04 06:00:00,1457.3239875389409 +2013-05-04 07:00:00,1619.7632398753894 +2013-05-04 08:00:00,1699.6355140186915 +2013-05-04 09:00:00,2174.8629283489095 +2013-05-04 10:00:00,2563.239875389408 +2013-05-04 11:00:00,2702.6168224299067 +2013-05-04 12:00:00,2714.791277258567 +2013-05-04 13:00:00,2835.88785046729 +2013-05-04 14:00:00,3186.1682242990655 +2013-05-04 15:00:00,3157.221183800623 +2013-05-04 16:00:00,3145.92523364486 +2013-05-04 17:00:00,3214.2616822429904 +2013-05-04 18:00:00,3185.940809968847 +2013-05-04 19:00:00,3097.6417445482866 +2013-05-04 20:00:00,3034.436137071651 +2013-05-04 21:00:00,3000.2803738317757 +2013-05-04 22:00:00,2724.6947040498444 +2013-05-04 23:00:00,2152.221183800623 +2013-05-05 00:00:00,1708.6791277258567 +2013-05-05 01:00:00,1497.252336448598 +2013-05-05 02:00:00,1433.2305295950155 +2013-05-05 03:00:00,1381.6822429906542 +2013-05-05 04:00:00,1362.816199376947 +2013-05-05 05:00:00,1417.9563862928348 +2013-05-05 06:00:00,1591.797507788162 +2013-05-05 07:00:00,1751.3551401869158 +2013-05-05 08:00:00,1790.526479750779 +2013-05-05 09:00:00,2174.6573208722743 +2013-05-05 10:00:00,2620.2897196261683 +2013-05-05 11:00:00,2670.9532710280373 +2013-05-05 12:00:00,2780.3520249221183 +2013-05-05 13:00:00,2858.7196261682243 +2013-05-05 14:00:00,2999.6947040498444 +2013-05-05 15:00:00,3050.4454828660437 +2013-05-05 16:00:00,3111.0093457943926 +2013-05-05 17:00:00,3142.171339563863 +2013-05-05 18:00:00,3089.214953271028 +2013-05-05 19:00:00,3072.2056074766356 +2013-05-05 20:00:00,3032.4548286604363 +2013-05-05 21:00:00,3040.9781931464177 +2013-05-05 22:00:00,2678.697819314642 +2013-05-05 23:00:00,2118.760124610592 +2013-05-06 00:00:00,1633.7102803738317 +2013-05-06 01:00:00,1508.5295950155764 +2013-05-06 02:00:00,1453.6043613707166 +2013-05-06 03:00:00,1427.4766355140187 +2013-05-06 04:00:00,1432.2180685358255 +2013-05-06 05:00:00,1482.018691588785 +2013-05-06 06:00:00,1631.1183800623053 +2013-05-06 07:00:00,1817.2242990654206 +2013-05-06 08:00:00,1915.0155763239875 +2013-05-06 09:00:00,2234.588785046729 +2013-05-06 10:00:00,2813.713395638629 +2013-05-06 11:00:00,3102.01246105919 +2013-05-06 12:00:00,3149.5856697819313 +2013-05-06 13:00:00,3141.7632398753894 +2013-05-06 14:00:00,3154.8130841121497 +2013-05-06 15:00:00,3186.4174454828662 +2013-05-06 16:00:00,3181.043613707165 +2013-05-06 17:00:00,3207.0778816199377 +2013-05-06 18:00:00,3215.07476635514 +2013-05-06 19:00:00,3194.1806853582552 +2013-05-06 20:00:00,3159.0280373831774 +2013-05-06 21:00:00,3104.3271028037384 +2013-05-06 22:00:00,2792.9127725856697 +2013-05-06 23:00:00,2090.208722741433 +2013-05-07 00:00:00,1713.728971962617 +2013-05-07 01:00:00,1477.4641744548287 +2013-05-07 02:00:00,1407.7507788161993 +2013-05-07 03:00:00,1335.9158878504672 +2013-05-07 04:00:00,1298.3956386292834 +2013-05-07 05:00:00,1316.2803738317757 +2013-05-07 06:00:00,1493.4859813084113 +2013-05-07 07:00:00,1664.7196261682243 +2013-05-07 08:00:00,1778.9003115264798 +2013-05-07 09:00:00,2302.0467289719627 +2013-05-07 10:00:00,2906.264797507788 +2013-05-07 11:00:00,3240.669781931464 +2013-05-07 12:00:00,3228.1931464174454 +2013-05-07 13:00:00,3262.9127725856697 +2013-05-07 14:00:00,3248.9844236760123 +2013-05-07 15:00:00,3316.6168224299067 +2013-05-07 16:00:00,3342.526479750779 +2013-05-07 17:00:00,3234.9781931464177 +2013-05-07 18:00:00,3253.6230529595014 +2013-05-07 19:00:00,3186.903426791277 +2013-05-07 20:00:00,3139.6105919003116 +2013-05-07 21:00:00,3006.728971962617 +2013-05-07 22:00:00,2803.461059190031 +2013-05-07 23:00:00,2135.355140186916 +2013-05-08 00:00:00,1722.9065420560748 +2013-05-08 01:00:00,1412.7165109034268 +2013-05-08 02:00:00,1297.4859813084113 +2013-05-08 03:00:00,1244.3239875389409 +2013-05-08 04:00:00,1228.8691588785048 +2013-05-08 05:00:00,1305.6261682242991 +2013-05-08 06:00:00,1500.0809968847352 +2013-05-08 07:00:00,1652.6791277258567 +2013-05-08 08:00:00,1764.1370716510903 +2013-05-08 09:00:00,2308.778816199377 +2013-05-08 10:00:00,2851.196261682243 +2013-05-08 11:00:00,3093.3769470404986 +2013-05-08 12:00:00,3028.9906542056074 +2013-05-08 13:00:00,3193.479750778816 +2013-05-08 14:00:00,3222.105919003115 +2013-05-08 15:00:00,3314.676012461059 +2013-05-08 16:00:00,3336.9813084112147 +2013-05-08 17:00:00,3267.264797507788 +2013-05-08 18:00:00,3258.4143302180687 +2013-05-08 19:00:00,3277.5669781931465 +2013-05-08 20:00:00,3270.246105919003 +2013-05-08 21:00:00,3138.8006230529595 +2013-05-08 22:00:00,2892.931464174455 +2013-05-08 23:00:00,2170.7040498442366 +2013-05-09 00:00:00,1722.056074766355 +2013-05-09 01:00:00,1475.3769470404984 +2013-05-09 02:00:00,1401.638629283489 +2013-05-09 03:00:00,1342.03738317757 +2013-05-09 04:00:00,1353.4641744548287 +2013-05-09 05:00:00,1375.6355140186915 +2013-05-09 06:00:00,1539.1028037383178 +2013-05-09 07:00:00,1739.2897196261683 +2013-05-09 08:00:00,1837.1557632398753 +2013-05-09 09:00:00,2355.07476635514 +2013-05-09 10:00:00,2932.713395638629 +2013-05-09 11:00:00,3049.227414330218 +2013-05-09 12:00:00,3268.8130841121497 +2013-05-09 13:00:00,3249.4267912772584 +2013-05-09 14:00:00,3333.903426791277 +2013-05-09 15:00:00,3371.3115264797507 +2013-05-09 16:00:00,3405.3052959501556 +2013-05-09 17:00:00,3413.803738317757 +2013-05-09 18:00:00,3402.7258566978194 +2013-05-09 19:00:00,3266.7881619937693 +2013-05-09 20:00:00,3171.411214953271 +2013-05-09 21:00:00,3111.4143302180687 +2013-05-09 22:00:00,2873.834890965732 +2013-05-09 23:00:00,2151.7414330218066 +2013-05-10 00:00:00,1684.0498442367602 +2013-05-10 01:00:00,1399.7009345794393 +2013-05-10 02:00:00,1342.1214953271028 +2013-05-10 03:00:00,1287.785046728972 +2013-05-10 04:00:00,1284.7320872274142 +2013-05-10 05:00:00,1342.392523364486 +2013-05-10 06:00:00,1513.1869158878505 +2013-05-10 07:00:00,1683.3177570093458 +2013-05-10 08:00:00,1808.2897196261683 +2013-05-10 09:00:00,2297.6947040498444 +2013-05-10 10:00:00,2958.03738317757 +2013-05-10 11:00:00,3060.171339563863 +2013-05-10 12:00:00,3031.9158878504672 +2013-05-10 13:00:00,3084.5545171339563 +2013-05-10 14:00:00,3072.006230529595 +2013-05-10 15:00:00,3143.5171339563863 +2013-05-10 16:00:00,3637.6604361370714 +2013-05-10 17:00:00,3540.632398753894 +2013-05-10 18:00:00,3440.791277258567 +2013-05-10 19:00:00,3363.8598130841124 +2013-05-10 20:00:00,3258.1744548286606 +2013-05-10 21:00:00,3109.1869158878503 +2013-05-10 22:00:00,2852.4517133956388 +2013-05-10 23:00:00,2227.9065420560746 +2013-05-11 00:00:00,1734.1931464174454 +2013-05-11 01:00:00,1474.8940809968847 +2013-05-11 02:00:00,1398.872274143302 +2013-05-11 03:00:00,1289.1682242990655 +2013-05-11 04:00:00,1227.9657320872275 +2013-05-11 05:00:00,1282.4392523364486 +2013-05-11 06:00:00,1432.7227414330218 +2013-05-11 07:00:00,1603.6728971962616 +2013-05-11 08:00:00,1702.8598130841121 +2013-05-11 09:00:00,2271.4828660436137 +2013-05-11 10:00:00,2873.607476635514 +2013-05-11 11:00:00,3023.504672897196 +2013-05-11 12:00:00,3128.797507788162 +2013-05-11 13:00:00,3301.7414330218066 +2013-05-11 14:00:00,3331.059190031153 +2013-05-11 15:00:00,3428.3582554517134 +2013-05-11 16:00:00,3458.2959501557634 +2013-05-11 17:00:00,3486.5669781931465 +2013-05-11 18:00:00,3380.6199376947043 +2013-05-11 19:00:00,3186.330218068536 +2013-05-11 20:00:00,3137.006230529595 +2013-05-11 21:00:00,3021.753894080997 +2013-05-11 22:00:00,2843.8442367601247 +2013-05-11 23:00:00,2203.3894080996884 +2013-05-12 00:00:00,1722.3644859813085 +2013-05-12 01:00:00,1462.3956386292834 +2013-05-12 02:00:00,1353.0249221183801 +2013-05-12 03:00:00,1274.7040498442368 +2013-05-12 04:00:00,1193.5046728971963 +2013-05-12 05:00:00,1241.6168224299065 +2013-05-12 06:00:00,1400.239875389408 +2013-05-12 07:00:00,1552.2056074766356 +2013-05-12 08:00:00,1657.411214953271 +2013-05-12 09:00:00,2211.0841121495328 +2013-05-12 10:00:00,2729.1308411214955 +2013-05-12 11:00:00,2853.214953271028 +2013-05-12 12:00:00,3050.551401869159 +2013-05-12 13:00:00,3299.429906542056 +2013-05-12 14:00:00,3235.92523364486 +2013-05-12 15:00:00,3264.570093457944 +2013-05-12 16:00:00,3222.1744548286606 +2013-05-12 17:00:00,3264.0155763239877 +2013-05-12 18:00:00,3186.2523364485983 +2013-05-12 19:00:00,3153.0498442367602 +2013-05-12 20:00:00,3074.4330218068535 +2013-05-12 21:00:00,3039.202492211838 +2013-05-12 22:00:00,2819.744548286604 +2013-05-12 23:00:00,2059.3052959501556 +2013-05-13 00:00:00,1681.0809968847352 +2013-05-13 01:00:00,1425.6884735202493 +2013-05-13 02:00:00,1368.127725856698 +2013-05-13 03:00:00,1291.392523364486 +2013-05-13 04:00:00,1288.3707165109033 +2013-05-13 05:00:00,1291.96261682243 +2013-05-13 06:00:00,1446.6915887850466 +2013-05-13 07:00:00,1603.8473520249222 +2013-05-13 08:00:00,1696.8130841121495 +2013-05-13 09:00:00,2235.772585669782 +2013-05-13 10:00:00,2805.323987538941 +2013-05-13 11:00:00,3323.6105919003116 +2013-05-13 12:00:00,3263.0934579439254 +2013-05-13 13:00:00,3291.669781931464 +2013-05-13 14:00:00,3306.5482866043612 +2013-05-13 15:00:00,3391.411214953271 +2013-05-13 16:00:00,3411.429906542056 +2013-05-13 17:00:00,3351.744548286604 +2013-05-13 18:00:00,3346.6791277258567 +2013-05-13 19:00:00,3329.98753894081 +2013-05-13 20:00:00,3197.105919003115 +2013-05-13 21:00:00,3134.2056074766356 +2013-05-13 22:00:00,2958.7040498442366 +2013-05-13 23:00:00,2344.345794392523 +2013-05-14 00:00:00,1872.1246105919004 +2013-05-14 01:00:00,1510.638629283489 +2013-05-14 02:00:00,1475.2928348909657 +2013-05-14 03:00:00,1420.8566978193146 +2013-05-14 04:00:00,1419.4330218068535 +2013-05-14 05:00:00,1426.6168224299065 +2013-05-14 06:00:00,1558.8286604361372 +2013-05-14 07:00:00,1740.0872274143303 +2013-05-14 08:00:00,1879.7912772585669 +2013-05-14 09:00:00,2341.6791277258567 +2013-05-14 10:00:00,2868.903426791277 +2013-05-14 11:00:00,3121.797507788162 +2013-05-14 12:00:00,3274.9844236760123 +2013-05-14 13:00:00,3242.919003115265 +2013-05-14 14:00:00,3273.753894080997 +2013-05-14 15:00:00,3352.2429906542056 +2013-05-14 16:00:00,3361.8753894080996 +2013-05-14 17:00:00,3315.1370716510905 +2013-05-14 18:00:00,3241.5140186915887 +2013-05-14 19:00:00,3139.778816199377 +2013-05-14 20:00:00,3007.461059190031 +2013-05-14 21:00:00,2956.947040498442 +2013-05-14 22:00:00,2764.0467289719627 +2013-05-14 23:00:00,2144.828660436137 +2013-05-15 00:00:00,1733.9127725856697 +2013-05-15 01:00:00,1435.0218068535826 +2013-05-15 02:00:00,1356.6791277258567 +2013-05-15 03:00:00,1247.6292834890967 +2013-05-15 04:00:00,1232.1713395638628 +2013-05-15 05:00:00,1278.9844236760125 +2013-05-15 06:00:00,1427.0934579439252 +2013-05-15 07:00:00,1638.6105919003114 +2013-05-15 08:00:00,1707.6666666666667 +2013-05-15 09:00:00,2206.96261682243 +2013-05-15 10:00:00,2686.183800623053 +2013-05-15 11:00:00,2751.1370716510905 +2013-05-15 12:00:00,2830.834890965732 +2013-05-15 13:00:00,2773.4392523364486 +2013-05-15 14:00:00,2843.4018691588785 +2013-05-15 15:00:00,2869.697819314642 +2013-05-15 16:00:00,2888.5171339563863 +2013-05-15 17:00:00,2877.8691588785045 +2013-05-15 18:00:00,2863.4143302180687 +2013-05-15 19:00:00,2846.411214953271 +2013-05-15 20:00:00,2788.411214953271 +2013-05-15 21:00:00,2821.031152647975 +2013-05-15 22:00:00,2610.277258566978 +2013-05-15 23:00:00,2040.619937694704 +2013-05-16 00:00:00,1638.968847352025 +2013-05-16 01:00:00,1320.4859813084113 +2013-05-16 02:00:00,1285.2741433021806 +2013-05-16 03:00:00,1243.3177570093458 +2013-05-16 04:00:00,1226.5794392523364 +2013-05-16 05:00:00,1279.7632398753894 +2013-05-16 06:00:00,1440.2990654205607 +2013-05-16 07:00:00,1636.9750778816199 +2013-05-16 08:00:00,1710.6261682242991 +2013-05-16 09:00:00,2221.4205607476633 +2013-05-16 10:00:00,2618.6105919003116 +2013-05-16 11:00:00,2718.043613707165 +2013-05-16 12:00:00,2806.3707165109035 +2013-05-16 13:00:00,2759.221183800623 +2013-05-16 14:00:00,2752.663551401869 +2013-05-16 15:00:00,2784.88785046729 +2013-05-16 16:00:00,2791.043613707165 +2013-05-16 17:00:00,2802.0560747663553 +2013-05-16 18:00:00,2826.1619937694704 +2013-05-16 19:00:00,2797.3115264797507 +2013-05-16 20:00:00,2794.878504672897 +2013-05-16 21:00:00,2808.785046728972 +2013-05-16 22:00:00,2629.03738317757 +2013-05-16 23:00:00,2075.246105919003 +2013-05-17 00:00:00,1630.0654205607477 +2013-05-17 01:00:00,1353.3644859813085 +2013-05-17 02:00:00,1283.7507788161993 +2013-05-17 03:00:00,1228.9190031152648 +2013-05-17 04:00:00,1227.0280373831777 +2013-05-17 05:00:00,1286.3738317757009 +2013-05-17 06:00:00,1452.526479750779 +2013-05-17 07:00:00,1641.638629283489 +2013-05-17 08:00:00,1753.0623052959502 +2013-05-17 09:00:00,2262.052959501558 +2013-05-17 10:00:00,2698.386292834891 +2013-05-17 11:00:00,2752.1806853582552 +2013-05-17 12:00:00,2745.6168224299067 +2013-05-17 13:00:00,2786.735202492212 +2013-05-17 14:00:00,2765.473520249221 +2013-05-17 15:00:00,2782.292834890966 +2013-05-17 16:00:00,2772.9003115264795 +2013-05-17 17:00:00,2814.607476635514 +2013-05-17 18:00:00,2765.6604361370714 +2013-05-17 19:00:00,2784.177570093458 +2013-05-17 20:00:00,2774.791277258567 +2013-05-17 21:00:00,2779.1246105919004 +2013-05-17 22:00:00,2618.3489096573207 +2013-05-17 23:00:00,2108.0467289719627 +2013-05-18 00:00:00,1675.872274143302 +2013-05-18 01:00:00,1421.797507788162 +2013-05-18 02:00:00,1323.8317757009345 +2013-05-18 03:00:00,1211.619937694704 +2013-05-18 04:00:00,1170.0280373831777 +2013-05-18 05:00:00,1222.7227414330218 +2013-05-18 06:00:00,1422.3177570093458 +2013-05-18 07:00:00,1556.8847352024923 +2013-05-18 08:00:00,1665.4299065420562 +2013-05-18 09:00:00,2230.6168224299067 +2013-05-18 10:00:00,2641.595015576324 +2013-05-18 11:00:00,2732.292834890966 +2013-05-18 12:00:00,2769.4859813084113 +2013-05-18 13:00:00,2760.5732087227416 +2013-05-18 14:00:00,2724.6604361370714 +2013-05-18 15:00:00,2750.4080996884736 +2013-05-18 16:00:00,2806.165109034268 +2013-05-18 17:00:00,2765.3426791277257 +2013-05-18 18:00:00,2759.520249221184 +2013-05-18 19:00:00,2755.302180685358 +2013-05-18 20:00:00,2768.302180685358 +2013-05-18 21:00:00,2760.7632398753894 +2013-05-18 22:00:00,2603.744548286604 +2013-05-18 23:00:00,2102.956386292835 +2013-05-19 00:00:00,1651.8286604361372 +2013-05-19 01:00:00,1395.760124610592 +2013-05-19 02:00:00,1308.1619937694704 +2013-05-19 03:00:00,1248.7383177570093 +2013-05-19 04:00:00,1157.7102803738317 +2013-05-19 05:00:00,1213.7009345794393 +2013-05-19 06:00:00,1364.728971962617 +2013-05-19 07:00:00,1512.3831775700935 +2013-05-19 08:00:00,1594.5919003115264 +2013-05-19 09:00:00,2177.6168224299067 +2013-05-19 10:00:00,2586.6230529595014 +2013-05-19 11:00:00,2714.822429906542 +2013-05-19 12:00:00,2733.632398753894 +2013-05-19 13:00:00,2679.068535825545 +2013-05-19 14:00:00,2676.9345794392525 +2013-05-19 15:00:00,2690.803738317757 +2013-05-19 16:00:00,2737.644859813084 +2013-05-19 17:00:00,2712.404984423676 +2013-05-19 18:00:00,2673.8753894080996 +2013-05-19 19:00:00,2656.171339563863 +2013-05-19 20:00:00,2659.7196261682243 +2013-05-19 21:00:00,2693.043613707165 +2013-05-19 22:00:00,2499.947040498442 +2013-05-19 23:00:00,1897.8411214953271 +2013-05-20 00:00:00,1550.4797507788162 +2013-05-20 01:00:00,1356.5015576323988 +2013-05-20 02:00:00,1311.7445482866044 +2013-05-20 03:00:00,1264.5856697819315 +2013-05-20 04:00:00,1271.367601246106 +2013-05-20 05:00:00,1328.3956386292834 +2013-05-20 06:00:00,1503.031152647975 +2013-05-20 07:00:00,1660.1806853582555 +2013-05-20 08:00:00,1773.423676012461 +2013-05-20 09:00:00,2176.9813084112147 +2013-05-20 10:00:00,2592.5669781931465 +2013-05-20 11:00:00,2656.6292834890965 +2013-05-20 12:00:00,2695.3894080996884 +2013-05-20 13:00:00,2721.909657320872 +2013-05-20 14:00:00,2720.6417445482866 +2013-05-20 15:00:00,2722.398753894081 +2013-05-20 16:00:00,2767.707165109034 +2013-05-20 17:00:00,2743.8193146417448 +2013-05-20 18:00:00,2709.903426791277 +2013-05-20 19:00:00,2718.495327102804 +2013-05-20 20:00:00,2721.0280373831774 +2013-05-20 21:00:00,2701.903426791277 +2013-05-20 22:00:00,2543.713395638629 +2013-05-20 23:00:00,2058.92523364486 +2013-05-21 00:00:00,1686.221183800623 +2013-05-21 01:00:00,1498.8598130841121 +2013-05-21 02:00:00,1430.1121495327102 +2013-05-21 03:00:00,1364.2461059190032 +2013-05-21 04:00:00,1364.9065420560748 +2013-05-21 05:00:00,1394.3146417445482 +2013-05-21 06:00:00,1528.177570093458 +2013-05-21 07:00:00,1668.9968847352025 +2013-05-21 08:00:00,1774.3395638629283 +2013-05-21 09:00:00,2212.4392523364486 +2013-05-21 10:00:00,2686.0778816199377 +2013-05-21 11:00:00,2717.2741433021806 +2013-05-21 12:00:00,2772.0996884735205 +2013-05-21 13:00:00,2827.0404984423676 +2013-05-21 14:00:00,2839.6479750778817 +2013-05-21 15:00:00,2857.7757009345796 +2013-05-21 16:00:00,2885.01246105919 +2013-05-21 17:00:00,2933.4392523364486 +2013-05-21 18:00:00,2873.797507788162 +2013-05-21 19:00:00,2837.0218068535823 +2013-05-21 20:00:00,2820.0872274143303 +2013-05-21 21:00:00,2763.8068535825546 +2013-05-21 22:00:00,2613.947040498442 +2013-05-21 23:00:00,2024.8909657320871 +2013-05-22 00:00:00,1668.6355140186915 +2013-05-22 01:00:00,1385.3395638629283 +2013-05-22 02:00:00,1287.3364485981308 +2013-05-22 03:00:00,1223.6417445482866 +2013-05-22 04:00:00,1229.1308411214952 +2013-05-22 05:00:00,1305.1401869158879 +2013-05-22 06:00:00,1465.3395638629283 +2013-05-22 07:00:00,1619.8193146417445 +2013-05-22 08:00:00,1731.3208722741433 +2013-05-22 09:00:00,2221.778816199377 +2013-05-22 10:00:00,2768.143302180685 +2013-05-22 11:00:00,2911.7320872274145 +2013-05-22 12:00:00,3026.4392523364486 +2013-05-22 13:00:00,3002.1028037383176 +2013-05-22 14:00:00,3038.8317757009345 +2013-05-22 15:00:00,3063.2834890965732 +2013-05-22 16:00:00,3191.0155763239877 +2013-05-22 17:00:00,3182.2242990654204 +2013-05-22 18:00:00,3139.4517133956388 +2013-05-22 19:00:00,3112.7320872274145 +2013-05-22 20:00:00,2975.785046728972 +2013-05-22 21:00:00,2852.2118380062307 +2013-05-22 22:00:00,2670.6355140186915 +2013-05-22 23:00:00,2056.227414330218 +2013-05-23 00:00:00,1644.2897196261683 +2013-05-23 01:00:00,1333.588785046729 +2013-05-23 02:00:00,1275.2647975077882 +2013-05-23 03:00:00,1224.5389408099688 +2013-05-23 04:00:00,1249.4454828660437 +2013-05-23 05:00:00,1288.3302180685357 +2013-05-23 06:00:00,1467.1246105919004 +2013-05-23 07:00:00,1622.4143302180685 +2013-05-23 08:00:00,1754.3395638629283 +2013-05-23 09:00:00,2271.1464174454827 +2013-05-23 10:00:00,2769.473520249221 +2013-05-23 11:00:00,2929.8909657320874 +2013-05-23 12:00:00,2921.1557632398753 +2013-05-23 13:00:00,3000.5171339563863 +2013-05-23 14:00:00,3123.3831775700933 +2013-05-23 15:00:00,3110.3208722741433 +2013-05-23 16:00:00,3195.5919003115264 +2013-05-23 17:00:00,3223.06230529595 +2013-05-23 18:00:00,3089.2367601246106 +2013-05-23 19:00:00,3047.8006230529595 +2013-05-23 20:00:00,2914.551401869159 +2013-05-23 21:00:00,2897.165109034268 +2013-05-23 22:00:00,2686.1464174454827 +2013-05-23 23:00:00,2093.0404984423676 +2013-05-24 00:00:00,1635.9657320872275 +2013-05-24 01:00:00,1333.0747663551401 +2013-05-24 02:00:00,1302.7227414330218 +2013-05-24 03:00:00,1254.0903426791276 +2013-05-24 04:00:00,1236.601246105919 +2013-05-24 05:00:00,1279.7009345794393 +2013-05-24 06:00:00,1449.2679127725858 +2013-05-24 07:00:00,1605.1557632398753 +2013-05-24 08:00:00,1771.3769470404984 +2013-05-24 09:00:00,2268.613707165109 +2013-05-24 10:00:00,2827.5482866043612 +2013-05-24 11:00:00,2928.872274143302 +2013-05-24 12:00:00,2977.165109034268 +2013-05-24 13:00:00,3029.563862928349 +2013-05-24 14:00:00,3058.392523364486 +2013-05-24 15:00:00,3148.448598130841 +2013-05-24 16:00:00,3163.644859813084 +2013-05-24 17:00:00,3156.903426791277 +2013-05-24 18:00:00,3183.361370716511 +2013-05-24 19:00:00,3121.1401869158876 +2013-05-24 20:00:00,2984.6199376947043 +2013-05-24 21:00:00,2948.9719626168226 +2013-05-24 22:00:00,2758.542056074766 +2013-05-24 23:00:00,2196.9127725856697 +2013-05-25 00:00:00,1696.3551401869158 +2013-05-25 01:00:00,1420.7165109034268 +2013-05-25 02:00:00,1345.0249221183801 +2013-05-25 03:00:00,1264.252336448598 +2013-05-25 04:00:00,1211.2242990654206 +2013-05-25 05:00:00,1258.1495327102805 +2013-05-25 06:00:00,1439.0747663551401 +2013-05-25 07:00:00,1606.7943925233644 +2013-05-25 08:00:00,1706.638629283489 +2013-05-25 09:00:00,2319.7881619937693 +2013-05-25 10:00:00,2802.92523364486 +2013-05-25 11:00:00,2982.096573208723 +2013-05-25 12:00:00,3066.7196261682243 +2013-05-25 13:00:00,3043.9221183800623 +2013-05-25 14:00:00,3105.669781931464 +2013-05-25 15:00:00,3101.526479750779 +2013-05-25 16:00:00,3160.105919003115 +2013-05-25 17:00:00,3199.06230529595 +2013-05-25 18:00:00,3119.3052959501556 +2013-05-25 19:00:00,3054.7320872274145 +2013-05-25 20:00:00,2992.700934579439 +2013-05-25 21:00:00,2970.1028037383176 +2013-05-25 22:00:00,2747.2679127725855 +2013-05-25 23:00:00,2156.3395638629286 +2013-05-26 00:00:00,1682.2492211838007 +2013-05-26 01:00:00,1421.5981308411215 +2013-05-26 02:00:00,1336.8878504672898 +2013-05-26 03:00:00,1287.1401869158879 +2013-05-26 04:00:00,1181.526479750779 +2013-05-26 05:00:00,1219.3457943925234 +2013-05-26 06:00:00,1391.1526479750778 +2013-05-26 07:00:00,1517.177570093458 +2013-05-26 08:00:00,1598.2741433021806 +2013-05-26 09:00:00,2245.669781931464 +2013-05-26 10:00:00,2692.7819314641742 +2013-05-26 11:00:00,2833.423676012461 +2013-05-26 12:00:00,2918.2834890965732 +2013-05-26 13:00:00,2839.308411214953 +2013-05-26 14:00:00,2863.766355140187 +2013-05-26 15:00:00,2916.691588785047 +2013-05-26 16:00:00,3061.121495327103 +2013-05-26 17:00:00,3133.8193146417448 +2013-05-26 18:00:00,3085.613707165109 +2013-05-26 19:00:00,2937.6168224299067 +2013-05-26 20:00:00,2896.3395638629286 +2013-05-26 21:00:00,2847.9345794392525 +2013-05-26 22:00:00,2638.096573208723 +2013-05-26 23:00:00,2005.1308411214952 +2013-05-27 00:00:00,1619.3084112149534 +2013-05-27 01:00:00,1365.4828660436137 +2013-05-27 02:00:00,1299.380062305296 +2013-05-27 03:00:00,1236.2429906542056 +2013-05-27 04:00:00,1234.5576323987539 +2013-05-27 05:00:00,1302.0249221183801 +2013-05-27 06:00:00,1435.5295950155764 +2013-05-27 07:00:00,1637.146417445483 +2013-05-27 08:00:00,1656.0155763239875 +2013-05-27 09:00:00,2236.5451713395637 +2013-05-27 10:00:00,2732.7320872274145 +2013-05-27 11:00:00,2749.7320872274145 +2013-05-27 12:00:00,2814.158878504673 +2013-05-27 13:00:00,2871.772585669782 +2013-05-27 14:00:00,2851.9595015576324 +2013-05-27 15:00:00,2863.847352024922 +2013-05-27 16:00:00,2921.246105919003 +2013-05-27 17:00:00,2865.3115264797507 +2013-05-27 18:00:00,2877.1557632398753 +2013-05-27 19:00:00,2823.0155763239877 +2013-05-27 20:00:00,2752.6947040498444 +2013-05-27 21:00:00,2736.644859813084 +2013-05-27 22:00:00,2624.7196261682243 +2013-05-27 23:00:00,2057.940809968847 +2013-05-28 00:00:00,1648.7009345794393 +2013-05-28 01:00:00,1345.1370716510903 +2013-05-28 02:00:00,1287.5420560747664 +2013-05-28 03:00:00,1240.2772585669782 +2013-05-28 04:00:00,1239.993769470405 +2013-05-28 05:00:00,1288.6105919003114 +2013-05-28 06:00:00,1427.1370716510903 +2013-05-28 07:00:00,1614.0996884735202 +2013-05-28 08:00:00,1726.968847352025 +2013-05-28 09:00:00,2209.2679127725855 +2013-05-28 10:00:00,2720.931464174455 +2013-05-28 11:00:00,2776.214953271028 +2013-05-28 12:00:00,2771.7943925233644 +2013-05-28 13:00:00,2833.834890965732 +2013-05-28 14:00:00,2841.5732087227416 +2013-05-28 15:00:00,2835.1495327102803 +2013-05-28 16:00:00,2873.700934579439 +2013-05-28 17:00:00,2891.165109034268 +2013-05-28 18:00:00,2862.9968847352025 +2013-05-28 19:00:00,2810.6728971962616 +2013-05-28 20:00:00,2813.803738317757 +2013-05-28 21:00:00,2770.2897196261683 +2013-05-28 22:00:00,2601.6292834890965 +2013-05-28 23:00:00,2055.152647975078 +2013-05-29 00:00:00,1621.6915887850466 +2013-05-29 01:00:00,1326.3115264797507 +2013-05-29 02:00:00,1238.3177570093458 +2013-05-29 03:00:00,1196.3551401869158 +2013-05-29 04:00:00,1195.0623052959502 +2013-05-29 05:00:00,1255.0809968847352 +2013-05-29 06:00:00,1397.595015576324 +2013-05-29 07:00:00,1594.7383177570093 +2013-05-29 08:00:00,1709.5607476635514 +2013-05-29 09:00:00,2196.9003115264795 +2013-05-29 10:00:00,2637.866043613707 +2013-05-29 11:00:00,2714.6292834890965 +2013-05-29 12:00:00,2775.171339563863 +2013-05-29 13:00:00,2762.8130841121497 +2013-05-29 14:00:00,2828.722741433022 +2013-05-29 15:00:00,2869.6292834890965 +2013-05-29 16:00:00,2913.1152647975077 +2013-05-29 17:00:00,2890.314641744548 +2013-05-29 18:00:00,2888.685358255452 +2013-05-29 19:00:00,2858.233644859813 +2013-05-29 20:00:00,2823.841121495327 +2013-05-29 21:00:00,2841.7757009345796 +2013-05-29 22:00:00,2587.6043613707166 +2013-05-29 23:00:00,2021.1121495327102 +2013-05-30 00:00:00,1583.3084112149534 +2013-05-30 01:00:00,1278.9376947040498 +2013-05-30 02:00:00,1225.473520249221 +2013-05-30 03:00:00,1171.98753894081 +2013-05-30 04:00:00,1178.6915887850466 +2013-05-30 05:00:00,1238.803738317757 +2013-05-30 06:00:00,1397.5358255451713 +2013-05-30 07:00:00,1542.7258566978194 +2013-05-30 08:00:00,1672.6355140186915 +2013-05-30 09:00:00,2233.0498442367602 +2013-05-30 10:00:00,2642.423676012461 +2013-05-30 11:00:00,2755.246105919003 +2013-05-30 12:00:00,2758.177570093458 +2013-05-30 13:00:00,2831.809968847352 +2013-05-30 14:00:00,2931.595015576324 +2013-05-30 15:00:00,2977.436137071651 +2013-05-30 16:00:00,2987.6573208722743 +2013-05-30 17:00:00,3032.3831775700933 +2013-05-30 18:00:00,2937.2367601246106 +2013-05-30 19:00:00,2934.601246105919 +2013-05-30 20:00:00,2814.7881619937693 +2013-05-30 21:00:00,2838.8380062305296 +2013-05-30 22:00:00,2633.9439252336447 +2013-05-30 23:00:00,2037.165109034268 +2013-05-31 00:00:00,1607.3302180685357 +2013-05-31 01:00:00,1318.1869158878505 +2013-05-31 02:00:00,1277.417445482866 +2013-05-31 03:00:00,1268.1339563862928 +2013-05-31 04:00:00,1255.4641744548287 +2013-05-31 05:00:00,1296.4641744548287 +2013-05-31 06:00:00,1431.2679127725858 +2013-05-31 07:00:00,1605.2647975077882 +2013-05-31 08:00:00,1742.7352024922118 +2013-05-31 09:00:00,2235.3956386292834 +2013-05-31 10:00:00,2776.152647975078 +2013-05-31 11:00:00,2937.6199376947043 +2013-05-31 12:00:00,3031.5015576323985 +2013-05-31 13:00:00,3123.9158878504672 +2013-05-31 14:00:00,3186.0467289719627 +2013-05-31 15:00:00,3261.563862928349 +2013-05-31 16:00:00,3387.5482866043612 +2013-05-31 17:00:00,3356.551401869159 +2013-05-31 18:00:00,3361.772585669782 +2013-05-31 19:00:00,3236.3831775700933 +2013-05-31 20:00:00,3155.2834890965732 +2013-05-31 21:00:00,3009.196261682243 +2013-05-31 22:00:00,2882.822429906542 +2013-05-31 23:00:00,2221.9781931464177 +2013-06-01 00:00:00,1733.1183800623053 +2013-06-01 01:00:00,1446.9844236760125 +2013-06-01 02:00:00,1359.380062305296 +2013-06-01 03:00:00,1245.545171339564 +2013-06-01 04:00:00,1204.4517133956385 +2013-06-01 05:00:00,1250.8380062305296 +2013-06-01 06:00:00,1434.853582554517 +2013-06-01 07:00:00,1572.2616822429907 +2013-06-01 08:00:00,1694.4704049844236 +2013-06-01 09:00:00,2384.8068535825546 +2013-06-01 10:00:00,2931.7258566978194 +2013-06-01 11:00:00,3154.542056074766 +2013-06-01 12:00:00,3320.255451713396 +2013-06-01 13:00:00,3317.6604361370714 +2013-06-01 14:00:00,3344.3800623052957 +2013-06-01 15:00:00,3412.196261682243 +2013-06-01 16:00:00,3414.096573208723 +2013-06-01 17:00:00,3395.5482866043612 +2013-06-01 18:00:00,3365.3115264797507 +2013-06-01 19:00:00,3401.152647975078 +2013-06-01 20:00:00,3314.707165109034 +2013-06-01 21:00:00,3216.11214953271 +2013-06-01 22:00:00,2986.4267912772584 +2013-06-01 23:00:00,2319.1308411214955 +2013-06-02 00:00:00,1771.5794392523364 +2013-06-02 01:00:00,1482.473520249221 +2013-06-02 02:00:00,1402.6947040498442 +2013-06-02 03:00:00,1339.853582554517 +2013-06-02 04:00:00,1236.1121495327102 +2013-06-02 05:00:00,1287.8753894080996 +2013-06-02 06:00:00,1455.1495327102805 +2013-06-02 07:00:00,1593.5015576323988 +2013-06-02 08:00:00,1689.4641744548287 +2013-06-02 09:00:00,2430.931464174455 +2013-06-02 10:00:00,3014.5545171339563 +2013-06-02 11:00:00,3218.3395638629286 +2013-06-02 12:00:00,3288.1308411214955 +2013-06-02 13:00:00,3299.345794392523 +2013-06-02 14:00:00,3280.956386292835 +2013-06-02 15:00:00,3299.461059190031 +2013-06-02 16:00:00,3341.068535825545 +2013-06-02 17:00:00,3462.2367601246106 +2013-06-02 18:00:00,3374.98753894081 +2013-06-02 19:00:00,3361.557632398754 +2013-06-02 20:00:00,3293.872274143302 +2013-06-02 21:00:00,3186.570093457944 +2013-06-02 22:00:00,2973.8317757009345 +2013-06-02 23:00:00,2089.5732087227416 +2013-06-03 00:00:00,1635.1588785046729 +2013-06-03 01:00:00,1349.619937694704 +2013-06-03 02:00:00,1280.2928348909657 +2013-06-03 03:00:00,1233.2461059190032 +2013-06-03 04:00:00,1235.4299065420562 +2013-06-03 05:00:00,1305.239875389408 +2013-06-03 06:00:00,1485.613707165109 +2013-06-03 07:00:00,1641.183800623053 +2013-06-03 08:00:00,1792.8878504672898 +2013-06-03 09:00:00,2327.92523364486 +2013-06-03 10:00:00,3073.1744548286606 +2013-06-03 11:00:00,3295.495327102804 +2013-06-03 12:00:00,3404.495327102804 +2013-06-03 13:00:00,3492.8816199376947 +2013-06-03 14:00:00,3528.1308411214955 +2013-06-03 15:00:00,3591.271028037383 +2013-06-03 16:00:00,3653.0654205607475 +2013-06-03 17:00:00,3631.1869158878503 +2013-06-03 18:00:00,3632.919003115265 +2013-06-03 19:00:00,3458.2585669781934 +2013-06-03 20:00:00,3429.5732087227416 +2013-06-03 21:00:00,3293.1682242990655 +2013-06-03 22:00:00,3055.8629283489095 +2013-06-03 23:00:00,2235.221183800623 +2013-06-04 00:00:00,1630.638629283489 +2013-06-04 01:00:00,1372.803738317757 +2013-06-04 02:00:00,1330.9221183800623 +2013-06-04 03:00:00,1352.1619937694704 +2013-06-04 04:00:00,1204.4828660436137 +2013-06-04 05:00:00,1233.8847352024923 +2013-06-04 06:00:00,1561.1588785046729 +2013-06-04 07:00:00,1711.0249221183801 +2013-06-04 08:00:00,1842.981308411215 +2013-06-04 09:00:00,2425.121495327103 +2013-06-04 10:00:00,3008.8598130841124 +2013-06-04 11:00:00,3232.436137071651 +2013-06-04 12:00:00,3345.233644859813 +2013-06-04 13:00:00,3415.697819314642 +2013-06-04 14:00:00,3468.4018691588785 +2013-06-04 15:00:00,3491.5669781931465 +2013-06-04 16:00:00,3463.785046728972 +2013-06-04 17:00:00,3434.6230529595014 +2013-06-04 18:00:00,3362.0093457943926 +2013-06-04 19:00:00,3256.542056074766 +2013-06-04 20:00:00,3161.495327102804 +2013-06-04 21:00:00,3152.0560747663553 +2013-06-04 22:00:00,2896.264797507788 +2013-06-04 23:00:00,2185.4330218068535 +2013-06-05 00:00:00,1734.7196261682243 +2013-06-05 01:00:00,1413.8691588785048 +2013-06-05 02:00:00,1346.4454828660437 +2013-06-05 03:00:00,1295.9003115264798 +2013-06-05 04:00:00,1442.2461059190032 +2013-06-05 05:00:00,1511.436137071651 +2013-06-05 06:00:00,1641.7538940809968 +2013-06-05 07:00:00,1832.7227414330218 +2013-06-05 08:00:00,1918.5856697819315 +2013-06-05 09:00:00,2271.713395638629 +2013-06-05 10:00:00,3017.467289719626 +2013-06-05 11:00:00,3216.828660436137 +2013-06-05 12:00:00,3355.778816199377 +2013-06-05 13:00:00,3451.9345794392525 +2013-06-05 14:00:00,3502.2959501557634 +2013-06-05 15:00:00,3574.542056074766 +2013-06-05 16:00:00,3525.7383177570096 +2013-06-05 17:00:00,3534.856697819315 +2013-06-05 18:00:00,3392.202492211838 +2013-06-05 19:00:00,3259.152647975078 +2013-06-05 20:00:00,3201.6043613707166 +2013-06-05 21:00:00,3119.1183800623053 +2013-06-05 22:00:00,2882.7757009345796 +2013-06-05 23:00:00,2199.797507788162 +2013-06-06 00:00:00,1688.7881619937696 +2013-06-06 01:00:00,1451.8504672897195 +2013-06-06 02:00:00,1383.9532710280373 +2013-06-06 03:00:00,1341.8380062305296 +2013-06-06 04:00:00,1313.146417445483 +2013-06-06 05:00:00,1338.0093457943926 +2013-06-06 06:00:00,1501.3582554517134 +2013-06-06 07:00:00,1631.4143302180685 +2013-06-06 08:00:00,1774.6542056074766 +2013-06-06 09:00:00,2218.931464174455 +2013-06-06 10:00:00,2808.557632398754 +2013-06-06 11:00:00,2781.01246105919 +2013-06-06 12:00:00,2896.080996884735 +2013-06-06 13:00:00,2916.2959501557634 +2013-06-06 14:00:00,2953.8598130841124 +2013-06-06 15:00:00,2941.190031152648 +2013-06-06 16:00:00,2998.6230529595014 +2013-06-06 17:00:00,2992.423676012461 +2013-06-06 18:00:00,2968.0778816199377 +2013-06-06 19:00:00,2964.9813084112147 +2013-06-06 20:00:00,2925.5015576323985 +2013-06-06 21:00:00,2880.3894080996884 +2013-06-06 22:00:00,2684.105919003115 +2013-06-06 23:00:00,2120.190031152648 +2013-06-07 00:00:00,1634.392523364486 +2013-06-07 01:00:00,1356.3582554517134 +2013-06-07 02:00:00,1300.5576323987539 +2013-06-07 03:00:00,1257.239875389408 +2013-06-07 04:00:00,1263.2492211838007 +2013-06-07 05:00:00,1293.1433021806854 +2013-06-07 06:00:00,1440.9127725856697 +2013-06-07 07:00:00,1636.5171339563863 +2013-06-07 08:00:00,1746.018691588785 +2013-06-07 09:00:00,2307.7196261682243 +2013-06-07 10:00:00,2737.0654205607475 +2013-06-07 11:00:00,3187.373831775701 +2013-06-07 12:00:00,3025.6510903426793 +2013-06-07 13:00:00,3067.6791277258567 +2013-06-07 14:00:00,3035.97507788162 +2013-06-07 15:00:00,3075.8442367601247 +2013-06-07 16:00:00,3125.7694704049845 +2013-06-07 17:00:00,3092.5669781931465 +2013-06-07 18:00:00,3049.5140186915887 +2013-06-07 19:00:00,2991.570093457944 +2013-06-07 20:00:00,2915.8068535825546 +2013-06-07 21:00:00,2929.5981308411215 +2013-06-07 22:00:00,2838.227414330218 +2013-06-07 23:00:00,2236.601246105919 +2013-06-08 00:00:00,1716.853582554517 +2013-06-08 01:00:00,1459.613707165109 +2013-06-08 02:00:00,1369.8442367601247 +2013-06-08 03:00:00,1288.0467289719627 +2013-06-08 04:00:00,1243.651090342679 +2013-06-08 05:00:00,1270.1308411214952 +2013-06-08 06:00:00,1428.1806853582555 +2013-06-08 07:00:00,1587.4704049844236 +2013-06-08 08:00:00,1719.0747663551401 +2013-06-08 09:00:00,2338.7943925233644 +2013-06-08 10:00:00,2780.5077881619936 +2013-06-08 11:00:00,2924.286604361371 +2013-06-08 12:00:00,3005.8317757009345 +2013-06-08 13:00:00,2903.059190031153 +2013-06-08 14:00:00,2940.03738317757 +2013-06-08 15:00:00,2960.171339563863 +2013-06-08 16:00:00,3100.2959501557634 +2013-06-08 17:00:00,3050.2959501557634 +2013-06-08 18:00:00,3013.336448598131 +2013-06-08 19:00:00,3058.292834890966 +2013-06-08 20:00:00,2941.373831775701 +2013-06-08 21:00:00,2969.7570093457944 +2013-06-08 22:00:00,2779.626168224299 +2013-06-08 23:00:00,2177.607476635514 +2013-06-09 00:00:00,1694.545171339564 +2013-06-09 01:00:00,1437.0436137071652 +2013-06-09 02:00:00,1350.3551401869158 +2013-06-09 03:00:00,1301.4672897196263 +2013-06-09 04:00:00,1198.367601246106 +2013-06-09 05:00:00,1231.361370716511 +2013-06-09 06:00:00,1380.5856697819315 +2013-06-09 07:00:00,1553.8847352024923 +2013-06-09 08:00:00,1630.436137071651 +2013-06-09 09:00:00,2271.3707165109035 +2013-06-09 10:00:00,2727.828660436137 +2013-06-09 11:00:00,2919.2492211838007 +2013-06-09 12:00:00,2952.98753894081 +2013-06-09 13:00:00,2897.2305295950155 +2013-06-09 14:00:00,2960.404984423676 +2013-06-09 15:00:00,2884.277258566978 +2013-06-09 16:00:00,2992.766355140187 +2013-06-09 17:00:00,2977.6510903426793 +2013-06-09 18:00:00,2964.6043613707166 +2013-06-09 19:00:00,2968.4984423676015 +2013-06-09 20:00:00,2913.96261682243 +2013-06-09 21:00:00,2961.2523364485983 +2013-06-09 22:00:00,2662.1993769470405 +2013-06-09 23:00:00,1995.5295950155764 +2013-06-10 00:00:00,1575.4330218068535 +2013-06-10 01:00:00,1271.3115264797507 +2013-06-10 02:00:00,1231.3582554517134 +2013-06-10 03:00:00,1207.7570093457944 +2013-06-10 04:00:00,1210.1588785046729 +2013-06-10 05:00:00,1256.993769470405 +2013-06-10 06:00:00,1413.2928348909657 +2013-06-10 07:00:00,1612.1370716510903 +2013-06-10 08:00:00,1720.0404984423676 +2013-06-10 09:00:00,2227.5233644859813 +2013-06-10 10:00:00,2779.903426791277 +2013-06-10 11:00:00,2901.88785046729 +2013-06-10 12:00:00,2964.728971962617 +2013-06-10 13:00:00,2957.7196261682243 +2013-06-10 14:00:00,3058.3177570093458 +2013-06-10 15:00:00,3058.728971962617 +2013-06-10 16:00:00,3059.3956386292834 +2013-06-10 17:00:00,3057.5607476635514 +2013-06-10 18:00:00,3046.6573208722743 +2013-06-10 19:00:00,3042.6105919003116 +2013-06-10 20:00:00,2960.7632398753894 +2013-06-10 21:00:00,2964.5077881619936 +2013-06-10 22:00:00,2708.9595015576324 +2013-06-10 23:00:00,2033.5295950155764 +2013-06-11 00:00:00,1623.9127725856697 +2013-06-11 01:00:00,1338.1495327102805 +2013-06-11 02:00:00,1276.1931464174454 +2013-06-11 03:00:00,1239.1900311526479 +2013-06-11 04:00:00,1245.3302180685357 +2013-06-11 05:00:00,1284.607476635514 +2013-06-11 06:00:00,1463.5856697819315 +2013-06-11 07:00:00,1625.7133956386292 +2013-06-11 08:00:00,1761.4672897196263 +2013-06-11 09:00:00,2321.4018691588785 +2013-06-11 10:00:00,2813.576323987539 +2013-06-11 11:00:00,3011.0155763239877 +2013-06-11 12:00:00,3172.0155763239877 +2013-06-11 13:00:00,3134.264797507788 +2013-06-11 14:00:00,3221.0934579439254 +2013-06-11 15:00:00,2937.9283489096574 +2013-06-11 16:00:00,2676.9221183800623 +2013-06-11 17:00:00,2731.8380062305296 +2013-06-11 18:00:00,3507.6604361370714 +2013-06-11 19:00:00,3409.3177570093458 +2013-06-11 20:00:00,3320.9906542056074 +2013-06-11 21:00:00,3154.797507788162 +2013-06-11 22:00:00,2877.367601246106 +2013-06-11 23:00:00,2171.1246105919004 +2013-06-12 00:00:00,1719.9408099688474 +2013-06-12 01:00:00,1433.3457943925234 +2013-06-12 02:00:00,1356.4704049844236 +2013-06-12 03:00:00,1321.1121495327102 +2013-06-12 04:00:00,1318.1183800623053 +2013-06-12 05:00:00,1354.9408099688474 +2013-06-12 06:00:00,1508.177570093458 +2013-06-12 07:00:00,1684.1433021806854 +2013-06-12 08:00:00,1827.398753894081 +2013-06-12 09:00:00,2347.489096573209 +2013-06-12 10:00:00,2977.2180685358258 +2013-06-12 11:00:00,3172.3052959501556 +2013-06-12 12:00:00,3298.255451713396 +2013-06-12 13:00:00,3436.3520249221183 +2013-06-12 14:00:00,3528.03738317757 +2013-06-12 15:00:00,3600.3177570093458 +2013-06-12 16:00:00,3589.1464174454827 +2013-06-12 17:00:00,3623.2242990654204 +2013-06-12 18:00:00,3552.0280373831774 +2013-06-12 19:00:00,3396.7476635514017 +2013-06-12 20:00:00,3232.700934579439 +2013-06-12 21:00:00,3107.563862928349 +2013-06-12 22:00:00,2882.8753894080996 +2013-06-12 23:00:00,2136.7476635514017 +2013-06-13 00:00:00,1705.7102803738317 +2013-06-13 01:00:00,1405.5233644859813 +2013-06-13 02:00:00,1343.4579439252336 +2013-06-13 03:00:00,1316.9034267912773 +2013-06-13 04:00:00,1334.582554517134 +2013-06-13 05:00:00,1330.2928348909657 +2013-06-13 06:00:00,1504.766355140187 +2013-06-13 07:00:00,1670.3520249221183 +2013-06-13 08:00:00,1817.0280373831777 +2013-06-13 09:00:00,2410.778816199377 +2013-06-13 10:00:00,3217.9813084112147 +2013-06-13 11:00:00,3423.6510903426793 +2013-06-13 12:00:00,3583.214953271028 +2013-06-13 13:00:00,3825.5607476635514 +2013-06-13 14:00:00,3842.0031152647975 +2013-06-13 15:00:00,3889.1401869158876 +2013-06-13 16:00:00,3915.133956386293 +2013-06-13 17:00:00,3962.3831775700933 +2013-06-13 18:00:00,3770.6292834890965 +2013-06-13 19:00:00,3499.423676012461 +2013-06-13 20:00:00,3498.8442367601247 +2013-06-13 21:00:00,3314.0716510903426 +2013-06-13 22:00:00,3052.4143302180687 +2013-06-13 23:00:00,2182.03738317757 +2013-06-14 00:00:00,1699.7445482866044 +2013-06-14 01:00:00,1418.6355140186915 +2013-06-14 02:00:00,1346.872274143302 +2013-06-14 03:00:00,1306.7943925233644 +2013-06-14 04:00:00,1315.6978193146417 +2013-06-14 05:00:00,1340.5700934579438 +2013-06-14 06:00:00,1489.4205607476636 +2013-06-14 07:00:00,1658.1401869158879 +2013-06-14 08:00:00,1801.0155763239875 +2013-06-14 09:00:00,2420.8598130841124 +2013-06-14 10:00:00,3256.1183800623053 +2013-06-14 11:00:00,3448.676012461059 +2013-06-14 12:00:00,3583.1806853582552 +2013-06-14 13:00:00,3747.392523364486 +2013-06-14 14:00:00,3862.4922118380064 +2013-06-14 15:00:00,3900.4984423676015 +2013-06-14 16:00:00,3973.644859813084 +2013-06-14 17:00:00,3933.894080996885 +2013-06-14 18:00:00,3856.968847352025 +2013-06-14 19:00:00,3616.909657320872 +2013-06-14 20:00:00,3387.3177570093458 +2013-06-14 21:00:00,3212.4205607476633 +2013-06-14 22:00:00,2992.5732087227416 +2013-06-14 23:00:00,2276.613707165109 +2013-06-15 00:00:00,1727.7227414330218 +2013-06-15 01:00:00,1470.1183800623053 +2013-06-15 02:00:00,1387.7725856697818 +2013-06-15 03:00:00,1303.0 +2013-06-15 04:00:00,1257.0747663551401 +2013-06-15 05:00:00,1301.146417445483 +2013-06-15 06:00:00,1468.4890965732088 +2013-06-15 07:00:00,1619.601246105919 +2013-06-15 08:00:00,1745.7538940809968 +2013-06-15 09:00:00,2447.448598130841 +2013-06-15 10:00:00,3060.613707165109 +2013-06-15 11:00:00,3369.563862928349 +2013-06-15 12:00:00,3630.744548286604 +2013-06-15 13:00:00,3736.0155763239877 +2013-06-15 14:00:00,3821.551401869159 +2013-06-15 15:00:00,3858.3115264797507 +2013-06-15 16:00:00,3885.3333333333335 +2013-06-15 17:00:00,3886.9906542056074 +2013-06-15 18:00:00,3825.809968847352 +2013-06-15 19:00:00,3654.0280373831774 +2013-06-15 20:00:00,3458.323987538941 +2013-06-15 21:00:00,3213.93769470405 +2013-06-15 22:00:00,3040.6043613707166 +2013-06-15 23:00:00,2240.0872274143303 +2013-06-16 00:00:00,1713.601246105919 +2013-06-16 01:00:00,1443.9345794392523 +2013-06-16 02:00:00,1364.766355140187 +2013-06-16 03:00:00,1302.6261682242991 +2013-06-16 04:00:00,1219.6884735202493 +2013-06-16 05:00:00,1275.1744548286604 +2013-06-16 06:00:00,1409.9376947040498 +2013-06-16 07:00:00,1525.8473520249222 +2013-06-16 08:00:00,1685.252336448598 +2013-06-16 09:00:00,2400.4641744548285 +2013-06-16 10:00:00,3054.7383177570096 +2013-06-16 11:00:00,3415.809968847352 +2013-06-16 12:00:00,3556.5482866043612 +2013-06-16 13:00:00,3688.919003115265 +2013-06-16 14:00:00,3679.059190031153 +2013-06-16 15:00:00,3738.5545171339563 +2013-06-16 16:00:00,3667.068535825545 +2013-06-16 17:00:00,3633.5981308411215 +2013-06-16 18:00:00,3569.4922118380064 +2013-06-16 19:00:00,3382.532710280374 +2013-06-16 20:00:00,3286.9532710280373 +2013-06-16 21:00:00,3169.2616822429904 +2013-06-16 22:00:00,2866.246105919003 +2013-06-16 23:00:00,2099.894080996885 +2013-06-17 00:00:00,1633.1806853582555 +2013-06-17 01:00:00,1360.1900311526479 +2013-06-17 02:00:00,1311.4267912772586 +2013-06-17 03:00:00,1277.8317757009345 +2013-06-17 04:00:00,1280.0716510903426 +2013-06-17 05:00:00,1324.3052959501558 +2013-06-17 06:00:00,1474.6728971962616 +2013-06-17 07:00:00,1615.271028037383 +2013-06-17 08:00:00,1749.6635514018692 +2013-06-17 09:00:00,2288.006230529595 +2013-06-17 10:00:00,2892.3333333333335 +2013-06-17 11:00:00,3061.5295950155764 +2013-06-17 12:00:00,3114.6355140186915 +2013-06-17 13:00:00,3235.5140186915887 +2013-06-17 14:00:00,3264.059190031153 +2013-06-17 15:00:00,3281.177570093458 +2013-06-17 16:00:00,3324.797507788162 +2013-06-17 17:00:00,3260.0778816199377 +2013-06-17 18:00:00,3223.520249221184 +2013-06-17 19:00:00,3129.713395638629 +2013-06-17 20:00:00,3077.3333333333335 +2013-06-17 21:00:00,3045.8598130841124 +2013-06-17 22:00:00,2880.6479750778817 +2013-06-17 23:00:00,2140.2118380062307 +2013-06-18 00:00:00,1684.1993769470405 +2013-06-18 01:00:00,1430.9657320872275 +2013-06-18 02:00:00,1365.5420560747664 +2013-06-18 03:00:00,1324.398753894081 +2013-06-18 04:00:00,1320.4454828660437 +2013-06-18 05:00:00,1356.3239875389409 +2013-06-18 06:00:00,1495.8629283489097 +2013-06-18 07:00:00,1641.386292834891 +2013-06-18 08:00:00,1767.797507788162 +2013-06-18 09:00:00,2299.5171339563863 +2013-06-18 10:00:00,2877.489096573209 +2013-06-18 11:00:00,3010.520249221184 +2013-06-18 12:00:00,3116.6105919003116 +2013-06-18 13:00:00,3152.685358255452 +2013-06-18 14:00:00,3132.760124610592 +2013-06-18 15:00:00,3141.5825545171338 +2013-06-18 16:00:00,3184.5794392523367 +2013-06-18 17:00:00,3165.7757009345796 +2013-06-18 18:00:00,3064.489096573209 +2013-06-18 19:00:00,3035.0716510903426 +2013-06-18 20:00:00,2987.9345794392525 +2013-06-18 21:00:00,2937.797507788162 +2013-06-18 22:00:00,2753.0996884735205 +2013-06-18 23:00:00,2096.133956386293 +2013-06-19 00:00:00,1671.3831775700935 +2013-06-19 01:00:00,1384.5545171339563 +2013-06-19 02:00:00,1344.7943925233644 +2013-06-19 03:00:00,1291.367601246106 +2013-06-19 04:00:00,1286.9065420560748 +2013-06-19 05:00:00,1319.9034267912773 +2013-06-19 06:00:00,1477.6760124610591 +2013-06-19 07:00:00,1638.3520249221183 +2013-06-19 08:00:00,1772.4299065420562 +2013-06-19 09:00:00,2299.8598130841124 +2013-06-19 10:00:00,2894.0404984423676 +2013-06-19 11:00:00,3049.613707165109 +2013-06-19 12:00:00,3095.9221183800623 +2013-06-19 13:00:00,3167.7102803738317 +2013-06-19 14:00:00,3261.9065420560746 +2013-06-19 15:00:00,3381.277258566978 +2013-06-19 16:00:00,3353.9813084112147 +2013-06-19 17:00:00,3378.1370716510905 +2013-06-19 18:00:00,3292.495327102804 +2013-06-19 19:00:00,3194.6822429906542 +2013-06-19 20:00:00,3142.9345794392525 +2013-06-19 21:00:00,3011.0778816199377 +2013-06-19 22:00:00,2849.3426791277257 +2013-06-19 23:00:00,2154.4143302180687 +2013-06-20 00:00:00,1720.853582554517 +2013-06-20 01:00:00,1415.7881619937696 +2013-06-20 02:00:00,1356.4205607476636 +2013-06-20 03:00:00,1310.1869158878505 +2013-06-20 04:00:00,1301.3894080996886 +2013-06-20 05:00:00,1336.0591900311526 +2013-06-20 06:00:00,1503.8598130841121 +2013-06-20 07:00:00,1660.4330218068535 +2013-06-20 08:00:00,1791.8411214953271 +2013-06-20 09:00:00,2326.121495327103 +2013-06-20 10:00:00,2956.373831775701 +2013-06-20 11:00:00,3083.105919003115 +2013-06-20 12:00:00,3195.2834890965732 +2013-06-20 13:00:00,3301.3489096573207 +2013-06-20 14:00:00,3459.2803738317757 +2013-06-20 15:00:00,3628.3426791277257 +2013-06-20 16:00:00,3582.9158878504672 +2013-06-20 17:00:00,3635.8006230529595 +2013-06-20 18:00:00,3486.638629283489 +2013-06-20 19:00:00,3363.1744548286606 +2013-06-20 20:00:00,3160.6417445482866 +2013-06-20 21:00:00,3046.031152647975 +2013-06-20 22:00:00,2785.6822429906542 +2013-06-20 23:00:00,2150.2429906542056 +2013-06-21 00:00:00,1735.0529595015576 +2013-06-21 01:00:00,1482.7570093457944 +2013-06-21 02:00:00,1335.6822429906542 +2013-06-21 03:00:00,1304.2056074766356 +2013-06-21 04:00:00,1292.177570093458 +2013-06-21 05:00:00,1342.943925233645 +2013-06-21 06:00:00,1519.9127725856697 +2013-06-21 07:00:00,1651.0529595015576 +2013-06-21 08:00:00,1799.9003115264798 +2013-06-21 09:00:00,2402.7632398753894 +2013-06-21 10:00:00,3038.0498442367602 +2013-06-21 11:00:00,3185.669781931464 +2013-06-21 12:00:00,3319.0467289719627 +2013-06-21 13:00:00,3426.8317757009345 +2013-06-21 14:00:00,3509.5856697819313 +2013-06-21 15:00:00,3560.856697819315 +2013-06-21 16:00:00,3570.467289719626 +2013-06-21 17:00:00,3570.177570093458 +2013-06-21 18:00:00,3420.1401869158876 +2013-06-21 19:00:00,3344.1495327102803 +2013-06-21 20:00:00,3237.3707165109035 +2013-06-21 21:00:00,3152.5545171339563 +2013-06-21 22:00:00,3039.286604361371 +2013-06-21 23:00:00,2274.4392523364486 +2013-06-22 00:00:00,1749.3333333333333 +2013-06-22 01:00:00,1486.943925233645 +2013-06-22 02:00:00,1414.3894080996886 +2013-06-22 03:00:00,1329.1993769470405 +2013-06-22 04:00:00,1278.5607476635514 +2013-06-22 05:00:00,1311.214953271028 +2013-06-22 06:00:00,1469.9595015576324 +2013-06-22 07:00:00,1612.0529595015576 +2013-06-22 08:00:00,1808.595015576324 +2013-06-22 09:00:00,2522.9781931464177 +2013-06-22 10:00:00,3241.9439252336447 +2013-06-22 11:00:00,3493.834890965732 +2013-06-22 12:00:00,3621.0342679127725 +2013-06-22 13:00:00,3675.878504672897 +2013-06-22 14:00:00,3666.834890965732 +2013-06-22 15:00:00,3749.919003115265 +2013-06-22 16:00:00,3800.797507788162 +2013-06-22 17:00:00,3820.685358255452 +2013-06-22 18:00:00,3716.532710280374 +2013-06-22 19:00:00,3641.847352024922 +2013-06-22 20:00:00,3518.6791277258567 +2013-06-22 21:00:00,3427.2834890965732 +2013-06-22 22:00:00,3295.0280373831774 +2013-06-22 23:00:00,2362.183800623053 +2013-06-23 00:00:00,1799.5732087227414 +2013-06-23 01:00:00,1510.9190031152648 +2013-06-23 02:00:00,1423.1401869158879 +2013-06-23 03:00:00,1358.4641744548287 +2013-06-23 04:00:00,1264.5669781931465 +2013-06-23 05:00:00,1321.8971962616822 +2013-06-23 06:00:00,1470.785046728972 +2013-06-23 07:00:00,1596.2242990654206 +2013-06-23 08:00:00,1772.3582554517134 +2013-06-23 09:00:00,2537.8629283489095 +2013-06-23 10:00:00,3366.8847352024923 +2013-06-23 11:00:00,3787.127725856698 +2013-06-23 12:00:00,3985.8504672897197 +2013-06-23 13:00:00,3971.6604361370714 +2013-06-23 14:00:00,3920.448598130841 +2013-06-23 15:00:00,3954.5856697819313 +2013-06-23 16:00:00,3987.6791277258567 +2013-06-23 17:00:00,3984.221183800623 +2013-06-23 18:00:00,3929.239875389408 +2013-06-23 19:00:00,3798.8317757009345 +2013-06-23 20:00:00,3735.0996884735205 +2013-06-23 21:00:00,3540.436137071651 +2013-06-23 22:00:00,3218.3395638629286 +2013-06-23 23:00:00,2174.8006230529595 +2013-06-24 00:00:00,1671.2679127725858 +2013-06-24 01:00:00,1351.6822429906542 +2013-06-24 02:00:00,1299.7414330218069 +2013-06-24 03:00:00,1286.3271028037384 +2013-06-24 04:00:00,1308.7227414330218 +2013-06-24 05:00:00,1355.271028037383 +2013-06-24 06:00:00,1472.9906542056074 +2013-06-24 07:00:00,1634.0934579439252 +2013-06-24 08:00:00,1762.7352024922118 +2013-06-24 09:00:00,2520.355140186916 +2013-06-24 10:00:00,3154.264797507788 +2013-06-24 11:00:00,3621.096573208723 +2013-06-24 12:00:00,3715.5825545171338 +2013-06-24 13:00:00,3859.713395638629 +2013-06-24 14:00:00,3910.772585669782 +2013-06-24 15:00:00,3960.638629283489 +2013-06-24 16:00:00,4038.570093457944 +2013-06-24 17:00:00,4013.436137071651 +2013-06-24 18:00:00,3943.2585669781934 +2013-06-24 19:00:00,3843.06230529595 +2013-06-24 20:00:00,3681.5077881619936 +2013-06-24 21:00:00,3546.691588785047 +2013-06-24 22:00:00,3266.4454828660437 +2013-06-24 23:00:00,2477.878504672897 +2013-06-25 00:00:00,1926.3520249221183 +2013-06-25 01:00:00,1516.6261682242991 +2013-06-25 02:00:00,1461.404984423676 +2013-06-25 03:00:00,1402.5327102803737 +2013-06-25 04:00:00,1419.5732087227414 +2013-06-25 05:00:00,1469.342679127726 +2013-06-25 06:00:00,1582.9252336448599 +2013-06-25 07:00:00,1744.5545171339563 +2013-06-25 08:00:00,1904.9314641744547 +2013-06-25 09:00:00,2597.8130841121497 +2013-06-25 10:00:00,3701.9781931464177 +2013-06-25 11:00:00,3939.7258566978194 +2013-06-25 12:00:00,4090.7570093457944 +2013-06-25 13:00:00,4268.8348909657325 +2013-06-25 14:00:00,4310.6355140186915 +2013-06-25 15:00:00,4338.579439252337 +2013-06-25 16:00:00,4349.1651090342675 +2013-06-25 17:00:00,4344.897196261682 +2013-06-25 18:00:00,4254.077881619938 +2013-06-25 19:00:00,4116.632398753894 +2013-06-25 20:00:00,3992.8317757009345 +2013-06-25 21:00:00,3815.0872274143303 +2013-06-25 22:00:00,3519.3956386292834 +2013-06-25 23:00:00,2420.1682242990655 +2013-06-26 00:00:00,1826.5576323987539 +2013-06-26 01:00:00,1528.8099688473521 +2013-06-26 02:00:00,1475.8504672897195 +2013-06-26 03:00:00,1439.165109034268 +2013-06-26 04:00:00,1433.9844236760125 +2013-06-26 05:00:00,1475.6853582554518 +2013-06-26 06:00:00,1599.9906542056074 +2013-06-26 07:00:00,1785.9003115264798 +2013-06-26 08:00:00,1962.1806853582555 +2013-06-26 09:00:00,2649.5856697819313 +2013-06-26 10:00:00,3720.766355140187 +2013-06-26 11:00:00,3963.8847352024923 +2013-06-26 12:00:00,4164.809968847352 +2013-06-26 13:00:00,4297.894080996884 +2013-06-26 14:00:00,4312.660436137072 +2013-06-26 15:00:00,4393.3644859813085 +2013-06-26 16:00:00,4440.859813084112 +2013-06-26 17:00:00,4387.978193146418 +2013-06-26 18:00:00,4302.283489096573 +2013-06-26 19:00:00,4143.183800623053 +2013-06-26 20:00:00,3951.292834890966 +2013-06-26 21:00:00,3801.436137071651 +2013-06-26 22:00:00,3494.6292834890965 +2013-06-26 23:00:00,2511.105919003115 +2013-06-27 00:00:00,1989.2897196261683 +2013-06-27 01:00:00,1559.8660436137072 +2013-06-27 02:00:00,1487.0809968847352 +2013-06-27 03:00:00,1443.252336448598 +2013-06-27 04:00:00,1438.1246105919004 +2013-06-27 05:00:00,1467.8940809968847 +2013-06-27 06:00:00,1627.9314641744547 +2013-06-27 07:00:00,1780.3831775700935 +2013-06-27 08:00:00,1933.8380062305296 +2013-06-27 09:00:00,2629.143302180685 +2013-06-27 10:00:00,3475.3177570093458 +2013-06-27 11:00:00,3666.3894080996884 +2013-06-27 12:00:00,3730.5451713395637 +2013-06-27 13:00:00,4359.847352024922 +2013-06-27 14:00:00,4393.859813084112 +2013-06-27 15:00:00,4328.971962616823 +2013-06-27 16:00:00,4376.177570093458 +2013-06-27 17:00:00,4321.772585669782 +2013-06-27 18:00:00,4268.461059190031 +2013-06-27 19:00:00,4124.442367601246 +2013-06-27 20:00:00,3952.0342679127725 +2013-06-27 21:00:00,3825.8753894080996 +2013-06-27 22:00:00,3569.5825545171338 +2013-06-27 23:00:00,2505.0342679127725 +2013-06-28 00:00:00,1894.8068535825546 +2013-06-28 01:00:00,1589.5576323987539 +2013-06-28 02:00:00,1545.221183800623 +2013-06-28 03:00:00,1470.1744548286604 +2013-06-28 04:00:00,1423.3738317757009 +2013-06-28 05:00:00,1446.4610591900312 +2013-06-28 06:00:00,1602.2118380062304 +2013-06-28 07:00:00,1787.2803738317757 +2013-06-28 08:00:00,1939.4392523364486 +2013-06-28 09:00:00,2759.7507788161993 +2013-06-28 10:00:00,3778.0996884735205 +2013-06-28 11:00:00,4018.576323987539 +2013-06-28 12:00:00,4163.619937694704 +2013-06-28 13:00:00,4376.218068535825 +2013-06-28 14:00:00,4424.0 +2013-06-28 15:00:00,4523.07476635514 +2013-06-28 16:00:00,4563.887850467289 +2013-06-28 17:00:00,4524.5638629283485 +2013-06-28 18:00:00,4386.579439252337 +2013-06-28 19:00:00,4253.579439252337 +2013-06-28 20:00:00,4065.9657320872275 +2013-06-28 21:00:00,3883.697819314642 +2013-06-28 22:00:00,3646.096573208723 +2013-06-28 23:00:00,2492.165109034268 +2013-06-29 00:00:00,1990.6697819314643 +2013-06-29 01:00:00,1700.404984423676 +2013-06-29 02:00:00,1605.018691588785 +2013-06-29 03:00:00,1494.0249221183801 +2013-06-29 04:00:00,1440.031152647975 +2013-06-29 05:00:00,1494.2585669781931 +2013-06-29 06:00:00,1652.0280373831777 +2013-06-29 07:00:00,1815.6542056074766 +2013-06-29 08:00:00,1984.4205607476636 +2013-06-29 09:00:00,2756.090342679128 +2013-06-29 10:00:00,3589.728971962617 +2013-06-29 11:00:00,4167.236760124611 +2013-06-29 12:00:00,4708.04984423676 +2013-06-29 13:00:00,4645.031152647975 +2013-06-29 14:00:00,4730.753894080997 +2013-06-29 15:00:00,4766.236760124611 +2013-06-29 16:00:00,4755.009345794392 +2013-06-29 17:00:00,4727.093457943925 +2013-06-29 18:00:00,4558.816199376947 +2013-06-29 19:00:00,4391.370716510904 +2013-06-29 20:00:00,4269.476635514019 +2013-06-29 21:00:00,4020.0716510903426 +2013-06-29 22:00:00,3737.0467289719627 +2013-06-29 23:00:00,2777.1806853582552 +2013-06-30 00:00:00,1983.7258566978194 +2013-06-30 01:00:00,1660.0872274143303 +2013-06-30 02:00:00,1572.2990654205607 +2013-06-30 03:00:00,1506.9252336448599 +2013-06-30 04:00:00,1406.993769470405 +2013-06-30 05:00:00,1458.1401869158879 +2013-06-30 06:00:00,1612.3582554517134 +2013-06-30 07:00:00,1769.3177570093458 +2013-06-30 08:00:00,1906.1059190031153 +2013-06-30 09:00:00,2759.4859813084113 +2013-06-30 10:00:00,4231.043613707165 +2013-06-30 11:00:00,4514.21183800623 +2013-06-30 12:00:00,4640.2990654205605 +2013-06-30 13:00:00,4675.8317757009345 +2013-06-30 14:00:00,4559.859813084112 +2013-06-30 15:00:00,4643.448598130841 +2013-06-30 16:00:00,4673.847352024922 +2013-06-30 17:00:00,4681.91277258567 +2013-06-30 18:00:00,4540.152647975078 +2013-06-30 19:00:00,4415.657320872274 +2013-06-30 20:00:00,4182.757009345794 +2013-06-30 21:00:00,3979.4922118380064 +2013-06-30 22:00:00,3659.7196261682243 +2013-06-30 23:00:00,2534.9781931464177 +2013-07-01 00:00:00,1983.6635514018692 +2013-07-01 01:00:00,1517.7694704049845 +2013-07-01 02:00:00,1423.398753894081 +2013-07-01 03:00:00,1387.0436137071652 +2013-07-01 04:00:00,1383.9750778816199 +2013-07-01 05:00:00,1421.576323987539 +2013-07-01 06:00:00,1591.601246105919 +2013-07-01 07:00:00,1766.2461059190032 +2013-07-01 08:00:00,1961.9408099688474 +2013-07-01 09:00:00,2801.5358255451715 +2013-07-01 10:00:00,3975.96261682243 +2013-07-01 11:00:00,4066.856697819315 +2013-07-01 12:00:00,4187.894080996884 +2013-07-01 13:00:00,4397.657320872274 +2013-07-01 14:00:00,4421.0 +2013-07-01 15:00:00,4428.077881619938 +2013-07-01 16:00:00,4448.660436137072 +2013-07-01 17:00:00,4384.996884735203 +2013-07-01 18:00:00,4304.632398753894 +2013-07-01 19:00:00,4258.5015576323985 +2013-07-01 20:00:00,4027.654205607477 +2013-07-01 21:00:00,3770.473520249221 +2013-07-01 22:00:00,3515.685358255452 +2013-07-01 23:00:00,2522.196261682243 +2013-07-02 00:00:00,2080.302180685358 +2013-07-02 01:00:00,1553.7040498442368 +2013-07-02 02:00:00,1452.0685358255453 +2013-07-02 03:00:00,1419.651090342679 +2013-07-02 04:00:00,1414.221183800623 +2013-07-02 05:00:00,1455.8317757009345 +2013-07-02 06:00:00,1606.6292834890967 +2013-07-02 07:00:00,1781.2834890965732 +2013-07-02 08:00:00,1944.8255451713396 +2013-07-02 09:00:00,2564.286604361371 +2013-07-02 10:00:00,3573.006230529595 +2013-07-02 11:00:00,3802.3052959501556 +2013-07-02 12:00:00,4006.7881619937693 +2013-07-02 13:00:00,4094.6604361370714 +2013-07-02 14:00:00,4210.626168224299 +2013-07-02 15:00:00,4247.461059190031 +2013-07-02 16:00:00,4264.797507788162 +2013-07-02 17:00:00,4269.180685358256 +2013-07-02 18:00:00,4211.271028037383 +2013-07-02 19:00:00,4083.8130841121497 +2013-07-02 20:00:00,3892.227414330218 +2013-07-02 21:00:00,3663.2585669781934 +2013-07-02 22:00:00,3411.436137071651 +2013-07-02 23:00:00,2449.6043613707166 +2013-07-03 00:00:00,1988.0778816199377 +2013-07-03 01:00:00,1501.96261682243 +2013-07-03 02:00:00,1453.404984423676 +2013-07-03 03:00:00,1422.9158878504672 +2013-07-03 04:00:00,1407.7133956386292 +2013-07-03 05:00:00,1423.9657320872275 +2013-07-03 06:00:00,1578.454828660436 +2013-07-03 07:00:00,1781.398753894081 +2013-07-03 08:00:00,1954.233644859813 +2013-07-03 09:00:00,2559.557632398754 +2013-07-03 10:00:00,3902.98753894081 +2013-07-03 11:00:00,4284.626168224299 +2013-07-03 12:00:00,4462.395638629284 +2013-07-03 13:00:00,4468.71339563863 +2013-07-03 14:00:00,4568.83800623053 +2013-07-03 15:00:00,4564.7663551401865 +2013-07-03 16:00:00,4618.376947040499 +2013-07-03 17:00:00,4659.598130841122 +2013-07-03 18:00:00,4602.283489096573 +2013-07-03 19:00:00,4641.339563862928 +2013-07-03 20:00:00,4390.682242990654 +2013-07-03 21:00:00,4051.202492211838 +2013-07-03 22:00:00,3693.8193146417448 +2013-07-03 23:00:00,2618.4517133956388 +2013-07-04 00:00:00,2110.5015576323985 +2013-07-04 01:00:00,1544.4953271028037 +2013-07-04 02:00:00,1471.5669781931465 +2013-07-04 03:00:00,1440.0218068535826 +2013-07-04 04:00:00,1431.8909657320871 +2013-07-04 05:00:00,1483.8691588785048 +2013-07-04 06:00:00,1648.411214953271 +2013-07-04 07:00:00,1857.4579439252336 +2013-07-04 08:00:00,2141.797507788162 +2013-07-04 09:00:00,3100.856697819315 +2013-07-04 10:00:00,4430.881619937694 +2013-07-04 11:00:00,4725.476635514019 +2013-07-04 12:00:00,4772.616822429906 +2013-07-04 13:00:00,4869.473520249221 +2013-07-04 14:00:00,4874.454828660436 +2013-07-04 15:00:00,4907.277258566978 +2013-07-04 16:00:00,4997.411214953271 +2013-07-04 17:00:00,4931.392523364486 +2013-07-04 18:00:00,4898.800623052959 +2013-07-04 19:00:00,4908.641744548287 +2013-07-04 20:00:00,4578.295950155763 +2013-07-04 21:00:00,4436.601246105919 +2013-07-04 22:00:00,4105.7009345794395 +2013-07-04 23:00:00,3312.778816199377 +2013-07-05 00:00:00,2266.8629283489095 +2013-07-05 01:00:00,1676.797507788162 +2013-07-05 02:00:00,1591.417445482866 +2013-07-05 03:00:00,1542.651090342679 +2013-07-05 04:00:00,1535.1869158878505 +2013-07-05 05:00:00,1578.2274143302182 +2013-07-05 06:00:00,1725.5202492211838 +2013-07-05 07:00:00,1948.601246105919 +2013-07-05 08:00:00,2213.5295950155764 +2013-07-05 09:00:00,3118.809968847352 +2013-07-05 10:00:00,4489.1651090342675 +2013-07-05 11:00:00,4735.92523364486 +2013-07-05 12:00:00,4889.1682242990655 +2013-07-05 13:00:00,4894.7663551401865 +2013-07-05 14:00:00,5010.090342679127 +2013-07-05 15:00:00,5013.5046728971965 +2013-07-05 16:00:00,5038.778816199377 +2013-07-05 17:00:00,5039.186915887851 +2013-07-05 18:00:00,4966.2990654205605 +2013-07-05 19:00:00,4871.98753894081 +2013-07-05 20:00:00,4644.0965732087225 +2013-07-05 21:00:00,4449.97507788162 +2013-07-05 22:00:00,4204.214953271028 +2013-07-05 23:00:00,3396.308411214953 +2013-07-06 00:00:00,2421.1246105919004 +2013-07-06 01:00:00,1735.8598130841121 +2013-07-06 02:00:00,1641.1401869158879 +2013-07-06 03:00:00,1545.5420560747664 +2013-07-06 04:00:00,1488.5669781931465 +2013-07-06 05:00:00,1551.018691588785 +2013-07-06 06:00:00,1706.822429906542 +2013-07-06 07:00:00,1924.7133956386292 +2013-07-06 08:00:00,2204.6105919003116 +2013-07-06 09:00:00,3191.158878504673 +2013-07-06 10:00:00,4509.196261682243 +2013-07-06 11:00:00,4766.6978193146415 +2013-07-06 12:00:00,4885.548286604361 +2013-07-06 13:00:00,4982.682242990654 +2013-07-06 14:00:00,5034.323987538941 +2013-07-06 15:00:00,4993.283489096573 +2013-07-06 16:00:00,4998.959501557632 +2013-07-06 17:00:00,4981.915887850468 +2013-07-06 18:00:00,4988.155763239875 +2013-07-06 19:00:00,4903.915887850468 +2013-07-06 20:00:00,4668.018691588785 +2013-07-06 21:00:00,4498.0342679127725 +2013-07-06 22:00:00,4242.753894080997 +2013-07-06 23:00:00,3510.9595015576324 +2013-07-07 00:00:00,2429.143302180685 +2013-07-07 01:00:00,1951.9595015576324 +2013-07-07 02:00:00,1780.0280373831777 +2013-07-07 03:00:00,1601.3208722741433 +2013-07-07 04:00:00,1510.4080996884736 +2013-07-07 05:00:00,1552.1401869158879 +2013-07-07 06:00:00,1730.2492211838007 +2013-07-07 07:00:00,1917.8193146417445 +2013-07-07 08:00:00,2179.6168224299067 +2013-07-07 09:00:00,3368.0218068535823 +2013-07-07 10:00:00,4467.28660436137 +2013-07-07 11:00:00,4766.214953271028 +2013-07-07 12:00:00,4830.554517133956 +2013-07-07 13:00:00,4913.97507788162 +2013-07-07 14:00:00,4951.732087227414 +2013-07-07 15:00:00,4862.202492211838 +2013-07-07 16:00:00,4961.1651090342675 +2013-07-07 17:00:00,4931.314641744549 +2013-07-07 18:00:00,4850.897196261682 +2013-07-07 19:00:00,4819.2336448598135 +2013-07-07 20:00:00,4559.280373831775 +2013-07-07 21:00:00,4462.6386292834895 +2013-07-07 22:00:00,4053.423676012461 +2013-07-07 23:00:00,3176.2118380062307 +2013-07-08 00:00:00,2256.3115264797507 +2013-07-08 01:00:00,1784.7133956386292 +2013-07-08 02:00:00,1532.2461059190032 +2013-07-08 03:00:00,1484.778816199377 +2013-07-08 04:00:00,1474.4610591900312 +2013-07-08 05:00:00,1522.0436137071652 +2013-07-08 06:00:00,1699.5856697819315 +2013-07-08 07:00:00,1926.5420560747664 +2013-07-08 08:00:00,2202.3894080996884 +2013-07-08 09:00:00,3199.2523364485983 +2013-07-08 10:00:00,4398.352024922118 +2013-07-08 11:00:00,4818.728971962617 +2013-07-08 12:00:00,4894.1651090342675 +2013-07-08 13:00:00,4966.451713395639 +2013-07-08 14:00:00,5042.261682242991 +2013-07-08 15:00:00,5137.83800623053 +2013-07-08 16:00:00,5124.86292834891 +2013-07-08 17:00:00,5061.417445482866 +2013-07-08 18:00:00,4998.915887850468 +2013-07-08 19:00:00,4918.520249221184 +2013-07-08 20:00:00,4614.392523364486 +2013-07-08 21:00:00,4451.439252336449 +2013-07-08 22:00:00,4171.928348909657 +2013-07-08 23:00:00,3418.0467289719627 +2013-07-09 00:00:00,2344.271028037383 +2013-07-09 01:00:00,1637.018691588785 +2013-07-09 02:00:00,1569.4205607476636 +2013-07-09 03:00:00,1516.9065420560748 +2013-07-09 04:00:00,1493.348909657321 +2013-07-09 05:00:00,1568.2242990654206 +2013-07-09 06:00:00,1707.342679127726 +2013-07-09 07:00:00,1938.127725856698 +2013-07-09 08:00:00,2218.4143302180687 +2013-07-09 09:00:00,3285.5358255451715 +2013-07-09 10:00:00,4518.180685358256 +2013-07-09 11:00:00,4843.595015576324 +2013-07-09 12:00:00,4910.295950155763 +2013-07-09 13:00:00,5016.8753894081 +2013-07-09 14:00:00,5142.423676012461 +2013-07-09 15:00:00,5130.155763239875 +2013-07-09 16:00:00,5112.267912772586 +2013-07-09 17:00:00,5190.140186915888 +2013-07-09 18:00:00,5071.990654205608 +2013-07-09 19:00:00,4849.015576323987 +2013-07-09 20:00:00,4568.183800623053 +2013-07-09 21:00:00,4429.794392523365 +2013-07-09 22:00:00,4064.88785046729 +2013-07-09 23:00:00,3254.068535825545 +2013-07-10 00:00:00,2105.8753894080996 +2013-07-10 01:00:00,1696.146417445483 +2013-07-10 02:00:00,1629.0249221183801 +2013-07-10 03:00:00,1566.4641744548287 +2013-07-10 04:00:00,1567.1339563862928 +2013-07-10 05:00:00,1609.2990654205607 +2013-07-10 06:00:00,1774.8785046728972 +2013-07-10 07:00:00,2017.1900311526479 +2013-07-10 08:00:00,2232.4641744548285 +2013-07-10 09:00:00,2963.271028037383 +2013-07-10 10:00:00,4549.218068535825 +2013-07-10 11:00:00,4697.339563862928 +2013-07-10 12:00:00,4785.2305295950155 +2013-07-10 13:00:00,4832.844236760125 +2013-07-10 14:00:00,4931.0965732087225 +2013-07-10 15:00:00,4941.146417445483 +2013-07-10 16:00:00,4917.14953271028 +2013-07-10 17:00:00,5032.158878504673 +2013-07-10 18:00:00,5040.3021806853585 +2013-07-10 19:00:00,4890.6386292834895 +2013-07-10 20:00:00,4484.651090342679 +2013-07-10 21:00:00,4299.479750778816 +2013-07-10 22:00:00,3877.3894080996884 +2013-07-10 23:00:00,3130.01246105919 +2013-07-11 00:00:00,2041.1931464174454 +2013-07-11 01:00:00,1657.5358255451713 +2013-07-11 02:00:00,1585.03738317757 +2013-07-11 03:00:00,1551.0467289719627 +2013-07-11 04:00:00,1541.6292834890967 +2013-07-11 05:00:00,1593.5856697819315 +2013-07-11 06:00:00,1766.5669781931465 +2013-07-11 07:00:00,1987.4797507788162 +2013-07-11 08:00:00,2160.1401869158876 +2013-07-11 09:00:00,3027.809968847352 +2013-07-11 10:00:00,4048.9595015576324 +2013-07-11 11:00:00,4297.797507788162 +2013-07-11 12:00:00,4447.214953271028 +2013-07-11 13:00:00,4630.956386292835 +2013-07-11 14:00:00,4687.327102803738 +2013-07-11 15:00:00,4771.557632398754 +2013-07-11 16:00:00,4765.922118380062 +2013-07-11 17:00:00,4751.386292834891 +2013-07-11 18:00:00,4716.676012461059 +2013-07-11 19:00:00,4617.174454828661 +2013-07-11 20:00:00,4217.666666666667 +2013-07-11 21:00:00,4006.096573208723 +2013-07-11 22:00:00,3685.0467289719627 +2013-07-11 23:00:00,2978.6728971962616 +2013-07-12 00:00:00,1990.0623052959502 +2013-07-12 01:00:00,1664.872274143302 +2013-07-12 02:00:00,1542.7009345794393 +2013-07-12 03:00:00,1553.1214953271028 +2013-07-12 04:00:00,1539.3956386292834 +2013-07-12 05:00:00,1581.8691588785048 +2013-07-12 06:00:00,1746.3239875389409 +2013-07-12 07:00:00,1959.638629283489 +2013-07-12 08:00:00,2165.2367601246106 +2013-07-12 09:00:00,2976.411214953271 +2013-07-12 10:00:00,3981.9781931464177 +2013-07-12 11:00:00,4104.7663551401865 +2013-07-12 12:00:00,4293.2305295950155 +2013-07-12 13:00:00,4349.710280373832 +2013-07-12 14:00:00,4390.3644859813085 +2013-07-12 15:00:00,4423.582554517134 +2013-07-12 16:00:00,4439.317757009346 +2013-07-12 17:00:00,4472.077881619938 +2013-07-12 18:00:00,4426.171339563863 +2013-07-12 19:00:00,4399.956386292835 +2013-07-12 20:00:00,4112.915887850468 +2013-07-12 21:00:00,3945.031152647975 +2013-07-12 22:00:00,3714.467289719626 +2013-07-12 23:00:00,3050.707165109034 +2013-07-13 00:00:00,2216.7414330218066 +2013-07-13 01:00:00,1623.5389408099688 +2013-07-13 02:00:00,1562.7196261682243 +2013-07-13 03:00:00,1526.0436137071652 +2013-07-13 04:00:00,1520.7694704049845 +2013-07-13 05:00:00,1559.6168224299065 +2013-07-13 06:00:00,1722.404984423676 +2013-07-13 07:00:00,1905.6043613707166 +2013-07-13 08:00:00,2099.8971962616824 +2013-07-13 09:00:00,2887.436137071651 +2013-07-13 10:00:00,3671.442367601246 +2013-07-13 11:00:00,3942.542056074766 +2013-07-13 12:00:00,4057.8130841121497 +2013-07-13 13:00:00,4064.563862928349 +2013-07-13 14:00:00,4100.420560747663 +2013-07-13 15:00:00,4126.872274143302 +2013-07-13 16:00:00,4200.068535825545 +2013-07-13 17:00:00,4262.118380062306 +2013-07-13 18:00:00,4320.317757009346 +2013-07-13 19:00:00,4159.576323987539 +2013-07-13 20:00:00,4038.8909657320874 +2013-07-13 21:00:00,3872.436137071651 +2013-07-13 22:00:00,3582.1183800623053 +2013-07-13 23:00:00,3012.196261682243 +2013-07-14 00:00:00,2020.588785046729 +2013-07-14 01:00:00,1584.3551401869158 +2013-07-14 02:00:00,1502.1993769470405 +2013-07-14 03:00:00,1463.9968847352025 +2013-07-14 04:00:00,1465.0093457943926 +2013-07-14 05:00:00,1517.1121495327102 +2013-07-14 06:00:00,1675.1931464174454 +2013-07-14 07:00:00,1852.0872274143303 +2013-07-14 08:00:00,1961.5482866043615 +2013-07-14 09:00:00,2808.8535825545173 +2013-07-14 10:00:00,3600.1308411214955 +2013-07-14 11:00:00,3925.0280373831774 +2013-07-14 12:00:00,4141.579439252337 +2013-07-14 13:00:00,4164.180685358256 +2013-07-14 14:00:00,4128.781931464175 +2013-07-14 15:00:00,4169.180685358256 +2013-07-14 16:00:00,4138.623052959501 +2013-07-14 17:00:00,4163.747663551402 +2013-07-14 18:00:00,4152.417445482866 +2013-07-14 19:00:00,4104.311526479751 +2013-07-14 20:00:00,3936.2492211838007 +2013-07-14 21:00:00,3828.308411214953 +2013-07-14 22:00:00,3467.9127725856697 +2013-07-14 23:00:00,2761.7040498442366 +2013-07-15 00:00:00,1903.3769470404984 +2013-07-15 01:00:00,1569.0685358255453 +2013-07-15 02:00:00,1534.968847352025 +2013-07-15 03:00:00,1487.8006230529595 +2013-07-15 04:00:00,1492.146417445483 +2013-07-15 05:00:00,1549.8816199376947 +2013-07-15 06:00:00,1707.3551401869158 +2013-07-15 07:00:00,1878.5358255451713 +2013-07-15 08:00:00,2045.8598130841121 +2013-07-15 09:00:00,2843.828660436137 +2013-07-15 10:00:00,3786.0186915887853 +2013-07-15 11:00:00,3981.6417445482866 +2013-07-15 12:00:00,4235.473520249221 +2013-07-15 13:00:00,4295.457943925234 +2013-07-15 14:00:00,4318.056074766355 +2013-07-15 15:00:00,4394.588785046729 +2013-07-15 16:00:00,4424.305295950156 +2013-07-15 17:00:00,4394.5669781931465 +2013-07-15 18:00:00,4435.760124610591 +2013-07-15 19:00:00,4336.252336448598 +2013-07-15 20:00:00,4084.866043613707 +2013-07-15 21:00:00,3958.772585669782 +2013-07-15 22:00:00,3618.9813084112147 +2013-07-15 23:00:00,2906.0934579439254 +2013-07-16 00:00:00,2042.0747663551401 +2013-07-16 01:00:00,1628.1152647975077 +2013-07-16 02:00:00,1555.1744548286604 +2013-07-16 03:00:00,1511.9158878504672 +2013-07-16 04:00:00,1516.0280373831777 +2013-07-16 05:00:00,1579.1495327102805 +2013-07-16 06:00:00,1747.1869158878505 +2013-07-16 07:00:00,1936.5700934579438 +2013-07-16 08:00:00,2088.676012461059 +2013-07-16 09:00:00,2845.271028037383 +2013-07-16 10:00:00,3912.744548286604 +2013-07-16 11:00:00,4226.202492211838 +2013-07-16 12:00:00,4324.489096573208 +2013-07-16 13:00:00,4446.996884735203 +2013-07-16 14:00:00,4411.579439252337 +2013-07-16 15:00:00,4483.679127725857 +2013-07-16 16:00:00,4544.16199376947 +2013-07-16 17:00:00,4500.732087227414 +2013-07-16 18:00:00,4476.514018691589 +2013-07-16 19:00:00,4443.22429906542 +2013-07-16 20:00:00,4296.249221183801 +2013-07-16 21:00:00,4103.856697819315 +2013-07-16 22:00:00,3709.7040498442366 +2013-07-16 23:00:00,2978.5825545171338 +2013-07-17 00:00:00,1999.5046728971963 +2013-07-17 01:00:00,1593.0404984423676 +2013-07-17 02:00:00,1538.7040498442368 +2013-07-17 03:00:00,1500.1246105919004 +2013-07-17 04:00:00,1487.8878504672898 +2013-07-17 05:00:00,1536.638629283489 +2013-07-17 06:00:00,1703.4517133956385 +2013-07-17 07:00:00,1902.239875389408 +2013-07-17 08:00:00,2084.1401869158876 +2013-07-17 09:00:00,2921.878504672897 +2013-07-17 10:00:00,3974.93769470405 +2013-07-17 11:00:00,4268.906542056075 +2013-07-17 12:00:00,4397.878504672897 +2013-07-17 13:00:00,4424.442367601246 +2013-07-17 14:00:00,4502.2990654205605 +2013-07-17 15:00:00,4548.4984423676015 +2013-07-17 16:00:00,4655.473520249221 +2013-07-17 17:00:00,4677.143302180685 +2013-07-17 18:00:00,4616.015576323987 +2013-07-17 19:00:00,4478.059190031153 +2013-07-17 20:00:00,4243.056074766355 +2013-07-17 21:00:00,3918.1183800623053 +2013-07-17 22:00:00,3591.0404984423676 +2013-07-17 23:00:00,2936.0778816199377 +2013-07-18 00:00:00,2003.214953271028 +2013-07-18 01:00:00,1615.1869158878505 +2013-07-18 02:00:00,1577.4797507788162 +2013-07-18 03:00:00,1538.968847352025 +2013-07-18 04:00:00,1504.0031152647975 +2013-07-18 05:00:00,1533.943925233645 +2013-07-18 06:00:00,1711.4828660436137 +2013-07-18 07:00:00,1941.632398753894 +2013-07-18 08:00:00,2079.7694704049845 +2013-07-18 09:00:00,2890.9221183800623 +2013-07-18 10:00:00,3959.9844236760123 +2013-07-18 11:00:00,4145.0 +2013-07-18 12:00:00,4269.847352024922 +2013-07-18 13:00:00,4351.090342679127 +2013-07-18 14:00:00,4448.781931464175 +2013-07-18 15:00:00,4497.105919003116 +2013-07-18 16:00:00,4558.595015576324 +2013-07-18 17:00:00,4554.059190031153 +2013-07-18 18:00:00,4457.881619937694 +2013-07-18 19:00:00,4318.485981308411 +2013-07-18 20:00:00,4160.392523364486 +2013-07-18 21:00:00,3867.0778816199377 +2013-07-18 22:00:00,3504.7819314641742 +2013-07-18 23:00:00,2915.6199376947043 +2013-07-19 00:00:00,1968.380062305296 +2013-07-19 01:00:00,1520.2741433021806 +2013-07-19 02:00:00,1486.9345794392523 +2013-07-19 03:00:00,1439.183800623053 +2013-07-19 04:00:00,1431.056074766355 +2013-07-19 05:00:00,1457.7414330218069 +2013-07-19 06:00:00,1636.7757009345794 +2013-07-19 07:00:00,1861.392523364486 +2013-07-19 08:00:00,2019.233644859813 +2013-07-19 09:00:00,2965.8006230529595 +2013-07-19 10:00:00,3756.271028037383 +2013-07-19 11:00:00,4137.993769470405 +2013-07-19 12:00:00,4328.352024922118 +2013-07-19 13:00:00,4372.781931464175 +2013-07-19 14:00:00,4391.890965732087 +2013-07-19 15:00:00,4445.819314641744 +2013-07-19 16:00:00,4484.218068535825 +2013-07-19 17:00:00,4497.78816199377 +2013-07-19 18:00:00,4451.277258566978 +2013-07-19 19:00:00,4364.607476635514 +2013-07-19 20:00:00,4157.940809968847 +2013-07-19 21:00:00,3896.5482866043612 +2013-07-19 22:00:00,3513.246105919003 +2013-07-19 23:00:00,2966.0467289719627 +2013-07-20 00:00:00,2148.4984423676015 +2013-07-20 01:00:00,1664.0498442367602 +2013-07-20 02:00:00,1498.2866043613708 +2013-07-20 03:00:00,1421.993769470405 +2013-07-20 04:00:00,1400.834890965732 +2013-07-20 05:00:00,1425.2866043613708 +2013-07-20 06:00:00,1590.5482866043615 +2013-07-20 07:00:00,1809.0155763239875 +2013-07-20 08:00:00,1972.7040498442368 +2013-07-20 09:00:00,2947.626168224299 +2013-07-20 10:00:00,3632.931464174455 +2013-07-20 11:00:00,3985.7570093457944 +2013-07-20 12:00:00,4140.741433021807 +2013-07-20 13:00:00,4143.520249221184 +2013-07-20 14:00:00,4170.993769470405 +2013-07-20 15:00:00,4238.140186915888 +2013-07-20 16:00:00,4343.01246105919 +2013-07-20 17:00:00,4365.352024922118 +2013-07-20 18:00:00,4269.355140186916 +2013-07-20 19:00:00,4229.616822429906 +2013-07-20 20:00:00,3932.239875389408 +2013-07-20 21:00:00,3716.0031152647975 +2013-07-20 22:00:00,3468.707165109034 +2013-07-20 23:00:00,2949.080996884735 +2013-07-21 00:00:00,2063.0155763239877 +2013-07-21 01:00:00,1578.5732087227414 +2013-07-21 02:00:00,1479.411214953271 +2013-07-21 03:00:00,1418.0716510903426 +2013-07-21 04:00:00,1343.8753894080996 +2013-07-21 05:00:00,1381.6760124610591 +2013-07-21 06:00:00,1538.233644859813 +2013-07-21 07:00:00,1710.7725856697818 +2013-07-21 08:00:00,1872.9034267912773 +2013-07-21 09:00:00,2889.4859813084113 +2013-07-21 10:00:00,3576.7570093457944 +2013-07-21 11:00:00,3837.834890965732 +2013-07-21 12:00:00,4043.277258566978 +2013-07-21 13:00:00,4016.93769470405 +2013-07-21 14:00:00,4017.398753894081 +2013-07-21 15:00:00,4065.6043613707166 +2013-07-21 16:00:00,4149.520249221184 +2013-07-21 17:00:00,4220.127725856698 +2013-07-21 18:00:00,4191.595015576324 +2013-07-21 19:00:00,4153.177570093458 +2013-07-21 20:00:00,3911.510903426791 +2013-07-21 21:00:00,3752.809968847352 +2013-07-21 22:00:00,3407.3333333333335 +2013-07-21 23:00:00,2744.9501557632398 +2013-07-22 00:00:00,1927.563862928349 +2013-07-22 01:00:00,1400.4485981308412 +2013-07-22 02:00:00,1357.2367601246106 +2013-07-22 03:00:00,1345.872274143302 +2013-07-22 04:00:00,1345.4299065420562 +2013-07-22 05:00:00,1391.2616822429907 +2013-07-22 06:00:00,1561.9252336448599 +2013-07-22 07:00:00,1712.1308411214952 +2013-07-22 08:00:00,1855.8847352024923 +2013-07-22 09:00:00,2788.8193146417448 +2013-07-22 10:00:00,3640.479750778816 +2013-07-22 11:00:00,3976.6822429906542 +2013-07-22 12:00:00,4107.196261682243 +2013-07-22 13:00:00,4169.065420560748 +2013-07-22 14:00:00,4291.666666666667 +2013-07-22 15:00:00,4342.626168224299 +2013-07-22 16:00:00,4371.570093457944 +2013-07-22 17:00:00,4358.520249221184 +2013-07-22 18:00:00,4330.806853582554 +2013-07-22 19:00:00,4252.180685358256 +2013-07-22 20:00:00,3967.8317757009345 +2013-07-22 21:00:00,3790.5140186915887 +2013-07-22 22:00:00,3482.255451713396 +2013-07-22 23:00:00,2883.5919003115264 +2013-07-23 00:00:00,2071.0218068535823 +2013-07-23 01:00:00,1484.766355140187 +2013-07-23 02:00:00,1417.5856697819315 +2013-07-23 03:00:00,1377.9127725856697 +2013-07-23 04:00:00,1362.545171339564 +2013-07-23 05:00:00,1403.4828660436137 +2013-07-23 06:00:00,1565.6884735202493 +2013-07-23 07:00:00,1739.2772585669782 +2013-07-23 08:00:00,1957.1246105919004 +2013-07-23 09:00:00,2816.510903426791 +2013-07-23 10:00:00,3796.669781931464 +2013-07-23 11:00:00,4039.6199376947043 +2013-07-23 12:00:00,4234.947040498442 +2013-07-23 13:00:00,4272.741433021807 +2013-07-23 14:00:00,4335.3644859813085 +2013-07-23 15:00:00,4365.003115264797 +2013-07-23 16:00:00,4471.981308411215 +2013-07-23 17:00:00,4491.467289719626 +2013-07-23 18:00:00,4435.688473520249 +2013-07-23 19:00:00,4357.02492211838 +2013-07-23 20:00:00,4054.9813084112147 +2013-07-23 21:00:00,3783.0498442367602 +2013-07-23 22:00:00,3503.0155763239877 +2013-07-23 23:00:00,2891.919003115265 +2013-07-24 00:00:00,2043.7196261682243 +2013-07-24 01:00:00,1475.7570093457944 +2013-07-24 02:00:00,1417.183800623053 +2013-07-24 03:00:00,1385.9968847352025 +2013-07-24 04:00:00,1364.7570093457944 +2013-07-24 05:00:00,1407.361370716511 +2013-07-24 06:00:00,1566.4423676012461 +2013-07-24 07:00:00,1782.361370716511 +2013-07-24 08:00:00,1977.822429906542 +2013-07-24 09:00:00,2948.797507788162 +2013-07-24 10:00:00,3791.8317757009345 +2013-07-24 11:00:00,4153.112149532711 +2013-07-24 12:00:00,4348.317757009346 +2013-07-24 13:00:00,4470.333333333333 +2013-07-24 14:00:00,4530.641744548287 +2013-07-24 15:00:00,4575.978193146418 +2013-07-24 16:00:00,4580.644859813084 +2013-07-24 17:00:00,4555.370716510904 +2013-07-24 18:00:00,4549.07476635514 +2013-07-24 19:00:00,4395.98753894081 +2013-07-24 20:00:00,4120.710280373832 +2013-07-24 21:00:00,3975.9844236760123 +2013-07-24 22:00:00,3572.9127725856697 +2013-07-24 23:00:00,2951.5482866043612 +2013-07-25 00:00:00,2149.090342679128 +2013-07-25 01:00:00,1528.454828660436 +2013-07-25 02:00:00,1478.2647975077882 +2013-07-25 03:00:00,1438.2959501557632 +2013-07-25 04:00:00,1409.7507788161993 +2013-07-25 05:00:00,1449.7912772585669 +2013-07-25 06:00:00,1608.6666666666667 +2013-07-25 07:00:00,1847.6666666666667 +2013-07-25 08:00:00,2046.436137071651 +2013-07-25 09:00:00,2955.700934579439 +2013-07-25 10:00:00,3946.1246105919004 +2013-07-25 11:00:00,4232.277258566978 +2013-07-25 12:00:00,4276.9626168224295 +2013-07-25 13:00:00,4405.778816199377 +2013-07-25 14:00:00,4416.98753894081 +2013-07-25 15:00:00,4525.915887850468 +2013-07-25 16:00:00,4577.1651090342675 +2013-07-25 17:00:00,4610.323987538941 +2013-07-25 18:00:00,4541.510903426792 +2013-07-25 19:00:00,4362.3021806853585 +2013-07-25 20:00:00,4122.267912772586 +2013-07-25 21:00:00,3943.4392523364486 +2013-07-25 22:00:00,3662.3115264797507 +2013-07-25 23:00:00,2929.208722741433 +2013-07-26 00:00:00,2105.3956386292834 +2013-07-26 01:00:00,1498.5077881619939 +2013-07-26 02:00:00,1437.018691588785 +2013-07-26 03:00:00,1399.3769470404984 +2013-07-26 04:00:00,1390.1246105919004 +2013-07-26 05:00:00,1425.747663551402 +2013-07-26 06:00:00,1581.7227414330218 +2013-07-26 07:00:00,1790.4579439252336 +2013-07-26 08:00:00,1979.5420560747664 +2013-07-26 09:00:00,2933.588785046729 +2013-07-26 10:00:00,3611.956386292835 +2013-07-26 11:00:00,3953.314641744548 +2013-07-26 12:00:00,3992.171339563863 +2013-07-26 13:00:00,4095.538940809969 +2013-07-26 14:00:00,4146.442367601246 +2013-07-26 15:00:00,4159.92523364486 +2013-07-26 16:00:00,4261.517133956387 +2013-07-26 17:00:00,4228.86292834891 +2013-07-26 18:00:00,4138.722741433022 +2013-07-26 19:00:00,4053.255451713396 +2013-07-26 20:00:00,3780.006230529595 +2013-07-26 21:00:00,3651.9595015576324 +2013-07-26 22:00:00,3418.6479750778817 +2013-07-26 23:00:00,2898.520249221184 +2013-07-27 00:00:00,2015.2866043613708 +2013-07-27 01:00:00,1598.6417445482866 +2013-07-27 02:00:00,1520.7538940809968 +2013-07-27 03:00:00,1435.146417445483 +2013-07-27 04:00:00,1372.367601246106 +2013-07-27 05:00:00,1409.6168224299065 +2013-07-27 06:00:00,1550.9470404984424 +2013-07-27 07:00:00,1767.526479750779 +2013-07-27 08:00:00,1926.6292834890967 +2013-07-27 09:00:00,2932.4828660436137 +2013-07-27 10:00:00,3513.841121495327 +2013-07-27 11:00:00,3820.052959501558 +2013-07-27 12:00:00,3827.7165109034268 +2013-07-27 13:00:00,3877.0467289719627 +2013-07-27 14:00:00,3950.613707165109 +2013-07-27 15:00:00,3967.1619937694704 +2013-07-27 16:00:00,3902.2741433021806 +2013-07-27 17:00:00,3916.4454828660437 +2013-07-27 18:00:00,3882.0654205607475 +2013-07-27 19:00:00,3847.538940809969 +2013-07-27 20:00:00,3711.685358255452 +2013-07-27 21:00:00,3678.8816199376947 +2013-07-27 22:00:00,3457.7570093457944 +2013-07-27 23:00:00,2933.5545171339563 +2013-07-28 00:00:00,2052.264797507788 +2013-07-28 01:00:00,1564.4454828660437 +2013-07-28 02:00:00,1470.2118380062304 +2013-07-28 03:00:00,1414.8940809968847 +2013-07-28 04:00:00,1314.8286604361372 +2013-07-28 05:00:00,1372.411214953271 +2013-07-28 06:00:00,1523.233644859813 +2013-07-28 07:00:00,1699.4890965732088 +2013-07-28 08:00:00,1847.0809968847352 +2013-07-28 09:00:00,2865.822429906542 +2013-07-28 10:00:00,3419.2180685358258 +2013-07-28 11:00:00,3679.7165109034268 +2013-07-28 12:00:00,3848.6604361370714 +2013-07-28 13:00:00,3834.2056074766356 +2013-07-28 14:00:00,3859.214953271028 +2013-07-28 15:00:00,3931.461059190031 +2013-07-28 16:00:00,3990.613707165109 +2013-07-28 17:00:00,3958.9439252336447 +2013-07-28 18:00:00,3904.3800623052957 +2013-07-28 19:00:00,3823.6604361370714 +2013-07-28 20:00:00,3750.797507788162 +2013-07-28 21:00:00,3683.5669781931465 +2013-07-28 22:00:00,3391.1619937694704 +2013-07-28 23:00:00,2707.9813084112147 +2013-07-29 00:00:00,1838.7943925233644 +2013-07-29 01:00:00,1394.9127725856697 +2013-07-29 02:00:00,1352.4953271028037 +2013-07-29 03:00:00,1320.1308411214952 +2013-07-29 04:00:00,1313.0218068535826 +2013-07-29 05:00:00,1373.0529595015576 +2013-07-29 06:00:00,1549.8629283489097 +2013-07-29 07:00:00,1720.1557632398753 +2013-07-29 08:00:00,1895.8940809968847 +2013-07-29 09:00:00,2769.8193146417448 +2013-07-29 10:00:00,3565.1090342679126 +2013-07-29 11:00:00,3837.3800623052957 +2013-07-29 12:00:00,4018.090342679128 +2013-07-29 13:00:00,4099.526479750779 +2013-07-29 14:00:00,4122.632398753894 +2013-07-29 15:00:00,4109.573208722742 +2013-07-29 16:00:00,4193.688473520249 +2013-07-29 17:00:00,4262.560747663551 +2013-07-29 18:00:00,4254.794392523365 +2013-07-29 19:00:00,4246.14953271028 +2013-07-29 20:00:00,4086.8691588785045 +2013-07-29 21:00:00,3854.2834890965732 +2013-07-29 22:00:00,3503.2242990654204 +2013-07-29 23:00:00,2882.613707165109 +2013-07-30 00:00:00,1992.7570093457944 +2013-07-30 01:00:00,1482.7040498442368 +2013-07-30 02:00:00,1423.473520249221 +2013-07-30 03:00:00,1376.7320872274142 +2013-07-30 04:00:00,1360.3457943925234 +2013-07-30 05:00:00,1398.2803738317757 +2013-07-30 06:00:00,1569.7196261682243 +2013-07-30 07:00:00,1744.5732087227414 +2013-07-30 08:00:00,1942.607476635514 +2013-07-30 09:00:00,2901.264797507788 +2013-07-30 10:00:00,3862.7102803738317 +2013-07-30 11:00:00,4199.654205607477 +2013-07-30 12:00:00,4414.819314641744 +2013-07-30 13:00:00,4477.532710280374 +2013-07-30 14:00:00,4550.728971962617 +2013-07-30 15:00:00,4544.383177570094 +2013-07-30 16:00:00,4602.943925233645 +2013-07-30 17:00:00,4626.847352024922 +2013-07-30 18:00:00,4613.707165109035 +2013-07-30 19:00:00,4520.4330218068535 +2013-07-30 20:00:00,4140.398753894081 +2013-07-30 21:00:00,4074.3769470404986 +2013-07-30 22:00:00,3744.8255451713394 +2013-07-30 23:00:00,3122.8971962616824 +2013-07-31 00:00:00,2134.7943925233644 +2013-07-31 01:00:00,1526.146417445483 +2013-07-31 02:00:00,1459.9595015576324 +2013-07-31 03:00:00,1430.7320872274142 +2013-07-31 04:00:00,1410.5856697819315 +2013-07-31 05:00:00,1456.98753894081 +2013-07-31 06:00:00,1661.4299065420562 +2013-07-31 07:00:00,1813.7757009345794 +2013-07-31 08:00:00,1988.3956386292834 +2013-07-31 09:00:00,2956.5171339563863 +2013-07-31 10:00:00,4083.0778816199377 +2013-07-31 11:00:00,4371.83800623053 +2013-07-31 12:00:00,4473.080996884735 +2013-07-31 13:00:00,4566.629283489096 +2013-07-31 14:00:00,4662.121495327103 +2013-07-31 15:00:00,4720.4953271028035 +2013-07-31 16:00:00,4772.127725856698 +2013-07-31 17:00:00,4728.3021806853585 +2013-07-31 18:00:00,4613.878504672897 +2013-07-31 19:00:00,4507.791277258567 +2013-07-31 20:00:00,4254.102803738318 +2013-07-31 21:00:00,4140.411214953271 +2013-07-31 22:00:00,3781.4174454828662 +2013-07-31 23:00:00,3174.214953271028 +2013-08-01 00:00:00,2059.4922118380064 +2013-08-01 01:00:00,1512.8816199376947 +2013-08-01 02:00:00,1452.96261682243 +2013-08-01 03:00:00,1411.0623052959502 +2013-08-01 04:00:00,1401.9408099688474 +2013-08-01 05:00:00,1455.202492211838 +2013-08-01 06:00:00,1611.2367601246106 +2013-08-01 07:00:00,1804.1339563862928 +2013-08-01 08:00:00,1980.6791277258567 +2013-08-01 09:00:00,3073.7258566978194 +2013-08-01 10:00:00,3889.361370716511 +2013-08-01 11:00:00,4215.691588785046 +2013-08-01 12:00:00,4402.71339563863 +2013-08-01 13:00:00,4497.314641744549 +2013-08-01 14:00:00,4596.570093457944 +2013-08-01 15:00:00,4577.0342679127725 +2013-08-01 16:00:00,4635.872274143302 +2013-08-01 17:00:00,4585.688473520249 +2013-08-01 18:00:00,4456.897196261682 +2013-08-01 19:00:00,4383.560747663551 +2013-08-01 20:00:00,4227.255451713396 +2013-08-01 21:00:00,4043.2180685358258 +2013-08-01 22:00:00,3641.1090342679126 +2013-08-01 23:00:00,2987.239875389408 +2013-08-02 00:00:00,1979.1588785046729 +2013-08-02 01:00:00,1547.4267912772586 +2013-08-02 02:00:00,1461.6947040498442 +2013-08-02 03:00:00,1437.7694704049845 +2013-08-02 04:00:00,1435.6261682242991 +2013-08-02 05:00:00,1492.595015576324 +2013-08-02 06:00:00,1650.853582554517 +2013-08-02 07:00:00,1865.9345794392523 +2013-08-02 08:00:00,2057.264797507788 +2013-08-02 09:00:00,3054.0155763239877 +2013-08-02 10:00:00,3853.6355140186915 +2013-08-02 11:00:00,4093.88785046729 +2013-08-02 12:00:00,4258.669781931464 +2013-08-02 13:00:00,4336.878504672897 +2013-08-02 14:00:00,4375.591900311527 +2013-08-02 15:00:00,4399.479750778816 +2013-08-02 16:00:00,4482.915887850468 +2013-08-02 17:00:00,4468.707165109035 +2013-08-02 18:00:00,4305.043613707165 +2013-08-02 19:00:00,4227.548286604361 +2013-08-02 20:00:00,3989.9532710280373 +2013-08-02 21:00:00,3833.947040498442 +2013-08-02 22:00:00,3559.9127725856697 +2013-08-02 23:00:00,3012.4641744548285 +2013-08-03 00:00:00,2176.866043613707 +2013-08-03 01:00:00,1585.436137071651 +2013-08-03 02:00:00,1502.816199376947 +2013-08-03 03:00:00,1407.7757009345794 +2013-08-03 04:00:00,1372.4953271028037 +2013-08-03 05:00:00,1415.6915887850466 +2013-08-03 06:00:00,1590.5856697819315 +2013-08-03 07:00:00,1765.9657320872275 +2013-08-03 08:00:00,1963.7414330218069 +2013-08-03 09:00:00,2966.0186915887853 +2013-08-03 10:00:00,3534.143302180685 +2013-08-03 11:00:00,3906.551401869159 +2013-08-03 12:00:00,4043.01246105919 +2013-08-03 13:00:00,4147.685358255451 +2013-08-03 14:00:00,4248.071651090343 +2013-08-03 15:00:00,4301.800623052959 +2013-08-03 16:00:00,4379.890965732087 +2013-08-03 17:00:00,4356.021806853582 +2013-08-03 18:00:00,4298.2305295950155 +2013-08-03 19:00:00,4252.398753894081 +2013-08-03 20:00:00,3946.239875389408 +2013-08-03 21:00:00,3800.847352024922 +2013-08-03 22:00:00,3574.7165109034268 +2013-08-03 23:00:00,3053.165109034268 +2013-08-04 00:00:00,2062.9439252336447 +2013-08-04 01:00:00,1561.473520249221 +2013-08-04 02:00:00,1483.423676012461 +2013-08-04 03:00:00,1419.1557632398753 +2013-08-04 04:00:00,1317.177570093458 +2013-08-04 05:00:00,1357.632398753894 +2013-08-04 06:00:00,1534.747663551402 +2013-08-04 07:00:00,1705.3052959501558 +2013-08-04 08:00:00,1851.778816199377 +2013-08-04 09:00:00,2635.538940809969 +2013-08-04 10:00:00,3667.3520249221183 +2013-08-04 11:00:00,3903.570093457944 +2013-08-04 12:00:00,4147.897196261682 +2013-08-04 13:00:00,4164.143302180685 +2013-08-04 14:00:00,4128.797507788162 +2013-08-04 15:00:00,4245.915887850468 +2013-08-04 16:00:00,4271.021806853582 +2013-08-04 17:00:00,4244.196261682243 +2013-08-04 18:00:00,4266.426791277258 +2013-08-04 19:00:00,4221.588785046729 +2013-08-04 20:00:00,3999.894080996885 +2013-08-04 21:00:00,3857.894080996885 +2013-08-04 22:00:00,3496.02492211838 +2013-08-04 23:00:00,2860.152647975078 +2013-08-05 00:00:00,2033.7538940809968 +2013-08-05 01:00:00,1471.01246105919 +2013-08-05 02:00:00,1412.3707165109033 +2013-08-05 03:00:00,1379.1588785046729 +2013-08-05 04:00:00,1380.3520249221183 +2013-08-05 05:00:00,1460.1214953271028 +2013-08-05 06:00:00,1590.6043613707166 +2013-08-05 07:00:00,1764.436137071651 +2013-08-05 08:00:00,1967.5794392523364 +2013-08-05 09:00:00,2957.8816199376947 +2013-08-05 10:00:00,3516.816199376947 +2013-08-05 11:00:00,3978.5919003115264 +2013-08-05 12:00:00,4163.21183800623 +2013-08-05 13:00:00,4307.177570093458 +2013-08-05 14:00:00,4431.760124610591 +2013-08-05 15:00:00,4513.118380062306 +2013-08-05 16:00:00,4539.86292834891 +2013-08-05 17:00:00,4574.716510903427 +2013-08-05 18:00:00,4408.707165109035 +2013-08-05 19:00:00,4361.694704049844 +2013-08-05 20:00:00,4038.0404984423676 +2013-08-05 21:00:00,3899.239875389408 +2013-08-05 22:00:00,3545.143302180685 +2013-08-05 23:00:00,3026.760124610592 +2013-08-06 00:00:00,2009.8130841121495 +2013-08-06 01:00:00,1580.4672897196263 +2013-08-06 02:00:00,1526.7009345794393 +2013-08-06 03:00:00,1487.1682242990655 +2013-08-06 04:00:00,1489.2274143302182 +2013-08-06 05:00:00,1515.3831775700935 +2013-08-06 06:00:00,1689.2305295950155 +2013-08-06 07:00:00,1877.146417445483 +2013-08-06 08:00:00,2069.068535825545 +2013-08-06 09:00:00,3284.772585669782 +2013-08-06 10:00:00,3697.3707165109035 +2013-08-06 11:00:00,3976.3395638629286 +2013-08-06 12:00:00,4186.320872274143 +2013-08-06 13:00:00,4324.647975077882 +2013-08-06 14:00:00,4375.08722741433 +2013-08-06 15:00:00,4455.841121495327 +2013-08-06 16:00:00,4572.722741433022 +2013-08-06 17:00:00,4565.869158878505 +2013-08-06 18:00:00,4464.8317757009345 +2013-08-06 19:00:00,4239.006230529595 +2013-08-06 20:00:00,3961.3115264797507 +2013-08-06 21:00:00,3854.7320872274145 +2013-08-06 22:00:00,3544.931464174455 +2013-08-06 23:00:00,3045.2741433021806 +2013-08-07 00:00:00,2231.894080996885 +2013-08-07 01:00:00,1542.785046728972 +2013-08-07 02:00:00,1476.5202492211838 +2013-08-07 03:00:00,1417.6697819314643 +2013-08-07 04:00:00,1404.1028037383178 +2013-08-07 05:00:00,1453.1900311526479 +2013-08-07 06:00:00,1603.4610591900312 +2013-08-07 07:00:00,1803.221183800623 +2013-08-07 08:00:00,1998.6542056074766 +2013-08-07 09:00:00,3189.0654205607475 +2013-08-07 10:00:00,3521.233644859813 +2013-08-07 11:00:00,3752.632398753894 +2013-08-07 12:00:00,3947.1557632398753 +2013-08-07 13:00:00,4056.6947040498444 +2013-08-07 14:00:00,4212.613707165109 +2013-08-07 15:00:00,4308.685358255451 +2013-08-07 16:00:00,4304.676012461059 +2013-08-07 17:00:00,4316.794392523365 +2013-08-07 18:00:00,4194.186915887851 +2013-08-07 19:00:00,4150.404984423676 +2013-08-07 20:00:00,3964.872274143302 +2013-08-07 21:00:00,3899.8847352024923 +2013-08-07 22:00:00,3561.246105919003 +2013-08-07 23:00:00,3050.8847352024923 +2013-08-08 00:00:00,1966.4267912772586 +2013-08-08 01:00:00,1510.588785046729 +2013-08-08 02:00:00,1460.8286604361372 +2013-08-08 03:00:00,1414.8193146417445 +2013-08-08 04:00:00,1395.9408099688474 +2013-08-08 05:00:00,1438.9127725856697 +2013-08-08 06:00:00,1610.6666666666667 +2013-08-08 07:00:00,1842.4579439252336 +2013-08-08 08:00:00,2019.1090342679129 +2013-08-08 09:00:00,3182.03738317757 +2013-08-08 10:00:00,3441.595015576324 +2013-08-08 11:00:00,3837.968847352025 +2013-08-08 12:00:00,4061.797507788162 +2013-08-08 13:00:00,4181.018691588785 +2013-08-08 14:00:00,4408.7694704049845 +2013-08-08 15:00:00,4533.728971962617 +2013-08-08 16:00:00,4422.5015576323985 +2013-08-08 17:00:00,4445.7663551401865 +2013-08-08 18:00:00,4403.404984423676 +2013-08-08 19:00:00,4384.3021806853585 +2013-08-08 20:00:00,4111.205607476635 +2013-08-08 21:00:00,4018.090342679128 +2013-08-08 22:00:00,3639.822429906542 +2013-08-08 23:00:00,3149.778816199377 +2013-08-09 00:00:00,2089.386292834891 +2013-08-09 01:00:00,1538.6355140186915 +2013-08-09 02:00:00,1491.0965732087227 +2013-08-09 03:00:00,1454.728971962617 +2013-08-09 04:00:00,1446.8940809968847 +2013-08-09 05:00:00,1486.2772585669782 +2013-08-09 06:00:00,1663.3333333333333 +2013-08-09 07:00:00,1882.9408099688474 +2013-08-09 08:00:00,2076.183800623053 +2013-08-09 09:00:00,3518.8691588785045 +2013-08-09 10:00:00,4047.785046728972 +2013-08-09 11:00:00,4439.348909657321 +2013-08-09 12:00:00,4665.171339563863 +2013-08-09 13:00:00,4729.031152647975 +2013-08-09 14:00:00,4812.545171339564 +2013-08-09 15:00:00,4848.4330218068535 +2013-08-09 16:00:00,4843.249221183801 +2013-08-09 17:00:00,4833.666666666667 +2013-08-09 18:00:00,4843.417445482866 +2013-08-09 19:00:00,4733.358255451713 +2013-08-09 20:00:00,4468.763239875389 +2013-08-09 21:00:00,4251.314641744549 +2013-08-09 22:00:00,3929.2305295950155 +2013-08-09 23:00:00,3524.9781931464177 +2013-08-10 00:00:00,2219.2616822429904 +2013-08-10 01:00:00,1674.778816199377 +2013-08-10 02:00:00,1586.7227414330218 +2013-08-10 03:00:00,1498.6978193146417 +2013-08-10 04:00:00,1441.2087227414331 +2013-08-10 05:00:00,1471.411214953271 +2013-08-10 06:00:00,1635.7102803738317 +2013-08-10 07:00:00,1817.943925233645 +2013-08-10 08:00:00,2067.398753894081 +2013-08-10 09:00:00,3125.9501557632398 +2013-08-10 10:00:00,4356.710280373832 +2013-08-10 11:00:00,4721.887850467289 +2013-08-10 12:00:00,4857.763239875389 +2013-08-10 13:00:00,4872.83800623053 +2013-08-10 14:00:00,4948.781931464175 +2013-08-10 15:00:00,4981.489096573208 +2013-08-10 16:00:00,4983.171339563863 +2013-08-10 17:00:00,5007.186915887851 +2013-08-10 18:00:00,4928.778816199377 +2013-08-10 19:00:00,4894.881619937694 +2013-08-10 20:00:00,4602.520249221184 +2013-08-10 21:00:00,4479.414330218068 +2013-08-10 22:00:00,4027.6230529595014 +2013-08-10 23:00:00,3395.9906542056074 +2013-08-11 00:00:00,2128.9906542056074 +2013-08-11 01:00:00,1668.4454828660437 +2013-08-11 02:00:00,1574.0498442367602 +2013-08-11 03:00:00,1505.7912772585669 +2013-08-11 04:00:00,1420.9096573208724 +2013-08-11 05:00:00,1456.1900311526479 +2013-08-11 06:00:00,1628.8753894080996 +2013-08-11 07:00:00,1770.9158878504672 +2013-08-11 08:00:00,2066.1152647975077 +2013-08-11 09:00:00,3389.847352024922 +2013-08-11 10:00:00,4169.236760124611 +2013-08-11 11:00:00,4622.688473520249 +2013-08-11 12:00:00,4769.9657320872275 +2013-08-11 13:00:00,4709.333333333333 +2013-08-11 14:00:00,4712.21183800623 +2013-08-11 15:00:00,4715.647975077882 +2013-08-11 16:00:00,4778.881619937694 +2013-08-11 17:00:00,4716.109034267913 +2013-08-11 18:00:00,4657.171339563863 +2013-08-11 19:00:00,4553.13707165109 +2013-08-11 20:00:00,4312.532710280374 +2013-08-11 21:00:00,4154.968847352025 +2013-08-11 22:00:00,3850.6199376947043 +2013-08-11 23:00:00,3162.3395638629286 +2013-08-12 00:00:00,2049.2834890965732 +2013-08-12 01:00:00,1487.380062305296 +2013-08-12 02:00:00,1448.183800623053 +2013-08-12 03:00:00,1406.4454828660437 +2013-08-12 04:00:00,1416.747663551402 +2013-08-12 05:00:00,1474.0591900311526 +2013-08-12 06:00:00,1625.778816199377 +2013-08-12 07:00:00,1843.5794392523364 +2013-08-12 08:00:00,2019.9563862928348 +2013-08-12 09:00:00,3094.3520249221183 +2013-08-12 10:00:00,3990.5140186915887 +2013-08-12 11:00:00,4331.174454828661 +2013-08-12 12:00:00,4481.8753894081 +2013-08-12 13:00:00,4528.93769470405 +2013-08-12 14:00:00,4594.585669781932 +2013-08-12 15:00:00,4592.9034267912775 +2013-08-12 16:00:00,4648.07476635514 +2013-08-12 17:00:00,4678.479750778816 +2013-08-12 18:00:00,4574.084112149532 +2013-08-12 19:00:00,4549.4984423676015 +2013-08-12 20:00:00,4369.401869158878 +2013-08-12 21:00:00,4092.2367601246106 +2013-08-12 22:00:00,3715.177570093458 +2013-08-12 23:00:00,3015.9501557632398 +2013-08-13 00:00:00,2042.0155763239875 +2013-08-13 01:00:00,1525.0965732087227 +2013-08-13 02:00:00,1463.5046728971963 +2013-08-13 03:00:00,1403.9595015576324 +2013-08-13 04:00:00,1373.5576323987539 +2013-08-13 05:00:00,1458.6884735202493 +2013-08-13 06:00:00,1657.0809968847352 +2013-08-13 07:00:00,1818.5981308411215 +2013-08-13 08:00:00,2078.355140186916 +2013-08-13 09:00:00,3179.323987538941 +2013-08-13 10:00:00,4003.551401869159 +2013-08-13 11:00:00,4412.803738317757 +2013-08-13 12:00:00,4599.666666666667 +2013-08-13 13:00:00,4794.327102803738 +2013-08-13 14:00:00,4837.750778816199 +2013-08-13 15:00:00,4889.3021806853585 +2013-08-13 16:00:00,4956.7009345794395 +2013-08-13 17:00:00,4907.6355140186915 +2013-08-13 18:00:00,4852.663551401869 +2013-08-13 19:00:00,4722.978193146418 +2013-08-13 20:00:00,4383.152647975078 +2013-08-13 21:00:00,4254.445482866044 +2013-08-13 22:00:00,3772.4704049844236 +2013-08-13 23:00:00,3086.031152647975 +2013-08-14 00:00:00,2067.5732087227416 +2013-08-14 01:00:00,1550.056074766355 +2013-08-14 02:00:00,1493.766355140187 +2013-08-14 03:00:00,1447.436137071651 +2013-08-14 04:00:00,1440.03738317757 +2013-08-14 05:00:00,1480.2866043613708 +2013-08-14 06:00:00,1667.018691588785 +2013-08-14 07:00:00,1866.4517133956385 +2013-08-14 08:00:00,2104.9221183800623 +2013-08-14 09:00:00,3408.373831775701 +2013-08-14 10:00:00,4167.934579439252 +2013-08-14 11:00:00,4521.725856697819 +2013-08-14 12:00:00,4678.510903426792 +2013-08-14 13:00:00,4757.489096573208 +2013-08-14 14:00:00,4844.809968847352 +2013-08-14 15:00:00,4861.813084112149 +2013-08-14 16:00:00,4876.2990654205605 +2013-08-14 17:00:00,4846.451713395639 +2013-08-14 18:00:00,4804.753894080997 +2013-08-14 19:00:00,4696.264797507788 +2013-08-14 20:00:00,4488.931464174455 +2013-08-14 21:00:00,4246.208722741433 +2013-08-14 22:00:00,3986.4267912772584 +2013-08-14 23:00:00,3420.373831775701 +2013-08-15 00:00:00,2305.3177570093458 +2013-08-15 01:00:00,1571.0778816199377 +2013-08-15 02:00:00,1517.214953271028 +2013-08-15 03:00:00,1475.0529595015576 +2013-08-15 04:00:00,1449.202492211838 +2013-08-15 05:00:00,1493.0872274143303 +2013-08-15 06:00:00,1687.4205607476636 +2013-08-15 07:00:00,1870.3364485981308 +2013-08-15 08:00:00,2102.6884735202493 +2013-08-15 09:00:00,3650.4641744548285 +2013-08-15 10:00:00,4120.710280373832 +2013-08-15 11:00:00,4537.6355140186915 +2013-08-15 12:00:00,4687.077881619938 +2013-08-15 13:00:00,4743.878504672897 +2013-08-15 14:00:00,4730.98753894081 +2013-08-15 15:00:00,4739.389408099689 +2013-08-15 16:00:00,4840.510903426792 +2013-08-15 17:00:00,4752.376947040499 +2013-08-15 18:00:00,4717.317757009346 +2013-08-15 19:00:00,4551.052959501558 +2013-08-15 20:00:00,4385.853582554517 +2013-08-15 21:00:00,4298.92523364486 +2013-08-15 22:00:00,3865.059190031153 +2013-08-15 23:00:00,3235.196261682243 +2013-08-16 00:00:00,2299.0280373831774 +2013-08-16 01:00:00,1564.2741433021806 +2013-08-16 02:00:00,1522.9781931464174 +2013-08-16 03:00:00,1466.4922118380061 +2013-08-16 04:00:00,1457.2554517133956 +2013-08-16 05:00:00,1488.0654205607477 +2013-08-16 06:00:00,1683.943925233645 +2013-08-16 07:00:00,1868.342679127726 +2013-08-16 08:00:00,2071.3333333333335 +2013-08-16 09:00:00,3458.7694704049845 +2013-08-16 10:00:00,3836.9844236760123 +2013-08-16 11:00:00,4204.9003115264795 +2013-08-16 12:00:00,4419.3613707165105 +2013-08-16 13:00:00,4486.897196261682 +2013-08-16 14:00:00,4598.380062305296 +2013-08-16 15:00:00,4603.894080996884 +2013-08-16 16:00:00,4685.386292834891 +2013-08-16 17:00:00,4754.093457943925 +2013-08-16 18:00:00,4673.545171339564 +2013-08-16 19:00:00,4409.401869158878 +2013-08-16 20:00:00,4187.5669781931465 +2013-08-16 21:00:00,4103.757009345794 +2013-08-16 22:00:00,3755.0778816199377 +2013-08-16 23:00:00,3296.302180685358 +2013-08-17 00:00:00,2215.133956386293 +2013-08-17 01:00:00,1622.8130841121495 +2013-08-17 02:00:00,1543.8566978193146 +2013-08-17 03:00:00,1437.834890965732 +2013-08-17 04:00:00,1384.233644859813 +2013-08-17 05:00:00,1435.1433021806854 +2013-08-17 06:00:00,1614.5794392523364 +2013-08-17 07:00:00,1812.1370716510903 +2013-08-17 08:00:00,1999.1339563862928 +2013-08-17 09:00:00,3081.461059190031 +2013-08-17 10:00:00,3765.5358255451715 +2013-08-17 11:00:00,4303.227414330218 +2013-08-17 12:00:00,4459.395638629284 +2013-08-17 13:00:00,4602.514018691589 +2013-08-17 14:00:00,4545.006230529595 +2013-08-17 15:00:00,4576.685358255451 +2013-08-17 16:00:00,4602.320872274143 +2013-08-17 17:00:00,4596.91277258567 +2013-08-17 18:00:00,4640.92523364486 +2013-08-17 19:00:00,4604.193146417446 +2013-08-17 20:00:00,4374.2990654205605 +2013-08-17 21:00:00,4246.01246105919 +2013-08-17 22:00:00,3829.4174454828662 +2013-08-17 23:00:00,3238.202492211838 +2013-08-18 00:00:00,2239.0404984423676 +2013-08-18 01:00:00,1622.5732087227414 +2013-08-18 02:00:00,1537.7694704049845 +2013-08-18 03:00:00,1482.7725856697818 +2013-08-18 04:00:00,1392.6822429906542 +2013-08-18 05:00:00,1420.2647975077882 +2013-08-18 06:00:00,1608.0747663551401 +2013-08-18 07:00:00,1776.1401869158879 +2013-08-18 08:00:00,1944.404984423676 +2013-08-18 09:00:00,3055.2803738317757 +2013-08-18 10:00:00,3947.576323987539 +2013-08-18 11:00:00,4404.0373831775705 +2013-08-18 12:00:00,4563.523364485981 +2013-08-18 13:00:00,4564.283489096573 +2013-08-18 14:00:00,4607.772585669782 +2013-08-18 15:00:00,4634.747663551402 +2013-08-18 16:00:00,4664.414330218068 +2013-08-18 17:00:00,4237.333333333333 +2013-08-18 18:00:00,4064.3956386292834 +2013-08-18 19:00:00,4053.3769470404986 +2013-08-18 20:00:00,3944.429906542056 +2013-08-18 21:00:00,4407.451713395639 +2013-08-18 22:00:00,3981.96261682243 +2013-08-18 23:00:00,3154.246105919003 +2013-08-19 00:00:00,2218.894080996885 +2013-08-19 01:00:00,1564.411214953271 +2013-08-19 02:00:00,1450.816199376947 +2013-08-19 03:00:00,1411.651090342679 +2013-08-19 04:00:00,1406.5109034267912 +2013-08-19 05:00:00,1443.271028037383 +2013-08-19 06:00:00,1630.1806853582555 +2013-08-19 07:00:00,1807.5233644859813 +2013-08-19 08:00:00,1978.2897196261683 +2013-08-19 09:00:00,3179.8816199376947 +2013-08-19 10:00:00,4117.576323987539 +2013-08-19 11:00:00,4585.797507788162 +2013-08-19 12:00:00,4726.647975077882 +2013-08-19 13:00:00,4798.4361370716515 +2013-08-19 14:00:00,4837.5046728971965 +2013-08-19 15:00:00,4850.7694704049845 +2013-08-19 16:00:00,4824.990654205608 +2013-08-19 17:00:00,4900.828660436137 +2013-08-19 18:00:00,4798.694704049844 +2013-08-19 19:00:00,4711.339563862928 +2013-08-19 20:00:00,4529.208722741433 +2013-08-19 21:00:00,4370.978193146418 +2013-08-19 22:00:00,3963.6604361370714 +2013-08-19 23:00:00,3337.6728971962616 +2013-08-20 00:00:00,2241.753894080997 +2013-08-20 01:00:00,1594.8317757009345 +2013-08-20 02:00:00,1520.4299065420562 +2013-08-20 03:00:00,1455.9376947040498 +2013-08-20 04:00:00,1455.4984423676012 +2013-08-20 05:00:00,1512.563862928349 +2013-08-20 06:00:00,1685.4299065420562 +2013-08-20 07:00:00,1869.4018691588785 +2013-08-20 08:00:00,2069.97507788162 +2013-08-20 09:00:00,3239.1993769470405 +2013-08-20 10:00:00,4234.9626168224295 +2013-08-20 11:00:00,4531.623052959501 +2013-08-20 12:00:00,4640.323987538941 +2013-08-20 13:00:00,4861.8753894081 +2013-08-20 14:00:00,4924.071651090343 +2013-08-20 15:00:00,4939.489096573208 +2013-08-20 16:00:00,4919.077881619938 +2013-08-20 17:00:00,4949.86292834891 +2013-08-20 18:00:00,4864.305295950156 +2013-08-20 19:00:00,4762.5669781931465 +2013-08-20 20:00:00,4522.71339563863 +2013-08-20 21:00:00,4400.258566978193 +2013-08-20 22:00:00,3942.5015576323985 +2013-08-20 23:00:00,3266.8193146417448 +2013-08-21 00:00:00,2280.442367601246 +2013-08-21 01:00:00,1728.01246105919 +2013-08-21 02:00:00,1465.1713395638628 +2013-08-21 03:00:00,1413.816199376947 +2013-08-21 04:00:00,1405.4610591900312 +2013-08-21 05:00:00,1453.7071651090343 +2013-08-21 06:00:00,1645.6853582554518 +2013-08-21 07:00:00,1830.2118380062304 +2013-08-21 08:00:00,2034.96261682243 +2013-08-21 09:00:00,3071.5981308411215 +2013-08-21 10:00:00,4027.5856697819313 +2013-08-21 11:00:00,4347.398753894081 +2013-08-21 12:00:00,4512.202492211838 +2013-08-21 13:00:00,4628.0 +2013-08-21 14:00:00,4660.317757009346 +2013-08-21 15:00:00,4673.084112149532 +2013-08-21 16:00:00,4728.021806853582 +2013-08-21 17:00:00,4732.981308411215 +2013-08-21 18:00:00,4614.582554517134 +2013-08-21 19:00:00,4516.242990654206 +2013-08-21 20:00:00,4322.694704049844 +2013-08-21 21:00:00,4167.943925233645 +2013-08-21 22:00:00,3676.0404984423676 +2013-08-21 23:00:00,3080.8598130841124 +2013-08-22 00:00:00,2044.6728971962616 +2013-08-22 01:00:00,1478.6230529595016 +2013-08-22 02:00:00,1424.4517133956385 +2013-08-22 03:00:00,1373.5077881619939 +2013-08-22 04:00:00,1370.0498442367602 +2013-08-22 05:00:00,1435.436137071651 +2013-08-22 06:00:00,1634.6853582554518 +2013-08-22 07:00:00,1830.4392523364486 +2013-08-22 08:00:00,2019.0404984423676 +2013-08-22 09:00:00,3077.239875389408 +2013-08-22 10:00:00,3873.8504672897197 +2013-08-22 11:00:00,4270.02492211838 +2013-08-22 12:00:00,4444.644859813084 +2013-08-22 13:00:00,4578.02492211838 +2013-08-22 14:00:00,4514.22429906542 +2013-08-22 15:00:00,4493.028037383177 +2013-08-22 16:00:00,4669.598130841122 +2013-08-22 17:00:00,4665.71339563863 +2013-08-22 18:00:00,4679.806853582554 +2013-08-22 19:00:00,4591.454828660436 +2013-08-22 20:00:00,4265.915887850468 +2013-08-22 21:00:00,4164.5015576323985 +2013-08-22 22:00:00,3722.052959501558 +2013-08-22 23:00:00,3011.0560747663553 +2013-08-23 00:00:00,1951.632398753894 +2013-08-23 01:00:00,1502.9034267912773 +2013-08-23 02:00:00,1428.7414330218069 +2013-08-23 03:00:00,1368.3707165109033 +2013-08-23 04:00:00,1379.2242990654206 +2013-08-23 05:00:00,1441.6292834890967 +2013-08-23 06:00:00,1660.4797507788162 +2013-08-23 07:00:00,1806.968847352025 +2013-08-23 08:00:00,2011.1993769470405 +2013-08-23 09:00:00,3105.1028037383176 +2013-08-23 10:00:00,3741.96261682243 +2013-08-23 11:00:00,4158.196261682243 +2013-08-23 12:00:00,4355.529595015576 +2013-08-23 13:00:00,4530.685358255451 +2013-08-23 14:00:00,4634.090342679127 +2013-08-23 15:00:00,4835.16199376947 +2013-08-23 16:00:00,4878.523364485981 +2013-08-23 17:00:00,4819.971962616823 +2013-08-23 18:00:00,4701.760124610591 +2013-08-23 19:00:00,4509.86292834891 +2013-08-23 20:00:00,4266.336448598131 +2013-08-23 21:00:00,4106.457943925234 +2013-08-23 22:00:00,3751.542056074766 +2013-08-23 23:00:00,3174.676012461059 +2013-08-24 00:00:00,2060.367601246106 +2013-08-24 01:00:00,1617.601246105919 +2013-08-24 02:00:00,1526.9190031152648 +2013-08-24 03:00:00,1424.2834890965732 +2013-08-24 04:00:00,1410.4610591900312 +2013-08-24 05:00:00,1438.8909657320871 +2013-08-24 06:00:00,1616.3956386292834 +2013-08-24 07:00:00,1814.8411214953271 +2013-08-24 08:00:00,1992.4018691588785 +2013-08-24 09:00:00,3149.797507788162 +2013-08-24 10:00:00,3863.1401869158876 +2013-08-24 11:00:00,4271.632398753894 +2013-08-24 12:00:00,4442.205607476635 +2013-08-24 13:00:00,4536.707165109035 +2013-08-24 14:00:00,4502.557632398754 +2013-08-24 15:00:00,4508.0373831775705 +2013-08-24 16:00:00,4598.239875389409 +2013-08-24 17:00:00,4572.236760124611 +2013-08-24 18:00:00,4500.928348909657 +2013-08-24 19:00:00,4422.28660436137 +2013-08-24 20:00:00,4247.08722741433 +2013-08-24 21:00:00,4009.255451713396 +2013-08-24 22:00:00,3706.3177570093458 +2013-08-24 23:00:00,3124.4330218068535 +2013-08-25 00:00:00,2138.9968847352025 +2013-08-25 01:00:00,1593.619937694704 +2013-08-25 02:00:00,1503.4672897196263 +2013-08-25 03:00:00,1426.0872274143303 +2013-08-25 04:00:00,1353.7538940809968 +2013-08-25 05:00:00,1382.8785046728972 +2013-08-25 06:00:00,1566.6853582554518 +2013-08-25 07:00:00,1737.5576323987539 +2013-08-25 08:00:00,1917.3457943925234 +2013-08-25 09:00:00,2979.816199376947 +2013-08-25 10:00:00,3823.8816199376947 +2013-08-25 11:00:00,4185.585669781932 +2013-08-25 12:00:00,4291.380062305296 +2013-08-25 13:00:00,4345.071651090343 +2013-08-25 14:00:00,4314.526479750779 +2013-08-25 15:00:00,4301.906542056075 +2013-08-25 16:00:00,4345.205607476635 +2013-08-25 17:00:00,4341.803738317757 +2013-08-25 18:00:00,4306.414330218068 +2013-08-25 19:00:00,4180.333333333333 +2013-08-25 20:00:00,4142.644859813084 +2013-08-25 21:00:00,4017.822429906542 +2013-08-25 22:00:00,3652.239875389408 +2013-08-25 23:00:00,3004.551401869159 +2013-08-26 00:00:00,1929.5358255451713 +2013-08-26 01:00:00,1417.0934579439252 +2013-08-26 02:00:00,1358.0404984423676 +2013-08-26 03:00:00,1319.4922118380061 +2013-08-26 04:00:00,1339.0809968847352 +2013-08-26 05:00:00,1403.0623052959502 +2013-08-26 06:00:00,1583.0778816199377 +2013-08-26 07:00:00,1760.392523364486 +2013-08-26 08:00:00,1969.5576323987539 +2013-08-26 09:00:00,2982.8847352024923 +2013-08-26 10:00:00,3742.6510903426793 +2013-08-26 11:00:00,3968.0155763239877 +2013-08-26 12:00:00,4078.3208722741433 +2013-08-26 13:00:00,4266.585669781932 +2013-08-26 14:00:00,4334.679127725857 +2013-08-26 15:00:00,4403.0 +2013-08-26 16:00:00,4416.461059190031 +2013-08-26 17:00:00,4437.411214953271 +2013-08-26 18:00:00,4327.735202492212 +2013-08-26 19:00:00,4215.601246105919 +2013-08-26 20:00:00,4089.526479750779 +2013-08-26 21:00:00,3945.0841121495328 +2013-08-26 22:00:00,3625.190031152648 +2013-08-26 23:00:00,3003.7320872274145 +2013-08-27 00:00:00,2189.834890965732 +2013-08-27 01:00:00,1570.8099688473521 +2013-08-27 02:00:00,1457.3115264797507 +2013-08-27 03:00:00,1413.7694704049845 +2013-08-27 04:00:00,1414.0747663551401 +2013-08-27 05:00:00,1448.2959501557632 +2013-08-27 06:00:00,1649.2990654205607 +2013-08-27 07:00:00,1819.619937694704 +2013-08-27 08:00:00,2013.0965732087227 +2013-08-27 09:00:00,3016.2305295950155 +2013-08-27 10:00:00,3684.7383177570096 +2013-08-27 11:00:00,3955.816199376947 +2013-08-27 12:00:00,4017.3582554517134 +2013-08-27 13:00:00,4135.510903426792 +2013-08-27 14:00:00,4266.551401869159 +2013-08-27 15:00:00,4220.336448598131 +2013-08-27 16:00:00,4308.978193146418 +2013-08-27 17:00:00,4268.884735202492 +2013-08-27 18:00:00,4211.822429906542 +2013-08-27 19:00:00,4095.2679127725855 +2013-08-27 20:00:00,3957.1370716510905 +2013-08-27 21:00:00,3823.221183800623 +2013-08-27 22:00:00,3512.0093457943926 +2013-08-27 23:00:00,2885.5856697819313 +2013-08-28 00:00:00,2058.6666666666665 +2013-08-28 01:00:00,1496.2492211838007 +2013-08-28 02:00:00,1417.7943925233644 +2013-08-28 03:00:00,1377.3644859813085 +2013-08-28 04:00:00,1397.0778816199377 +2013-08-28 05:00:00,1424.9750778816199 +2013-08-28 06:00:00,1632.9283489096574 +2013-08-28 07:00:00,1792.386292834891 +2013-08-28 08:00:00,1997.7632398753894 +2013-08-28 09:00:00,3020.158878504673 +2013-08-28 10:00:00,3664.133956386293 +2013-08-28 11:00:00,3943.1993769470405 +2013-08-28 12:00:00,3995.993769470405 +2013-08-28 13:00:00,4139.747663551402 +2013-08-28 14:00:00,4185.071651090343 +2013-08-28 15:00:00,4237.959501557632 +2013-08-28 16:00:00,4226.8348909657325 +2013-08-28 17:00:00,4253.956386292835 +2013-08-28 18:00:00,4195.887850467289 +2013-08-28 19:00:00,4178.890965732087 +2013-08-28 20:00:00,4034.760124610592 +2013-08-28 21:00:00,3958.6791277258567 +2013-08-28 22:00:00,3611.7102803738317 +2013-08-28 23:00:00,2978.8193146417448 +2013-08-29 00:00:00,2094.1152647975077 +2013-08-29 01:00:00,1594.0031152647975 +2013-08-29 02:00:00,1405.4797507788162 +2013-08-29 03:00:00,1361.2056074766356 +2013-08-29 04:00:00,1363.1090342679129 +2013-08-29 05:00:00,1399.146417445483 +2013-08-29 06:00:00,1593.4143302180685 +2013-08-29 07:00:00,1785.5109034267912 +2013-08-29 08:00:00,1963.5420560747664 +2013-08-29 09:00:00,3020.2492211838007 +2013-08-29 10:00:00,3784.8130841121497 +2013-08-29 11:00:00,3931.330218068536 +2013-08-29 12:00:00,4137.92523364486 +2013-08-29 13:00:00,4262.015576323987 +2013-08-29 14:00:00,4327.112149532711 +2013-08-29 15:00:00,4374.822429906542 +2013-08-29 16:00:00,4390.716510903427 +2013-08-29 17:00:00,4219.355140186916 +2013-08-29 18:00:00,4323.719626168225 +2013-08-29 19:00:00,4221.174454828661 +2013-08-29 20:00:00,4125.0 +2013-08-29 21:00:00,4032.9719626168226 +2013-08-29 22:00:00,3744.6479750778817 +2013-08-29 23:00:00,3013.227414330218 +2013-08-30 00:00:00,1958.834890965732 +2013-08-30 01:00:00,1450.0467289719627 +2013-08-30 02:00:00,1395.943925233645 +2013-08-30 03:00:00,1362.778816199377 +2013-08-30 04:00:00,1392.2305295950155 +2013-08-30 05:00:00,1418.8006230529595 +2013-08-30 06:00:00,1626.822429906542 +2013-08-30 07:00:00,1784.2928348909657 +2013-08-30 08:00:00,2008.1339563862928 +2013-08-30 09:00:00,2979.2523364485983 +2013-08-30 10:00:00,3901.8816199376947 +2013-08-30 11:00:00,4288.2336448598135 +2013-08-30 12:00:00,4430.897196261682 +2013-08-30 13:00:00,4499.83800623053 +2013-08-30 14:00:00,4583.261682242991 +2013-08-30 15:00:00,4598.08722741433 +2013-08-30 16:00:00,4598.22429906542 +2013-08-30 17:00:00,4558.4361370716515 +2013-08-30 18:00:00,4497.915887850468 +2013-08-30 19:00:00,4427.657320872274 +2013-08-30 20:00:00,4305.800623052959 +2013-08-30 21:00:00,4099.613707165109 +2013-08-30 22:00:00,3769.828660436137 +2013-08-30 23:00:00,3157.196261682243 +2013-08-31 00:00:00,2065.6479750778817 +2013-08-31 01:00:00,1570.6043613707166 +2013-08-31 02:00:00,1479.3208722741433 +2013-08-31 03:00:00,1376.607476635514 +2013-08-31 04:00:00,1351.778816199377 +2013-08-31 05:00:00,1393.7819314641745 +2013-08-31 06:00:00,1585.8130841121495 +2013-08-31 07:00:00,1791.6448598130842 +2013-08-31 08:00:00,1953.8317757009345 +2013-08-31 09:00:00,3313.165109034268 +2013-08-31 10:00:00,3945.7570093457944 +2013-08-31 11:00:00,4344.177570093458 +2013-08-31 12:00:00,4394.781931464175 +2013-08-31 13:00:00,4462.196261682243 +2013-08-31 14:00:00,4503.009345794392 +2013-08-31 15:00:00,4528.239875389409 +2013-08-31 16:00:00,4557.582554517134 +2013-08-31 17:00:00,4555.199376947041 +2013-08-31 18:00:00,4468.86292834891 +2013-08-31 19:00:00,4361.22429906542 +2013-08-31 20:00:00,4218.819314641744 +2013-08-31 21:00:00,4101.666666666667 +2013-08-31 22:00:00,3782.208722741433 +2013-08-31 23:00:00,3226.9003115264795 +2013-09-01 00:00:00,2030.8255451713396 +2013-09-01 01:00:00,1576.7196261682243 +2013-09-01 02:00:00,1499.0934579439252 +2013-09-01 03:00:00,1431.9408099688474 +2013-09-01 04:00:00,1356.6448598130842 +2013-09-01 05:00:00,1390.766355140187 +2013-09-01 06:00:00,1583.968847352025 +2013-09-01 07:00:00,1742.601246105919 +2013-09-01 08:00:00,1880.5700934579438 +2013-09-01 09:00:00,3106.9719626168226 +2013-09-01 10:00:00,3731.7414330218066 +2013-09-01 11:00:00,4190.07476635514 +2013-09-01 12:00:00,4338.105919003116 +2013-09-01 13:00:00,4384.3644859813085 +2013-09-01 14:00:00,4383.345794392523 +2013-09-01 15:00:00,4367.844236760125 +2013-09-01 16:00:00,4425.015576323987 +2013-09-01 17:00:00,4391.317757009346 +2013-09-01 18:00:00,4306.16199376947 +2013-09-01 19:00:00,4221.043613707165 +2013-09-01 20:00:00,4041.3489096573207 +2013-09-01 21:00:00,3985.286604361371 +2013-09-01 22:00:00,3621.133956386293 +2013-09-01 23:00:00,2962.940809968847 +2013-09-02 00:00:00,1948.342679127726 +2013-09-02 01:00:00,1458.3271028037384 +2013-09-02 02:00:00,1401.6043613707166 +2013-09-02 03:00:00,1368.1619937694704 +2013-09-02 04:00:00,1386.4704049844236 +2013-09-02 05:00:00,1418.4704049844236 +2013-09-02 06:00:00,1623.3208722741433 +2013-09-02 07:00:00,1786.3769470404984 +2013-09-02 08:00:00,1970.7133956386292 +2013-09-02 09:00:00,2826.644859813084 +2013-09-02 10:00:00,3881.0342679127725 +2013-09-02 11:00:00,4151.367601246106 +2013-09-02 12:00:00,4369.728971962617 +2013-09-02 13:00:00,4455.171339563863 +2013-09-02 14:00:00,4493.255451713396 +2013-09-02 15:00:00,4466.102803738318 +2013-09-02 16:00:00,4571.0342679127725 +2013-09-02 17:00:00,4534.781931464175 +2013-09-02 18:00:00,4517.426791277258 +2013-09-02 19:00:00,4432.202492211838 +2013-09-02 20:00:00,4261.121495327103 +2013-09-02 21:00:00,4055.834890965732 +2013-09-02 22:00:00,3625.772585669782 +2013-09-02 23:00:00,2951.5482866043612 +2013-09-03 00:00:00,1970.96261682243 +2013-09-03 01:00:00,1489.9314641744547 +2013-09-03 02:00:00,1446.2242990654206 +2013-09-03 03:00:00,1392.4143302180685 +2013-09-03 04:00:00,1394.993769470405 +2013-09-03 05:00:00,1423.386292834891 +2013-09-03 06:00:00,1634.0965732087227 +2013-09-03 07:00:00,1812.8473520249222 +2013-09-03 08:00:00,1982.214953271028 +2013-09-03 09:00:00,2915.8535825545173 +2013-09-03 10:00:00,3940.436137071651 +2013-09-03 11:00:00,4235.473520249221 +2013-09-03 12:00:00,4431.0965732087225 +2013-09-03 13:00:00,4539.666666666667 +2013-09-03 14:00:00,4591.604361370716 +2013-09-03 15:00:00,4609.280373831775 +2013-09-03 16:00:00,4633.993769470405 +2013-09-03 17:00:00,4629.825545171339 +2013-09-03 18:00:00,4534.4361370716515 +2013-09-03 19:00:00,4383.015576323987 +2013-09-03 20:00:00,4309.8317757009345 +2013-09-03 21:00:00,4096.221183800623 +2013-09-03 22:00:00,3645.7320872274145 +2013-09-03 23:00:00,2935.5451713395637 +2013-09-04 00:00:00,1915.4641744548287 +2013-09-04 01:00:00,1479.5109034267912 +2013-09-04 02:00:00,1411.8255451713396 +2013-09-04 03:00:00,1363.5046728971963 +2013-09-04 04:00:00,1385.0809968847352 +2013-09-04 05:00:00,1417.7040498442368 +2013-09-04 06:00:00,1617.221183800623 +2013-09-04 07:00:00,1792.2554517133956 +2013-09-04 08:00:00,1970.3115264797507 +2013-09-04 09:00:00,2933.031152647975 +2013-09-04 10:00:00,3934.722741433022 +2013-09-04 11:00:00,4234.990654205608 +2013-09-04 12:00:00,4334.411214953271 +2013-09-04 13:00:00,4381.707165109035 +2013-09-04 14:00:00,4418.78816199377 +2013-09-04 15:00:00,4470.043613707165 +2013-09-04 16:00:00,4524.102803738318 +2013-09-04 17:00:00,4502.968847352025 +2013-09-04 18:00:00,4428.127725856698 +2013-09-04 19:00:00,4326.1651090342675 +2013-09-04 20:00:00,4168.133956386293 +2013-09-04 21:00:00,4013.2959501557634 +2013-09-04 22:00:00,3643.5171339563863 +2013-09-04 23:00:00,2953.3489096573207 +2013-09-05 00:00:00,2086.8909657320874 +2013-09-05 01:00:00,1462.031152647975 +2013-09-05 02:00:00,1406.853582554517 +2013-09-05 03:00:00,1363.7725856697818 +2013-09-05 04:00:00,1378.638629283489 +2013-09-05 05:00:00,1413.760124610592 +2013-09-05 06:00:00,1633.9034267912773 +2013-09-05 07:00:00,1817.5700934579438 +2013-09-05 08:00:00,1997.657320872274 +2013-09-05 09:00:00,2972.4174454828662 +2013-09-05 10:00:00,3753.93769470405 +2013-09-05 11:00:00,4053.5015576323985 +2013-09-05 12:00:00,4138.401869158878 +2013-09-05 13:00:00,4240.9003115264795 +2013-09-05 14:00:00,4262.355140186916 +2013-09-05 15:00:00,4315.317757009346 +2013-09-05 16:00:00,4320.841121495327 +2013-09-05 17:00:00,4262.579439252337 +2013-09-05 18:00:00,4216.694704049844 +2013-09-05 19:00:00,4143.598130841122 +2013-09-05 20:00:00,4038.1869158878503 +2013-09-05 21:00:00,3864.2492211838007 +2013-09-05 22:00:00,3468.803738317757 +2013-09-05 23:00:00,2826.006230529595 +2013-09-06 00:00:00,1962.146417445483 +2013-09-06 01:00:00,1563.7943925233644 +2013-09-06 02:00:00,1419.4859813084113 +2013-09-06 03:00:00,1362.6417445482866 +2013-09-06 04:00:00,1363.6292834890967 +2013-09-06 05:00:00,1409.018691588785 +2013-09-06 06:00:00,1600.9003115264798 +2013-09-06 07:00:00,1800.2056074766356 +2013-09-06 08:00:00,1959.0623052959502 +2013-09-06 09:00:00,2853.0716510903426 +2013-09-06 10:00:00,3623.1152647975077 +2013-09-06 11:00:00,3979.286604361371 +2013-09-06 12:00:00,4150.006230529595 +2013-09-06 13:00:00,4240.78816199377 +2013-09-06 14:00:00,4290.9034267912775 +2013-09-06 15:00:00,4366.841121495327 +2013-09-06 16:00:00,4396.576323987539 +2013-09-06 17:00:00,4271.940809968847 +2013-09-06 18:00:00,4262.448598130841 +2013-09-06 19:00:00,4081.6728971962616 +2013-09-06 20:00:00,4056.588785046729 +2013-09-06 21:00:00,3843.3052959501556 +2013-09-06 22:00:00,3529.4080996884736 +2013-09-06 23:00:00,2965.707165109034 +2013-09-07 00:00:00,2066.841121495327 +2013-09-07 01:00:00,1575.177570093458 +2013-09-07 02:00:00,1467.417445482866 +2013-09-07 03:00:00,1374.6915887850466 +2013-09-07 04:00:00,1339.5202492211838 +2013-09-07 05:00:00,1370.9003115264798 +2013-09-07 06:00:00,1583.4267912772586 +2013-09-07 07:00:00,1737.436137071651 +2013-09-07 08:00:00,1886.423676012461 +2013-09-07 09:00:00,2933.1308411214955 +2013-09-07 10:00:00,3484.3644859813085 +2013-09-07 11:00:00,3773.214953271028 +2013-09-07 12:00:00,3910.4080996884736 +2013-09-07 13:00:00,3949.1682242990655 +2013-09-07 14:00:00,4058.1464174454827 +2013-09-07 15:00:00,4026.9906542056074 +2013-09-07 16:00:00,4094.1682242990655 +2013-09-07 17:00:00,4096.669781931464 +2013-09-07 18:00:00,4028.797507788162 +2013-09-07 19:00:00,3921.3052959501556 +2013-09-07 20:00:00,3850.323987538941 +2013-09-07 21:00:00,3653.6199376947043 +2013-09-07 22:00:00,3350.7757009345796 +2013-09-07 23:00:00,2833.1495327102803 +2013-09-08 00:00:00,1953.1744548286604 +2013-09-08 01:00:00,1505.9906542056074 +2013-09-08 02:00:00,1410.5576323987539 +2013-09-08 03:00:00,1354.411214953271 +2013-09-08 04:00:00,1282.1090342679129 +2013-09-08 05:00:00,1319.165109034268 +2013-09-08 06:00:00,1475.8629283489097 +2013-09-08 07:00:00,1646.6915887850466 +2013-09-08 08:00:00,1797.380062305296 +2013-09-08 09:00:00,2730.866043613707 +2013-09-08 10:00:00,3217.8753894080996 +2013-09-08 11:00:00,3560.903426791277 +2013-09-08 12:00:00,3730.856697819315 +2013-09-08 13:00:00,3786.0093457943926 +2013-09-08 14:00:00,3804.208722741433 +2013-09-08 15:00:00,3839.1464174454827 +2013-09-08 16:00:00,3876.5295950155764 +2013-09-08 17:00:00,3930.520249221184 +2013-09-08 18:00:00,3890.7383177570096 +2013-09-08 19:00:00,3704.5732087227416 +2013-09-08 20:00:00,3630.5607476635514 +2013-09-08 21:00:00,3441.2492211838007 +2013-09-08 22:00:00,3080.2305295950155 +2013-09-08 23:00:00,2479.143302180685 +2013-09-09 00:00:00,1749.7196261682243 +2013-09-09 01:00:00,1328.6355140186915 +2013-09-09 02:00:00,1283.1900311526479 +2013-09-09 03:00:00,1255.165109034268 +2013-09-09 04:00:00,1266.1931464174454 +2013-09-09 05:00:00,1307.0934579439252 +2013-09-09 06:00:00,1497.1526479750778 +2013-09-09 07:00:00,1645.8878504672898 +2013-09-09 08:00:00,1812.3239875389409 +2013-09-09 09:00:00,2580.9003115264795 +2013-09-09 10:00:00,3165.778816199377 +2013-09-09 11:00:00,3436.3208722741433 +2013-09-09 12:00:00,3612.9595015576324 +2013-09-09 13:00:00,3844.4984423676015 +2013-09-09 14:00:00,3854.4641744548285 +2013-09-09 15:00:00,3950.202492211838 +2013-09-09 16:00:00,4006.9501557632398 +2013-09-09 17:00:00,4035.3115264797507 +2013-09-09 18:00:00,3968.5794392523367 +2013-09-09 19:00:00,3899.467289719626 +2013-09-09 20:00:00,3799.4766355140187 +2013-09-09 21:00:00,3622.3800623052957 +2013-09-09 22:00:00,3284.6230529595014 +2013-09-09 23:00:00,2692.2056074766356 +2013-09-10 00:00:00,1962.5140186915887 +2013-09-10 01:00:00,1434.165109034268 +2013-09-10 02:00:00,1363.8193146417445 +2013-09-10 03:00:00,1334.9034267912773 +2013-09-10 04:00:00,1337.9844236760125 +2013-09-10 05:00:00,1369.9781931464174 +2013-09-10 06:00:00,1558.4517133956385 +2013-09-10 07:00:00,1720.4454828660437 +2013-09-10 08:00:00,1879.657320872274 +2013-09-10 09:00:00,2685.0716510903426 +2013-09-10 10:00:00,3456.5295950155764 +2013-09-10 11:00:00,3791.1495327102803 +2013-09-10 12:00:00,3952.1246105919004 +2013-09-10 13:00:00,4125.174454828661 +2013-09-10 14:00:00,4133.454828660436 +2013-09-10 15:00:00,4170.0342679127725 +2013-09-10 16:00:00,4208.816199376947 +2013-09-10 17:00:00,4252.542056074766 +2013-09-10 18:00:00,4177.320872274143 +2013-09-10 19:00:00,4056.308411214953 +2013-09-10 20:00:00,3918.9532710280373 +2013-09-10 21:00:00,3745.2741433021806 +2013-09-10 22:00:00,3404.834890965732 +2013-09-10 23:00:00,2769.208722741433 +2013-09-11 00:00:00,1942.8006230529595 +2013-09-11 01:00:00,1452.5576323987539 +2013-09-11 02:00:00,1385.380062305296 +2013-09-11 03:00:00,1354.0155763239875 +2013-09-11 04:00:00,1356.0747663551401 +2013-09-11 05:00:00,1390.2616822429907 +2013-09-11 06:00:00,1576.1806853582555 +2013-09-11 07:00:00,1736.7196261682243 +2013-09-11 08:00:00,1905.0498442367602 +2013-09-11 09:00:00,2611.330218068536 +2013-09-11 10:00:00,3626.4859813084113 +2013-09-11 11:00:00,3897.9906542056074 +2013-09-11 12:00:00,4029.2803738317757 +2013-09-11 13:00:00,4079.336448598131 +2013-09-11 14:00:00,4179.330218068536 +2013-09-11 15:00:00,4277.83800623053 +2013-09-11 16:00:00,4378.423676012461 +2013-09-11 17:00:00,4358.978193146418 +2013-09-11 18:00:00,4215.651090342679 +2013-09-11 19:00:00,4202.890965732087 +2013-09-11 20:00:00,4044.392523364486 +2013-09-11 21:00:00,3852.3956386292834 +2013-09-11 22:00:00,3563.7819314641742 +2013-09-11 23:00:00,2862.5669781931465 +2013-09-12 00:00:00,1991.4579439252336 +2013-09-12 01:00:00,1455.816199376947 +2013-09-12 02:00:00,1393.4267912772586 +2013-09-12 03:00:00,1380.766355140187 +2013-09-12 04:00:00,1389.8753894080996 +2013-09-12 05:00:00,1412.0996884735202 +2013-09-12 06:00:00,1593.5856697819315 +2013-09-12 07:00:00,1771.3395638629283 +2013-09-12 08:00:00,1958.436137071651 +2013-09-12 09:00:00,2748.308411214953 +2013-09-12 10:00:00,3724.1246105919004 +2013-09-12 11:00:00,4048.233644859813 +2013-09-12 12:00:00,4212.9003115264795 +2013-09-12 13:00:00,4272.894080996884 +2013-09-12 14:00:00,4439.155763239875 +2013-09-12 15:00:00,4465.009345794392 +2013-09-12 16:00:00,4474.155763239875 +2013-09-12 17:00:00,4494.021806853582 +2013-09-12 18:00:00,4334.130841121495 +2013-09-12 19:00:00,4283.822429906542 +2013-09-12 20:00:00,4125.83800623053 +2013-09-12 21:00:00,3997.190031152648 +2013-09-12 22:00:00,3592.595015576324 +2013-09-12 23:00:00,2965.0498442367602 +2013-09-13 00:00:00,1985.9003115264798 +2013-09-13 01:00:00,1460.8442367601247 +2013-09-13 02:00:00,1401.9190031152648 +2013-09-13 03:00:00,1361.5482866043615 +2013-09-13 04:00:00,1380.0467289719627 +2013-09-13 05:00:00,1395.4672897196263 +2013-09-13 06:00:00,1595.0 +2013-09-13 07:00:00,1754.0155763239875 +2013-09-13 08:00:00,1974.8068535825546 +2013-09-13 09:00:00,3042.576323987539 +2013-09-13 10:00:00,3853.6884735202493 +2013-09-13 11:00:00,4237.781931464175 +2013-09-13 12:00:00,4340.448598130841 +2013-09-13 13:00:00,4428.386292834891 +2013-09-13 14:00:00,4481.115264797508 +2013-09-13 15:00:00,4542.090342679127 +2013-09-13 16:00:00,4623.3644859813085 +2013-09-13 17:00:00,4552.557632398754 +2013-09-13 18:00:00,4425.6978193146415 +2013-09-13 19:00:00,4363.489096573208 +2013-09-13 20:00:00,4311.336448598131 +2013-09-13 21:00:00,4015.2180685358258 +2013-09-13 22:00:00,3757.9003115264795 +2013-09-13 23:00:00,3075.6947040498444 +2013-09-14 00:00:00,2124.214953271028 +2013-09-14 01:00:00,1580.380062305296 +2013-09-14 02:00:00,1499.0685358255453 +2013-09-14 03:00:00,1375.5109034267912 +2013-09-14 04:00:00,1357.8099688473521 +2013-09-14 05:00:00,1416.563862928349 +2013-09-14 06:00:00,1622.3707165109033 +2013-09-14 07:00:00,1742.006230529595 +2013-09-14 08:00:00,1946.1246105919004 +2013-09-14 09:00:00,3113.398753894081 +2013-09-14 10:00:00,3646.233644859813 +2013-09-14 11:00:00,3994.1682242990655 +2013-09-14 12:00:00,4102.554517133956 +2013-09-14 13:00:00,4220.5669781931465 +2013-09-14 14:00:00,4253.193146417446 +2013-09-14 15:00:00,4314.065420560748 +2013-09-14 16:00:00,4390.691588785046 +2013-09-14 17:00:00,4396.115264797508 +2013-09-14 18:00:00,4323.825545171339 +2013-09-14 19:00:00,4116.588785046729 +2013-09-14 20:00:00,4090.127725856698 +2013-09-14 21:00:00,3853.8380062305296 +2013-09-14 22:00:00,3551.5171339563863 +2013-09-14 23:00:00,3001.314641744548 +2013-09-15 00:00:00,1972.7570093457944 +2013-09-15 01:00:00,1570.3520249221183 +2013-09-15 02:00:00,1472.0093457943926 +2013-09-15 03:00:00,1409.8099688473521 +2013-09-15 04:00:00,1336.4672897196263 +2013-09-15 05:00:00,1338.454828660436 +2013-09-15 06:00:00,1554.8878504672898 +2013-09-15 07:00:00,1708.03738317757 +2013-09-15 08:00:00,1866.3052959501558 +2013-09-15 09:00:00,2917.676012461059 +2013-09-15 10:00:00,3525.6822429906542 +2013-09-15 11:00:00,3893.5981308411215 +2013-09-15 12:00:00,4019.7757009345796 +2013-09-15 13:00:00,4171.077881619938 +2013-09-15 14:00:00,4210.604361370716 +2013-09-15 15:00:00,4139.040498442368 +2013-09-15 16:00:00,4172.5638629283485 +2013-09-15 17:00:00,4194.85046728972 +2013-09-15 18:00:00,4164.613707165109 +2013-09-15 19:00:00,4114.389408099689 +2013-09-15 20:00:00,4132.252336448598 +2013-09-15 21:00:00,3821.728971962617 +2013-09-15 22:00:00,3375.190031152648 +2013-09-15 23:00:00,2706.221183800623 +2013-09-16 00:00:00,1821.6884735202493 +2013-09-16 01:00:00,1409.4143302180685 +2013-09-16 02:00:00,1333.4953271028037 +2013-09-16 03:00:00,1317.816199376947 +2013-09-16 04:00:00,1328.7943925233644 +2013-09-16 05:00:00,1355.0155763239875 +2013-09-16 06:00:00,1540.4641744548287 +2013-09-16 07:00:00,1670.7165109034268 +2013-09-16 08:00:00,1854.367601246106 +2013-09-16 09:00:00,2755.255451713396 +2013-09-16 10:00:00,3517.9844236760123 +2013-09-16 11:00:00,3762.1557632398753 +2013-09-16 12:00:00,3918.0342679127725 +2013-09-16 13:00:00,4103.725856697819 +2013-09-16 14:00:00,4253.0996884735205 +2013-09-16 15:00:00,4345.797507788162 +2013-09-16 16:00:00,4302.866043613707 +2013-09-16 17:00:00,4372.744548286604 +2013-09-16 18:00:00,4175.5669781931465 +2013-09-16 19:00:00,3983.239875389408 +2013-09-16 20:00:00,3881.903426791277 +2013-09-16 21:00:00,3722.190031152648 +2013-09-16 22:00:00,3292.510903426791 +2013-09-16 23:00:00,2580.3582554517134 +2013-09-17 00:00:00,1825.006230529595 +2013-09-17 01:00:00,1472.4859813084113 +2013-09-17 02:00:00,1375.96261682243 +2013-09-17 03:00:00,1341.6448598130842 +2013-09-17 04:00:00,1344.5545171339563 +2013-09-17 05:00:00,1387.8940809968847 +2013-09-17 06:00:00,1557.2554517133956 +2013-09-17 07:00:00,1731.361370716511 +2013-09-17 08:00:00,1909.2772585669782 +2013-09-17 09:00:00,2665.644859813084 +2013-09-17 10:00:00,3436.8006230529595 +2013-09-17 11:00:00,3638.7414330218066 +2013-09-17 12:00:00,3802.707165109034 +2013-09-17 13:00:00,4027.330218068536 +2013-09-17 14:00:00,4106.6978193146415 +2013-09-17 15:00:00,4116.339563862928 +2013-09-17 16:00:00,4112.707165109035 +2013-09-17 17:00:00,4102.557632398754 +2013-09-17 18:00:00,3976.264797507788 +2013-09-17 19:00:00,3872.1308411214955 +2013-09-17 20:00:00,3805.785046728972 +2013-09-17 21:00:00,3626.3582554517134 +2013-09-17 22:00:00,3303.271028037383 +2013-09-17 23:00:00,2556.2492211838007 +2013-09-18 00:00:00,1757.417445482866 +2013-09-18 01:00:00,1403.576323987539 +2013-09-18 02:00:00,1334.1806853582555 +2013-09-18 03:00:00,1303.9781931464174 +2013-09-18 04:00:00,1307.7725856697818 +2013-09-18 05:00:00,1350.6168224299065 +2013-09-18 06:00:00,1531.9657320872275 +2013-09-18 07:00:00,1737.3271028037384 +2013-09-18 08:00:00,1907.1059190031153 +2013-09-18 09:00:00,2650.5077881619936 +2013-09-18 10:00:00,3364.152647975078 +2013-09-18 11:00:00,3649.9439252336447 +2013-09-18 12:00:00,3813.355140186916 +2013-09-18 13:00:00,3894.1090342679126 +2013-09-18 14:00:00,3890.570093457944 +2013-09-18 15:00:00,4087.1370716510905 +2013-09-18 16:00:00,4076.5856697819313 +2013-09-18 17:00:00,4035.601246105919 +2013-09-18 18:00:00,3937.956386292835 +2013-09-18 19:00:00,3800.7102803738317 +2013-09-18 20:00:00,3833.5015576323985 +2013-09-18 21:00:00,3714.2242990654204 +2013-09-18 22:00:00,3325.919003115265 +2013-09-18 23:00:00,2544.330218068536 +2013-09-19 00:00:00,1761.5233644859813 +2013-09-19 01:00:00,1393.4018691588785 +2013-09-19 02:00:00,1349.2741433021806 +2013-09-19 03:00:00,1325.3894080996886 +2013-09-19 04:00:00,1338.361370716511 +2013-09-19 05:00:00,1369.6853582554518 +2013-09-19 06:00:00,1577.981308411215 +2013-09-19 07:00:00,1742.7102803738317 +2013-09-19 08:00:00,1924.4080996884736 +2013-09-19 09:00:00,2608.165109034268 +2013-09-19 10:00:00,3279.227414330218 +2013-09-19 11:00:00,3633.105919003115 +2013-09-19 12:00:00,3756.3177570093458 +2013-09-19 13:00:00,3985.7819314641742 +2013-09-19 14:00:00,4033.778816199377 +2013-09-19 15:00:00,4145.448598130841 +2013-09-19 16:00:00,4159.5046728971965 +2013-09-19 17:00:00,4109.196261682243 +2013-09-19 18:00:00,4061.4392523364486 +2013-09-19 19:00:00,3860.557632398754 +2013-09-19 20:00:00,3907.336448598131 +2013-09-19 21:00:00,3747.448598130841 +2013-09-19 22:00:00,3307.9595015576324 +2013-09-19 23:00:00,2676.006230529595 +2013-09-20 00:00:00,1843.1682242990655 +2013-09-20 01:00:00,1450.797507788162 +2013-09-20 02:00:00,1408.834890965732 +2013-09-20 03:00:00,1380.4953271028037 +2013-09-20 04:00:00,1398.196261682243 +2013-09-20 05:00:00,1424.803738317757 +2013-09-20 06:00:00,1601.3520249221183 +2013-09-20 07:00:00,1795.380062305296 +2013-09-20 08:00:00,1965.2242990654206 +2013-09-20 09:00:00,2664.6230529595014 +2013-09-20 10:00:00,3552.6604361370714 +2013-09-20 11:00:00,3926.392523364486 +2013-09-20 12:00:00,4088.8847352024923 +2013-09-20 13:00:00,4254.529595015576 +2013-09-20 14:00:00,4210.654205607477 +2013-09-20 15:00:00,4432.090342679127 +2013-09-20 16:00:00,4507.623052959501 +2013-09-20 17:00:00,4472.8317757009345 +2013-09-20 18:00:00,4302.202492211838 +2013-09-20 19:00:00,4232.348909657321 +2013-09-20 20:00:00,4106.158878504673 +2013-09-20 21:00:00,3947.9003115264795 +2013-09-20 22:00:00,3597.7320872274145 +2013-09-20 23:00:00,2922.6043613707166 +2013-09-21 00:00:00,1895.5202492211838 +2013-09-21 01:00:00,1580.760124610592 +2013-09-21 02:00:00,1481.5140186915887 +2013-09-21 03:00:00,1383.0778816199377 +2013-09-21 04:00:00,1360.5700934579438 +2013-09-21 05:00:00,1389.9376947040498 +2013-09-21 06:00:00,1605.0155763239875 +2013-09-21 07:00:00,1786.386292834891 +2013-09-21 08:00:00,1964.8442367601247 +2013-09-21 09:00:00,2775.4828660436137 +2013-09-21 10:00:00,3614.090342679128 +2013-09-21 11:00:00,4306.601246105919 +2013-09-21 12:00:00,4389.9034267912775 +2013-09-21 13:00:00,4422.86292834891 +2013-09-21 14:00:00,4425.336448598131 +2013-09-21 15:00:00,4514.289719626168 +2013-09-21 16:00:00,4533.199376947041 +2013-09-21 17:00:00,4451.221183800623 +2013-09-21 18:00:00,4418.408099688473 +2013-09-21 19:00:00,4255.370716510904 +2013-09-21 20:00:00,4187.632398753894 +2013-09-21 21:00:00,3979.753894080997 +2013-09-21 22:00:00,3638.0467289719627 +2013-09-21 23:00:00,2825.816199376947 +2013-09-22 00:00:00,1884.4517133956385 +2013-09-22 01:00:00,1566.0716510903426 +2013-09-22 02:00:00,1495.5981308411215 +2013-09-22 03:00:00,1437.4143302180685 +2013-09-22 04:00:00,1346.4517133956385 +2013-09-22 05:00:00,1390.2834890965732 +2013-09-22 06:00:00,1570.7538940809968 +2013-09-22 07:00:00,1711.0809968847352 +2013-09-22 08:00:00,1916.6261682242991 +2013-09-22 09:00:00,2752.4704049844236 +2013-09-22 10:00:00,3743.6666666666665 +2013-09-22 11:00:00,4120.897196261682 +2013-09-22 12:00:00,4267.822429906542 +2013-09-22 13:00:00,4328.794392523365 +2013-09-22 14:00:00,4262.78816199377 +2013-09-22 15:00:00,4297.800623052959 +2013-09-22 16:00:00,4340.280373831775 +2013-09-22 17:00:00,4300.607476635514 +2013-09-22 18:00:00,4190.342679127726 +2013-09-22 19:00:00,4107.0996884735205 +2013-09-22 20:00:00,4140.688473520249 +2013-09-22 21:00:00,3919.4205607476633 +2013-09-22 22:00:00,3510.0155763239877 +2013-09-22 23:00:00,2693.4548286604363 +2013-09-23 00:00:00,1755.0 +2013-09-23 01:00:00,1424.3738317757009 +2013-09-23 02:00:00,1392.0498442367602 +2013-09-23 03:00:00,1356.1869158878505 +2013-09-23 04:00:00,1373.747663551402 +2013-09-23 05:00:00,1404.526479750779 +2013-09-23 06:00:00,1592.9844236760125 +2013-09-23 07:00:00,1767.8878504672898 +2013-09-23 08:00:00,1940.766355140187 +2013-09-23 09:00:00,2693.5295950155764 +2013-09-23 10:00:00,3780.177570093458 +2013-09-23 11:00:00,3997.2429906542056 +2013-09-23 12:00:00,4053.3831775700933 +2013-09-23 13:00:00,4140.143302180685 +2013-09-23 14:00:00,4129.376947040499 +2013-09-23 15:00:00,4266.757009345794 +2013-09-23 16:00:00,4264.3613707165105 +2013-09-23 17:00:00,4276.4953271028035 +2013-09-23 18:00:00,4145.1682242990655 +2013-09-23 19:00:00,4083.4641744548285 +2013-09-23 20:00:00,4008.3208722741433 +2013-09-23 21:00:00,3897.404984423676 +2013-09-23 22:00:00,3520.8816199376947 +2013-09-23 23:00:00,2744.0778816199377 +2013-09-24 00:00:00,1839.361370716511 +2013-09-24 01:00:00,1497.3302180685357 +2013-09-24 02:00:00,1458.5794392523364 +2013-09-24 03:00:00,1412.9376947040498 +2013-09-24 04:00:00,1427.7414330218069 +2013-09-24 05:00:00,1465.1433021806854 +2013-09-24 06:00:00,1643.7227414330218 +2013-09-24 07:00:00,1833.8566978193146 +2013-09-24 08:00:00,2006.473520249221 +2013-09-24 09:00:00,2657.461059190031 +2013-09-24 10:00:00,3475.2616822429904 +2013-09-24 11:00:00,3744.1028037383176 +2013-09-24 12:00:00,3882.479750778816 +2013-09-24 13:00:00,3945.2803738317757 +2013-09-24 14:00:00,3981.292834890966 +2013-09-24 15:00:00,3928.1619937694704 +2013-09-24 16:00:00,3986.0498442367602 +2013-09-24 17:00:00,3968.97507788162 +2013-09-24 18:00:00,3823.3894080996884 +2013-09-24 19:00:00,3823.4143302180687 +2013-09-24 20:00:00,3803.1557632398753 +2013-09-24 21:00:00,3681.4704049844236 +2013-09-24 22:00:00,3317.3489096573207 +2013-09-24 23:00:00,2612.11214953271 +2013-09-25 00:00:00,1793.5358255451713 +2013-09-25 01:00:00,1482.1370716510903 +2013-09-25 02:00:00,1436.2274143302182 +2013-09-25 03:00:00,1403.0249221183801 +2013-09-25 04:00:00,1412.1495327102805 +2013-09-25 05:00:00,1443.853582554517 +2013-09-25 06:00:00,1637.8971962616822 +2013-09-25 07:00:00,1817.031152647975 +2013-09-25 08:00:00,2009.386292834891 +2013-09-25 09:00:00,2747.557632398754 +2013-09-25 10:00:00,3445.1557632398753 +2013-09-25 11:00:00,3699.5015576323985 +2013-09-25 12:00:00,3738.0 +2013-09-25 13:00:00,3839.8380062305296 +2013-09-25 14:00:00,3921.744548286604 +2013-09-25 15:00:00,3859.127725856698 +2013-09-25 16:00:00,3905.8317757009345 +2013-09-25 17:00:00,3856.467289719626 +2013-09-25 18:00:00,3799.97507788162 +2013-09-25 19:00:00,3728.538940809969 +2013-09-25 20:00:00,3722.3800623052957 +2013-09-25 21:00:00,3618.3426791277257 +2013-09-25 22:00:00,3271.0218068535823 +2013-09-25 23:00:00,2464.9595015576324 +2013-09-26 00:00:00,1767.5700934579438 +2013-09-26 01:00:00,1427.7165109034268 +2013-09-26 02:00:00,1377.6728971962616 +2013-09-26 03:00:00,1353.0996884735202 +2013-09-26 04:00:00,1369.3707165109033 +2013-09-26 05:00:00,1396.6043613707166 +2013-09-26 06:00:00,1584.834890965732 +2013-09-26 07:00:00,1788.367601246106 +2013-09-26 08:00:00,1935.1869158878505 +2013-09-26 09:00:00,2647.3489096573207 +2013-09-26 10:00:00,3467.8691588785045 +2013-09-26 11:00:00,3638.1370716510905 +2013-09-26 12:00:00,3628.457943925234 +2013-09-26 13:00:00,3787.429906542056 +2013-09-26 14:00:00,3767.5669781931465 +2013-09-26 15:00:00,3904.97507788162 +2013-09-26 16:00:00,3939.8068535825546 +2013-09-26 17:00:00,3880.7476635514017 +2013-09-26 18:00:00,3820.3115264797507 +2013-09-26 19:00:00,3849.143302180685 +2013-09-26 20:00:00,3845.5794392523367 +2013-09-26 21:00:00,3734.1183800623053 +2013-09-26 22:00:00,3459.3582554517134 +2013-09-26 23:00:00,2693.190031152648 +2013-09-27 00:00:00,1814.9501557632398 +2013-09-27 01:00:00,1474.423676012461 +2013-09-27 02:00:00,1424.8785046728972 +2013-09-27 03:00:00,1397.3644859813085 +2013-09-27 04:00:00,1408.5856697819315 +2013-09-27 05:00:00,1418.8847352024923 +2013-09-27 06:00:00,1630.6355140186915 +2013-09-27 07:00:00,1817.582554517134 +2013-09-27 08:00:00,2043.9127725856697 +2013-09-27 09:00:00,2865.909657320872 +2013-09-27 10:00:00,3620.080996884735 +2013-09-27 11:00:00,3750.031152647975 +2013-09-27 12:00:00,3768.9439252336447 +2013-09-27 13:00:00,3795.4174454828662 +2013-09-27 14:00:00,3806.6728971962616 +2013-09-27 15:00:00,3807.940809968847 +2013-09-27 16:00:00,3850.7414330218066 +2013-09-27 17:00:00,3840.5732087227416 +2013-09-27 18:00:00,3833.2679127725855 +2013-09-27 19:00:00,3847.2616822429904 +2013-09-27 20:00:00,3800.0872274143303 +2013-09-27 21:00:00,3754.2834890965732 +2013-09-27 22:00:00,3455.9501557632398 +2013-09-27 23:00:00,2746.221183800623 +2013-09-28 00:00:00,1857.0996884735202 +2013-09-28 01:00:00,1547.5420560747664 +2013-09-28 02:00:00,1482.797507788162 +2013-09-28 03:00:00,1385.3052959501558 +2013-09-28 04:00:00,1346.4205607476636 +2013-09-28 05:00:00,1371.7196261682243 +2013-09-28 06:00:00,1557.7943925233644 +2013-09-28 07:00:00,1762.526479750779 +2013-09-28 08:00:00,1919.196261682243 +2013-09-28 09:00:00,2648.8971962616824 +2013-09-28 10:00:00,3552.423676012461 +2013-09-28 11:00:00,3650.2803738317757 +2013-09-28 12:00:00,3727.0934579439254 +2013-09-28 13:00:00,3698.557632398754 +2013-09-28 14:00:00,3722.8816199376947 +2013-09-28 15:00:00,3819.190031152648 +2013-09-28 16:00:00,3841.0560747663553 +2013-09-28 17:00:00,3836.5732087227416 +2013-09-28 18:00:00,3813.7196261682243 +2013-09-28 19:00:00,3769.11214953271 +2013-09-28 20:00:00,3789.4454828660437 +2013-09-28 21:00:00,3669.6791277258567 +2013-09-28 22:00:00,3395.856697819315 +2013-09-28 23:00:00,2704.8255451713394 +2013-09-29 00:00:00,1856.4610591900312 +2013-09-29 01:00:00,1539.5700934579438 +2013-09-29 02:00:00,1473.5140186915887 +2013-09-29 03:00:00,1404.6292834890967 +2013-09-29 04:00:00,1317.4018691588785 +2013-09-29 05:00:00,1355.576323987539 +2013-09-29 06:00:00,1536.6105919003114 +2013-09-29 07:00:00,1710.6479750778817 +2013-09-29 08:00:00,1860.7071651090343 +2013-09-29 09:00:00,2601.8909657320874 +2013-09-29 10:00:00,3381.7165109034268 +2013-09-29 11:00:00,3618.6199376947043 +2013-09-29 12:00:00,3577.0155763239877 +2013-09-29 13:00:00,3583.551401869159 +2013-09-29 14:00:00,3626.4859813084113 +2013-09-29 15:00:00,3528.9439252336447 +2013-09-29 16:00:00,3563.9283489096574 +2013-09-29 17:00:00,3632.4766355140187 +2013-09-29 18:00:00,3605.271028037383 +2013-09-29 19:00:00,3742.707165109034 +2013-09-29 20:00:00,3686.588785046729 +2013-09-29 21:00:00,3622.93769470405 +2013-09-29 22:00:00,3279.538940809969 +2013-09-29 23:00:00,2630.127725856698 +2013-09-30 00:00:00,1735.4423676012461 +2013-09-30 01:00:00,1369.2897196261683 +2013-09-30 02:00:00,1326.2305295950155 +2013-09-30 03:00:00,1308.380062305296 +2013-09-30 04:00:00,1331.5015576323988 +2013-09-30 05:00:00,1381.2461059190032 +2013-09-30 06:00:00,1583.6479750778817 +2013-09-30 07:00:00,1731.5420560747664 +2013-09-30 08:00:00,1950.595015576324 +2013-09-30 09:00:00,2723.8317757009345 +2013-09-30 10:00:00,3358.663551401869 +2013-09-30 11:00:00,3686.330218068536 +2013-09-30 12:00:00,3716.196261682243 +2013-09-30 13:00:00,3807.8380062305296 +2013-09-30 14:00:00,3812.538940809969 +2013-09-30 15:00:00,3823.165109034268 +2013-09-30 16:00:00,3848.6355140186915 +2013-09-30 17:00:00,3879.3831775700933 +2013-09-30 18:00:00,3839.6604361370714 +2013-09-30 19:00:00,3946.0280373831774 +2013-09-30 20:00:00,3899.766355140187 +2013-09-30 21:00:00,3687.613707165109 +2013-09-30 22:00:00,3447.532710280374 +2013-09-30 23:00:00,2656.202492211838 +2013-10-01 00:00:00,1806.993769470405 +2013-10-01 01:00:00,1441.1339563862928 +2013-10-01 02:00:00,1372.1900311526479 +2013-10-01 03:00:00,1335.7165109034268 +2013-10-01 04:00:00,1363.0809968847352 +2013-10-01 05:00:00,1412.2772585669782 +2013-10-01 06:00:00,1617.7320872274142 +2013-10-01 07:00:00,1796.018691588785 +2013-10-01 08:00:00,1979.2866043613708 +2013-10-01 09:00:00,2634.8816199376947 +2013-10-01 10:00:00,3436.0093457943926 +2013-10-01 11:00:00,3676.2056074766356 +2013-10-01 12:00:00,3695.5140186915887 +2013-10-01 13:00:00,3676.467289719626 +2013-10-01 14:00:00,3658.6292834890965 +2013-10-01 15:00:00,3701.489096573209 +2013-10-01 16:00:00,3812.601246105919 +2013-10-01 17:00:00,3760.3707165109035 +2013-10-01 18:00:00,3764.4330218068535 +2013-10-01 19:00:00,3821.707165109034 +2013-10-01 20:00:00,3785.171339563863 +2013-10-01 21:00:00,3629.744548286604 +2013-10-01 22:00:00,3315.143302180685 +2013-10-01 23:00:00,2569.96261682243 +2013-10-02 00:00:00,1737.9034267912773 +2013-10-02 01:00:00,1391.3177570093458 +2013-10-02 02:00:00,1352.8473520249222 +2013-10-02 03:00:00,1335.202492211838 +2013-10-02 04:00:00,1349.006230529595 +2013-10-02 05:00:00,1378.2180685358255 +2013-10-02 06:00:00,1570.619937694704 +2013-10-02 07:00:00,1775.4579439252336 +2013-10-02 08:00:00,1924.8411214953271 +2013-10-02 09:00:00,2676.797507788162 +2013-10-02 10:00:00,3106.392523364486 +2013-10-02 11:00:00,3442.2523364485983 +2013-10-02 12:00:00,3558.809968847352 +2013-10-02 13:00:00,3627.8629283489095 +2013-10-02 14:00:00,3576.4174454828662 +2013-10-02 15:00:00,3549.302180685358 +2013-10-02 16:00:00,3562.246105919003 +2013-10-02 17:00:00,3581.856697819315 +2013-10-02 18:00:00,3601.878504672897 +2013-10-02 19:00:00,3627.9221183800623 +2013-10-02 20:00:00,3559.0872274143303 +2013-10-02 21:00:00,3474.8068535825546 +2013-10-02 22:00:00,3179.0467289719627 +2013-10-02 23:00:00,2463.246105919003 +2013-10-03 00:00:00,1757.392523364486 +2013-10-03 01:00:00,1422.968847352025 +2013-10-03 02:00:00,1365.8847352024923 +2013-10-03 03:00:00,1350.8473520249222 +2013-10-03 04:00:00,1360.2429906542056 +2013-10-03 05:00:00,1377.252336448598 +2013-10-03 06:00:00,1566.3395638629283 +2013-10-03 07:00:00,1767.3644859813085 +2013-10-03 08:00:00,1977.8473520249222 +2013-10-03 09:00:00,2671.2803738317757 +2013-10-03 10:00:00,3504.931464174455 +2013-10-03 11:00:00,3657.9127725856697 +2013-10-03 12:00:00,3706.9439252336447 +2013-10-03 13:00:00,3686.3177570093458 +2013-10-03 14:00:00,3722.196261682243 +2013-10-03 15:00:00,3690.7632398753894 +2013-10-03 16:00:00,3711.3395638629286 +2013-10-03 17:00:00,3729.6043613707166 +2013-10-03 18:00:00,3666.5856697819313 +2013-10-03 19:00:00,3675.386292834891 +2013-10-03 20:00:00,3698.2056074766356 +2013-10-03 21:00:00,3580.0498442367602 +2013-10-03 22:00:00,3284.6947040498444 +2013-10-03 23:00:00,2524.0560747663553 +2013-10-04 00:00:00,1741.2616822429907 +2013-10-04 01:00:00,1385.619937694704 +2013-10-04 02:00:00,1333.3021806853583 +2013-10-04 03:00:00,1312.8566978193146 +2013-10-04 04:00:00,1325.5981308411215 +2013-10-04 05:00:00,1370.4797507788162 +2013-10-04 06:00:00,1566.9408099688474 +2013-10-04 07:00:00,1765.588785046729 +2013-10-04 08:00:00,1915.6448598130842 +2013-10-04 09:00:00,2653.510903426791 +2013-10-04 10:00:00,3333.3956386292834 +2013-10-04 11:00:00,3476.7819314641742 +2013-10-04 12:00:00,3563.314641744548 +2013-10-04 13:00:00,3639.0498442367602 +2013-10-04 14:00:00,3667.3769470404986 +2013-10-04 15:00:00,3633.9968847352025 +2013-10-04 16:00:00,3589.6822429906542 +2013-10-04 17:00:00,3589.429906542056 +2013-10-04 18:00:00,3558.6417445482866 +2013-10-04 19:00:00,3597.246105919003 +2013-10-04 20:00:00,3538.772585669782 +2013-10-04 21:00:00,3410.7165109034268 +2013-10-04 22:00:00,3153.277258566978 +2013-10-04 23:00:00,2582.221183800623 +2013-10-05 00:00:00,1784.0934579439252 +2013-10-05 01:00:00,1486.1308411214952 +2013-10-05 02:00:00,1402.1900311526479 +2013-10-05 03:00:00,1318.6947040498442 +2013-10-05 04:00:00,1281.638629283489 +2013-10-05 05:00:00,1329.2990654205607 +2013-10-05 06:00:00,1515.582554517134 +2013-10-05 07:00:00,1718.0809968847352 +2013-10-05 08:00:00,1854.619937694704 +2013-10-05 09:00:00,2295.1152647975077 +2013-10-05 10:00:00,2654.5171339563863 +2013-10-05 11:00:00,3544.707165109034 +2013-10-05 12:00:00,3504.190031152648 +2013-10-05 13:00:00,3534.080996884735 +2013-10-05 14:00:00,3588.88785046729 +2013-10-05 15:00:00,3614.0093457943926 +2013-10-05 16:00:00,3627.4454828660437 +2013-10-05 17:00:00,3657.227414330218 +2013-10-05 18:00:00,3584.467289719626 +2013-10-05 19:00:00,3573.557632398754 +2013-10-05 20:00:00,3577.473520249221 +2013-10-05 21:00:00,3408.5981308411215 +2013-10-05 22:00:00,3112.940809968847 +2013-10-05 23:00:00,2374.8442367601247 +2013-10-06 00:00:00,1711.3271028037384 +2013-10-06 01:00:00,1456.1246105919004 +2013-10-06 02:00:00,1392.7320872274142 +2013-10-06 03:00:00,1348.4672897196263 +2013-10-06 04:00:00,1261.473520249221 +2013-10-06 05:00:00,1308.1869158878505 +2013-10-06 06:00:00,1483.9376947040498 +2013-10-06 07:00:00,1673.9968847352025 +2013-10-06 08:00:00,1800.9314641744547 +2013-10-06 09:00:00,2283.8847352024923 +2013-10-06 10:00:00,3277.6168224299067 +2013-10-06 11:00:00,3354.1152647975077 +2013-10-06 12:00:00,3521.88785046729 +2013-10-06 13:00:00,3519.0218068535823 +2013-10-06 14:00:00,3526.676012461059 +2013-10-06 15:00:00,3630.697819314642 +2013-10-06 16:00:00,3720.442367601246 +2013-10-06 17:00:00,3668.2305295950155 +2013-10-06 18:00:00,3565.6230529595014 +2013-10-06 19:00:00,3607.822429906542 +2013-10-06 20:00:00,3544.3489096573207 +2013-10-06 21:00:00,3383.728971962617 +2013-10-06 22:00:00,2995.299065420561 +2013-10-06 23:00:00,2433.8006230529595 +2013-10-07 00:00:00,1720.2647975077882 +2013-10-07 01:00:00,1389.7352024922118 +2013-10-07 02:00:00,1312.0155763239875 +2013-10-07 03:00:00,1299.3644859813085 +2013-10-07 04:00:00,1319.7320872274142 +2013-10-07 05:00:00,1338.018691588785 +2013-10-07 06:00:00,1511.6978193146417 +2013-10-07 07:00:00,1717.8286604361372 +2013-10-07 08:00:00,1856.1619937694704 +2013-10-07 09:00:00,2312.9439252336447 +2013-10-07 10:00:00,3026.7102803738317 +2013-10-07 11:00:00,3478.5919003115264 +2013-10-07 12:00:00,3356.489096573209 +2013-10-07 13:00:00,3511.152647975078 +2013-10-07 14:00:00,3530.9595015576324 +2013-10-07 15:00:00,3630.2492211838007 +2013-10-07 16:00:00,3592.504672897196 +2013-10-07 17:00:00,3583.06230529595 +2013-10-07 18:00:00,3517.202492211838 +2013-10-07 19:00:00,3511.495327102804 +2013-10-07 20:00:00,3485.6417445482866 +2013-10-07 21:00:00,3339.940809968847 +2013-10-07 22:00:00,2990.8909657320874 +2013-10-07 23:00:00,2411.841121495327 +2013-10-08 00:00:00,1765.3956386292834 +2013-10-08 01:00:00,1422.1744548286604 +2013-10-08 02:00:00,1352.6760124610591 +2013-10-08 03:00:00,1324.1806853582555 +2013-10-08 04:00:00,1329.9190031152648 +2013-10-08 05:00:00,1381.454828660436 +2013-10-08 06:00:00,1553.367601246106 +2013-10-08 07:00:00,1704.0218068535826 +2013-10-08 08:00:00,1839.7632398753894 +2013-10-08 09:00:00,2545.133956386293 +2013-10-08 10:00:00,3157.3177570093458 +2013-10-08 11:00:00,3449.121495327103 +2013-10-08 12:00:00,3551.3520249221183 +2013-10-08 13:00:00,3729.080996884735 +2013-10-08 14:00:00,3796.0560747663553 +2013-10-08 15:00:00,3804.866043613707 +2013-10-08 16:00:00,3770.0031152647975 +2013-10-08 17:00:00,3783.06230529595 +2013-10-08 18:00:00,3633.3052959501556 +2013-10-08 19:00:00,3647.8193146417448 +2013-10-08 20:00:00,3604.968847352025 +2013-10-08 21:00:00,3489.7165109034268 +2013-10-08 22:00:00,3094.8006230529595 +2013-10-08 23:00:00,2385.461059190031 +2013-10-09 00:00:00,1710.0685358255453 +2013-10-09 01:00:00,1382.98753894081 +2013-10-09 02:00:00,1320.2585669781931 +2013-10-09 03:00:00,1293.3177570093458 +2013-10-09 04:00:00,1296.2242990654206 +2013-10-09 05:00:00,1353.5015576323988 +2013-10-09 06:00:00,1532.5233644859813 +2013-10-09 07:00:00,1713.993769470405 +2013-10-09 08:00:00,1863.588785046729 +2013-10-09 09:00:00,2512.638629283489 +2013-10-09 10:00:00,3199.753894080997 +2013-10-09 11:00:00,3417.6947040498444 +2013-10-09 12:00:00,3524.190031152648 +2013-10-09 13:00:00,3627.7694704049845 +2013-10-09 14:00:00,3705.4984423676015 +2013-10-09 15:00:00,3630.4641744548285 +2013-10-09 16:00:00,3668.411214953271 +2013-10-09 17:00:00,3636.292834890966 +2013-10-09 18:00:00,3598.7476635514017 +2013-10-09 19:00:00,3605.165109034268 +2013-10-09 20:00:00,3597.271028037383 +2013-10-09 21:00:00,3440.5856697819313 +2013-10-09 22:00:00,3023.791277258567 +2013-10-09 23:00:00,2248.9221183800623 +2013-10-10 00:00:00,1681.1900311526479 +2013-10-10 01:00:00,1349.8660436137072 +2013-10-10 02:00:00,1296.8286604361372 +2013-10-10 03:00:00,1272.8317757009345 +2013-10-10 04:00:00,1283.0654205607477 +2013-10-10 05:00:00,1320.968847352025 +2013-10-10 06:00:00,1512.7414330218069 +2013-10-10 07:00:00,1706.0747663551401 +2013-10-10 08:00:00,1834.766355140187 +2013-10-10 09:00:00,2581.5545171339563 +2013-10-10 10:00:00,3336.8006230529595 +2013-10-10 11:00:00,3389.2367601246106 +2013-10-10 12:00:00,3447.8442367601247 +2013-10-10 13:00:00,3587.1464174454827 +2013-10-10 14:00:00,3652.909657320872 +2013-10-10 15:00:00,3663.3177570093458 +2013-10-10 16:00:00,3678.778816199377 +2013-10-10 17:00:00,3652.255451713396 +2013-10-10 18:00:00,3620.9532710280373 +2013-10-10 19:00:00,3661.697819314642 +2013-10-10 20:00:00,3617.133956386293 +2013-10-10 21:00:00,3501.2242990654204 +2013-10-10 22:00:00,3031.5825545171338 +2013-10-10 23:00:00,2351.361370716511 +2013-10-11 00:00:00,1688.6261682242991 +2013-10-11 01:00:00,1358.943925233645 +2013-10-11 02:00:00,1300.7133956386292 +2013-10-11 03:00:00,1264.9034267912773 +2013-10-11 04:00:00,1270.2056074766356 +2013-10-11 05:00:00,1326.8380062305296 +2013-10-11 06:00:00,1537.760124610592 +2013-10-11 07:00:00,1711.4797507788162 +2013-10-11 08:00:00,1841.9968847352025 +2013-10-11 09:00:00,2476.570093457944 +2013-10-11 10:00:00,3185.323987538941 +2013-10-11 11:00:00,3332.1464174454827 +2013-10-11 12:00:00,3421.0031152647975 +2013-10-11 13:00:00,3498.0560747663553 +2013-10-11 14:00:00,3538.0996884735205 +2013-10-11 15:00:00,3650.2897196261683 +2013-10-11 16:00:00,3651.638629283489 +2013-10-11 17:00:00,3638.9501557632398 +2013-10-11 18:00:00,3515.841121495327 +2013-10-11 19:00:00,3511.239875389408 +2013-10-11 20:00:00,3478.4143302180687 +2013-10-11 21:00:00,3355.993769470405 +2013-10-11 22:00:00,3018.4454828660437 +2013-10-11 23:00:00,2384.595015576324 +2013-10-12 00:00:00,1653.4890965732088 +2013-10-12 01:00:00,1363.8442367601247 +2013-10-12 02:00:00,1332.7757009345794 +2013-10-12 03:00:00,1314.8473520249222 +2013-10-12 04:00:00,1274.619937694704 +2013-10-12 05:00:00,1316.3364485981308 +2013-10-12 06:00:00,1505.3146417445482 +2013-10-12 07:00:00,1709.6417445482866 +2013-10-12 08:00:00,1832.9657320872275 +2013-10-12 09:00:00,2510.2492211838007 +2013-10-12 10:00:00,3023.423676012461 +2013-10-12 11:00:00,3095.956386292835 +2013-10-12 12:00:00,3176.6791277258567 +2013-10-12 13:00:00,3225.9345794392525 +2013-10-12 14:00:00,3280.7383177570096 +2013-10-12 15:00:00,3308.1557632398753 +2013-10-12 16:00:00,3277.1495327102803 +2013-10-12 17:00:00,3293.3115264797507 +2013-10-12 18:00:00,3249.685358255452 +2013-10-12 19:00:00,3347.398753894081 +2013-10-12 20:00:00,3326.068535825545 +2013-10-12 21:00:00,3158.1557632398753 +2013-10-12 22:00:00,2938.7165109034268 +2013-10-12 23:00:00,2379.6479750778817 +2013-10-13 00:00:00,1730.0654205607477 +2013-10-13 01:00:00,1472.943925233645 +2013-10-13 02:00:00,1399.8411214953271 +2013-10-13 03:00:00,1343.0436137071652 +2013-10-13 04:00:00,1250.0249221183801 +2013-10-13 05:00:00,1279.803738317757 +2013-10-13 06:00:00,1505.2772585669782 +2013-10-13 07:00:00,1620.613707165109 +2013-10-13 08:00:00,1727.1931464174454 +2013-10-13 09:00:00,2435.96261682243 +2013-10-13 10:00:00,2968.1028037383176 +2013-10-13 11:00:00,3103.4922118380064 +2013-10-13 12:00:00,3188.6510903426793 +2013-10-13 13:00:00,3203.785046728972 +2013-10-13 14:00:00,3167.632398753894 +2013-10-13 15:00:00,3324.5233644859813 +2013-10-13 16:00:00,3381.6822429906542 +2013-10-13 17:00:00,3358.8504672897197 +2013-10-13 18:00:00,3404.246105919003 +2013-10-13 19:00:00,3366.6604361370714 +2013-10-13 20:00:00,3387.5140186915887 +2013-10-13 21:00:00,3276.3426791277257 +2013-10-13 22:00:00,2879.271028037383 +2013-10-13 23:00:00,2241.570093457944 +2013-10-14 00:00:00,1653.3738317757009 +2013-10-14 01:00:00,1338.5389408099688 +2013-10-14 02:00:00,1295.1900311526479 +2013-10-14 03:00:00,1283.1401869158879 +2013-10-14 04:00:00,1301.5981308411215 +2013-10-14 05:00:00,1329.5358255451713 +2013-10-14 06:00:00,1481.0965732087227 +2013-10-14 07:00:00,1701.613707165109 +2013-10-14 08:00:00,1823.657320872274 +2013-10-14 09:00:00,2392.7383177570096 +2013-10-14 10:00:00,3106.6822429906542 +2013-10-14 11:00:00,3193.8629283489095 +2013-10-14 12:00:00,3279.8006230529595 +2013-10-14 13:00:00,3333.299065420561 +2013-10-14 14:00:00,3332.3831775700933 +2013-10-14 15:00:00,3376.221183800623 +2013-10-14 16:00:00,3449.398753894081 +2013-10-14 17:00:00,3447.3177570093458 +2013-10-14 18:00:00,3401.052959501558 +2013-10-14 19:00:00,3511.121495327103 +2013-10-14 20:00:00,3445.2585669781934 +2013-10-14 21:00:00,3261.601246105919 +2013-10-14 22:00:00,2920.956386292835 +2013-10-14 23:00:00,2276.816199376947 +2013-10-15 00:00:00,1764.7694704049845 +2013-10-15 01:00:00,1484.6760124610591 +2013-10-15 02:00:00,1402.9719626168223 +2013-10-15 03:00:00,1377.1246105919004 +2013-10-15 04:00:00,1380.0934579439252 +2013-10-15 05:00:00,1419.5046728971963 +2013-10-15 06:00:00,1583.1588785046729 +2013-10-15 07:00:00,1780.4610591900312 +2013-10-15 08:00:00,1921.0654205607477 +2013-10-15 09:00:00,2533.2429906542056 +2013-10-15 10:00:00,3152.277258566978 +2013-10-15 11:00:00,3263.080996884735 +2013-10-15 12:00:00,3400.03738317757 +2013-10-15 13:00:00,3401.2305295950155 +2013-10-15 14:00:00,3412.330218068536 +2013-10-15 15:00:00,3401.0560747663553 +2013-10-15 16:00:00,3479.4330218068535 +2013-10-15 17:00:00,3552.8629283489095 +2013-10-15 18:00:00,3520.8816199376947 +2013-10-15 19:00:00,3563.7383177570096 +2013-10-15 20:00:00,3505.5451713395637 +2013-10-15 21:00:00,3402.557632398754 +2013-10-15 22:00:00,3056.6510903426793 +2013-10-15 23:00:00,2296.7694704049845 +2013-10-16 00:00:00,1712.9221183800623 +2013-10-16 01:00:00,1392.760124610592 +2013-10-16 02:00:00,1341.9283489096574 +2013-10-16 03:00:00,1313.3769470404984 +2013-10-16 04:00:00,1324.3302180685357 +2013-10-16 05:00:00,1365.3707165109033 +2013-10-16 06:00:00,1561.7819314641745 +2013-10-16 07:00:00,1762.9034267912773 +2013-10-16 08:00:00,1912.8816199376947 +2013-10-16 09:00:00,2459.6168224299067 +2013-10-16 10:00:00,3034.6947040498444 +2013-10-16 11:00:00,3184.691588785047 +2013-10-16 12:00:00,3280.797507788162 +2013-10-16 13:00:00,3362.006230529595 +2013-10-16 14:00:00,3403.551401869159 +2013-10-16 15:00:00,3443.467289719626 +2013-10-16 16:00:00,3510.919003115265 +2013-10-16 17:00:00,3497.6822429906542 +2013-10-16 18:00:00,3501.722741433022 +2013-10-16 19:00:00,3483.4548286604363 +2013-10-16 20:00:00,3436.8971962616824 +2013-10-16 21:00:00,3348.429906542056 +2013-10-16 22:00:00,2995.2429906542056 +2013-10-16 23:00:00,2330.5077881619936 +2013-10-17 00:00:00,1723.5482866043615 +2013-10-17 01:00:00,1383.2679127725858 +2013-10-17 02:00:00,1320.7912772585669 +2013-10-17 03:00:00,1302.3115264797507 +2013-10-17 04:00:00,1319.1588785046729 +2013-10-17 05:00:00,1360.5140186915887 +2013-10-17 06:00:00,1530.056074766355 +2013-10-17 07:00:00,1722.993769470405 +2013-10-17 08:00:00,1871.9408099688474 +2013-10-17 09:00:00,2427.489096573209 +2013-10-17 10:00:00,3011.588785046729 +2013-10-17 11:00:00,3355.5607476635514 +2013-10-17 12:00:00,3398.2834890965732 +2013-10-17 13:00:00,3455.208722741433 +2013-10-17 14:00:00,3443.208722741433 +2013-10-17 15:00:00,3446.2367601246106 +2013-10-17 16:00:00,3463.9003115264795 +2013-10-17 17:00:00,3456.286604361371 +2013-10-17 18:00:00,3437.931464174455 +2013-10-17 19:00:00,3502.520249221184 +2013-10-17 20:00:00,3465.7165109034268 +2013-10-17 21:00:00,3369.1993769470405 +2013-10-17 22:00:00,3021.336448598131 +2013-10-17 23:00:00,2330.5981308411215 +2013-10-18 00:00:00,1776.2554517133956 +2013-10-18 01:00:00,1448.342679127726 +2013-10-18 02:00:00,1356.0591900311526 +2013-10-18 03:00:00,1328.545171339564 +2013-10-18 04:00:00,1338.5794392523364 +2013-10-18 05:00:00,1371.3021806853583 +2013-10-18 06:00:00,1543.417445482866 +2013-10-18 07:00:00,1754.7725856697818 +2013-10-18 08:00:00,1901.4299065420562 +2013-10-18 09:00:00,2515.803738317757 +2013-10-18 10:00:00,3130.345794392523 +2013-10-18 11:00:00,3265.0654205607475 +2013-10-18 12:00:00,3316.9501557632398 +2013-10-18 13:00:00,3318.0467289719627 +2013-10-18 14:00:00,3302.442367601246 +2013-10-18 15:00:00,3330.442367601246 +2013-10-18 16:00:00,3386.080996884735 +2013-10-18 17:00:00,3399.196261682243 +2013-10-18 18:00:00,3425.6947040498444 +2013-10-18 19:00:00,3541.052959501558 +2013-10-18 20:00:00,3488.090342679128 +2013-10-18 21:00:00,3384.1308411214955 +2013-10-18 22:00:00,3081.753894080997 +2013-10-18 23:00:00,2326.9283489096574 +2013-10-19 00:00:00,1760.7102803738317 +2013-10-19 01:00:00,1517.5077881619939 +2013-10-19 02:00:00,1437.872274143302 +2013-10-19 03:00:00,1358.5514018691588 +2013-10-19 04:00:00,1317.3457943925234 +2013-10-19 05:00:00,1352.6230529595016 +2013-10-19 06:00:00,1541.7196261682243 +2013-10-19 07:00:00,1729.4423676012461 +2013-10-19 08:00:00,1850.0685358255453 +2013-10-19 09:00:00,2461.8442367601247 +2013-10-19 10:00:00,3130.3489096573207 +2013-10-19 11:00:00,3286.7258566978194 +2013-10-19 12:00:00,3340.778816199377 +2013-10-19 13:00:00,3376.442367601246 +2013-10-19 14:00:00,3342.4704049844236 +2013-10-19 15:00:00,3430.6105919003116 +2013-10-19 16:00:00,3398.526479750779 +2013-10-19 17:00:00,3336.4704049844236 +2013-10-19 18:00:00,3359.4859813084113 +2013-10-19 19:00:00,3442.8847352024923 +2013-10-19 20:00:00,3355.809968847352 +2013-10-19 21:00:00,3297.196261682243 +2013-10-19 22:00:00,3002.299065420561 +2013-10-19 23:00:00,2406.411214953271 +2013-10-20 00:00:00,1787.8785046728972 +2013-10-20 01:00:00,1468.1744548286604 +2013-10-20 02:00:00,1404.9719626168223 +2013-10-20 03:00:00,1349.3271028037384 +2013-10-20 04:00:00,1256.9844236760125 +2013-10-20 05:00:00,1298.1183800623053 +2013-10-20 06:00:00,1482.6292834890967 +2013-10-20 07:00:00,1643.5794392523364 +2013-10-20 08:00:00,1769.1588785046729 +2013-10-20 09:00:00,2326.5794392523367 +2013-10-20 10:00:00,3090.3177570093458 +2013-10-20 11:00:00,3201.3707165109035 +2013-10-20 12:00:00,3300.2305295950155 +2013-10-20 13:00:00,3244.7943925233644 +2013-10-20 14:00:00,3239.878504672897 +2013-10-20 15:00:00,3336.4143302180687 +2013-10-20 16:00:00,3319.97507788162 +2013-10-20 17:00:00,3335.277258566978 +2013-10-20 18:00:00,3342.0342679127725 +2013-10-20 19:00:00,3408.88785046729 +2013-10-20 20:00:00,3434.588785046729 +2013-10-20 21:00:00,3270.1993769470405 +2013-10-20 22:00:00,2944.8006230529595 +2013-10-20 23:00:00,2260.993769470405 +2013-10-21 00:00:00,1687.1401869158879 +2013-10-21 01:00:00,1372.4797507788162 +2013-10-21 02:00:00,1340.342679127726 +2013-10-21 03:00:00,1328.8847352024923 +2013-10-21 04:00:00,1340.4143302180685 +2013-10-21 05:00:00,1370.8473520249222 +2013-10-21 06:00:00,1525.5233644859813 +2013-10-21 07:00:00,1739.651090342679 +2013-10-21 08:00:00,1888.5077881619939 +2013-10-21 09:00:00,2395.158878504673 +2013-10-21 10:00:00,3061.7320872274145 +2013-10-21 11:00:00,3230.398753894081 +2013-10-21 12:00:00,3245.2305295950155 +2013-10-21 13:00:00,3191.436137071651 +2013-10-21 14:00:00,3224.0155763239877 +2013-10-21 15:00:00,3346.728971962617 +2013-10-21 16:00:00,3329.0934579439254 +2013-10-21 17:00:00,3320.97507788162 +2013-10-21 18:00:00,3298.9221183800623 +2013-10-21 19:00:00,3395.0186915887853 +2013-10-21 20:00:00,3367.0280373831774 +2013-10-21 21:00:00,3232.92523364486 +2013-10-21 22:00:00,2935.9439252336447 +2013-10-21 23:00:00,2288.043613707165 +2013-10-22 00:00:00,1771.6417445482866 +2013-10-22 01:00:00,1471.6479750778817 +2013-10-22 02:00:00,1424.4454828660437 +2013-10-22 03:00:00,1369.5856697819315 +2013-10-22 04:00:00,1384.0591900311526 +2013-10-22 05:00:00,1427.7352024922118 +2013-10-22 06:00:00,1603.1806853582555 +2013-10-22 07:00:00,1766.5109034267912 +2013-10-22 08:00:00,1893.3084112149534 +2013-10-22 09:00:00,2391.221183800623 +2013-10-22 10:00:00,2942.5919003115264 +2013-10-22 11:00:00,3248.096573208723 +2013-10-22 12:00:00,3253.7632398753894 +2013-10-22 13:00:00,3236.196261682243 +2013-10-22 14:00:00,3256.6199376947043 +2013-10-22 15:00:00,3302.8598130841124 +2013-10-22 16:00:00,3316.8691588785045 +2013-10-22 17:00:00,3311.6822429906542 +2013-10-22 18:00:00,3346.5482866043612 +2013-10-22 19:00:00,3449.9283489096574 +2013-10-22 20:00:00,3376.1744548286606 +2013-10-22 21:00:00,3285.9595015576324 +2013-10-22 22:00:00,2975.9719626168226 +2013-10-22 23:00:00,2358.607476635514 +2013-10-23 00:00:00,1768.4579439252336 +2013-10-23 01:00:00,1436.411214953271 +2013-10-23 02:00:00,1374.7227414330218 +2013-10-23 03:00:00,1349.6355140186915 +2013-10-23 04:00:00,1345.3208722741433 +2013-10-23 05:00:00,1377.031152647975 +2013-10-23 06:00:00,1551.760124610592 +2013-10-23 07:00:00,1722.146417445483 +2013-10-23 08:00:00,1843.0965732087227 +2013-10-23 09:00:00,2413.0031152647975 +2013-10-23 10:00:00,2925.1246105919004 +2013-10-23 11:00:00,3054.2367601246106 +2013-10-23 12:00:00,3382.06230529595 +2013-10-23 13:00:00,3300.9501557632398 +2013-10-23 14:00:00,3285.0218068535823 +2013-10-23 15:00:00,3316.489096573209 +2013-10-23 16:00:00,3315.0498442367602 +2013-10-23 17:00:00,3276.227414330218 +2013-10-23 18:00:00,3295.691588785047 +2013-10-23 19:00:00,3478.7414330218066 +2013-10-23 20:00:00,3423.3707165109035 +2013-10-23 21:00:00,3318.2897196261683 +2013-10-23 22:00:00,3065.828660436137 +2013-10-23 23:00:00,2382.3426791277257 +2013-10-24 00:00:00,1732.202492211838 +2013-10-24 01:00:00,1415.177570093458 +2013-10-24 02:00:00,1364.8566978193146 +2013-10-24 03:00:00,1331.8380062305296 +2013-10-24 04:00:00,1347.766355140187 +2013-10-24 05:00:00,1403.4704049844236 +2013-10-24 06:00:00,1556.96261682243 +2013-10-24 07:00:00,1733.8785046728972 +2013-10-24 08:00:00,1893.2305295950155 +2013-10-24 09:00:00,2500.052959501558 +2013-10-24 10:00:00,3058.4080996884736 +2013-10-24 11:00:00,3469.059190031153 +2013-10-24 12:00:00,3413.4517133956388 +2013-10-24 13:00:00,3356.4080996884736 +2013-10-24 14:00:00,3361.5981308411215 +2013-10-24 15:00:00,3411.5732087227416 +2013-10-24 16:00:00,3422.6168224299067 +2013-10-24 17:00:00,3422.1464174454827 +2013-10-24 18:00:00,3463.7414330218066 +2013-10-24 19:00:00,3572.2056074766356 +2013-10-24 20:00:00,3517.96261682243 +2013-10-24 21:00:00,3367.059190031153 +2013-10-24 22:00:00,3018.856697819315 +2013-10-24 23:00:00,2283.264797507788 +2013-10-25 00:00:00,1684.386292834891 +2013-10-25 01:00:00,1375.0591900311526 +2013-10-25 02:00:00,1314.7165109034268 +2013-10-25 03:00:00,1294.968847352025 +2013-10-25 04:00:00,1300.0436137071652 +2013-10-25 05:00:00,1344.436137071651 +2013-10-25 06:00:00,1529.2679127725858 +2013-10-25 07:00:00,1717.2803738317757 +2013-10-25 08:00:00,1892.031152647975 +2013-10-25 09:00:00,2439.127725856698 +2013-10-25 10:00:00,2973.8442367601247 +2013-10-25 11:00:00,3212.685358255452 +2013-10-25 12:00:00,3185.0841121495328 +2013-10-25 13:00:00,3101.2118380062307 +2013-10-25 14:00:00,3110.8753894080996 +2013-10-25 15:00:00,3150.5732087227416 +2013-10-25 16:00:00,3161.345794392523 +2013-10-25 17:00:00,3195.557632398754 +2013-10-25 18:00:00,3222.847352024922 +2013-10-25 19:00:00,3353.6417445482866 +2013-10-25 20:00:00,3278.133956386293 +2013-10-25 21:00:00,3166.570093457944 +2013-10-25 22:00:00,2919.828660436137 +2013-10-25 23:00:00,2332.96261682243 +2013-10-26 00:00:00,1734.3644859813085 +2013-10-26 01:00:00,1463.3208722741433 +2013-10-26 02:00:00,1387.2772585669782 +2013-10-26 03:00:00,1304.7040498442368 +2013-10-26 04:00:00,1262.1557632398753 +2013-10-26 05:00:00,1303.8411214953271 +2013-10-26 06:00:00,1486.6479750778817 +2013-10-26 07:00:00,1652.423676012461 +2013-10-26 08:00:00,1791.7881619937696 +2013-10-26 09:00:00,2358.8442367601247 +2013-10-26 10:00:00,2929.11214953271 +2013-10-26 11:00:00,3050.8753894080996 +2013-10-26 12:00:00,3060.700934579439 +2013-10-26 13:00:00,3048.2616822429904 +2013-10-26 14:00:00,3069.4267912772584 +2013-10-26 15:00:00,3157.02492211838 +2013-10-26 16:00:00,3142.3271028037384 +2013-10-26 17:00:00,3188.2523364485983 +2013-10-26 18:00:00,3192.5794392523367 +2013-10-26 19:00:00,3272.956386292835 +2013-10-26 20:00:00,3250.6573208722743 +2013-10-26 21:00:00,3116.105919003115 +2013-10-26 22:00:00,2874.0186915887853 +2013-10-26 23:00:00,2339.068535825545 +2013-10-27 00:00:00,1752.9345794392523 +2013-10-27 01:00:00,2797.9158878504672 +2013-10-27 02:00:00,1348.367601246106 +2013-10-27 03:00:00,1320.632398753894 +2013-10-27 04:00:00,1226.8940809968847 +2013-10-27 05:00:00,1252.4922118380061 +2013-10-27 06:00:00,1438.3302180685357 +2013-10-27 07:00:00,1630.98753894081 +2013-10-27 08:00:00,1757.7414330218069 +2013-10-27 09:00:00,2315.345794392523 +2013-10-27 10:00:00,2943.2959501557634 +2013-10-27 11:00:00,3075.127725856698 +2013-10-27 12:00:00,3130.9719626168226 +2013-10-27 13:00:00,3141.9501557632398 +2013-10-27 14:00:00,3164.031152647975 +2013-10-27 15:00:00,3198.5794392523367 +2013-10-27 16:00:00,3219.8504672897197 +2013-10-27 17:00:00,3219.183800623053 +2013-10-27 18:00:00,3260.6105919003116 +2013-10-27 19:00:00,3247.3177570093458 +2013-10-27 20:00:00,3155.4454828660437 +2013-10-27 21:00:00,3003.006230529595 +2013-10-27 22:00:00,2682.5358255451715 +2013-10-27 23:00:00,2120.361370716511 +2013-10-28 00:00:00,1586.342679127726 +2013-10-28 01:00:00,1269.2367601246106 +2013-10-28 02:00:00,1232.5981308411215 +2013-10-28 03:00:00,1236.6853582554518 +2013-10-28 04:00:00,1248.4797507788162 +2013-10-28 05:00:00,1312.7943925233644 +2013-10-28 06:00:00,1471.221183800623 +2013-10-28 07:00:00,1663.9314641744547 +2013-10-28 08:00:00,1815.8878504672898 +2013-10-28 09:00:00,2314.127725856698 +2013-10-28 10:00:00,2910.8909657320874 +2013-10-28 11:00:00,3028.2492211838007 +2013-10-28 12:00:00,3010.644859813084 +2013-10-28 13:00:00,3028.3333333333335 +2013-10-28 14:00:00,3077.8847352024923 +2013-10-28 15:00:00,3038.8068535825546 +2013-10-28 16:00:00,3058.626168224299 +2013-10-28 17:00:00,3062.601246105919 +2013-10-28 18:00:00,3222.227414330218 +2013-10-28 19:00:00,3225.0342679127725 +2013-10-28 20:00:00,3096.255451713396 +2013-10-28 21:00:00,3010.6168224299067 +2013-10-28 22:00:00,2706.8380062305296 +2013-10-28 23:00:00,2141.221183800623 +2013-10-29 00:00:00,1616.6635514018692 +2013-10-29 01:00:00,1323.563862928349 +2013-10-29 02:00:00,1252.006230529595 +2013-10-29 03:00:00,1208.7881619937696 +2013-10-29 04:00:00,1193.9844236760125 +2013-10-29 05:00:00,1315.018691588785 +2013-10-29 06:00:00,1490.3395638629283 +2013-10-29 07:00:00,1634.6043613707166 +2013-10-29 08:00:00,1774.3271028037384 +2013-10-29 09:00:00,2240.7196261682243 +2013-10-29 10:00:00,2637.1869158878503 +2013-10-29 11:00:00,2776.1308411214955 +2013-10-29 12:00:00,2829.744548286604 +2013-10-29 13:00:00,2835.9158878504672 +2013-10-29 14:00:00,2829.931464174455 +2013-10-29 15:00:00,2812.510903426791 +2013-10-29 16:00:00,2854.1370716510905 +2013-10-29 17:00:00,2841.127725856698 +2013-10-29 18:00:00,2992.785046728972 +2013-10-29 19:00:00,3025.697819314642 +2013-10-29 20:00:00,2964.8442367601247 +2013-10-29 21:00:00,2852.165109034268 +2013-10-29 22:00:00,2600.5015576323985 +2013-10-29 23:00:00,2060.570093457944 +2013-10-30 00:00:00,1551.1744548286604 +2013-10-30 01:00:00,1327.1183800623053 +2013-10-30 02:00:00,1295.4859813084113 +2013-10-30 03:00:00,1246.0155763239875 +2013-10-30 04:00:00,1193.5607476635514 +2013-10-30 05:00:00,1260.6230529595016 +2013-10-30 06:00:00,1431.2679127725858 +2013-10-30 07:00:00,1591.7352024922118 +2013-10-30 08:00:00,1715.0934579439252 +2013-10-30 09:00:00,2222.0093457943926 +2013-10-30 10:00:00,2596.8006230529595 +2013-10-30 11:00:00,2792.632398753894 +2013-10-30 12:00:00,2778.202492211838 +2013-10-30 13:00:00,2807.4080996884736 +2013-10-30 14:00:00,2848.4828660436137 +2013-10-30 15:00:00,2820.127725856698 +2013-10-30 16:00:00,2830.3800623052957 +2013-10-30 17:00:00,2778.88785046729 +2013-10-30 18:00:00,3008.090342679128 +2013-10-30 19:00:00,3030.0218068535823 +2013-10-30 20:00:00,2894.7414330218066 +2013-10-30 21:00:00,2785.542056074766 +2013-10-30 22:00:00,2544.626168224299 +2013-10-30 23:00:00,2049.510903426791 +2013-10-31 00:00:00,1538.1744548286604 +2013-10-31 01:00:00,1299.638629283489 +2013-10-31 02:00:00,1277.9750778816199 +2013-10-31 03:00:00,1238.8971962616822 +2013-10-31 04:00:00,1183.4143302180685 +2013-10-31 05:00:00,1227.006230529595 +2013-10-31 06:00:00,1404.5514018691588 +2013-10-31 07:00:00,1563.7133956386292 +2013-10-31 08:00:00,1710.1900311526479 +2013-10-31 09:00:00,2202.1495327102803 +2013-10-31 10:00:00,2606.386292834891 +2013-10-31 11:00:00,2898.143302180685 +2013-10-31 12:00:00,2859.233644859813 +2013-10-31 13:00:00,2779.404984423676 +2013-10-31 14:00:00,2761.3333333333335 +2013-10-31 15:00:00,2797.398753894081 +2013-10-31 16:00:00,2864.448598130841 +2013-10-31 17:00:00,2874.563862928349 +2013-10-31 18:00:00,3071.4704049844236 +2013-10-31 19:00:00,3090.121495327103 +2013-10-31 20:00:00,2991.9065420560746 +2013-10-31 21:00:00,2879.8629283489095 +2013-10-31 22:00:00,2600.133956386293 +2013-10-31 23:00:00,2091.183800623053 +2013-11-01 00:00:00,1582.6978193146417 +2013-11-01 01:00:00,1343.0498442367602 +2013-11-01 02:00:00,1322.2087227414331 +2013-11-01 03:00:00,1293.766355140187 +2013-11-01 04:00:00,1222.2585669781931 +2013-11-01 05:00:00,1304.582554517134 +2013-11-01 06:00:00,1480.582554517134 +2013-11-01 07:00:00,1637.1214953271028 +2013-11-01 08:00:00,1790.5919003115264 +2013-11-01 09:00:00,2278.940809968847 +2013-11-01 10:00:00,2679.7102803738317 +2013-11-01 11:00:00,2886.0841121495328 +2013-11-01 12:00:00,2899.3052959501556 +2013-11-01 13:00:00,2881.1744548286606 +2013-11-01 14:00:00,2874.4454828660437 +2013-11-01 15:00:00,2954.411214953271 +2013-11-01 16:00:00,3004.5233644859813 +2013-11-01 17:00:00,2994.3769470404986 +2013-11-01 18:00:00,3147.88785046729 +2013-11-01 19:00:00,3179.479750778816 +2013-11-01 20:00:00,3061.520249221184 +2013-11-01 21:00:00,2928.196261682243 +2013-11-01 22:00:00,2730.3426791277257 +2013-11-01 23:00:00,2263.816199376947 +2013-11-02 00:00:00,1721.9221183800623 +2013-11-02 01:00:00,1484.0093457943926 +2013-11-02 02:00:00,1386.5919003115264 +2013-11-02 03:00:00,1325.6604361370717 +2013-11-02 04:00:00,1255.5389408099688 +2013-11-02 05:00:00,1312.7632398753894 +2013-11-02 06:00:00,1512.3208722741433 +2013-11-02 07:00:00,1661.7383177570093 +2013-11-02 08:00:00,1812.8411214953271 +2013-11-02 09:00:00,2362.2118380062307 +2013-11-02 10:00:00,2922.457943925234 +2013-11-02 11:00:00,3029.5015576323985 +2013-11-02 12:00:00,3076.4454828660437 +2013-11-02 13:00:00,3038.663551401869 +2013-11-02 14:00:00,3041.302180685358 +2013-11-02 15:00:00,2990.5015576323985 +2013-11-02 16:00:00,3104.766355140187 +2013-11-02 17:00:00,3050.3333333333335 +2013-11-02 18:00:00,3233.663551401869 +2013-11-02 19:00:00,3216.7414330218066 +2013-11-02 20:00:00,3127.2429906542056 +2013-11-02 21:00:00,2982.473520249221 +2013-11-02 22:00:00,2755.9003115264795 +2013-11-02 23:00:00,2219.993769470405 +2013-11-03 00:00:00,1711.6105919003114 +2013-11-03 01:00:00,1463.031152647975 +2013-11-03 02:00:00,1400.386292834891 +2013-11-03 03:00:00,1391.3395638629283 +2013-11-03 04:00:00,1270.0841121495328 +2013-11-03 05:00:00,1324.766355140187 +2013-11-03 06:00:00,1508.9127725856697 +2013-11-03 07:00:00,1655.2616822429907 +2013-11-03 08:00:00,1746.2087227414331 +2013-11-03 09:00:00,2303.8068535825546 +2013-11-03 10:00:00,2715.0342679127725 +2013-11-03 11:00:00,2960.1869158878503 +2013-11-03 12:00:00,2918.3707165109035 +2013-11-03 13:00:00,2954.9158878504672 +2013-11-03 14:00:00,2941.096573208723 +2013-11-03 15:00:00,2932.1931464174454 +2013-11-03 16:00:00,2994.570093457944 +2013-11-03 17:00:00,2999.3333333333335 +2013-11-03 18:00:00,3077.171339563863 +2013-11-03 19:00:00,3097.2585669781934 +2013-11-03 20:00:00,2996.0404984423676 +2013-11-03 21:00:00,2870.4517133956388 +2013-11-03 22:00:00,2603.0560747663553 +2013-11-03 23:00:00,2031.5140186915887 +2013-11-04 00:00:00,1565.7538940809968 +2013-11-04 01:00:00,1338.8473520249222 +2013-11-04 02:00:00,1299.6292834890967 +2013-11-04 03:00:00,1281.6760124610591 +2013-11-04 04:00:00,1239.4922118380061 +2013-11-04 05:00:00,1295.1214953271028 +2013-11-04 06:00:00,1490.3457943925234 +2013-11-04 07:00:00,1663.8504672897195 +2013-11-04 08:00:00,1773.7071651090343 +2013-11-04 09:00:00,2258.423676012461 +2013-11-04 10:00:00,2740.791277258567 +2013-11-04 11:00:00,2932.5794392523367 +2013-11-04 12:00:00,2907.894080996885 +2013-11-04 13:00:00,2915.5482866043612 +2013-11-04 14:00:00,2927.940809968847 +2013-11-04 15:00:00,2948.3831775700933 +2013-11-04 16:00:00,2998.3426791277257 +2013-11-04 17:00:00,3016.2492211838007 +2013-11-04 18:00:00,3152.404984423676 +2013-11-04 19:00:00,3142.1401869158876 +2013-11-04 20:00:00,3088.909657320872 +2013-11-04 21:00:00,2965.105919003115 +2013-11-04 22:00:00,2653.9968847352025 +2013-11-04 23:00:00,2174.5732087227416 +2013-11-05 00:00:00,1655.5482866043615 +2013-11-05 01:00:00,1431.392523364486 +2013-11-05 02:00:00,1368.6978193146417 +2013-11-05 03:00:00,1340.576323987539 +2013-11-05 04:00:00,1273.1059190031153 +2013-11-05 05:00:00,1317.6884735202493 +2013-11-05 06:00:00,1460.392523364486 +2013-11-05 07:00:00,1644.968847352025 +2013-11-05 08:00:00,1768.1308411214952 +2013-11-05 09:00:00,2363.052959501558 +2013-11-05 10:00:00,2903.9595015576324 +2013-11-05 11:00:00,2946.7040498442366 +2013-11-05 12:00:00,2979.8317757009345 +2013-11-05 13:00:00,2959.090342679128 +2013-11-05 14:00:00,2964.3426791277257 +2013-11-05 15:00:00,2961.246105919003 +2013-11-05 16:00:00,3010.423676012461 +2013-11-05 17:00:00,3005.1682242990655 +2013-11-05 18:00:00,3131.7476635514017 +2013-11-05 19:00:00,3164.0093457943926 +2013-11-05 20:00:00,3067.9532710280373 +2013-11-05 21:00:00,2913.202492211838 +2013-11-05 22:00:00,2710.392523364486 +2013-11-05 23:00:00,2126.607476635514 +2013-11-06 00:00:00,1582.196261682243 +2013-11-06 01:00:00,1307.3395638629283 +2013-11-06 02:00:00,1328.4890965732088 +2013-11-06 03:00:00,1291.0903426791276 +2013-11-06 04:00:00,1242.4143302180685 +2013-11-06 05:00:00,1300.1370716510903 +2013-11-06 06:00:00,1485.4953271028037 +2013-11-06 07:00:00,1644.651090342679 +2013-11-06 08:00:00,1798.5794392523364 +2013-11-06 09:00:00,2335.822429906542 +2013-11-06 10:00:00,2744.423676012461 +2013-11-06 11:00:00,2983.8317757009345 +2013-11-06 12:00:00,2903.2056074766356 +2013-11-06 13:00:00,2947.1401869158876 +2013-11-06 14:00:00,2965.1152647975077 +2013-11-06 15:00:00,3007.6230529595014 +2013-11-06 16:00:00,2977.2180685358258 +2013-11-06 17:00:00,3009.5545171339563 +2013-11-06 18:00:00,3126.2803738317757 +2013-11-06 19:00:00,3114.1028037383176 +2013-11-06 20:00:00,3052.1931464174454 +2013-11-06 21:00:00,2952.4080996884736 +2013-11-06 22:00:00,2649.467289719626 +2013-11-06 23:00:00,2149.909657320872 +2013-11-07 00:00:00,1653.6292834890967 +2013-11-07 01:00:00,1402.3302180685357 +2013-11-07 02:00:00,1354.0 +2013-11-07 03:00:00,1316.3582554517134 +2013-11-07 04:00:00,1262.7258566978194 +2013-11-07 05:00:00,1313.5202492211838 +2013-11-07 06:00:00,1500.6666666666667 +2013-11-07 07:00:00,1664.9563862928348 +2013-11-07 08:00:00,1787.1557632398753 +2013-11-07 09:00:00,2315.6604361370714 +2013-11-07 10:00:00,2786.4859813084113 +2013-11-07 11:00:00,2852.158878504673 +2013-11-07 12:00:00,2909.3769470404986 +2013-11-07 13:00:00,2926.96261682243 +2013-11-07 14:00:00,2903.345794392523 +2013-11-07 15:00:00,2916.785046728972 +2013-11-07 16:00:00,3006.190031152648 +2013-11-07 17:00:00,2987.8193146417448 +2013-11-07 18:00:00,3133.563862928349 +2013-11-07 19:00:00,3109.8442367601247 +2013-11-07 20:00:00,3054.177570093458 +2013-11-07 21:00:00,2936.0778816199377 +2013-11-07 22:00:00,2691.947040498442 +2013-11-07 23:00:00,2099.6604361370714 +2013-11-08 00:00:00,1668.2118380062304 +2013-11-08 01:00:00,1506.7570093457944 +2013-11-08 02:00:00,1346.6604361370717 +2013-11-08 03:00:00,1305.1028037383178 +2013-11-08 04:00:00,1254.8317757009345 +2013-11-08 05:00:00,1333.4143302180685 +2013-11-08 06:00:00,1536.8068535825546 +2013-11-08 07:00:00,1686.0249221183801 +2013-11-08 08:00:00,1816.9563862928348 +2013-11-08 09:00:00,2347.411214953271 +2013-11-08 10:00:00,2875.872274143302 +2013-11-08 11:00:00,3007.0996884735205 +2013-11-08 12:00:00,2979.227414330218 +2013-11-08 13:00:00,2986.919003115265 +2013-11-08 14:00:00,2930.856697819315 +2013-11-08 15:00:00,2970.8753894080996 +2013-11-08 16:00:00,2952.4267912772584 +2013-11-08 17:00:00,3043.5358255451715 +2013-11-08 18:00:00,3151.6947040498444 +2013-11-08 19:00:00,3154.613707165109 +2013-11-08 20:00:00,3057.676012461059 +2013-11-08 21:00:00,2930.1370716510905 +2013-11-08 22:00:00,2711.4205607476633 +2013-11-08 23:00:00,2257.4392523364486 +2013-11-09 00:00:00,1687.2616822429907 +2013-11-09 01:00:00,1440.7725856697818 +2013-11-09 02:00:00,1369.2492211838007 +2013-11-09 03:00:00,1285.3333333333333 +2013-11-09 04:00:00,1216.797507788162 +2013-11-09 05:00:00,1283.8660436137072 +2013-11-09 06:00:00,1467.545171339564 +2013-11-09 07:00:00,1629.8130841121495 +2013-11-09 08:00:00,1780.0747663551401 +2013-11-09 09:00:00,2266.5171339563863 +2013-11-09 10:00:00,2733.043613707165 +2013-11-09 11:00:00,2797.816199376947 +2013-11-09 12:00:00,2866.345794392523 +2013-11-09 13:00:00,2803.299065420561 +2013-11-09 14:00:00,2794.2118380062307 +2013-11-09 15:00:00,2840.5981308411215 +2013-11-09 16:00:00,2879.7570093457944 +2013-11-09 17:00:00,2955.9221183800623 +2013-11-09 18:00:00,3080.0404984423676 +2013-11-09 19:00:00,3086.043613707165 +2013-11-09 20:00:00,2996.92523364486 +2013-11-09 21:00:00,2875.1401869158876 +2013-11-09 22:00:00,2704.467289719626 +2013-11-09 23:00:00,2263.4859813084113 +2013-11-10 00:00:00,1677.342679127726 +2013-11-10 01:00:00,1432.7632398753894 +2013-11-10 02:00:00,1353.3894080996886 +2013-11-10 03:00:00,1319.2928348909657 +2013-11-10 04:00:00,1200.361370716511 +2013-11-10 05:00:00,1258.006230529595 +2013-11-10 06:00:00,1431.5420560747664 +2013-11-10 07:00:00,1579.146417445483 +2013-11-10 08:00:00,1726.0778816199377 +2013-11-10 09:00:00,2201.0498442367602 +2013-11-10 10:00:00,2712.542056074766 +2013-11-10 11:00:00,2833.105919003115 +2013-11-10 12:00:00,2876.158878504673 +2013-11-10 13:00:00,2838.0186915887853 +2013-11-10 14:00:00,2815.3115264797507 +2013-11-10 15:00:00,2877.7507788161993 +2013-11-10 16:00:00,2893.0280373831774 +2013-11-10 17:00:00,2898.3489096573207 +2013-11-10 18:00:00,3115.386292834891 +2013-11-10 19:00:00,3054.4080996884736 +2013-11-10 20:00:00,2963.791277258567 +2013-11-10 21:00:00,2869.654205607477 +2013-11-10 22:00:00,2615.202492211838 +2013-11-10 23:00:00,2019.1495327102805 +2013-11-11 00:00:00,1578.7881619937696 +2013-11-11 01:00:00,1331.7819314641745 +2013-11-11 02:00:00,1267.3021806853583 +2013-11-11 03:00:00,1233.3769470404984 +2013-11-11 04:00:00,1198.9190031152648 +2013-11-11 05:00:00,1274.9501557632398 +2013-11-11 06:00:00,1441.6884735202493 +2013-11-11 07:00:00,1597.1090342679129 +2013-11-11 08:00:00,1704.5233644859813 +2013-11-11 09:00:00,2213.1370716510905 +2013-11-11 10:00:00,2732.299065420561 +2013-11-11 11:00:00,2770.0404984423676 +2013-11-11 12:00:00,2797.07476635514 +2013-11-11 13:00:00,2820.090342679128 +2013-11-11 14:00:00,2861.903426791277 +2013-11-11 15:00:00,2882.183800623053 +2013-11-11 16:00:00,2885.909657320872 +2013-11-11 17:00:00,2950.7320872274145 +2013-11-11 18:00:00,3092.0934579439254 +2013-11-11 19:00:00,3099.3333333333335 +2013-11-11 20:00:00,2981.5015576323985 +2013-11-11 21:00:00,2862.3800623052957 +2013-11-11 22:00:00,2627.0934579439254 +2013-11-11 23:00:00,2064.9844236760123 +2013-11-12 00:00:00,1594.981308411215 +2013-11-12 01:00:00,1365.3146417445482 +2013-11-12 02:00:00,1315.5482866043615 +2013-11-12 03:00:00,1287.0031152647975 +2013-11-12 04:00:00,1239.9408099688474 +2013-11-12 05:00:00,1312.7227414330218 +2013-11-12 06:00:00,1491.1526479750778 +2013-11-12 07:00:00,1635.196261682243 +2013-11-12 08:00:00,1799.8193146417445 +2013-11-12 09:00:00,2285.4548286604363 +2013-11-12 10:00:00,2659.4205607476633 +2013-11-12 11:00:00,2929.3115264797507 +2013-11-12 12:00:00,2905.255451713396 +2013-11-12 13:00:00,2956.828660436137 +2013-11-12 14:00:00,3040.8442367601247 +2013-11-12 15:00:00,3058.0498442367602 +2013-11-12 16:00:00,2984.6043613707166 +2013-11-12 17:00:00,2936.8317757009345 +2013-11-12 18:00:00,3168.1152647975077 +2013-11-12 19:00:00,3109.4548286604363 +2013-11-12 20:00:00,3026.866043613707 +2013-11-12 21:00:00,2911.5295950155764 +2013-11-12 22:00:00,2638.1495327102803 +2013-11-12 23:00:00,2120.4984423676015 +2013-11-13 00:00:00,1604.7912772585669 +2013-11-13 01:00:00,1358.747663551402 +2013-11-13 02:00:00,1311.380062305296 +2013-11-13 03:00:00,1290.3208722741433 +2013-11-13 04:00:00,1254.1339563862928 +2013-11-13 05:00:00,1318.3551401869158 +2013-11-13 06:00:00,1482.0591900311526 +2013-11-13 07:00:00,1646.3769470404984 +2013-11-13 08:00:00,1823.1993769470405 +2013-11-13 09:00:00,2293.8380062305296 +2013-11-13 10:00:00,2683.4392523364486 +2013-11-13 11:00:00,2788.5794392523367 +2013-11-13 12:00:00,2958.8380062305296 +2013-11-13 13:00:00,2924.4080996884736 +2013-11-13 14:00:00,2919.834890965732 +2013-11-13 15:00:00,2973.314641744548 +2013-11-13 16:00:00,2946.766355140187 +2013-11-13 17:00:00,3004.7757009345796 +2013-11-13 18:00:00,3096.4984423676015 +2013-11-13 19:00:00,3104.7694704049845 +2013-11-13 20:00:00,3036.685358255452 +2013-11-13 21:00:00,2905.286604361371 +2013-11-13 22:00:00,2666.93769470405 +2013-11-13 23:00:00,2066.526479750779 +2013-11-14 00:00:00,1596.8847352024923 +2013-11-14 01:00:00,1385.8971962616822 +2013-11-14 02:00:00,1336.7009345794393 +2013-11-14 03:00:00,1300.4953271028037 +2013-11-14 04:00:00,1255.1495327102805 +2013-11-14 05:00:00,1316.2803738317757 +2013-11-14 06:00:00,1476.582554517134 +2013-11-14 07:00:00,1629.785046728972 +2013-11-14 08:00:00,1798.3894080996886 +2013-11-14 09:00:00,2287.127725856698 +2013-11-14 10:00:00,2616.059190031153 +2013-11-14 11:00:00,2983.0404984423676 +2013-11-14 12:00:00,2845.685358255452 +2013-11-14 13:00:00,2866.03738317757 +2013-11-14 14:00:00,2868.6230529595014 +2013-11-14 15:00:00,2931.448598130841 +2013-11-14 16:00:00,2889.183800623053 +2013-11-14 17:00:00,2965.707165109034 +2013-11-14 18:00:00,3071.816199376947 +2013-11-14 19:00:00,3088.052959501558 +2013-11-14 20:00:00,3044.1806853582552 +2013-11-14 21:00:00,2894.2118380062307 +2013-11-14 22:00:00,2567.308411214953 +2013-11-14 23:00:00,2079.2367601246106 +2013-11-15 00:00:00,1601.4766355140187 +2013-11-15 01:00:00,1359.392523364486 +2013-11-15 02:00:00,1293.7352024922118 +2013-11-15 03:00:00,1238.3115264797507 +2013-11-15 04:00:00,1192.8380062305296 +2013-11-15 05:00:00,1258.5919003115264 +2013-11-15 06:00:00,1459.01246105919 +2013-11-15 07:00:00,1625.233644859813 +2013-11-15 08:00:00,1789.6448598130842 +2013-11-15 09:00:00,2264.345794392523 +2013-11-15 10:00:00,2641.563862928349 +2013-11-15 11:00:00,2869.5451713395637 +2013-11-15 12:00:00,2835.1464174454827 +2013-11-15 13:00:00,2785.576323987539 +2013-11-15 14:00:00,2760.772585669782 +2013-11-15 15:00:00,2827.4517133956388 +2013-11-15 16:00:00,2805.96261682243 +2013-11-15 17:00:00,2894.6168224299067 +2013-11-15 18:00:00,3078.221183800623 +2013-11-15 19:00:00,3032.7102803738317 +2013-11-15 20:00:00,2981.6199376947043 +2013-11-15 21:00:00,2868.177570093458 +2013-11-15 22:00:00,2651.9813084112147 +2013-11-15 23:00:00,2173.2679127725855 +2013-11-16 00:00:00,1663.6261682242991 +2013-11-16 01:00:00,1401.0342679127725 +2013-11-16 02:00:00,1305.1526479750778 +2013-11-16 03:00:00,1240.252336448598 +2013-11-16 04:00:00,1161.9190031152648 +2013-11-16 05:00:00,1221.8255451713396 +2013-11-16 06:00:00,1447.3582554517134 +2013-11-16 07:00:00,1580.404984423676 +2013-11-16 08:00:00,1723.632398753894 +2013-11-16 09:00:00,2184.3333333333335 +2013-11-16 10:00:00,2585.9065420560746 +2013-11-16 11:00:00,2640.090342679128 +2013-11-16 12:00:00,2726.6292834890965 +2013-11-16 13:00:00,2645.068535825545 +2013-11-16 14:00:00,2682.0 +2013-11-16 15:00:00,2697.4984423676015 +2013-11-16 16:00:00,2715.504672897196 +2013-11-16 17:00:00,2815.299065420561 +2013-11-16 18:00:00,2987.4392523364486 +2013-11-16 19:00:00,2964.2585669781934 +2013-11-16 20:00:00,2854.423676012461 +2013-11-16 21:00:00,2696.791277258567 +2013-11-16 22:00:00,2526.3707165109035 +2013-11-16 23:00:00,2113.03738317757 +2013-11-17 00:00:00,1648.7133956386292 +2013-11-17 01:00:00,1373.4766355140187 +2013-11-17 02:00:00,1279.853582554517 +2013-11-17 03:00:00,1239.271028037383 +2013-11-17 04:00:00,1127.8380062305296 +2013-11-17 05:00:00,1186.214953271028 +2013-11-17 06:00:00,1377.233644859813 +2013-11-17 07:00:00,1525.5358255451713 +2013-11-17 08:00:00,1627.3395638629283 +2013-11-17 09:00:00,2084.5732087227416 +2013-11-17 10:00:00,2467.7320872274145 +2013-11-17 11:00:00,2706.9501557632398 +2013-11-17 12:00:00,2674.0280373831774 +2013-11-17 13:00:00,2591.2897196261683 +2013-11-17 14:00:00,2579.632398753894 +2013-11-17 15:00:00,2664.2741433021806 +2013-11-17 16:00:00,2643.97507788162 +2013-11-17 17:00:00,2735.5856697819313 +2013-11-17 18:00:00,2930.3333333333335 +2013-11-17 19:00:00,2876.601246105919 +2013-11-17 20:00:00,2756.9439252336447 +2013-11-17 21:00:00,2713.345794392523 +2013-11-17 22:00:00,2464.6791277258567 +2013-11-17 23:00:00,1911.0716510903426 +2013-11-18 00:00:00,1513.252336448598 +2013-11-18 01:00:00,1257.3052959501558 +2013-11-18 02:00:00,1203.2741433021806 +2013-11-18 03:00:00,1168.6947040498442 +2013-11-18 04:00:00,1131.5389408099688 +2013-11-18 05:00:00,1197.7912772585669 +2013-11-18 06:00:00,1386.342679127726 +2013-11-18 07:00:00,1568.822429906542 +2013-11-18 08:00:00,1725.834890965732 +2013-11-18 09:00:00,2173.227414330218 +2013-11-18 10:00:00,2548.676012461059 +2013-11-18 11:00:00,2587.1028037383176 +2013-11-18 12:00:00,2665.809968847352 +2013-11-18 13:00:00,2644.6884735202493 +2013-11-18 14:00:00,2665.9065420560746 +2013-11-18 15:00:00,2705.436137071651 +2013-11-18 16:00:00,2710.3177570093458 +2013-11-18 17:00:00,2793.080996884735 +2013-11-18 18:00:00,2968.1619937694704 +2013-11-18 19:00:00,2953.1152647975077 +2013-11-18 20:00:00,2862.1370716510905 +2013-11-18 21:00:00,2775.473520249221 +2013-11-18 22:00:00,2541.931464174455 +2013-11-18 23:00:00,2056.2897196261683 +2013-11-19 00:00:00,1629.7414330218069 +2013-11-19 01:00:00,1386.6853582554518 +2013-11-19 02:00:00,1310.2959501557632 +2013-11-19 03:00:00,1255.6728971962616 +2013-11-19 04:00:00,1208.98753894081 +2013-11-19 05:00:00,1271.8317757009345 +2013-11-19 06:00:00,1444.7320872274142 +2013-11-19 07:00:00,1609.4579439252336 +2013-11-19 08:00:00,1757.0747663551401 +2013-11-19 09:00:00,2203.866043613707 +2013-11-19 10:00:00,2693.059190031153 +2013-11-19 11:00:00,2638.510903426791 +2013-11-19 12:00:00,2705.744548286604 +2013-11-19 13:00:00,2723.8317757009345 +2013-11-19 14:00:00,2683.663551401869 +2013-11-19 15:00:00,2717.133956386293 +2013-11-19 16:00:00,2737.707165109034 +2013-11-19 17:00:00,2803.2118380062307 +2013-11-19 18:00:00,2940.542056074766 +2013-11-19 19:00:00,2935.9065420560746 +2013-11-19 20:00:00,2866.308411214953 +2013-11-19 21:00:00,2760.264797507788 +2013-11-19 22:00:00,2512.5140186915887 +2013-11-19 23:00:00,1997.6947040498442 +2013-11-20 00:00:00,1562.7881619937696 +2013-11-20 01:00:00,1322.4922118380061 +2013-11-20 02:00:00,1264.392523364486 +2013-11-20 03:00:00,1209.01246105919 +2013-11-20 04:00:00,1158.3551401869158 +2013-11-20 05:00:00,1225.7196261682243 +2013-11-20 06:00:00,1422.7632398753894 +2013-11-20 07:00:00,1634.1588785046729 +2013-11-20 08:00:00,1796.872274143302 +2013-11-20 09:00:00,2199.816199376947 +2013-11-20 10:00:00,2482.105919003115 +2013-11-20 11:00:00,2580.9345794392525 +2013-11-20 12:00:00,2581.043613707165 +2013-11-20 13:00:00,2660.6510903426793 +2013-11-20 14:00:00,2707.3115264797507 +2013-11-20 15:00:00,2701.7881619937693 +2013-11-20 16:00:00,2697.0342679127725 +2013-11-20 17:00:00,2790.5451713395637 +2013-11-20 18:00:00,2934.2492211838007 +2013-11-20 19:00:00,2921.8971962616824 +2013-11-20 20:00:00,2871.2056074766356 +2013-11-20 21:00:00,2703.0 +2013-11-20 22:00:00,2487.557632398754 +2013-11-20 23:00:00,2013.1557632398753 +2013-11-21 00:00:00,1529.797507788162 +2013-11-21 01:00:00,1293.8411214953271 +2013-11-21 02:00:00,1228.0965732087227 +2013-11-21 03:00:00,1192.177570093458 +2013-11-21 04:00:00,1148.3707165109033 +2013-11-21 05:00:00,1208.6542056074766 +2013-11-21 06:00:00,1407.872274143302 +2013-11-21 07:00:00,1625.9283489096574 +2013-11-21 08:00:00,1836.4797507788162 +2013-11-21 09:00:00,2247.1806853582552 +2013-11-21 10:00:00,2539.9158878504672 +2013-11-21 11:00:00,2597.3395638629286 +2013-11-21 12:00:00,2755.1246105919004 +2013-11-21 13:00:00,2699.520249221184 +2013-11-21 14:00:00,2657.0778816199377 +2013-11-21 15:00:00,2721.01246105919 +2013-11-21 16:00:00,2729.576323987539 +2013-11-21 17:00:00,2803.495327102804 +2013-11-21 18:00:00,2973.551401869159 +2013-11-21 19:00:00,2958.557632398754 +2013-11-21 20:00:00,2898.4922118380064 +2013-11-21 21:00:00,2769.735202492212 +2013-11-21 22:00:00,2531.816199376947 +2013-11-21 23:00:00,2038.785046728972 +2013-11-22 00:00:00,1580.0155763239875 +2013-11-22 01:00:00,1326.3052959501558 +2013-11-22 02:00:00,1278.7258566978194 +2013-11-22 03:00:00,1238.3208722741433 +2013-11-22 04:00:00,1186.7102803738317 +2013-11-22 05:00:00,1279.8629283489097 +2013-11-22 06:00:00,1481.7414330218069 +2013-11-22 07:00:00,1711.411214953271 +2013-11-22 08:00:00,1888.423676012461 +2013-11-22 09:00:00,2293.03738317757 +2013-11-22 10:00:00,2641.9968847352025 +2013-11-22 11:00:00,2712.9781931464177 +2013-11-22 12:00:00,2694.5451713395637 +2013-11-22 13:00:00,2740.080996884735 +2013-11-22 14:00:00,2735.0280373831774 +2013-11-22 15:00:00,2766.461059190031 +2013-11-22 16:00:00,2804.753894080997 +2013-11-22 17:00:00,2901.841121495327 +2013-11-22 18:00:00,3051.601246105919 +2013-11-22 19:00:00,3024.3707165109035 +2013-11-22 20:00:00,2969.1370716510905 +2013-11-22 21:00:00,2875.239875389408 +2013-11-22 22:00:00,2646.8816199376947 +2013-11-22 23:00:00,2166.031152647975 +2013-11-23 00:00:00,1662.0716510903426 +2013-11-23 01:00:00,1399.411214953271 +2013-11-23 02:00:00,1301.9719626168223 +2013-11-23 03:00:00,1221.7196261682243 +2013-11-23 04:00:00,1157.0529595015576 +2013-11-23 05:00:00,1231.8940809968847 +2013-11-23 06:00:00,1423.9750778816199 +2013-11-23 07:00:00,1646.9158878504672 +2013-11-23 08:00:00,1811.5327102803737 +2013-11-23 09:00:00,2284.626168224299 +2013-11-23 10:00:00,2608.9283489096574 +2013-11-23 11:00:00,2796.3426791277257 +2013-11-23 12:00:00,2741.6791277258567 +2013-11-23 13:00:00,2695.9781931464177 +2013-11-23 14:00:00,2712.613707165109 +2013-11-23 15:00:00,2702.601246105919 +2013-11-23 16:00:00,2758.8971962616824 +2013-11-23 17:00:00,2936.92523364486 +2013-11-23 18:00:00,2973.940809968847 +2013-11-23 19:00:00,2949.588785046729 +2013-11-23 20:00:00,2933.92523364486 +2013-11-23 21:00:00,2783.8971962616824 +2013-11-23 22:00:00,2526.8535825545173 +2013-11-23 23:00:00,2099.8068535825546 +2013-11-24 00:00:00,1608.2180685358255 +2013-11-24 01:00:00,1350.271028037383 +2013-11-24 02:00:00,1274.1246105919004 +2013-11-24 03:00:00,1206.6168224299065 +2013-11-24 04:00:00,1094.4080996884736 +2013-11-24 05:00:00,1162.1246105919004 +2013-11-24 06:00:00,1362.1495327102805 +2013-11-24 07:00:00,1574.9283489096574 +2013-11-24 08:00:00,1707.8566978193146 +2013-11-24 09:00:00,2192.171339563863 +2013-11-24 10:00:00,2542.03738317757 +2013-11-24 11:00:00,2595.9065420560746 +2013-11-24 12:00:00,2613.919003115265 +2013-11-24 13:00:00,2591.4205607476633 +2013-11-24 14:00:00,2563.6292834890965 +2013-11-24 15:00:00,2607.221183800623 +2013-11-24 16:00:00,2638.196261682243 +2013-11-24 17:00:00,2748.735202492212 +2013-11-24 18:00:00,2917.7819314641742 +2013-11-24 19:00:00,2839.5607476635514 +2013-11-24 20:00:00,2805.685358255452 +2013-11-24 21:00:00,2687.1931464174454 +2013-11-24 22:00:00,2399.766355140187 +2013-11-24 23:00:00,1935.1744548286604 +2013-11-25 00:00:00,1475.981308411215 +2013-11-25 01:00:00,1230.0280373831777 +2013-11-25 02:00:00,1188.4143302180685 +2013-11-25 03:00:00,1166.7694704049845 +2013-11-25 04:00:00,1113.3271028037384 +2013-11-25 05:00:00,1200.5919003115264 +2013-11-25 06:00:00,1383.0093457943926 +2013-11-25 07:00:00,1609.9034267912773 +2013-11-25 08:00:00,1786.3551401869158 +2013-11-25 09:00:00,2205.367601246106 +2013-11-25 10:00:00,2536.707165109034 +2013-11-25 11:00:00,2719.5856697819313 +2013-11-25 12:00:00,2674.92523364486 +2013-11-25 13:00:00,2653.841121495327 +2013-11-25 14:00:00,2602.9065420560746 +2013-11-25 15:00:00,2671.0155763239877 +2013-11-25 16:00:00,2706.3395638629286 +2013-11-25 17:00:00,2744.847352024922 +2013-11-25 18:00:00,2948.190031152648 +2013-11-25 19:00:00,2926.98753894081 +2013-11-25 20:00:00,2840.2834890965732 +2013-11-25 21:00:00,2751.588785046729 +2013-11-25 22:00:00,2489.4859813084113 +2013-11-25 23:00:00,2021.778816199377 +2013-11-26 00:00:00,1554.5576323987539 +2013-11-26 01:00:00,1289.981308411215 +2013-11-26 02:00:00,1229.9345794392523 +2013-11-26 03:00:00,1192.7943925233644 +2013-11-26 04:00:00,1133.619937694704 +2013-11-26 05:00:00,1224.9158878504672 +2013-11-26 06:00:00,1425.5794392523364 +2013-11-26 07:00:00,1649.2741433021806 +2013-11-26 08:00:00,1811.803738317757 +2013-11-26 09:00:00,2225.6355140186915 +2013-11-26 10:00:00,2563.0467289719627 +2013-11-26 11:00:00,2651.5140186915887 +2013-11-26 12:00:00,2651.526479750779 +2013-11-26 13:00:00,2693.448598130841 +2013-11-26 14:00:00,2673.367601246106 +2013-11-26 15:00:00,2728.386292834891 +2013-11-26 16:00:00,2727.613707165109 +2013-11-26 17:00:00,2837.06230529595 +2013-11-26 18:00:00,3005.4859813084113 +2013-11-26 19:00:00,3002.785046728972 +2013-11-26 20:00:00,2895.98753894081 +2013-11-26 21:00:00,2808.9532710280373 +2013-11-26 22:00:00,2508.152647975078 +2013-11-26 23:00:00,2010.5919003115264 +2013-11-27 00:00:00,1518.6635514018692 +2013-11-27 01:00:00,1272.0716510903426 +2013-11-27 02:00:00,1207.6355140186915 +2013-11-27 03:00:00,1165.4890965732088 +2013-11-27 04:00:00,1117.7632398753894 +2013-11-27 05:00:00,1193.834890965732 +2013-11-27 06:00:00,1415.8753894080996 +2013-11-27 07:00:00,1661.9096573208724 +2013-11-27 08:00:00,1829.4828660436137 +2013-11-27 09:00:00,2252.165109034268 +2013-11-27 10:00:00,2522.392523364486 +2013-11-27 11:00:00,2644.429906542056 +2013-11-27 12:00:00,2678.4548286604363 +2013-11-27 13:00:00,2682.4330218068535 +2013-11-27 14:00:00,2624.121495327103 +2013-11-27 15:00:00,2647.685358255452 +2013-11-27 16:00:00,2680.3582554517134 +2013-11-27 17:00:00,2834.2429906542056 +2013-11-27 18:00:00,2938.9283489096574 +2013-11-27 19:00:00,2919.043613707165 +2013-11-27 20:00:00,2836.0841121495328 +2013-11-27 21:00:00,2713.6043613707166 +2013-11-27 22:00:00,2445.6822429906542 +2013-11-27 23:00:00,1984.01246105919 +2013-11-28 00:00:00,1517.7383177570093 +2013-11-28 01:00:00,1267.0903426791276 +2013-11-28 02:00:00,1208.0996884735202 +2013-11-28 03:00:00,1161.601246105919 +2013-11-28 04:00:00,1114.3084112149534 +2013-11-28 05:00:00,1183.7725856697818 +2013-11-28 06:00:00,1372.6915887850466 +2013-11-28 07:00:00,1641.7570093457944 +2013-11-28 08:00:00,1839.1183800623053 +2013-11-28 09:00:00,2286.0560747663553 +2013-11-28 10:00:00,2522.909657320872 +2013-11-28 11:00:00,2619.6105919003116 +2013-11-28 12:00:00,2665.947040498442 +2013-11-28 13:00:00,2705.277258566978 +2013-11-28 14:00:00,2642.956386292835 +2013-11-28 15:00:00,2706.031152647975 +2013-11-28 16:00:00,2755.143302180685 +2013-11-28 17:00:00,2829.2679127725855 +2013-11-28 18:00:00,2980.0342679127725 +2013-11-28 19:00:00,2948.239875389408 +2013-11-28 20:00:00,2840.8816199376947 +2013-11-28 21:00:00,2750.105919003115 +2013-11-28 22:00:00,2471.202492211838 +2013-11-28 23:00:00,2026.3395638629283 +2013-11-29 00:00:00,1555.271028037383 +2013-11-29 01:00:00,1282.0934579439252 +2013-11-29 02:00:00,1230.7165109034268 +2013-11-29 03:00:00,1184.9190031152648 +2013-11-29 04:00:00,1139.2305295950155 +2013-11-29 05:00:00,1208.7040498442368 +2013-11-29 06:00:00,1414.5700934579438 +2013-11-29 07:00:00,1690.5202492211838 +2013-11-29 08:00:00,1849.6791277258567 +2013-11-29 09:00:00,2305.7632398753894 +2013-11-29 10:00:00,2572.392523364486 +2013-11-29 11:00:00,2746.5295950155764 +2013-11-29 12:00:00,2689.8006230529595 +2013-11-29 13:00:00,2689.894080996885 +2013-11-29 14:00:00,2682.903426791277 +2013-11-29 15:00:00,2719.314641744548 +2013-11-29 16:00:00,2753.286604361371 +2013-11-29 17:00:00,2850.7819314641742 +2013-11-29 18:00:00,3033.0280373831774 +2013-11-29 19:00:00,3039.0218068535823 +2013-11-29 20:00:00,2940.866043613707 +2013-11-29 21:00:00,2787.772585669782 +2013-11-29 22:00:00,2555.772585669782 +2013-11-29 23:00:00,2141.0404984423676 +2013-11-30 00:00:00,1653.563862928349 +2013-11-30 01:00:00,1390.196261682243 +2013-11-30 02:00:00,1302.0965732087227 +2013-11-30 03:00:00,1200.8411214953271 +2013-11-30 04:00:00,1135.2616822429907 +2013-11-30 05:00:00,1198.5358255451713 +2013-11-30 06:00:00,1428.6884735202493 +2013-11-30 07:00:00,1652.7414330218069 +2013-11-30 08:00:00,1854.2367601246106 +2013-11-30 09:00:00,2313.6230529595014 +2013-11-30 10:00:00,2618.6417445482866 +2013-11-30 11:00:00,2687.766355140187 +2013-11-30 12:00:00,2742.314641744548 +2013-11-30 13:00:00,2707.2959501557634 +2013-11-30 14:00:00,2652.171339563863 +2013-11-30 15:00:00,2735.8504672897197 +2013-11-30 16:00:00,2759.5607476635514 +2013-11-30 17:00:00,2883.152647975078 +2013-11-30 18:00:00,3061.872274143302 +2013-11-30 19:00:00,3001.4704049844236 +2013-11-30 20:00:00,2933.940809968847 +2013-11-30 21:00:00,2767.785046728972 +2013-11-30 22:00:00,2549.3800623052957 +2013-11-30 23:00:00,2100.4174454828662 +2013-12-01 00:00:00,1668.9252336448599 +2013-12-01 01:00:00,1384.1619937694704 +2013-12-01 02:00:00,1290.968847352025 +2013-12-01 03:00:00,1242.4205607476636 +2013-12-01 04:00:00,1124.7258566978194 +2013-12-01 05:00:00,1191.2959501557632 +2013-12-01 06:00:00,1403.4143302180685 +2013-12-01 07:00:00,1600.3333333333333 +2013-12-01 08:00:00,1754.5140186915887 +2013-12-01 09:00:00,2269.068535825545 +2013-12-01 10:00:00,2640.3271028037384 +2013-12-01 11:00:00,2759.697819314642 +2013-12-01 12:00:00,2731.171339563863 +2013-12-01 13:00:00,2596.4704049844236 +2013-12-01 14:00:00,2603.5669781931465 +2013-12-01 15:00:00,2626.336448598131 +2013-12-01 16:00:00,2697.264797507788 +2013-12-01 17:00:00,2785.398753894081 +2013-12-01 18:00:00,2938.0404984423676 +2013-12-01 19:00:00,2903.6947040498444 +2013-12-01 20:00:00,2807.1308411214955 +2013-12-01 21:00:00,2685.7943925233644 +2013-12-01 22:00:00,2412.8130841121497 +2013-12-01 23:00:00,1936.8816199376947 +2013-12-02 00:00:00,1502.1090342679129 +2013-12-02 01:00:00,1246.01246105919 +2013-12-02 02:00:00,1210.233644859813 +2013-12-02 03:00:00,1180.2056074766356 +2013-12-02 04:00:00,1127.271028037383 +2013-12-02 05:00:00,1204.8847352024923 +2013-12-02 06:00:00,1408.778816199377 +2013-12-02 07:00:00,1670.4797507788162 +2013-12-02 08:00:00,1840.2305295950155 +2013-12-02 09:00:00,2289.3177570093458 +2013-12-02 10:00:00,2580.302180685358 +2013-12-02 11:00:00,2634.6822429906542 +2013-12-02 12:00:00,2720.1464174454827 +2013-12-02 13:00:00,2698.9719626168226 +2013-12-02 14:00:00,2705.373831775701 +2013-12-02 15:00:00,2673.847352024922 +2013-12-02 16:00:00,2719.3582554517134 +2013-12-02 17:00:00,2880.9906542056074 +2013-12-02 18:00:00,2999.8816199376947 +2013-12-02 19:00:00,2991.6791277258567 +2013-12-02 20:00:00,2896.8598130841124 +2013-12-02 21:00:00,2766.07476635514 +2013-12-02 22:00:00,2467.0186915887853 +2013-12-02 23:00:00,2015.993769470405 +2013-12-03 00:00:00,1549.853582554517 +2013-12-03 01:00:00,1284.7133956386292 +2013-12-03 02:00:00,1212.2274143302182 +2013-12-03 03:00:00,1174.1214953271028 +2013-12-03 04:00:00,1125.7165109034268 +2013-12-03 05:00:00,1194.2928348909657 +2013-12-03 06:00:00,1410.0280373831777 +2013-12-03 07:00:00,1669.018691588785 +2013-12-03 08:00:00,1836.5607476635514 +2013-12-03 09:00:00,2285.5482866043612 +2013-12-03 10:00:00,2570.576323987539 +2013-12-03 11:00:00,2704.713395638629 +2013-12-03 12:00:00,2702.127725856698 +2013-12-03 13:00:00,2701.9719626168226 +2013-12-03 14:00:00,2647.4766355140187 +2013-12-03 15:00:00,2719.277258566978 +2013-12-03 16:00:00,2722.510903426791 +2013-12-03 17:00:00,2845.4766355140187 +2013-12-03 18:00:00,2980.3271028037384 +2013-12-03 19:00:00,2974.398753894081 +2013-12-03 20:00:00,2896.878504672897 +2013-12-03 21:00:00,2753.753894080997 +2013-12-03 22:00:00,2512.753894080997 +2013-12-03 23:00:00,1997.0 +2013-12-04 00:00:00,1537.1495327102805 +2013-12-04 01:00:00,1274.5576323987539 +2013-12-04 02:00:00,1217.0872274143303 +2013-12-04 03:00:00,1190.5919003115264 +2013-12-04 04:00:00,1124.0 +2013-12-04 05:00:00,1185.5545171339563 +2013-12-04 06:00:00,1414.595015576324 +2013-12-04 07:00:00,1671.3364485981308 +2013-12-04 08:00:00,1848.0093457943926 +2013-12-04 09:00:00,2292.685358255452 +2013-12-04 10:00:00,2589.355140186916 +2013-12-04 11:00:00,2651.6947040498444 +2013-12-04 12:00:00,2710.361370716511 +2013-12-04 13:00:00,2726.0841121495328 +2013-12-04 14:00:00,2678.9283489096574 +2013-12-04 15:00:00,2760.8598130841124 +2013-12-04 16:00:00,2810.171339563863 +2013-12-04 17:00:00,2970.542056074766 +2013-12-04 18:00:00,3072.196261682243 +2013-12-04 19:00:00,3037.436137071651 +2013-12-04 20:00:00,2983.461059190031 +2013-12-04 21:00:00,2818.542056074766 +2013-12-04 22:00:00,2540.663551401869 +2013-12-04 23:00:00,2019.7040498442368 +2013-12-05 00:00:00,1535.183800623053 +2013-12-05 01:00:00,1283.0654205607477 +2013-12-05 02:00:00,1233.9750778816199 +2013-12-05 03:00:00,1204.0654205607477 +2013-12-05 04:00:00,1140.0716510903426 +2013-12-05 05:00:00,1214.7570093457944 +2013-12-05 06:00:00,1429.607476635514 +2013-12-05 07:00:00,1672.526479750779 +2013-12-05 08:00:00,1869.4018691588785 +2013-12-05 09:00:00,2348.386292834891 +2013-12-05 10:00:00,2618.2305295950155 +2013-12-05 11:00:00,2871.052959501558 +2013-12-05 12:00:00,2712.595015576324 +2013-12-05 13:00:00,2735.2616822429904 +2013-12-05 14:00:00,2748.940809968847 +2013-12-05 15:00:00,2771.93769470405 +2013-12-05 16:00:00,2793.570093457944 +2013-12-05 17:00:00,2951.3831775700933 +2013-12-05 18:00:00,3043.271028037383 +2013-12-05 19:00:00,3066.894080996885 +2013-12-05 20:00:00,2966.570093457944 +2013-12-05 21:00:00,2851.323987538941 +2013-12-05 22:00:00,2501.728971962617 +2013-12-05 23:00:00,2045.4766355140187 +2013-12-06 00:00:00,1805.3520249221183 +2013-12-06 01:00:00,1496.8193146417445 +2013-12-06 02:00:00,1252.0436137071652 +2013-12-06 03:00:00,1204.271028037383 +2013-12-06 04:00:00,1148.981308411215 +2013-12-06 05:00:00,1243.5358255451713 +2013-12-06 06:00:00,1429.5669781931465 +2013-12-06 07:00:00,1695.0809968847352 +2013-12-06 08:00:00,1889.9158878504672 +2013-12-06 09:00:00,2318.7570093457944 +2013-12-06 10:00:00,2602.2429906542056 +2013-12-06 11:00:00,2708.8753894080996 +2013-12-06 12:00:00,2748.0872274143303 +2013-12-06 13:00:00,2753.6479750778817 +2013-12-06 14:00:00,2759.2118380062307 +2013-12-06 15:00:00,2788.3395638629286 +2013-12-06 16:00:00,2861.9501557632398 +2013-12-06 17:00:00,2967.7040498442366 +2013-12-06 18:00:00,3095.386292834891 +2013-12-06 19:00:00,3085.7819314641742 +2013-12-06 20:00:00,2988.5171339563863 +2013-12-06 21:00:00,2897.4080996884736 +2013-12-06 22:00:00,2601.4828660436137 +2013-12-06 23:00:00,2193.031152647975 +2013-12-07 00:00:00,1661.5794392523364 +2013-12-07 01:00:00,1378.853582554517 +2013-12-07 02:00:00,1278.8629283489097 +2013-12-07 03:00:00,1203.5077881619939 +2013-12-07 04:00:00,1123.9314641744547 +2013-12-07 05:00:00,1192.2118380062304 +2013-12-07 06:00:00,1390.8411214953271 +2013-12-07 07:00:00,1629.2554517133956 +2013-12-07 08:00:00,1828.96261682243 +2013-12-07 09:00:00,2346.208722741433 +2013-12-07 10:00:00,2665.847352024922 +2013-12-07 11:00:00,2715.2803738317757 +2013-12-07 12:00:00,2916.4205607476633 +2013-12-07 13:00:00,2772.02492211838 +2013-12-07 14:00:00,2781.190031152648 +2013-12-07 15:00:00,2799.797507788162 +2013-12-07 16:00:00,2828.171339563863 +2013-12-07 17:00:00,2999.97507788162 +2013-12-07 18:00:00,3148.1308411214955 +2013-12-07 19:00:00,3093.2616822429904 +2013-12-07 20:00:00,2998.3115264797507 +2013-12-07 21:00:00,2877.601246105919 +2013-12-07 22:00:00,2590.5545171339563 +2013-12-07 23:00:00,2139.442367601246 +2013-12-08 00:00:00,1646.0623052959502 +2013-12-08 01:00:00,1346.9096573208724 +2013-12-08 02:00:00,1268.657320872274 +2013-12-08 03:00:00,1202.3021806853583 +2013-12-08 04:00:00,1084.221183800623 +2013-12-08 05:00:00,1157.0778816199377 +2013-12-08 06:00:00,1360.233644859813 +2013-12-08 07:00:00,1583.3239875389409 +2013-12-08 08:00:00,1759.0342679127725 +2013-12-08 09:00:00,2282.520249221184 +2013-12-08 10:00:00,2653.638629283489 +2013-12-08 11:00:00,2697.2305295950155 +2013-12-08 12:00:00,2727.3489096573207 +2013-12-08 13:00:00,2697.93769470405 +2013-12-08 14:00:00,2707.7694704049845 +2013-12-08 15:00:00,2709.1246105919004 +2013-12-08 16:00:00,2731.834890965732 +2013-12-08 17:00:00,2847.9813084112147 +2013-12-08 18:00:00,3068.676012461059 +2013-12-08 19:00:00,2991.7881619937693 +2013-12-08 20:00:00,2879.8753894080996 +2013-12-08 21:00:00,2740.4267912772584 +2013-12-08 22:00:00,2456.947040498442 +2013-12-08 23:00:00,1951.7133956386292 +2013-12-09 00:00:00,1482.1744548286604 +2013-12-09 01:00:00,1235.4922118380061 +2013-12-09 02:00:00,1183.797507788162 +2013-12-09 03:00:00,1146.2647975077882 +2013-12-09 04:00:00,1105.6261682242991 +2013-12-09 05:00:00,1187.018691588785 +2013-12-09 06:00:00,1375.576323987539 +2013-12-09 07:00:00,1652.1588785046729 +2013-12-09 08:00:00,1786.2554517133956 +2013-12-09 09:00:00,2301.551401869159 +2013-12-09 10:00:00,2553.7694704049845 +2013-12-09 11:00:00,2640.1869158878503 +2013-12-09 12:00:00,2685.1931464174454 +2013-12-09 13:00:00,2733.3208722741433 +2013-12-09 14:00:00,2725.0467289719627 +2013-12-09 15:00:00,2748.8691588785045 +2013-12-09 16:00:00,2773.626168224299 +2013-12-09 17:00:00,2897.068535825545 +2013-12-09 18:00:00,3022.052959501558 +2013-12-09 19:00:00,3044.7320872274145 +2013-12-09 20:00:00,2942.6355140186915 +2013-12-09 21:00:00,2796.538940809969 +2013-12-09 22:00:00,2472.5669781931465 +2013-12-09 23:00:00,2038.619937694704 +2013-12-10 00:00:00,1524.9844236760125 +2013-12-10 01:00:00,1262.4267912772586 +2013-12-10 02:00:00,1211.607476635514 +2013-12-10 03:00:00,1189.619937694704 +2013-12-10 04:00:00,1137.1401869158879 +2013-12-10 05:00:00,1221.1993769470405 +2013-12-10 06:00:00,1409.588785046729 +2013-12-10 07:00:00,1697.7227414330218 +2013-12-10 08:00:00,1878.7009345794393 +2013-12-10 09:00:00,2334.4828660436137 +2013-12-10 10:00:00,2696.88785046729 +2013-12-10 11:00:00,2731.803738317757 +2013-12-10 12:00:00,2713.436137071651 +2013-12-10 13:00:00,2719.3333333333335 +2013-12-10 14:00:00,2741.6479750778817 +2013-12-10 15:00:00,2780.3831775700933 +2013-12-10 16:00:00,2773.940809968847 +2013-12-10 17:00:00,2940.121495327103 +2013-12-10 18:00:00,3047.872274143302 +2013-12-10 19:00:00,3059.847352024922 +2013-12-10 20:00:00,2936.1931464174454 +2013-12-10 21:00:00,2778.6822429906542 +2013-12-10 22:00:00,2417.5825545171338 +2013-12-10 23:00:00,1981.8878504672898 +2013-12-11 00:00:00,1563.5856697819315 +2013-12-11 01:00:00,1300.657320872274 +2013-12-11 02:00:00,1249.2305295950155 +2013-12-11 03:00:00,1221.0685358255453 +2013-12-11 04:00:00,1159.6978193146417 +2013-12-11 05:00:00,1211.2959501557632 +2013-12-11 06:00:00,1409.1526479750778 +2013-12-11 07:00:00,1700.7383177570093 +2013-12-11 08:00:00,1858.657320872274 +2013-12-11 09:00:00,2339.778816199377 +2013-12-11 10:00:00,2616.866043613707 +2013-12-11 11:00:00,2779.183800623053 +2013-12-11 12:00:00,2732.0716510903426 +2013-12-11 13:00:00,2723.7476635514017 +2013-12-11 14:00:00,2737.461059190031 +2013-12-11 15:00:00,2802.8629283489095 +2013-12-11 16:00:00,2814.956386292835 +2013-12-11 17:00:00,2966.772585669782 +2013-12-11 18:00:00,3070.8909657320874 +2013-12-11 19:00:00,3034.227414330218 +2013-12-11 20:00:00,2974.9065420560746 +2013-12-11 21:00:00,2745.479750778816 +2013-12-11 22:00:00,2453.9065420560746 +2013-12-11 23:00:00,1993.7165109034268 +2013-12-12 00:00:00,1581.6355140186915 +2013-12-12 01:00:00,1337.6604361370717 +2013-12-12 02:00:00,1282.9532710280373 +2013-12-12 03:00:00,1278.2803738317757 +2013-12-12 04:00:00,1229.436137071651 +2013-12-12 05:00:00,1277.1682242990655 +2013-12-12 06:00:00,1474.1744548286604 +2013-12-12 07:00:00,1713.423676012461 +2013-12-12 08:00:00,1875.6105919003114 +2013-12-12 09:00:00,2352.5015576323985 +2013-12-12 10:00:00,2587.778816199377 +2013-12-12 11:00:00,2641.3395638629286 +2013-12-12 12:00:00,2716.3115264797507 +2013-12-12 13:00:00,2728.1308411214955 +2013-12-12 14:00:00,2772.9657320872275 +2013-12-12 15:00:00,2801.8753894080996 +2013-12-12 16:00:00,2837.345794392523 +2013-12-12 17:00:00,2929.271028037383 +2013-12-12 18:00:00,3055.336448598131 +2013-12-12 19:00:00,3056.1682242990655 +2013-12-12 20:00:00,2951.5732087227416 +2013-12-12 21:00:00,2784.1495327102803 +2013-12-12 22:00:00,2484.214953271028 +2013-12-12 23:00:00,2033.2585669781931 +2013-12-13 00:00:00,1609.8629283489097 +2013-12-13 01:00:00,1361.8598130841121 +2013-12-13 02:00:00,1301.0623052959502 +2013-12-13 03:00:00,1281.8286604361372 +2013-12-13 04:00:00,1220.9408099688474 +2013-12-13 05:00:00,1323.2242990654206 +2013-12-13 06:00:00,1504.0031152647975 +2013-12-13 07:00:00,1712.3084112149534 +2013-12-13 08:00:00,1873.5015576323988 +2013-12-13 09:00:00,2384.613707165109 +2013-12-13 10:00:00,2760.336448598131 +2013-12-13 11:00:00,2831.4454828660437 +2013-12-13 12:00:00,2843.5233644859813 +2013-12-13 13:00:00,2841.1028037383176 +2013-12-13 14:00:00,2869.956386292835 +2013-12-13 15:00:00,2891.520249221184 +2013-12-13 16:00:00,2917.7320872274145 +2013-12-13 17:00:00,3065.956386292835 +2013-12-13 18:00:00,3120.7383177570096 +2013-12-13 19:00:00,3088.1557632398753 +2013-12-13 20:00:00,3033.5295950155764 +2013-12-13 21:00:00,2874.1993769470405 +2013-12-13 22:00:00,2574.308411214953 +2013-12-13 23:00:00,2200.0186915887853 +2013-12-14 00:00:00,1781.9595015576324 +2013-12-14 01:00:00,1483.9906542056074 +2013-12-14 02:00:00,1373.2647975077882 +2013-12-14 03:00:00,1274.6822429906542 +2013-12-14 04:00:00,1185.4392523364486 +2013-12-14 05:00:00,1268.6635514018692 +2013-12-14 06:00:00,1436.2585669781931 +2013-12-14 07:00:00,1677.0747663551401 +2013-12-14 08:00:00,1829.9844236760125 +2013-12-14 09:00:00,2330.3520249221183 +2013-12-14 10:00:00,2677.613707165109 +2013-12-14 11:00:00,2764.448598130841 +2013-12-14 12:00:00,2876.3769470404986 +2013-12-14 13:00:00,2838.841121495327 +2013-12-14 14:00:00,2861.791277258567 +2013-12-14 15:00:00,2909.214953271028 +2013-12-14 16:00:00,2940.0218068535823 +2013-12-14 17:00:00,3076.8130841121497 +2013-12-14 18:00:00,3204.7196261682243 +2013-12-14 19:00:00,3127.8006230529595 +2013-12-14 20:00:00,3028.8598130841124 +2013-12-14 21:00:00,2838.292834890966 +2013-12-14 22:00:00,2558.7102803738317 +2013-12-14 23:00:00,2166.557632398754 +2013-12-15 00:00:00,1720.7725856697818 +2013-12-15 01:00:00,1421.1433021806854 +2013-12-15 02:00:00,1308.0155763239875 +2013-12-15 03:00:00,1257.03738317757 +2013-12-15 04:00:00,1125.1557632398753 +2013-12-15 05:00:00,1198.4454828660437 +2013-12-15 06:00:00,1377.3644859813085 +2013-12-15 07:00:00,1649.2585669781931 +2013-12-15 08:00:00,1774.214953271028 +2013-12-15 09:00:00,2286.1682242990655 +2013-12-15 10:00:00,2610.2834890965732 +2013-12-15 11:00:00,2874.286604361371 +2013-12-15 12:00:00,2826.1028037383176 +2013-12-15 13:00:00,2761.9595015576324 +2013-12-15 14:00:00,2762.143302180685 +2013-12-15 15:00:00,2800.264797507788 +2013-12-15 16:00:00,2895.9781931464177 +2013-12-15 17:00:00,2998.9221183800623 +2013-12-15 18:00:00,3085.532710280374 +2013-12-15 19:00:00,3035.834890965732 +2013-12-15 20:00:00,2941.5825545171338 +2013-12-15 21:00:00,2750.8598130841124 +2013-12-15 22:00:00,2407.7819314641742 +2013-12-15 23:00:00,2037.6728971962616 +2013-12-16 00:00:00,1617.0778816199377 +2013-12-16 01:00:00,1298.2803738317757 +2013-12-16 02:00:00,1220.7538940809968 +2013-12-16 03:00:00,1183.3177570093458 +2013-12-16 04:00:00,1169.202492211838 +2013-12-16 05:00:00,1245.252336448598 +2013-12-16 06:00:00,1418.5233644859813 +2013-12-16 07:00:00,1690.9906542056074 +2013-12-16 08:00:00,1859.3644859813085 +2013-12-16 09:00:00,2299.5451713395637 +2013-12-16 10:00:00,2591.2897196261683 +2013-12-16 11:00:00,2637.323987538941 +2013-12-16 12:00:00,2698.436137071651 +2013-12-16 13:00:00,2756.4641744548285 +2013-12-16 14:00:00,2753.239875389408 +2013-12-16 15:00:00,2797.4922118380064 +2013-12-16 16:00:00,2782.0 +2013-12-16 17:00:00,2905.7196261682243 +2013-12-16 18:00:00,3072.361370716511 +2013-12-16 19:00:00,3012.227414330218 +2013-12-16 20:00:00,2960.2616822429904 +2013-12-16 21:00:00,2754.878504672897 +2013-12-16 22:00:00,2510.221183800623 +2013-12-16 23:00:00,2157.9532710280373 +2013-12-17 00:00:00,1711.3146417445482 +2013-12-17 01:00:00,1346.8193146417445 +2013-12-17 02:00:00,1283.9252336448599 +2013-12-17 03:00:00,1246.2180685358255 +2013-12-17 04:00:00,1176.9252336448599 +2013-12-17 05:00:00,1251.5794392523364 +2013-12-17 06:00:00,1464.7632398753894 +2013-12-17 07:00:00,1709.3894080996886 +2013-12-17 08:00:00,1886.411214953271 +2013-12-17 09:00:00,2379.685358255452 +2013-12-17 10:00:00,2668.0498442367602 +2013-12-17 11:00:00,2885.542056074766 +2013-12-17 12:00:00,2778.467289719626 +2013-12-17 13:00:00,2823.5077881619936 +2013-12-17 14:00:00,2845.7570093457944 +2013-12-17 15:00:00,2847.9844236760123 +2013-12-17 16:00:00,2932.7632398753894 +2013-12-17 17:00:00,3000.208722741433 +2013-12-17 18:00:00,3065.3831775700933 +2013-12-17 19:00:00,3054.504672897196 +2013-12-17 20:00:00,3007.2367601246106 +2013-12-17 21:00:00,2790.713395638629 +2013-12-17 22:00:00,2481.728971962617 +2013-12-17 23:00:00,2129.473520249221 +2013-12-18 00:00:00,1707.3520249221183 +2013-12-18 01:00:00,1357.5140186915887 +2013-12-18 02:00:00,1293.7227414330218 +2013-12-18 03:00:00,1253.1713395638628 +2013-12-18 04:00:00,1206.404984423676 +2013-12-18 05:00:00,1257.778816199377 +2013-12-18 06:00:00,1457.8099688473521 +2013-12-18 07:00:00,1722.834890965732 +2013-12-18 08:00:00,1854.4672897196263 +2013-12-18 09:00:00,2348.8753894080996 +2013-12-18 10:00:00,2614.7165109034268 +2013-12-18 11:00:00,2725.8753894080996 +2013-12-18 12:00:00,2738.190031152648 +2013-12-18 13:00:00,2847.0467289719627 +2013-12-18 14:00:00,2825.9439252336447 +2013-12-18 15:00:00,2825.171339563863 +2013-12-18 16:00:00,2894.0778816199377 +2013-12-18 17:00:00,3025.1869158878503 +2013-12-18 18:00:00,3071.9968847352025 +2013-12-18 19:00:00,3037.1931464174454 +2013-12-18 20:00:00,3004.632398753894 +2013-12-18 21:00:00,2791.367601246106 +2013-12-18 22:00:00,2503.919003115265 +2013-12-18 23:00:00,2187.4828660436137 +2013-12-19 00:00:00,1738.2959501557632 +2013-12-19 01:00:00,1409.619937694704 +2013-12-19 02:00:00,1331.651090342679 +2013-12-19 03:00:00,1316.5700934579438 +2013-12-19 04:00:00,1296.4859813084113 +2013-12-19 05:00:00,1333.0747663551401 +2013-12-19 06:00:00,1503.9906542056074 +2013-12-19 07:00:00,1723.4267912772586 +2013-12-19 08:00:00,1895.5732087227414 +2013-12-19 09:00:00,2404.8380062305296 +2013-12-19 10:00:00,2842.4704049844236 +2013-12-19 11:00:00,2773.6604361370714 +2013-12-19 12:00:00,2831.461059190031 +2013-12-19 13:00:00,2839.9003115264795 +2013-12-19 14:00:00,2809.277258566978 +2013-12-19 15:00:00,2791.5825545171338 +2013-12-19 16:00:00,2878.8130841121497 +2013-12-19 17:00:00,2986.8130841121497 +2013-12-19 18:00:00,3058.526479750779 +2013-12-19 19:00:00,2993.993769470405 +2013-12-19 20:00:00,2965.3956386292834 +2013-12-19 21:00:00,2752.0218068535823 +2013-12-19 22:00:00,2468.5015576323985 +2013-12-19 23:00:00,2144.601246105919 +2013-12-20 00:00:00,1803.2834890965732 +2013-12-20 01:00:00,1373.0591900311526 +2013-12-20 02:00:00,1255.3831775700935 +2013-12-20 03:00:00,1224.0404984423676 +2013-12-20 04:00:00,1175.9221183800623 +2013-12-20 05:00:00,1261.993769470405 +2013-12-20 06:00:00,1437.2679127725858 +2013-12-20 07:00:00,1689.0809968847352 +2013-12-20 08:00:00,1889.2461059190032 +2013-12-20 09:00:00,2364.2741433021806 +2013-12-20 10:00:00,2620.542056074766 +2013-12-20 11:00:00,2730.791277258567 +2013-12-20 12:00:00,2748.0872274143303 +2013-12-20 13:00:00,2768.7819314641742 +2013-12-20 14:00:00,2764.644859813084 +2013-12-20 15:00:00,2830.2305295950155 +2013-12-20 16:00:00,2901.2679127725855 +2013-12-20 17:00:00,2990.8130841121497 +2013-12-20 18:00:00,3096.7507788161993 +2013-12-20 19:00:00,3077.956386292835 +2013-12-20 20:00:00,3028.233644859813 +2013-12-20 21:00:00,2822.526479750779 +2013-12-20 22:00:00,2591.735202492212 +2013-12-20 23:00:00,2280.626168224299 +2013-12-21 00:00:00,1875.6417445482866 +2013-12-21 01:00:00,1468.6760124610591 +2013-12-21 02:00:00,1335.3894080996886 +2013-12-21 03:00:00,1257.747663551402 +2013-12-21 04:00:00,1176.0623052959502 +2013-12-21 05:00:00,1244.398753894081 +2013-12-21 06:00:00,1429.0778816199377 +2013-12-21 07:00:00,1635.9657320872275 +2013-12-21 08:00:00,1843.3956386292834 +2013-12-21 09:00:00,2354.4984423676015 +2013-12-21 10:00:00,2763.5233644859813 +2013-12-21 11:00:00,2796.654205607477 +2013-12-21 12:00:00,2838.7694704049845 +2013-12-21 13:00:00,2831.01246105919 +2013-12-21 14:00:00,2777.766355140187 +2013-12-21 15:00:00,2835.3644859813085 +2013-12-21 16:00:00,2844.264797507788 +2013-12-21 17:00:00,3045.8909657320874 +2013-12-21 18:00:00,3122.214953271028 +2013-12-21 19:00:00,3096.2492211838007 +2013-12-21 20:00:00,3003.308411214953 +2013-12-21 21:00:00,2847.2959501557634 +2013-12-21 22:00:00,2559.841121495327 +2013-12-21 23:00:00,2312.7414330218066 +2013-12-22 00:00:00,1892.4205607476636 +2013-12-22 01:00:00,1499.1869158878505 +2013-12-22 02:00:00,1345.8006230529595 +2013-12-22 03:00:00,1292.9158878504672 +2013-12-22 04:00:00,1193.4797507788162 +2013-12-22 05:00:00,1243.96261682243 +2013-12-22 06:00:00,1405.392523364486 +2013-12-22 07:00:00,1632.3894080996886 +2013-12-22 08:00:00,1856.0529595015576 +2013-12-22 09:00:00,2340.722741433022 +2013-12-22 10:00:00,2643.1744548286606 +2013-12-22 11:00:00,2776.542056074766 +2013-12-22 12:00:00,2823.6105919003116 +2013-12-22 13:00:00,2829.03738317757 +2013-12-22 14:00:00,2757.847352024922 +2013-12-22 15:00:00,2754.632398753894 +2013-12-22 16:00:00,2870.165109034268 +2013-12-22 17:00:00,2970.7570093457944 +2013-12-22 18:00:00,3097.8535825545173 +2013-12-22 19:00:00,3020.735202492212 +2013-12-22 20:00:00,2981.8535825545173 +2013-12-22 21:00:00,2838.940809968847 +2013-12-22 22:00:00,2547.1183800623053 +2013-12-22 23:00:00,2219.809968847352 +2013-12-23 00:00:00,1852.8411214953271 +2013-12-23 01:00:00,1428.1090342679129 +2013-12-23 02:00:00,1305.4485981308412 +2013-12-23 03:00:00,1279.7040498442368 +2013-12-23 04:00:00,1247.9190031152648 +2013-12-23 05:00:00,1297.0809968847352 +2013-12-23 06:00:00,1469.3395638629283 +2013-12-23 07:00:00,1721.638629283489 +2013-12-23 08:00:00,1882.6479750778817 +2013-12-23 09:00:00,2406.520249221184 +2013-12-23 10:00:00,2735.97507788162 +2013-12-23 11:00:00,2879.9158878504672 +2013-12-23 12:00:00,2881.956386292835 +2013-12-23 13:00:00,2912.760124610592 +2013-12-23 14:00:00,2925.3333333333335 +2013-12-23 15:00:00,2940.4080996884736 +2013-12-23 16:00:00,2979.735202492212 +2013-12-23 17:00:00,3066.1869158878503 +2013-12-23 18:00:00,3172.1869158878503 +2013-12-23 19:00:00,3184.8193146417448 +2013-12-23 20:00:00,3074.4174454828662 +2013-12-23 21:00:00,2881.542056074766 +2013-12-23 22:00:00,2688.031152647975 +2013-12-23 23:00:00,2338.638629283489 +2013-12-24 00:00:00,1953.766355140187 +2013-12-24 01:00:00,1522.588785046729 +2013-12-24 02:00:00,1370.9345794392523 +2013-12-24 03:00:00,1317.2990654205607 +2013-12-24 04:00:00,1272.7912772585669 +2013-12-24 05:00:00,1330.5545171339563 +2013-12-24 06:00:00,1560.872274143302 +2013-12-24 07:00:00,1725.834890965732 +2013-12-24 08:00:00,1904.1869158878505 +2013-12-24 09:00:00,2424.956386292835 +2013-12-24 10:00:00,2761.2834890965732 +2013-12-24 11:00:00,2862.5295950155764 +2013-12-24 12:00:00,2969.6666666666665 +2013-12-24 13:00:00,2966.4018691588785 +2013-12-24 14:00:00,2900.246105919003 +2013-12-24 15:00:00,2875.595015576324 +2013-12-24 16:00:00,2897.4517133956388 +2013-12-24 17:00:00,2902.0031152647975 +2013-12-24 18:00:00,2659.3115264797507 +2013-12-24 19:00:00,2131.753894080997 +2013-12-24 20:00:00,1729.146417445483 +2013-12-24 21:00:00,1541.0155763239875 +2013-12-24 22:00:00,1431.404984423676 +2013-12-24 23:00:00,1325.5669781931465 +2013-12-25 00:00:00,1240.968847352025 +2013-12-25 01:00:00,1168.9158878504672 +2013-12-25 02:00:00,1142.9563862928348 +2013-12-25 03:00:00,1122.1526479750778 +2013-12-25 04:00:00,1089.6479750778817 +2013-12-25 05:00:00,1104.380062305296 +2013-12-25 06:00:00,1121.0654205607477 +2013-12-25 07:00:00,1133.9968847352025 +2013-12-25 08:00:00,1175.6168224299065 +2013-12-25 09:00:00,1287.056074766355 +2013-12-25 10:00:00,1414.1495327102805 +2013-12-25 11:00:00,1470.0280373831777 +2013-12-25 12:00:00,1611.8753894080996 +2013-12-25 13:00:00,1585.7071651090343 +2013-12-25 14:00:00,1592.7881619937696 +2013-12-25 15:00:00,1583.2647975077882 +2013-12-25 16:00:00,1600.4080996884736 +2013-12-25 17:00:00,1669.7912772585669 +2013-12-25 18:00:00,1782.1526479750778 +2013-12-25 19:00:00,1759.9158878504672 +2013-12-25 20:00:00,1750.9158878504672 +2013-12-25 21:00:00,1671.1806853582555 +2013-12-25 22:00:00,1588.8504672897195 +2013-12-25 23:00:00,1492.8566978193146 +2013-12-26 00:00:00,1391.5919003115264 +2013-12-26 01:00:00,1172.601246105919 +2013-12-26 02:00:00,1113.98753894081 +2013-12-26 03:00:00,1108.202492211838 +2013-12-26 04:00:00,1110.760124610592 +2013-12-26 05:00:00,1194.0841121495328 +2013-12-26 06:00:00,1371.993769470405 +2013-12-26 07:00:00,1654.4672897196263 +2013-12-26 08:00:00,1865.411214953271 +2013-12-26 09:00:00,2231.1308411214955 +2013-12-26 10:00:00,2511.221183800623 +2013-12-26 11:00:00,2701.2056074766356 +2013-12-26 12:00:00,2774.8691588785045 +2013-12-26 13:00:00,2789.2616822429904 +2013-12-26 14:00:00,2772.669781931464 +2013-12-26 15:00:00,2783.4330218068535 +2013-12-26 16:00:00,2871.8535825545173 +2013-12-26 17:00:00,2984.479750778816 +2013-12-26 18:00:00,3077.8629283489095 +2013-12-26 19:00:00,3088.7476635514017 +2013-12-26 20:00:00,2943.031152647975 +2013-12-26 21:00:00,2799.669781931464 +2013-12-26 22:00:00,2557.728971962617 +2013-12-26 23:00:00,2200.847352024922 +2013-12-27 00:00:00,1813.9501557632398 +2013-12-27 01:00:00,1391.4299065420562 +2013-12-27 02:00:00,1297.0778816199377 +2013-12-27 03:00:00,1260.9781931464174 +2013-12-27 04:00:00,1244.4143302180685 +2013-12-27 05:00:00,1295.1495327102805 +2013-12-27 06:00:00,1511.5358255451713 +2013-12-27 07:00:00,1737.3302180685357 +2013-12-27 08:00:00,1899.271028037383 +2013-12-27 09:00:00,2357.3707165109035 +2013-12-27 10:00:00,2659.6105919003116 +2013-12-27 11:00:00,2744.3052959501556 +2013-12-27 12:00:00,2808.9439252336447 +2013-12-27 13:00:00,2838.4392523364486 +2013-12-27 14:00:00,2826.1869158878503 +2013-12-27 15:00:00,2879.02492211838 +2013-12-27 16:00:00,3154.8255451713394 +2013-12-27 17:00:00,3089.052959501558 +2013-12-27 18:00:00,3175.314641744548 +2013-12-27 19:00:00,3127.676012461059 +2013-12-27 20:00:00,3021.299065420561 +2013-12-27 21:00:00,2846.816199376947 +2013-12-27 22:00:00,2600.6947040498444 +2013-12-27 23:00:00,2280.3115264797507 +2013-12-28 00:00:00,1842.127725856698 +2013-12-28 01:00:00,1502.5669781931465 +2013-12-28 02:00:00,1355.348909657321 +2013-12-28 03:00:00,1253.8785046728972 +2013-12-28 04:00:00,1244.5358255451713 +2013-12-28 05:00:00,1275.5077881619939 +2013-12-28 06:00:00,1458.9595015576324 +2013-12-28 07:00:00,1689.0218068535826 +2013-12-28 08:00:00,1848.8068535825546 +2013-12-28 09:00:00,2362.4205607476633 +2013-12-28 10:00:00,2654.239875389408 +2013-12-28 11:00:00,2744.6884735202493 +2013-12-28 12:00:00,2845.993769470405 +2013-12-28 13:00:00,2747.4205607476633 +2013-12-28 14:00:00,2751.090342679128 +2013-12-28 15:00:00,2801.2616822429904 +2013-12-28 16:00:00,2866.314641744548 +2013-12-28 17:00:00,3001.308411214953 +2013-12-28 18:00:00,3121.1557632398753 +2013-12-28 19:00:00,3074.0716510903426 +2013-12-28 20:00:00,2968.5919003115264 +2013-12-28 21:00:00,2785.894080996885 +2013-12-28 22:00:00,2532.5233644859813 +2013-12-28 23:00:00,2230.797507788162 +2013-12-29 00:00:00,1794.2616822429907 +2013-12-29 01:00:00,1421.4579439252336 +2013-12-29 02:00:00,1310.0498442367602 +2013-12-29 03:00:00,1268.3769470404984 +2013-12-29 04:00:00,1158.4517133956385 +2013-12-29 05:00:00,1232.1806853582555 +2013-12-29 06:00:00,1407.9532710280373 +2013-12-29 07:00:00,1665.613707165109 +2013-12-29 08:00:00,1792.6853582554518 +2013-12-29 09:00:00,2332.6230529595014 +2013-12-29 10:00:00,2624.7102803738317 +2013-12-29 11:00:00,2749.5233644859813 +2013-12-29 12:00:00,2852.9439252336447 +2013-12-29 13:00:00,2708.919003115265 +2013-12-29 14:00:00,2725.93769470405 +2013-12-29 15:00:00,2771.613707165109 +2013-12-29 16:00:00,2787.152647975078 +2013-12-29 17:00:00,2911.467289719626 +2013-12-29 18:00:00,3043.644859813084 +2013-12-29 19:00:00,3012.909657320872 +2013-12-29 20:00:00,2901.968847352025 +2013-12-29 21:00:00,2726.5825545171338 +2013-12-29 22:00:00,2459.4704049844236 +2013-12-29 23:00:00,2013.607476635514 +2013-12-30 00:00:00,1666.146417445483 +2013-12-30 01:00:00,1267.3115264797507 +2013-12-30 02:00:00,1185.5389408099688 +2013-12-30 03:00:00,1163.0 +2013-12-30 04:00:00,1156.0841121495328 +2013-12-30 05:00:00,1273.2928348909657 +2013-12-30 06:00:00,1429.8380062305296 +2013-12-30 07:00:00,1688.386292834891 +2013-12-30 08:00:00,1883.7538940809968 +2013-12-30 09:00:00,2336.6791277258567 +2013-12-30 10:00:00,2622.308411214953 +2013-12-30 11:00:00,2733.772585669782 +2013-12-30 12:00:00,2826.669781931464 +2013-12-30 13:00:00,2837.5981308411215 +2013-12-30 14:00:00,2826.894080996885 +2013-12-30 15:00:00,2910.264797507788 +2013-12-30 16:00:00,2986.654205607477 +2013-12-30 17:00:00,3070.1401869158876 +2013-12-30 18:00:00,3130.728971962617 +2013-12-30 19:00:00,3109.330218068536 +2013-12-30 20:00:00,3046.5233644859813 +2013-12-30 21:00:00,2867.510903426791 +2013-12-30 22:00:00,2558.785046728972 +2013-12-30 23:00:00,2158.92523364486 +2013-12-31 00:00:00,1796.9376947040498 +2013-12-31 01:00:00,1517.8006230529595 +2013-12-31 02:00:00,1432.1744548286604 +2013-12-31 03:00:00,1412.1183800623053 +2013-12-31 04:00:00,1415.3582554517134 +2013-12-31 05:00:00,1458.2803738317757 +2013-12-31 06:00:00,1694.816199376947 +2013-12-31 07:00:00,1899.6479750778817 +2013-12-31 08:00:00,2044.1308411214952 +2013-12-31 09:00:00,2393.8504672897197 +2013-12-31 10:00:00,2701.0155763239877 +2013-12-31 11:00:00,2988.308411214953 +2013-12-31 12:00:00,2880.6947040498444 +2013-12-31 13:00:00,2925.2803738317757 +2013-12-31 14:00:00,2951.669781931464 +2013-12-31 15:00:00,2923.7196261682243 +2013-12-31 16:00:00,2907.809968847352 +2013-12-31 17:00:00,2901.214953271028 +2013-12-31 18:00:00,2887.6573208722743 +2013-12-31 19:00:00,2449.3644859813085 +2013-12-31 20:00:00,1796.1308411214952 +2013-12-31 21:00:00,1518.9470404984424 +2013-12-31 22:00:00,1413.221183800623 +2013-12-31 23:00:00,1302.6230529595016 +2014-01-01 00:00:00,1226.3084112149534 +2014-01-01 01:00:00,1172.2928348909657 +2014-01-01 02:00:00,1161.2087227414331 +2014-01-01 03:00:00,1158.5233644859813 +2014-01-01 04:00:00,1120.6728971962616 +2014-01-01 05:00:00,1089.5514018691588 +2014-01-01 06:00:00,1104.3457943925234 +2014-01-01 07:00:00,1133.1713395638628 +2014-01-01 08:00:00,1188.9968847352025 +2014-01-01 09:00:00,1297.1869158878505 +2014-01-01 10:00:00,1432.5420560747664 +2014-01-01 11:00:00,1467.5389408099688 +2014-01-01 12:00:00,1661.7102803738317 +2014-01-01 13:00:00,1617.6355140186915 +2014-01-01 14:00:00,1655.9096573208724 +2014-01-01 15:00:00,1620.6884735202493 +2014-01-01 16:00:00,1653.6355140186915 +2014-01-01 17:00:00,1743.3644859813085 +2014-01-01 18:00:00,1826.3520249221183 +2014-01-01 19:00:00,1850.8691588785048 +2014-01-01 20:00:00,1831.816199376947 +2014-01-01 21:00:00,1787.6479750778817 +2014-01-01 22:00:00,1703.3115264797507 +2014-01-01 23:00:00,1575.8099688473521 +2014-01-02 00:00:00,1436.386292834891 +2014-01-02 01:00:00,1206.8255451713396 +2014-01-02 02:00:00,1156.822429906542 +2014-01-02 03:00:00,1159.9190031152648 +2014-01-02 04:00:00,1165.8598130841121 +2014-01-02 05:00:00,1286.0342679127725 +2014-01-02 06:00:00,1452.1121495327102 +2014-01-02 07:00:00,1693.9719626168223 +2014-01-02 08:00:00,1842.6978193146417 +2014-01-02 09:00:00,2284.442367601246 +2014-01-02 10:00:00,2577.5669781931465 +2014-01-02 11:00:00,2675.127725856698 +2014-01-02 12:00:00,2763.931464174455 +2014-01-02 13:00:00,2787.4641744548285 +2014-01-02 14:00:00,2798.3520249221183 +2014-01-02 15:00:00,2824.8130841121497 +2014-01-02 16:00:00,2896.286604361371 +2014-01-02 17:00:00,2996.5077881619936 +2014-01-02 18:00:00,3056.601246105919 +2014-01-02 19:00:00,3053.3489096573207 +2014-01-02 20:00:00,2950.6199376947043 +2014-01-02 21:00:00,2727.7943925233644 +2014-01-02 22:00:00,2463.2242990654204 +2014-01-02 23:00:00,2077.9781931464177 +2014-01-03 00:00:00,1675.9501557632398 +2014-01-03 01:00:00,1323.03738317757 +2014-01-03 02:00:00,1261.4299065420562 +2014-01-03 03:00:00,1233.853582554517 +2014-01-03 04:00:00,1215.9408099688474 +2014-01-03 05:00:00,1269.8971962616822 +2014-01-03 06:00:00,1489.9595015576324 +2014-01-03 07:00:00,1690.2118380062304 +2014-01-03 08:00:00,1857.1744548286604 +2014-01-03 09:00:00,2311.271028037383 +2014-01-03 10:00:00,2869.956386292835 +2014-01-03 11:00:00,2724.6791277258567 +2014-01-03 12:00:00,2795.5295950155764 +2014-01-03 13:00:00,2850.601246105919 +2014-01-03 14:00:00,2794.5015576323985 +2014-01-03 15:00:00,2846.2803738317757 +2014-01-03 16:00:00,2870.9595015576324 +2014-01-03 17:00:00,3019.8971962616824 +2014-01-03 18:00:00,3065.772585669782 +2014-01-03 19:00:00,3086.06230529595 +2014-01-03 20:00:00,3006.3894080996884 +2014-01-03 21:00:00,2840.277258566978 +2014-01-03 22:00:00,2516.398753894081 +2014-01-03 23:00:00,2145.2834890965732 +2014-01-04 00:00:00,1730.943925233645 +2014-01-04 01:00:00,1433.545171339564 +2014-01-04 02:00:00,1332.252336448598 +2014-01-04 03:00:00,1210.2242990654206 +2014-01-04 04:00:00,1174.8691588785048 +2014-01-04 05:00:00,1229.7632398753894 +2014-01-04 06:00:00,1426.5202492211838 +2014-01-04 07:00:00,1649.0342679127725 +2014-01-04 08:00:00,1812.2772585669782 +2014-01-04 09:00:00,2320.0996884735205 +2014-01-04 10:00:00,2739.878504672897 +2014-01-04 11:00:00,2793.7476635514017 +2014-01-04 12:00:00,2792.872274143302 +2014-01-04 13:00:00,2780.6510903426793 +2014-01-04 14:00:00,2762.520249221184 +2014-01-04 15:00:00,2822.330218068536 +2014-01-04 16:00:00,2800.3177570093458 +2014-01-04 17:00:00,2975.0778816199377 +2014-01-04 18:00:00,3074.02492211838 +2014-01-04 19:00:00,3008.4018691588785 +2014-01-04 20:00:00,2934.302180685358 +2014-01-04 21:00:00,2735.1806853582552 +2014-01-04 22:00:00,2507.8971962616824 +2014-01-04 23:00:00,2124.7632398753894 +2014-01-05 00:00:00,1688.4454828660437 +2014-01-05 01:00:00,1369.3271028037384 +2014-01-05 02:00:00,1281.563862928349 +2014-01-05 03:00:00,1243.0747663551401 +2014-01-05 04:00:00,1113.4018691588785 +2014-01-05 05:00:00,1187.5607476635514 +2014-01-05 06:00:00,1397.4922118380061 +2014-01-05 07:00:00,1617.6448598130842 +2014-01-05 08:00:00,1768.2492211838007 +2014-01-05 09:00:00,2281.0841121495328 +2014-01-05 10:00:00,2685.4641744548285 +2014-01-05 11:00:00,2715.570093457944 +2014-01-05 12:00:00,2790.202492211838 +2014-01-05 13:00:00,2730.4548286604363 +2014-01-05 14:00:00,2742.7165109034268 +2014-01-05 15:00:00,2699.4517133956388 +2014-01-05 16:00:00,2813.336448598131 +2014-01-05 17:00:00,2885.97507788162 +2014-01-05 18:00:00,3002.538940809969 +2014-01-05 19:00:00,2995.8442367601247 +2014-01-05 20:00:00,2865.956386292835 +2014-01-05 21:00:00,2720.8753894080996 +2014-01-05 22:00:00,2389.068535825545 +2014-01-05 23:00:00,1933.1214953271028 +2014-01-06 00:00:00,1594.4641744548287 +2014-01-06 01:00:00,1234.7507788161993 +2014-01-06 02:00:00,1206.7694704049845 +2014-01-06 03:00:00,1194.1495327102805 +2014-01-06 04:00:00,1181.454828660436 +2014-01-06 05:00:00,1248.3894080996886 +2014-01-06 06:00:00,1429.563862928349 +2014-01-06 07:00:00,1683.7040498442368 +2014-01-06 08:00:00,1760.4672897196263 +2014-01-06 09:00:00,2308.373831775701 +2014-01-06 10:00:00,2619.059190031153 +2014-01-06 11:00:00,2696.6479750778817 +2014-01-06 12:00:00,2684.2492211838007 +2014-01-06 13:00:00,2706.3115264797507 +2014-01-06 14:00:00,2744.355140186916 +2014-01-06 15:00:00,2837.3831775700933 +2014-01-06 16:00:00,2868.2834890965732 +2014-01-06 17:00:00,2952.9595015576324 +2014-01-06 18:00:00,3012.2118380062307 +2014-01-06 19:00:00,3046.9003115264795 +2014-01-06 20:00:00,2962.0155763239877 +2014-01-06 21:00:00,2779.4392523364486 +2014-01-06 22:00:00,2484.785046728972 +2014-01-06 23:00:00,2027.4797507788162 +2014-01-07 00:00:00,1638.9314641744547 +2014-01-07 01:00:00,1297.7196261682243 +2014-01-07 02:00:00,1234.1557632398753 +2014-01-07 03:00:00,1208.632398753894 +2014-01-07 04:00:00,1201.993769470405 +2014-01-07 05:00:00,1262.6448598130842 +2014-01-07 06:00:00,1460.3177570093458 +2014-01-07 07:00:00,1724.619937694704 +2014-01-07 08:00:00,1861.1121495327102 +2014-01-07 09:00:00,2329.3333333333335 +2014-01-07 10:00:00,2601.9906542056074 +2014-01-07 11:00:00,2631.221183800623 +2014-01-07 12:00:00,2748.613707165109 +2014-01-07 13:00:00,2719.2429906542056 +2014-01-07 14:00:00,2758.797507788162 +2014-01-07 15:00:00,2773.8598130841124 +2014-01-07 16:00:00,2740.7320872274145 +2014-01-07 17:00:00,2901.3333333333335 +2014-01-07 18:00:00,2965.4018691588785 +2014-01-07 19:00:00,2926.691588785047 +2014-01-07 20:00:00,2863.07476635514 +2014-01-07 21:00:00,2725.3208722741433 +2014-01-07 22:00:00,2414.196261682243 +2014-01-07 23:00:00,2001.993769470405 +2014-01-08 00:00:00,1618.7071651090343 +2014-01-08 01:00:00,1293.3084112149534 +2014-01-08 02:00:00,1220.601246105919 +2014-01-08 03:00:00,1212.3769470404984 +2014-01-08 04:00:00,1211.5669781931465 +2014-01-08 05:00:00,1247.6168224299065 +2014-01-08 06:00:00,1472.1152647975077 +2014-01-08 07:00:00,1703.2429906542056 +2014-01-08 08:00:00,1875.6697819314643 +2014-01-08 09:00:00,2307.2429906542056 +2014-01-08 10:00:00,2771.6199376947043 +2014-01-08 11:00:00,2703.9345794392525 +2014-01-08 12:00:00,2804.809968847352 +2014-01-08 13:00:00,2775.264797507788 +2014-01-08 14:00:00,2808.1308411214955 +2014-01-08 15:00:00,2818.3052959501556 +2014-01-08 16:00:00,2821.4984423676015 +2014-01-08 17:00:00,2915.7414330218066 +2014-01-08 18:00:00,3042.4205607476633 +2014-01-08 19:00:00,3010.4922118380064 +2014-01-08 20:00:00,2949.557632398754 +2014-01-08 21:00:00,2745.4548286604363 +2014-01-08 22:00:00,2452.766355140187 +2014-01-08 23:00:00,2001.563862928349 +2014-01-09 00:00:00,1590.968847352025 +2014-01-09 01:00:00,1262.8847352024923 +2014-01-09 02:00:00,1203.2585669781931 +2014-01-09 03:00:00,1173.417445482866 +2014-01-09 04:00:00,1161.4859813084113 +2014-01-09 05:00:00,1216.1401869158879 +2014-01-09 06:00:00,1432.2772585669782 +2014-01-09 07:00:00,1688.1152647975077 +2014-01-09 08:00:00,1818.0498442367602 +2014-01-09 09:00:00,2310.9719626168226 +2014-01-09 10:00:00,2583.9781931464177 +2014-01-09 11:00:00,2723.5732087227416 +2014-01-09 12:00:00,2710.563862928349 +2014-01-09 13:00:00,2722.7881619937693 +2014-01-09 14:00:00,2749.239875389408 +2014-01-09 15:00:00,2772.6573208722743 +2014-01-09 16:00:00,2758.0093457943926 +2014-01-09 17:00:00,2826.8255451713394 +2014-01-09 18:00:00,2942.8629283489095 +2014-01-09 19:00:00,2930.8629283489095 +2014-01-09 20:00:00,2887.1370716510905 +2014-01-09 21:00:00,2743.457943925234 +2014-01-09 22:00:00,2404.3831775700933 +2014-01-09 23:00:00,2011.9750778816199 +2014-01-10 00:00:00,1612.221183800623 +2014-01-10 01:00:00,1276.7165109034268 +2014-01-10 02:00:00,1189.7414330218069 +2014-01-10 03:00:00,1181.4205607476636 +2014-01-10 04:00:00,1151.436137071651 +2014-01-10 05:00:00,1209.423676012461 +2014-01-10 06:00:00,1434.0529595015576 +2014-01-10 07:00:00,1704.3894080996886 +2014-01-10 08:00:00,1833.1121495327102 +2014-01-10 09:00:00,2286.6168224299067 +2014-01-10 10:00:00,2583.940809968847 +2014-01-10 11:00:00,2684.3115264797507 +2014-01-10 12:00:00,2771.6822429906542 +2014-01-10 13:00:00,2787.735202492212 +2014-01-10 14:00:00,2720.1090342679126 +2014-01-10 15:00:00,2744.6230529595014 +2014-01-10 16:00:00,2817.2429906542056 +2014-01-10 17:00:00,2852.3052959501556 +2014-01-10 18:00:00,3006.0654205607475 +2014-01-10 19:00:00,2995.0498442367602 +2014-01-10 20:00:00,2943.6292834890965 +2014-01-10 21:00:00,2769.3177570093458 +2014-01-10 22:00:00,2478.4641744548285 +2014-01-10 23:00:00,2104.386292834891 +2014-01-11 00:00:00,1668.4672897196263 +2014-01-11 01:00:00,1376.8753894080996 +2014-01-11 02:00:00,1262.5077881619939 +2014-01-11 03:00:00,1180.2087227414331 +2014-01-11 04:00:00,1134.9719626168223 +2014-01-11 05:00:00,1189.5576323987539 +2014-01-11 06:00:00,1408.183800623053 +2014-01-11 07:00:00,1583.0218068535826 +2014-01-11 08:00:00,1717.8006230529595 +2014-01-11 09:00:00,2233.96261682243 +2014-01-11 10:00:00,2571.5140186915887 +2014-01-11 11:00:00,2644.3582554517134 +2014-01-11 12:00:00,2720.5451713395637 +2014-01-11 13:00:00,2754.2242990654204 +2014-01-11 14:00:00,2671.121495327103 +2014-01-11 15:00:00,2712.3644859813085 +2014-01-11 16:00:00,2778.5669781931465 +2014-01-11 17:00:00,2848.105919003115 +2014-01-11 18:00:00,3043.264797507788 +2014-01-11 19:00:00,3050.299065420561 +2014-01-11 20:00:00,2968.4267912772584 +2014-01-11 21:00:00,2748.613707165109 +2014-01-11 22:00:00,2464.271028037383 +2014-01-11 23:00:00,2076.613707165109 +2014-01-12 00:00:00,1675.8099688473521 +2014-01-12 01:00:00,1388.8598130841121 +2014-01-12 02:00:00,1313.0249221183801 +2014-01-12 03:00:00,1272.4579439252336 +2014-01-12 04:00:00,1161.4672897196263 +2014-01-12 05:00:00,1220.417445482866 +2014-01-12 06:00:00,1446.7507788161993 +2014-01-12 07:00:00,1612.3395638629283 +2014-01-12 08:00:00,1722.5077881619939 +2014-01-12 09:00:00,2236.6604361370714 +2014-01-12 10:00:00,2553.744548286604 +2014-01-12 11:00:00,2744.202492211838 +2014-01-12 12:00:00,2713.778816199377 +2014-01-12 13:00:00,2713.8255451713394 +2014-01-12 14:00:00,2844.6230529595014 +2014-01-12 15:00:00,2777.127725856698 +2014-01-12 16:00:00,2766.208722741433 +2014-01-12 17:00:00,2872.9719626168226 +2014-01-12 18:00:00,2978.98753894081 +2014-01-12 19:00:00,2966.442367601246 +2014-01-12 20:00:00,2855.797507788162 +2014-01-12 21:00:00,2721.638629283489 +2014-01-12 22:00:00,2335.03738317757 +2014-01-12 23:00:00,1873.7507788161993 +2014-01-13 00:00:00,1510.6542056074766 +2014-01-13 01:00:00,1203.165109034268 +2014-01-13 02:00:00,1150.9563862928348 +2014-01-13 03:00:00,1147.01246105919 +2014-01-13 04:00:00,1129.8255451713396 +2014-01-13 05:00:00,1211.3364485981308 +2014-01-13 06:00:00,1401.545171339564 +2014-01-13 07:00:00,1589.8317757009345 +2014-01-13 08:00:00,1740.2897196261683 +2014-01-13 09:00:00,2247.5981308411215 +2014-01-13 10:00:00,2597.1744548286606 +2014-01-13 11:00:00,2646.2585669781934 +2014-01-13 12:00:00,2701.080996884735 +2014-01-13 13:00:00,2683.5732087227416 +2014-01-13 14:00:00,2720.3052959501556 +2014-01-13 15:00:00,2649.355140186916 +2014-01-13 16:00:00,2725.7694704049845 +2014-01-13 17:00:00,2811.2616822429904 +2014-01-13 18:00:00,2938.392523364486 +2014-01-13 19:00:00,2941.5015576323985 +2014-01-13 20:00:00,2866.052959501558 +2014-01-13 21:00:00,2705.654205607477 +2014-01-13 22:00:00,2378.105919003115 +2014-01-13 23:00:00,2002.1744548286604 +2014-01-14 00:00:00,1601.0342679127725 +2014-01-14 01:00:00,1291.1557632398753 +2014-01-14 02:00:00,1211.5295950155764 +2014-01-14 03:00:00,1192.2647975077882 +2014-01-14 04:00:00,1171.3146417445482 +2014-01-14 05:00:00,1239.177570093458 +2014-01-14 06:00:00,1451.4922118380061 +2014-01-14 07:00:00,1639.872274143302 +2014-01-14 08:00:00,1777.2087227414331 +2014-01-14 09:00:00,2256.2180685358258 +2014-01-14 10:00:00,2548.392523364486 +2014-01-14 11:00:00,2636.177570093458 +2014-01-14 12:00:00,2663.676012461059 +2014-01-14 13:00:00,2713.4392523364486 +2014-01-14 14:00:00,2679.221183800623 +2014-01-14 15:00:00,2680.7196261682243 +2014-01-14 16:00:00,2767.4143302180687 +2014-01-14 17:00:00,2771.5825545171338 +2014-01-14 18:00:00,2927.183800623053 +2014-01-14 19:00:00,2933.0560747663553 +2014-01-14 20:00:00,2878.0716510903426 +2014-01-14 21:00:00,2656.0654205607475 +2014-01-14 22:00:00,2423.6292834890965 +2014-01-14 23:00:00,1983.3084112149534 +2014-01-15 00:00:00,1594.6728971962616 +2014-01-15 01:00:00,1270.3582554517134 +2014-01-15 02:00:00,1223.9781931464174 +2014-01-15 03:00:00,1189.4922118380061 +2014-01-15 04:00:00,1174.3582554517134 +2014-01-15 05:00:00,1221.7414330218069 +2014-01-15 06:00:00,1458.221183800623 +2014-01-15 07:00:00,1641.214953271028 +2014-01-15 08:00:00,1768.7725856697818 +2014-01-15 09:00:00,2265.345794392523 +2014-01-15 10:00:00,2596.4267912772584 +2014-01-15 11:00:00,2657.4143302180687 +2014-01-15 12:00:00,2775.526479750779 +2014-01-15 13:00:00,2709.5358255451715 +2014-01-15 14:00:00,2719.9595015576324 +2014-01-15 15:00:00,2712.728971962617 +2014-01-15 16:00:00,2725.96261682243 +2014-01-15 17:00:00,2851.4267912772584 +2014-01-15 18:00:00,2945.93769470405 +2014-01-15 19:00:00,3041.7570093457944 +2014-01-15 20:00:00,2836.467289719626 +2014-01-15 21:00:00,2725.697819314642 +2014-01-15 22:00:00,2398.171339563863 +2014-01-15 23:00:00,1951.3115264797507 +2014-01-16 00:00:00,1578.4672897196263 +2014-01-16 01:00:00,1274.8940809968847 +2014-01-16 02:00:00,1202.545171339564 +2014-01-16 03:00:00,1180.5420560747664 +2014-01-16 04:00:00,1152.5981308411215 +2014-01-16 05:00:00,1192.1152647975077 +2014-01-16 06:00:00,1414.177570093458 +2014-01-16 07:00:00,1603.4859813084113 +2014-01-16 08:00:00,1737.6448598130842 +2014-01-16 09:00:00,2252.127725856698 +2014-01-16 10:00:00,2527.7881619937693 +2014-01-16 11:00:00,2590.286604361371 +2014-01-16 12:00:00,2725.314641744548 +2014-01-16 13:00:00,2680.457943925234 +2014-01-16 14:00:00,2690.557632398754 +2014-01-16 15:00:00,2710.0996884735205 +2014-01-16 16:00:00,2702.7507788161993 +2014-01-16 17:00:00,2763.264797507788 +2014-01-16 18:00:00,2909.92523364486 +2014-01-16 19:00:00,2941.0654205607475 +2014-01-16 20:00:00,2837.4828660436137 +2014-01-16 21:00:00,2683.177570093458 +2014-01-16 22:00:00,2385.4859813084113 +2014-01-16 23:00:00,1948.3177570093458 +2014-01-17 00:00:00,1568.8006230529595 +2014-01-17 01:00:00,1230.6978193146417 +2014-01-17 02:00:00,1156.4454828660437 +2014-01-17 03:00:00,1141.4641744548287 +2014-01-17 04:00:00,1122.3271028037384 +2014-01-17 05:00:00,1183.7383177570093 +2014-01-17 06:00:00,1408.7320872274142 +2014-01-17 07:00:00,1598.0467289719627 +2014-01-17 08:00:00,1790.7507788161993 +2014-01-17 09:00:00,2292.9719626168226 +2014-01-17 10:00:00,2585.07476635514 +2014-01-17 11:00:00,2677.177570093458 +2014-01-17 12:00:00,2735.8847352024923 +2014-01-17 13:00:00,2735.392523364486 +2014-01-17 14:00:00,2704.239875389408 +2014-01-17 15:00:00,2782.4018691588785 +2014-01-17 16:00:00,2808.766355140187 +2014-01-17 17:00:00,2821.894080996885 +2014-01-17 18:00:00,2949.834890965732 +2014-01-17 19:00:00,2929.5825545171338 +2014-01-17 20:00:00,2891.8255451713394 +2014-01-17 21:00:00,2679.292834890966 +2014-01-17 22:00:00,2443.1557632398753 +2014-01-17 23:00:00,2054.6105919003116 +2014-01-18 00:00:00,1636.1806853582555 +2014-01-18 01:00:00,1353.0093457943926 +2014-01-18 02:00:00,1234.1869158878505 +2014-01-18 03:00:00,1138.9781931464174 +2014-01-18 04:00:00,1103.582554517134 +2014-01-18 05:00:00,1172.7819314641745 +2014-01-18 06:00:00,1390.9750778816199 +2014-01-18 07:00:00,1597.5171339563863 +2014-01-18 08:00:00,1759.4423676012461 +2014-01-18 09:00:00,2293.2242990654204 +2014-01-18 10:00:00,2621.8598130841124 +2014-01-18 11:00:00,2696.208722741433 +2014-01-18 12:00:00,2739.1152647975077 +2014-01-18 13:00:00,2695.2180685358258 +2014-01-18 14:00:00,2646.105919003115 +2014-01-18 15:00:00,2705.632398753894 +2014-01-18 16:00:00,2762.177570093458 +2014-01-18 17:00:00,2793.6168224299067 +2014-01-18 18:00:00,2943.0934579439254 +2014-01-18 19:00:00,2930.1744548286606 +2014-01-18 20:00:00,2841.856697819315 +2014-01-18 21:00:00,2688.8753894080996 +2014-01-18 22:00:00,2373.663551401869 +2014-01-18 23:00:00,2024.613707165109 +2014-01-19 00:00:00,1633.7694704049845 +2014-01-19 01:00:00,1341.146417445483 +2014-01-19 02:00:00,1262.816199376947 +2014-01-19 03:00:00,1223.1152647975077 +2014-01-19 04:00:00,1081.8099688473521 +2014-01-19 05:00:00,1145.7694704049845 +2014-01-19 06:00:00,1358.252336448598 +2014-01-19 07:00:00,1593.1557632398753 +2014-01-19 08:00:00,1732.834890965732 +2014-01-19 09:00:00,2206.196261682243 +2014-01-19 10:00:00,2489.436137071651 +2014-01-19 11:00:00,2656.4174454828662 +2014-01-19 12:00:00,2660.448598130841 +2014-01-19 13:00:00,2542.2056074766356 +2014-01-19 14:00:00,2569.8629283489095 +2014-01-19 15:00:00,2646.208722741433 +2014-01-19 16:00:00,2587.588785046729 +2014-01-19 17:00:00,2681.043613707165 +2014-01-19 18:00:00,2827.7694704049845 +2014-01-19 19:00:00,2855.4828660436137 +2014-01-19 20:00:00,2763.0467289719627 +2014-01-19 21:00:00,2614.2679127725855 +2014-01-19 22:00:00,2251.663551401869 +2014-01-19 23:00:00,1837.7102803738317 +2014-01-20 00:00:00,1503.2429906542056 +2014-01-20 01:00:00,1193.5420560747664 +2014-01-20 02:00:00,1148.7133956386292 +2014-01-20 03:00:00,1126.6292834890967 +2014-01-20 04:00:00,1109.031152647975 +2014-01-20 05:00:00,1195.2616822429907 +2014-01-20 06:00:00,1376.202492211838 +2014-01-20 07:00:00,1660.386292834891 +2014-01-20 08:00:00,1793.0778816199377 +2014-01-20 09:00:00,2240.847352024922 +2014-01-20 10:00:00,2519.1308411214955 +2014-01-20 11:00:00,2638.9532710280373 +2014-01-20 12:00:00,2677.436137071651 +2014-01-20 13:00:00,2709.8130841121497 +2014-01-20 14:00:00,2658.685358255452 +2014-01-20 15:00:00,2700.88785046729 +2014-01-20 16:00:00,2721.233644859813 +2014-01-20 17:00:00,2786.1619937694704 +2014-01-20 18:00:00,2932.3208722741433 +2014-01-20 19:00:00,2851.4392523364486 +2014-01-20 20:00:00,2783.8068535825546 +2014-01-20 21:00:00,2629.707165109034 +2014-01-20 22:00:00,2317.0093457943926 +2014-01-20 23:00:00,1948.1588785046729 +2014-01-21 00:00:00,1570.1869158878505 +2014-01-21 01:00:00,1242.5295950155764 +2014-01-21 02:00:00,1169.1495327102805 +2014-01-21 03:00:00,1145.5015576323988 +2014-01-21 04:00:00,1128.1713395638628 +2014-01-21 05:00:00,1210.5919003115264 +2014-01-21 06:00:00,1419.214953271028 +2014-01-21 07:00:00,1661.3395638629283 +2014-01-21 08:00:00,1823.3208722741433 +2014-01-21 09:00:00,2269.2834890965732 +2014-01-21 10:00:00,2547.3115264797507 +2014-01-21 11:00:00,2715.809968847352 +2014-01-21 12:00:00,2725.6168224299067 +2014-01-21 13:00:00,2730.6168224299067 +2014-01-21 14:00:00,2711.4205607476633 +2014-01-21 15:00:00,2774.3956386292834 +2014-01-21 16:00:00,2806.9719626168226 +2014-01-21 17:00:00,2851.227414330218 +2014-01-21 18:00:00,3053.2429906542056 +2014-01-21 19:00:00,3074.735202492212 +2014-01-21 20:00:00,2893.5919003115264 +2014-01-21 21:00:00,2685.713395638629 +2014-01-21 22:00:00,2400.7196261682243 +2014-01-21 23:00:00,1968.271028037383 +2014-01-22 00:00:00,1580.380062305296 +2014-01-22 01:00:00,1255.5015576323988 +2014-01-22 02:00:00,1184.1619937694704 +2014-01-22 03:00:00,1161.9657320872275 +2014-01-22 04:00:00,1135.9470404984424 +2014-01-22 05:00:00,1206.3208722741433 +2014-01-22 06:00:00,1424.1183800623053 +2014-01-22 07:00:00,1646.6417445482866 +2014-01-22 08:00:00,1811.5358255451713 +2014-01-22 09:00:00,2298.0778816199377 +2014-01-22 10:00:00,2591.9781931464177 +2014-01-22 11:00:00,2626.031152647975 +2014-01-22 12:00:00,2719.177570093458 +2014-01-22 13:00:00,2749.006230529595 +2014-01-22 14:00:00,2744.0778816199377 +2014-01-22 15:00:00,2689.88785046729 +2014-01-22 16:00:00,2709.2897196261683 +2014-01-22 17:00:00,2732.4454828660437 +2014-01-22 18:00:00,2917.563862928349 +2014-01-22 19:00:00,2864.5358255451715 +2014-01-22 20:00:00,2832.816199376947 +2014-01-22 21:00:00,2681.9065420560746 +2014-01-22 22:00:00,2340.6168224299067 +2014-01-22 23:00:00,1932.6043613707166 +2014-01-23 00:00:00,1551.6417445482866 +2014-01-23 01:00:00,1229.6542056074766 +2014-01-23 02:00:00,1163.9127725856697 +2014-01-23 03:00:00,1138.8504672897195 +2014-01-23 04:00:00,1126.221183800623 +2014-01-23 05:00:00,1193.5015576323988 +2014-01-23 06:00:00,1404.386292834891 +2014-01-23 07:00:00,1675.7538940809968 +2014-01-23 08:00:00,1820.9595015576324 +2014-01-23 09:00:00,2264.7414330218066 +2014-01-23 10:00:00,2529.5015576323985 +2014-01-23 11:00:00,2666.3115264797507 +2014-01-23 12:00:00,2780.9657320872275 +2014-01-23 13:00:00,2807.791277258567 +2014-01-23 14:00:00,2787.909657320872 +2014-01-23 15:00:00,2720.6884735202493 +2014-01-23 16:00:00,2769.208722741433 +2014-01-23 17:00:00,2772.442367601246 +2014-01-23 18:00:00,2914.88785046729 +2014-01-23 19:00:00,2883.956386292835 +2014-01-23 20:00:00,2834.043613707165 +2014-01-23 21:00:00,2683.856697819315 +2014-01-23 22:00:00,2367.286604361371 +2014-01-23 23:00:00,1960.8816199376947 +2014-01-24 00:00:00,1583.853582554517 +2014-01-24 01:00:00,1293.8504672897195 +2014-01-24 02:00:00,1211.4392523364486 +2014-01-24 03:00:00,1166.4797507788162 +2014-01-24 04:00:00,1149.5669781931465 +2014-01-24 05:00:00,1219.6168224299065 +2014-01-24 06:00:00,1438.348909657321 +2014-01-24 07:00:00,1684.9190031152648 +2014-01-24 08:00:00,1848.9408099688474 +2014-01-24 09:00:00,2305.5825545171338 +2014-01-24 10:00:00,2558.0404984423676 +2014-01-24 11:00:00,2713.676012461059 +2014-01-24 12:00:00,2745.92523364486 +2014-01-24 13:00:00,2721.760124610592 +2014-01-24 14:00:00,2732.88785046729 +2014-01-24 15:00:00,2793.9221183800623 +2014-01-24 16:00:00,2782.330218068536 +2014-01-24 17:00:00,2880.8691588785045 +2014-01-24 18:00:00,2973.6947040498444 +2014-01-24 19:00:00,2935.7196261682243 +2014-01-24 20:00:00,2934.3395638629286 +2014-01-24 21:00:00,2739.722741433022 +2014-01-24 22:00:00,2479.090342679128 +2014-01-24 23:00:00,2091.691588785047 +2014-01-25 00:00:00,1666.526479750779 +2014-01-25 01:00:00,1385.6791277258567 +2014-01-25 02:00:00,1292.4797507788162 +2014-01-25 03:00:00,1198.2959501557632 +2014-01-25 04:00:00,1151.8753894080996 +2014-01-25 05:00:00,1215.0436137071652 +2014-01-25 06:00:00,1433.6168224299065 +2014-01-25 07:00:00,1657.0841121495328 +2014-01-25 08:00:00,1778.7694704049845 +2014-01-25 09:00:00,2294.2834890965732 +2014-01-25 10:00:00,2644.7819314641742 +2014-01-25 11:00:00,2781.152647975078 +2014-01-25 12:00:00,2790.654205607477 +2014-01-25 13:00:00,2724.722741433022 +2014-01-25 14:00:00,2730.760124610592 +2014-01-25 15:00:00,2766.473520249221 +2014-01-25 16:00:00,2807.993769470405 +2014-01-25 17:00:00,2853.133956386293 +2014-01-25 18:00:00,2989.5794392523367 +2014-01-25 19:00:00,2993.968847352025 +2014-01-25 20:00:00,2931.626168224299 +2014-01-25 21:00:00,2767.3489096573207 +2014-01-25 22:00:00,2423.3052959501556 +2014-01-25 23:00:00,2088.4205607476633 +2014-01-26 00:00:00,1684.2367601246106 +2014-01-26 01:00:00,1390.2492211838007 +2014-01-26 02:00:00,1313.2118380062304 +2014-01-26 03:00:00,1264.1308411214952 +2014-01-26 04:00:00,1123.9158878504672 +2014-01-26 05:00:00,1194.9003115264798 +2014-01-26 06:00:00,1398.0436137071652 +2014-01-26 07:00:00,1627.0716510903426 +2014-01-26 08:00:00,1734.8940809968847 +2014-01-26 09:00:00,2228.158878504673 +2014-01-26 10:00:00,2579.613707165109 +2014-01-26 11:00:00,2777.0404984423676 +2014-01-26 12:00:00,2806.576323987539 +2014-01-26 13:00:00,2745.722741433022 +2014-01-26 14:00:00,2664.676012461059 +2014-01-26 15:00:00,2717.6105919003116 +2014-01-26 16:00:00,2798.0778816199377 +2014-01-26 17:00:00,2787.4641744548285 +2014-01-26 18:00:00,2868.753894080997 +2014-01-26 19:00:00,2908.3582554517134 +2014-01-26 20:00:00,2870.3769470404986 +2014-01-26 21:00:00,2664.4174454828662 +2014-01-26 22:00:00,2370.576323987539 +2014-01-26 23:00:00,1929.5919003115264 +2014-01-27 00:00:00,1567.3115264797507 +2014-01-27 01:00:00,1246.1619937694704 +2014-01-27 02:00:00,1195.1121495327102 +2014-01-27 03:00:00,1186.601246105919 +2014-01-27 04:00:00,1173.4922118380061 +2014-01-27 05:00:00,1259.1246105919004 +2014-01-27 06:00:00,1454.3457943925234 +2014-01-27 07:00:00,1674.0934579439252 +2014-01-27 08:00:00,1830.576323987539 +2014-01-27 09:00:00,2277.7819314641742 +2014-01-27 10:00:00,2539.697819314642 +2014-01-27 11:00:00,2618.613707165109 +2014-01-27 12:00:00,2699.0467289719627 +2014-01-27 13:00:00,2688.6417445482866 +2014-01-27 14:00:00,2653.059190031153 +2014-01-27 15:00:00,2706.9345794392525 +2014-01-27 16:00:00,2722.299065420561 +2014-01-27 17:00:00,2766.0 +2014-01-27 18:00:00,2878.2305295950155 +2014-01-27 19:00:00,2846.4517133956388 +2014-01-27 20:00:00,2814.202492211838 +2014-01-27 21:00:00,2654.88785046729 +2014-01-27 22:00:00,2343.601246105919 +2014-01-27 23:00:00,1982.8909657320871 +2014-01-28 00:00:00,1613.7227414330218 +2014-01-28 01:00:00,1296.386292834891 +2014-01-28 02:00:00,1202.2554517133956 +2014-01-28 03:00:00,1179.4953271028037 +2014-01-28 04:00:00,1143.7133956386292 +2014-01-28 05:00:00,1217.1526479750778 +2014-01-28 06:00:00,1408.9283489096574 +2014-01-28 07:00:00,1653.361370716511 +2014-01-28 08:00:00,1834.3208722741433 +2014-01-28 09:00:00,2304.5981308411215 +2014-01-28 10:00:00,2589.504672897196 +2014-01-28 11:00:00,2685.411214953271 +2014-01-28 12:00:00,2767.302180685358 +2014-01-28 13:00:00,2709.202492211838 +2014-01-28 14:00:00,2723.031152647975 +2014-01-28 15:00:00,2740.3707165109035 +2014-01-28 16:00:00,2775.1993769470405 +2014-01-28 17:00:00,2840.6510903426793 +2014-01-28 18:00:00,2974.2959501557634 +2014-01-28 19:00:00,2895.5482866043612 +2014-01-28 20:00:00,2868.1090342679126 +2014-01-28 21:00:00,2716.133956386293 +2014-01-28 22:00:00,2372.2959501557634 +2014-01-28 23:00:00,1990.0031152647975 +2014-01-29 00:00:00,1575.9221183800623 +2014-01-29 01:00:00,1242.2866043613708 +2014-01-29 02:00:00,1183.7196261682243 +2014-01-29 03:00:00,1158.9719626168223 +2014-01-29 04:00:00,1129.4299065420562 +2014-01-29 05:00:00,1208.0716510903426 +2014-01-29 06:00:00,1380.8068535825546 +2014-01-29 07:00:00,1629.0249221183801 +2014-01-29 08:00:00,1799.6479750778817 +2014-01-29 09:00:00,2267.8068535825546 +2014-01-29 10:00:00,2530.7040498442366 +2014-01-29 11:00:00,2629.4267912772584 +2014-01-29 12:00:00,2689.5607476635514 +2014-01-29 13:00:00,2621.685358255452 +2014-01-29 14:00:00,2692.7819314641742 +2014-01-29 15:00:00,2683.766355140187 +2014-01-29 16:00:00,2695.638629283489 +2014-01-29 17:00:00,2752.4454828660437 +2014-01-29 18:00:00,2867.2305295950155 +2014-01-29 19:00:00,2890.07476635514 +2014-01-29 20:00:00,2831.88785046729 +2014-01-29 21:00:00,2648.4922118380064 +2014-01-29 22:00:00,2365.644859813084 +2014-01-29 23:00:00,1952.4330218068535 +2014-01-30 00:00:00,1545.3177570093458 +2014-01-30 01:00:00,1238.4392523364486 +2014-01-30 02:00:00,1163.9719626168223 +2014-01-30 03:00:00,1134.3333333333333 +2014-01-30 04:00:00,1120.3894080996886 +2014-01-30 05:00:00,1187.778816199377 +2014-01-30 06:00:00,1403.6355140186915 +2014-01-30 07:00:00,1629.9750778816199 +2014-01-30 08:00:00,1818.6417445482866 +2014-01-30 09:00:00,2265.8068535825546 +2014-01-30 10:00:00,2531.01246105919 +2014-01-30 11:00:00,2671.2834890965732 +2014-01-30 12:00:00,2712.7757009345796 +2014-01-30 13:00:00,2666.9345794392525 +2014-01-30 14:00:00,2716.1806853582552 +2014-01-30 15:00:00,2731.9283489096574 +2014-01-30 16:00:00,2764.9283489096574 +2014-01-30 17:00:00,2751.6791277258567 +2014-01-30 18:00:00,2910.1370716510905 +2014-01-30 19:00:00,2924.5545171339563 +2014-01-30 20:00:00,2858.93769470405 +2014-01-30 21:00:00,2707.06230529595 +2014-01-30 22:00:00,2396.510903426791 +2014-01-30 23:00:00,1996.588785046729 +2014-01-31 00:00:00,1583.9408099688474 +2014-01-31 01:00:00,1282.8006230529595 +2014-01-31 02:00:00,1229.7165109034268 +2014-01-31 03:00:00,1199.0218068535826 +2014-01-31 04:00:00,1190.6604361370717 +2014-01-31 05:00:00,1243.3582554517134 +2014-01-31 06:00:00,1441.5327102803737 +2014-01-31 07:00:00,1671.3052959501558 +2014-01-31 08:00:00,1831.7912772585669 +2014-01-31 09:00:00,2318.1619937694704 +2014-01-31 10:00:00,2590.221183800623 +2014-01-31 11:00:00,2675.1308411214955 +2014-01-31 12:00:00,2771.398753894081 +2014-01-31 13:00:00,2733.196261682243 +2014-01-31 14:00:00,2721.7040498442366 +2014-01-31 15:00:00,2792.6168224299067 +2014-01-31 16:00:00,2848.208722741433 +2014-01-31 17:00:00,2834.214953271028 +2014-01-31 18:00:00,2978.3831775700933 +2014-01-31 19:00:00,2978.457943925234 +2014-01-31 20:00:00,2918.308411214953 +2014-01-31 21:00:00,2777.601246105919 +2014-01-31 22:00:00,2512.607476635514 +2014-01-31 23:00:00,2106.993769470405 +2014-02-01 00:00:00,1690.0903426791276 +2014-02-01 01:00:00,1395.2274143302182 +2014-02-01 02:00:00,1306.214953271028 +2014-02-01 03:00:00,1202.7009345794393 +2014-02-01 04:00:00,1166.8099688473521 +2014-02-01 05:00:00,1222.943925233645 +2014-02-01 06:00:00,1426.1121495327102 +2014-02-01 07:00:00,1629.0872274143303 +2014-02-01 08:00:00,1769.5109034267912 +2014-02-01 09:00:00,2303.809968847352 +2014-02-01 10:00:00,2650.6573208722743 +2014-02-01 11:00:00,2693.707165109034 +2014-02-01 12:00:00,2788.345794392523 +2014-02-01 13:00:00,2710.92523364486 +2014-02-01 14:00:00,2650.4392523364486 +2014-02-01 15:00:00,2720.277258566978 +2014-02-01 16:00:00,2771.878504672897 +2014-02-01 17:00:00,2803.06230529595 +2014-02-01 18:00:00,2853.7507788161993 +2014-02-01 19:00:00,2940.803738317757 +2014-02-01 20:00:00,2870.4267912772584 +2014-02-01 21:00:00,2708.903426791277 +2014-02-01 22:00:00,2434.0404984423676 +2014-02-01 23:00:00,2048.3956386292834 +2014-02-02 00:00:00,1665.4143302180685 +2014-02-02 01:00:00,1358.5669781931465 +2014-02-02 02:00:00,1283.5140186915887 +2014-02-02 03:00:00,1265.526479750779 +2014-02-02 04:00:00,1121.0031152647975 +2014-02-02 05:00:00,1189.5576323987539 +2014-02-02 06:00:00,1380.5389408099688 +2014-02-02 07:00:00,1594.1900311526479 +2014-02-02 08:00:00,1742.8504672897195 +2014-02-02 09:00:00,2251.208722741433 +2014-02-02 10:00:00,2557.031152647975 +2014-02-02 11:00:00,2648.570093457944 +2014-02-02 12:00:00,2725.4392523364486 +2014-02-02 13:00:00,2615.214953271028 +2014-02-02 14:00:00,2615.7196261682243 +2014-02-02 15:00:00,2599.88785046729 +2014-02-02 16:00:00,2646.947040498442 +2014-02-02 17:00:00,2717.931464174455 +2014-02-02 18:00:00,2814.9532710280373 +2014-02-02 19:00:00,2819.7570093457944 +2014-02-02 20:00:00,2793.931464174455 +2014-02-02 21:00:00,2649.7632398753894 +2014-02-02 22:00:00,2299.5482866043612 +2014-02-02 23:00:00,1856.006230529595 +2014-02-03 00:00:00,1520.5607476635514 +2014-02-03 01:00:00,1212.0716510903426 +2014-02-03 02:00:00,1136.056074766355 +2014-02-03 03:00:00,1127.5700934579438 +2014-02-03 04:00:00,1116.5327102803737 +2014-02-03 05:00:00,1204.0872274143303 +2014-02-03 06:00:00,1384.576323987539 +2014-02-03 07:00:00,1627.0218068535826 +2014-02-03 08:00:00,1639.0841121495328 +2014-02-03 09:00:00,2254.909657320872 +2014-02-03 10:00:00,2524.1993769470405 +2014-02-03 11:00:00,2672.6168224299067 +2014-02-03 12:00:00,2693.5140186915887 +2014-02-03 13:00:00,2677.3831775700933 +2014-02-03 14:00:00,2676.2429906542056 +2014-02-03 15:00:00,2720.6791277258567 +2014-02-03 16:00:00,2736.1495327102803 +2014-02-03 17:00:00,2769.9003115264795 +2014-02-03 18:00:00,2902.4984423676015 +2014-02-03 19:00:00,2857.1495327102803 +2014-02-03 20:00:00,2828.411214953271 +2014-02-03 21:00:00,2682.1246105919004 +2014-02-03 22:00:00,2363.4267912772584 +2014-02-03 23:00:00,1995.01246105919 +2014-02-04 00:00:00,1618.3084112149534 +2014-02-04 01:00:00,1325.0 +2014-02-04 02:00:00,1253.3271028037384 +2014-02-04 03:00:00,1244.6947040498442 +2014-02-04 04:00:00,1229.822429906542 +2014-02-04 05:00:00,1283.5545171339563 +2014-02-04 06:00:00,1465.7538940809968 +2014-02-04 07:00:00,1717.5171339563863 +2014-02-04 08:00:00,1865.8971962616822 +2014-02-04 09:00:00,2320.0654205607475 +2014-02-04 10:00:00,2582.2242990654204 +2014-02-04 11:00:00,2666.834890965732 +2014-02-04 12:00:00,2758.5233644859813 +2014-02-04 13:00:00,2755.246105919003 +2014-02-04 14:00:00,2783.526479750779 +2014-02-04 15:00:00,2783.9844236760123 +2014-02-04 16:00:00,2848.221183800623 +2014-02-04 17:00:00,2840.3894080996884 +2014-02-04 18:00:00,2945.728971962617 +2014-02-04 19:00:00,2935.903426791277 +2014-02-04 20:00:00,2846.872274143302 +2014-02-04 21:00:00,2677.834890965732 +2014-02-04 22:00:00,2408.772585669782 +2014-02-04 23:00:00,1995.3582554517134 +2014-02-05 00:00:00,1606.4890965732088 +2014-02-05 01:00:00,1272.9096573208724 +2014-02-05 02:00:00,1224.404984423676 +2014-02-05 03:00:00,1177.7009345794393 +2014-02-05 04:00:00,1153.9657320872275 +2014-02-05 05:00:00,1216.2959501557632 +2014-02-05 06:00:00,1432.361370716511 +2014-02-05 07:00:00,1664.4766355140187 +2014-02-05 08:00:00,1847.417445482866 +2014-02-05 09:00:00,2355.059190031153 +2014-02-05 10:00:00,2585.308411214953 +2014-02-05 11:00:00,2710.3800623052957 +2014-02-05 12:00:00,2735.1682242990655 +2014-02-05 13:00:00,2737.504672897196 +2014-02-05 14:00:00,2723.5607476635514 +2014-02-05 15:00:00,2732.856697819315 +2014-02-05 16:00:00,2761.196261682243 +2014-02-05 17:00:00,2807.6479750778817 +2014-02-05 18:00:00,2883.1682242990655 +2014-02-05 19:00:00,2942.5482866043612 +2014-02-05 20:00:00,2904.2897196261683 +2014-02-05 21:00:00,2725.9439252336447 +2014-02-05 22:00:00,2396.0872274143303 +2014-02-05 23:00:00,2028.9719626168223 +2014-02-06 00:00:00,1614.7071651090343 +2014-02-06 01:00:00,1292.1183800623053 +2014-02-06 02:00:00,1219.7414330218069 +2014-02-06 03:00:00,1200.202492211838 +2014-02-06 04:00:00,1160.9657320872275 +2014-02-06 05:00:00,1240.1308411214952 +2014-02-06 06:00:00,1433.9657320872275 +2014-02-06 07:00:00,1697.2866043613708 +2014-02-06 08:00:00,1840.4330218068535 +2014-02-06 09:00:00,2350.6292834890965 +2014-02-06 10:00:00,2601.595015576324 +2014-02-06 11:00:00,2735.6604361370714 +2014-02-06 12:00:00,2777.713395638629 +2014-02-06 13:00:00,2761.6728971962616 +2014-02-06 14:00:00,2790.3052959501556 +2014-02-06 15:00:00,2792.5669781931465 +2014-02-06 16:00:00,2796.644859813084 +2014-02-06 17:00:00,2863.3800623052957 +2014-02-06 18:00:00,2906.302180685358 +2014-02-06 19:00:00,2905.1152647975077 +2014-02-06 20:00:00,2861.0404984423676 +2014-02-06 21:00:00,2681.1370716510905 +2014-02-06 22:00:00,2364.7102803738317 +2014-02-06 23:00:00,1954.2866043613708 +2014-02-07 00:00:00,1575.8785046728972 +2014-02-07 01:00:00,1262.5420560747664 +2014-02-07 02:00:00,1189.6604361370717 +2014-02-07 03:00:00,1150.8130841121495 +2014-02-07 04:00:00,1128.5233644859813 +2014-02-07 05:00:00,1208.607476635514 +2014-02-07 06:00:00,1429.657320872274 +2014-02-07 07:00:00,1675.165109034268 +2014-02-07 08:00:00,1837.342679127726 +2014-02-07 09:00:00,2311.97507788162 +2014-02-07 10:00:00,2526.7943925233644 +2014-02-07 11:00:00,2672.121495327103 +2014-02-07 12:00:00,2764.308411214953 +2014-02-07 13:00:00,2736.386292834891 +2014-02-07 14:00:00,2754.3956386292834 +2014-02-07 15:00:00,2758.386292834891 +2014-02-07 16:00:00,2777.5451713395637 +2014-02-07 17:00:00,2845.7943925233644 +2014-02-07 18:00:00,2941.461059190031 +2014-02-07 19:00:00,2981.2367601246106 +2014-02-07 20:00:00,2917.98753894081 +2014-02-07 21:00:00,2775.9906542056074 +2014-02-07 22:00:00,2486.3271028037384 +2014-02-07 23:00:00,2095.713395638629 +2014-02-08 00:00:00,1660.6947040498442 +2014-02-08 01:00:00,1404.146417445483 +2014-02-08 02:00:00,1304.0591900311526 +2014-02-08 03:00:00,1196.196261682243 +2014-02-08 04:00:00,1147.8940809968847 +2014-02-08 05:00:00,1216.6448598130842 +2014-02-08 06:00:00,1421.3333333333333 +2014-02-08 07:00:00,1654.6697819314643 +2014-02-08 08:00:00,1794.1059190031153 +2014-02-08 09:00:00,2366.8130841121497 +2014-02-08 10:00:00,2670.940809968847 +2014-02-08 11:00:00,2729.654205607477 +2014-02-08 12:00:00,2840.822429906542 +2014-02-08 13:00:00,2766.5015576323985 +2014-02-08 14:00:00,2741.97507788162 +2014-02-08 15:00:00,2760.872274143302 +2014-02-08 16:00:00,2784.947040498442 +2014-02-08 17:00:00,2783.9003115264795 +2014-02-08 18:00:00,2943.816199376947 +2014-02-08 19:00:00,2963.7881619937693 +2014-02-08 20:00:00,2872.8598130841124 +2014-02-08 21:00:00,2712.601246105919 +2014-02-08 22:00:00,2436.816199376947 +2014-02-08 23:00:00,2034.3457943925234 +2014-02-09 00:00:00,1627.0872274143303 +2014-02-09 01:00:00,1364.8442367601247 +2014-02-09 02:00:00,1280.2616822429907 +2014-02-09 03:00:00,1236.1090342679129 +2014-02-09 04:00:00,1094.4766355140187 +2014-02-09 05:00:00,1167.638629283489 +2014-02-09 06:00:00,1358.367601246106 +2014-02-09 07:00:00,1581.638629283489 +2014-02-09 08:00:00,1736.380062305296 +2014-02-09 09:00:00,2271.1028037383176 +2014-02-09 10:00:00,2636.7383177570096 +2014-02-09 11:00:00,2748.7694704049845 +2014-02-09 12:00:00,2833.355140186916 +2014-02-09 13:00:00,2682.4454828660437 +2014-02-09 14:00:00,2648.1682242990655 +2014-02-09 15:00:00,2692.8753894080996 +2014-02-09 16:00:00,2752.685358255452 +2014-02-09 17:00:00,2788.7819314641742 +2014-02-09 18:00:00,2810.3894080996884 +2014-02-09 19:00:00,2850.9283489096574 +2014-02-09 20:00:00,2757.2803738317757 +2014-02-09 21:00:00,2561.2741433021806 +2014-02-09 22:00:00,2258.1869158878503 +2014-02-09 23:00:00,1762.3738317757009 +2014-02-10 00:00:00,1475.9096573208724 +2014-02-10 01:00:00,1168.6479750778817 +2014-02-10 02:00:00,1118.9906542056074 +2014-02-10 03:00:00,1095.5358255451713 +2014-02-10 04:00:00,1076.3146417445482 +2014-02-10 05:00:00,1150.6635514018692 +2014-02-10 06:00:00,1352.968847352025 +2014-02-10 07:00:00,1568.8317757009345 +2014-02-10 08:00:00,1742.0093457943926 +2014-02-10 09:00:00,2237.1806853582552 +2014-02-10 10:00:00,2527.6199376947043 +2014-02-10 11:00:00,2616.8504672897197 +2014-02-10 12:00:00,2662.059190031153 +2014-02-10 13:00:00,2711.956386292835 +2014-02-10 14:00:00,2643.080996884735 +2014-02-10 15:00:00,2647.847352024922 +2014-02-10 16:00:00,2694.8255451713394 +2014-02-10 17:00:00,2706.4922118380064 +2014-02-10 18:00:00,2834.6947040498444 +2014-02-10 19:00:00,2885.0872274143303 +2014-02-10 20:00:00,2794.080996884735 +2014-02-10 21:00:00,2642.3115264797507 +2014-02-10 22:00:00,2380.3520249221183 +2014-02-10 23:00:00,1944.5295950155764 +2014-02-11 00:00:00,1574.1028037383178 +2014-02-11 01:00:00,1255.5046728971963 +2014-02-11 02:00:00,1179.9034267912773 +2014-02-11 03:00:00,1129.6448598130842 +2014-02-11 04:00:00,1126.8411214953271 +2014-02-11 05:00:00,1205.4953271028037 +2014-02-11 06:00:00,1403.8753894080996 +2014-02-11 07:00:00,1631.2087227414331 +2014-02-11 08:00:00,1813.3769470404984 +2014-02-11 09:00:00,2307.152647975078 +2014-02-11 10:00:00,2544.302180685358 +2014-02-11 11:00:00,2637.292834890966 +2014-02-11 12:00:00,2684.919003115265 +2014-02-11 13:00:00,2686.3769470404986 +2014-02-11 14:00:00,2672.9813084112147 +2014-02-11 15:00:00,2684.398753894081 +2014-02-11 16:00:00,2690.0404984423676 +2014-02-11 17:00:00,2774.8068535825546 +2014-02-11 18:00:00,2831.345794392523 +2014-02-11 19:00:00,2861.3489096573207 +2014-02-11 20:00:00,2784.8753894080996 +2014-02-11 21:00:00,2579.3800623052957 +2014-02-11 22:00:00,2333.8006230529595 +2014-02-11 23:00:00,1960.4143302180685 +2014-02-12 00:00:00,1570.0778816199377 +2014-02-12 01:00:00,1259.2679127725858 +2014-02-12 02:00:00,1199.6604361370717 +2014-02-12 03:00:00,1168.1588785046729 +2014-02-12 04:00:00,1155.7102803738317 +2014-02-12 05:00:00,1207.98753894081 +2014-02-12 06:00:00,1402.7694704049845 +2014-02-12 07:00:00,1634.6261682242991 +2014-02-12 08:00:00,1809.5420560747664 +2014-02-12 09:00:00,2321.2616822429904 +2014-02-12 10:00:00,2534.299065420561 +2014-02-12 11:00:00,2618.822429906542 +2014-02-12 12:00:00,2695.4984423676015 +2014-02-12 13:00:00,2711.520249221184 +2014-02-12 14:00:00,2715.006230529595 +2014-02-12 15:00:00,2679.8006230529595 +2014-02-12 16:00:00,2695.8068535825546 +2014-02-12 17:00:00,2788.01246105919 +2014-02-12 18:00:00,2842.1464174454827 +2014-02-12 19:00:00,2898.286604361371 +2014-02-12 20:00:00,2829.6728971962616 +2014-02-12 21:00:00,2643.308411214953 +2014-02-12 22:00:00,2350.9003115264795 +2014-02-12 23:00:00,1973.9003115264798 +2014-02-13 00:00:00,1617.056074766355 +2014-02-13 01:00:00,1309.632398753894 +2014-02-13 02:00:00,1234.4267912772586 +2014-02-13 03:00:00,1204.0747663551401 +2014-02-13 04:00:00,1185.5482866043615 +2014-02-13 05:00:00,1245.202492211838 +2014-02-13 06:00:00,1456.2274143302182 +2014-02-13 07:00:00,1674.2616822429907 +2014-02-13 08:00:00,1832.9314641744547 +2014-02-13 09:00:00,2240.9003115264795 +2014-02-13 10:00:00,2434.1246105919004 +2014-02-13 11:00:00,2692.183800623053 +2014-02-13 12:00:00,2783.7757009345796 +2014-02-13 13:00:00,2709.828660436137 +2014-02-13 14:00:00,2713.785046728972 +2014-02-13 15:00:00,2700.9906542056074 +2014-02-13 16:00:00,2721.0093457943926 +2014-02-13 17:00:00,2763.361370716511 +2014-02-13 18:00:00,2866.3489096573207 +2014-02-13 19:00:00,2927.2616822429904 +2014-02-13 20:00:00,2838.4704049844236 +2014-02-13 21:00:00,2623.7881619937693 +2014-02-13 22:00:00,2349.638629283489 +2014-02-13 23:00:00,1982.0218068535826 +2014-02-14 00:00:00,1616.7694704049845 +2014-02-14 01:00:00,1291.588785046729 +2014-02-14 02:00:00,1224.1433021806854 +2014-02-14 03:00:00,1193.822429906542 +2014-02-14 04:00:00,1186.031152647975 +2014-02-14 05:00:00,1240.943925233645 +2014-02-14 06:00:00,1456.2928348909657 +2014-02-14 07:00:00,1665.0623052959502 +2014-02-14 08:00:00,1840.785046728972 +2014-02-14 09:00:00,2261.2180685358258 +2014-02-14 10:00:00,2429.473520249221 +2014-02-14 11:00:00,2691.9968847352025 +2014-02-14 12:00:00,2745.2585669781934 +2014-02-14 13:00:00,2708.6728971962616 +2014-02-14 14:00:00,2700.520249221184 +2014-02-14 15:00:00,2758.461059190031 +2014-02-14 16:00:00,3000.4143302180687 +2014-02-14 17:00:00,2862.5358255451715 +2014-02-14 18:00:00,2909.8598130841124 +2014-02-14 19:00:00,2940.5358255451715 +2014-02-14 20:00:00,2821.158878504673 +2014-02-14 21:00:00,2629.4548286604363 +2014-02-14 22:00:00,2382.626168224299 +2014-02-14 23:00:00,2069.96261682243 +2014-02-15 00:00:00,1664.6853582554518 +2014-02-15 01:00:00,1390.2461059190032 +2014-02-15 02:00:00,1268.0623052959502 +2014-02-15 03:00:00,1170.4299065420562 +2014-02-15 04:00:00,1134.1713395638628 +2014-02-15 05:00:00,1202.6105919003114 +2014-02-15 06:00:00,1407.2367601246106 +2014-02-15 07:00:00,1597.5545171339563 +2014-02-15 08:00:00,1749.7133956386292 +2014-02-15 09:00:00,2165.0560747663553 +2014-02-15 10:00:00,2413.1246105919004 +2014-02-15 11:00:00,2620.5233644859813 +2014-02-15 12:00:00,2663.8068535825546 +2014-02-15 13:00:00,2598.9813084112147 +2014-02-15 14:00:00,2577.713395638629 +2014-02-15 15:00:00,2614.9439252336447 +2014-02-15 16:00:00,2650.0996884735205 +2014-02-15 17:00:00,2685.654205607477 +2014-02-15 18:00:00,2757.143302180685 +2014-02-15 19:00:00,2867.8193146417448 +2014-02-15 20:00:00,2789.753894080997 +2014-02-15 21:00:00,2577.3644859813085 +2014-02-15 22:00:00,2313.9532710280373 +2014-02-15 23:00:00,2001.5919003115264 +2014-02-16 00:00:00,1619.0031152647975 +2014-02-16 01:00:00,1341.1246105919004 +2014-02-16 02:00:00,1257.8099688473521 +2014-02-16 03:00:00,1213.0249221183801 +2014-02-16 04:00:00,1080.4454828660437 +2014-02-16 05:00:00,1147.9003115264798 +2014-02-16 06:00:00,1345.8566978193146 +2014-02-16 07:00:00,1554.981308411215 +2014-02-16 08:00:00,1680.6355140186915 +2014-02-16 09:00:00,2118.7694704049845 +2014-02-16 10:00:00,2363.7819314641742 +2014-02-16 11:00:00,2760.931464174455 +2014-02-16 12:00:00,2668.345794392523 +2014-02-16 13:00:00,2607.644859813084 +2014-02-16 14:00:00,2548.7383177570096 +2014-02-16 15:00:00,2576.090342679128 +2014-02-16 16:00:00,2541.570093457944 +2014-02-16 17:00:00,2590.2897196261683 +2014-02-16 18:00:00,2703.9065420560746 +2014-02-16 19:00:00,2783.8598130841124 +2014-02-16 20:00:00,2665.834890965732 +2014-02-16 21:00:00,2551.467289719626 +2014-02-16 22:00:00,2266.1090342679126 +2014-02-16 23:00:00,1814.6915887850466 +2014-02-17 00:00:00,1490.3644859813085 +2014-02-17 01:00:00,1191.4485981308412 +2014-02-17 02:00:00,1141.563862928349 +2014-02-17 03:00:00,1102.3115264797507 +2014-02-17 04:00:00,1091.8130841121495 +2014-02-17 05:00:00,1161.9221183800623 +2014-02-17 06:00:00,1363.5420560747664 +2014-02-17 07:00:00,1595.1059190031153 +2014-02-17 08:00:00,1739.1152647975077 +2014-02-17 09:00:00,2130.8130841121497 +2014-02-17 10:00:00,2306.457943925234 +2014-02-17 11:00:00,2547.8909657320874 +2014-02-17 12:00:00,2583.3644859813085 +2014-02-17 13:00:00,2629.7040498442366 +2014-02-17 14:00:00,2611.4330218068535 +2014-02-17 15:00:00,2602.931464174455 +2014-02-17 16:00:00,2625.1028037383176 +2014-02-17 17:00:00,2646.0342679127725 +2014-02-17 18:00:00,2747.323987538941 +2014-02-17 19:00:00,2810.1464174454827 +2014-02-17 20:00:00,2743.3426791277257 +2014-02-17 21:00:00,2558.392523364486 +2014-02-17 22:00:00,2305.6947040498444 +2014-02-17 23:00:00,1973.2866043613708 +2014-02-18 00:00:00,1595.760124610592 +2014-02-18 01:00:00,1293.0623052959502 +2014-02-18 02:00:00,1202.6292834890967 +2014-02-18 03:00:00,1163.6760124610591 +2014-02-18 04:00:00,1159.0093457943926 +2014-02-18 05:00:00,1242.98753894081 +2014-02-18 06:00:00,1405.7912772585669 +2014-02-18 07:00:00,1633.5327102803737 +2014-02-18 08:00:00,1783.5295950155764 +2014-02-18 09:00:00,2145.461059190031 +2014-02-18 10:00:00,2346.570093457944 +2014-02-18 11:00:00,2535.9906542056074 +2014-02-18 12:00:00,2552.345794392523 +2014-02-18 13:00:00,2561.202492211838 +2014-02-18 14:00:00,2544.8006230529595 +2014-02-18 15:00:00,2568.3271028037384 +2014-02-18 16:00:00,2563.9813084112147 +2014-02-18 17:00:00,2584.98753894081 +2014-02-18 18:00:00,2679.2242990654204 +2014-02-18 19:00:00,2781.9719626168226 +2014-02-18 20:00:00,2704.202492211838 +2014-02-18 21:00:00,2526.0654205607475 +2014-02-18 22:00:00,2263.2585669781934 +2014-02-18 23:00:00,1894.8598130841121 +2014-02-19 00:00:00,1537.1619937694704 +2014-02-19 01:00:00,1226.0685358255453 +2014-02-19 02:00:00,1161.177570093458 +2014-02-19 03:00:00,1123.8753894080996 +2014-02-19 04:00:00,1111.5046728971963 +2014-02-19 05:00:00,1183.4828660436137 +2014-02-19 06:00:00,1389.747663551402 +2014-02-19 07:00:00,1592.1090342679129 +2014-02-19 08:00:00,1771.7819314641745 +2014-02-19 09:00:00,2161.8971962616824 +2014-02-19 10:00:00,2343.1619937694704 +2014-02-19 11:00:00,2503.654205607477 +2014-02-19 12:00:00,2551.9003115264795 +2014-02-19 13:00:00,2561.3582554517134 +2014-02-19 14:00:00,2552.9813084112147 +2014-02-19 15:00:00,2587.538940809969 +2014-02-19 16:00:00,2646.4517133956388 +2014-02-19 17:00:00,2645.411214953271 +2014-02-19 18:00:00,2732.1464174454827 +2014-02-19 19:00:00,2866.551401869159 +2014-02-19 20:00:00,2786.663551401869 +2014-02-19 21:00:00,2621.9127725856697 +2014-02-19 22:00:00,2322.080996884735 +2014-02-19 23:00:00,1934.8598130841121 +2014-02-20 00:00:00,1566.3271028037384 +2014-02-20 01:00:00,1237.981308411215 +2014-02-20 02:00:00,1175.1495327102805 +2014-02-20 03:00:00,1158.1713395638628 +2014-02-20 04:00:00,1145.943925233645 +2014-02-20 05:00:00,1225.8816199376947 +2014-02-20 06:00:00,1412.9034267912773 +2014-02-20 07:00:00,1627.7165109034268 +2014-02-20 08:00:00,1799.2990654205607 +2014-02-20 09:00:00,2182.9657320872275 +2014-02-20 10:00:00,2354.841121495327 +2014-02-20 11:00:00,2571.323987538941 +2014-02-20 12:00:00,2609.7258566978194 +2014-02-20 13:00:00,2631.7757009345796 +2014-02-20 14:00:00,2634.9532710280373 +2014-02-20 15:00:00,2609.894080996885 +2014-02-20 16:00:00,2637.314641744548 +2014-02-20 17:00:00,2660.601246105919 +2014-02-20 18:00:00,2759.2118380062307 +2014-02-20 19:00:00,2845.6043613707166 +2014-02-20 20:00:00,2776.613707165109 +2014-02-20 21:00:00,2565.5358255451715 +2014-02-20 22:00:00,2311.3644859813085 +2014-02-20 23:00:00,1925.7320872274142 +2014-02-21 00:00:00,1556.9968847352025 +2014-02-21 01:00:00,1240.6666666666667 +2014-02-21 02:00:00,1185.1588785046729 +2014-02-21 03:00:00,1145.6604361370717 +2014-02-21 04:00:00,1127.5202492211838 +2014-02-21 05:00:00,1200.7445482866044 +2014-02-21 06:00:00,1404.981308411215 +2014-02-21 07:00:00,1618.8629283489097 +2014-02-21 08:00:00,1788.6542056074766 +2014-02-21 09:00:00,2178.2492211838007 +2014-02-21 10:00:00,2355.355140186916 +2014-02-21 11:00:00,2572.9781931464177 +2014-02-21 12:00:00,2604.903426791277 +2014-02-21 13:00:00,2580.722741433022 +2014-02-21 14:00:00,2598.772585669782 +2014-02-21 15:00:00,2630.6230529595014 +2014-02-21 16:00:00,2646.345794392523 +2014-02-21 17:00:00,2648.816199376947 +2014-02-21 18:00:00,2743.772585669782 +2014-02-21 19:00:00,2848.894080996885 +2014-02-21 20:00:00,2786.2741433021806 +2014-02-21 21:00:00,2589.8816199376947 +2014-02-21 22:00:00,2329.233644859813 +2014-02-21 23:00:00,2028.588785046729 +2014-02-22 00:00:00,1617.3644859813085 +2014-02-22 01:00:00,1350.0467289719627 +2014-02-22 02:00:00,1235.872274143302 +2014-02-22 03:00:00,1127.7757009345794 +2014-02-22 04:00:00,1109.3084112149534 +2014-02-22 05:00:00,1161.4704049844236 +2014-02-22 06:00:00,1367.0031152647975 +2014-02-22 07:00:00,1572.5514018691588 +2014-02-22 08:00:00,1737.5140186915887 +2014-02-22 09:00:00,2145.183800623053 +2014-02-22 10:00:00,2400.0560747663553 +2014-02-22 11:00:00,2623.07476635514 +2014-02-22 12:00:00,2656.105919003115 +2014-02-22 13:00:00,2606.9719626168226 +2014-02-22 14:00:00,2618.5233644859813 +2014-02-22 15:00:00,2668.3582554517134 +2014-02-22 16:00:00,2668.8504672897197 +2014-02-22 17:00:00,2690.3769470404986 +2014-02-22 18:00:00,2757.1401869158876 +2014-02-22 19:00:00,2913.510903426791 +2014-02-22 20:00:00,2794.0716510903426 +2014-02-22 21:00:00,2596.4267912772584 +2014-02-22 22:00:00,2338.5919003115264 +2014-02-22 23:00:00,1997.5669781931465 +2014-02-23 00:00:00,1619.4984423676012 +2014-02-23 01:00:00,1335.8255451713396 +2014-02-23 02:00:00,1274.5295950155764 +2014-02-23 03:00:00,1233.9345794392523 +2014-02-23 04:00:00,1099.1869158878505 +2014-02-23 05:00:00,1148.6168224299065 +2014-02-23 06:00:00,1342.7445482866044 +2014-02-23 07:00:00,1559.3302180685357 +2014-02-23 08:00:00,1681.6915887850466 +2014-02-23 09:00:00,2113.1183800623053 +2014-02-23 10:00:00,2363.872274143302 +2014-02-23 11:00:00,2577.613707165109 +2014-02-23 12:00:00,2578.03738317757 +2014-02-23 13:00:00,2526.542056074766 +2014-02-23 14:00:00,2525.2492211838007 +2014-02-23 15:00:00,2522.526479750779 +2014-02-23 16:00:00,2567.5919003115264 +2014-02-23 17:00:00,2573.0654205607475 +2014-02-23 18:00:00,2707.3894080996884 +2014-02-23 19:00:00,2768.457943925234 +2014-02-23 20:00:00,2671.4704049844236 +2014-02-23 21:00:00,2501.9439252336447 +2014-02-23 22:00:00,2231.7102803738317 +2014-02-23 23:00:00,1811.0436137071652 +2014-02-24 00:00:00,1478.342679127726 +2014-02-24 01:00:00,1184.3146417445482 +2014-02-24 02:00:00,1141.1433021806854 +2014-02-24 03:00:00,1106.031152647975 +2014-02-24 04:00:00,1097.7071651090343 +2014-02-24 05:00:00,1170.127725856698 +2014-02-24 06:00:00,1395.7881619937696 +2014-02-24 07:00:00,1598.6728971962616 +2014-02-24 08:00:00,1758.8909657320871 +2014-02-24 09:00:00,2139.436137071651 +2014-02-24 10:00:00,2313.1619937694704 +2014-02-24 11:00:00,2527.277258566978 +2014-02-24 12:00:00,2584.644859813084 +2014-02-24 13:00:00,2582.88785046729 +2014-02-24 14:00:00,2571.9532710280373 +2014-02-24 15:00:00,2561.2118380062307 +2014-02-24 16:00:00,2565.031152647975 +2014-02-24 17:00:00,2606.7507788161993 +2014-02-24 18:00:00,2691.691588785047 +2014-02-24 19:00:00,2809.9283489096574 +2014-02-24 20:00:00,2725.8629283489095 +2014-02-24 21:00:00,2545.0996884735205 +2014-02-24 22:00:00,2305.7476635514017 +2014-02-24 23:00:00,1973.2367601246106 +2014-02-25 00:00:00,1609.9252336448599 +2014-02-25 01:00:00,1281.7071651090343 +2014-02-25 02:00:00,1212.7102803738317 +2014-02-25 03:00:00,1196.411214953271 +2014-02-25 04:00:00,1184.5482866043615 +2014-02-25 05:00:00,1240.4517133956385 +2014-02-25 06:00:00,1445.7414330218069 +2014-02-25 07:00:00,1639.9906542056074 +2014-02-25 08:00:00,1795.8006230529595 +2014-02-25 09:00:00,2179.336448598131 +2014-02-25 10:00:00,2356.5015576323985 +2014-02-25 11:00:00,2564.0934579439254 +2014-02-25 12:00:00,2616.9065420560746 +2014-02-25 13:00:00,2602.4454828660437 +2014-02-25 14:00:00,2591.411214953271 +2014-02-25 15:00:00,2596.105919003115 +2014-02-25 16:00:00,2614.8317757009345 +2014-02-25 17:00:00,2671.5732087227416 +2014-02-25 18:00:00,2696.183800623053 +2014-02-25 19:00:00,2852.0498442367602 +2014-02-25 20:00:00,2753.3520249221183 +2014-02-25 21:00:00,2554.744548286604 +2014-02-25 22:00:00,2287.3769470404986 +2014-02-25 23:00:00,1961.3738317757009 +2014-02-26 00:00:00,1580.8099688473521 +2014-02-26 01:00:00,1258.7414330218069 +2014-02-26 02:00:00,1193.0031152647975 +2014-02-26 03:00:00,1164.9470404984424 +2014-02-26 04:00:00,1133.9221183800623 +2014-02-26 05:00:00,1193.7538940809968 +2014-02-26 06:00:00,1402.9781931464174 +2014-02-26 07:00:00,1633.183800623053 +2014-02-26 08:00:00,1777.2585669781931 +2014-02-26 09:00:00,2163.691588785047 +2014-02-26 10:00:00,2349.133956386293 +2014-02-26 11:00:00,2542.9781931464177 +2014-02-26 12:00:00,2586.411214953271 +2014-02-26 13:00:00,2573.489096573209 +2014-02-26 14:00:00,2551.121495327103 +2014-02-26 15:00:00,2578.239875389408 +2014-02-26 16:00:00,2603.8691588785045 +2014-02-26 17:00:00,2631.6105919003116 +2014-02-26 18:00:00,2657.909657320872 +2014-02-26 19:00:00,2809.3271028037384 +2014-02-26 20:00:00,2744.8068535825546 +2014-02-26 21:00:00,2551.6292834890965 +2014-02-26 22:00:00,2271.728971962617 +2014-02-26 23:00:00,1926.3769470404984 +2014-02-27 00:00:00,1564.2180685358255 +2014-02-27 01:00:00,1278.417445482866 +2014-02-27 02:00:00,1200.4392523364486 +2014-02-27 03:00:00,1189.2616822429907 +2014-02-27 04:00:00,1175.03738317757 +2014-02-27 05:00:00,1219.6043613707166 +2014-02-27 06:00:00,1414.361370716511 +2014-02-27 07:00:00,1641.9345794392523 +2014-02-27 08:00:00,1799.3208722741433 +2014-02-27 09:00:00,2173.663551401869 +2014-02-27 10:00:00,2365.510903426791 +2014-02-27 11:00:00,2572.96261682243 +2014-02-27 12:00:00,2611.97507788162 +2014-02-27 13:00:00,2612.8380062305296 +2014-02-27 14:00:00,2625.8193146417448 +2014-02-27 15:00:00,2624.644859813084 +2014-02-27 16:00:00,2664.4984423676015 +2014-02-27 17:00:00,2694.299065420561 +2014-02-27 18:00:00,2732.2429906542056 +2014-02-27 19:00:00,2858.0404984423676 +2014-02-27 20:00:00,2756.0872274143303 +2014-02-27 21:00:00,2588.171339563863 +2014-02-27 22:00:00,2317.208722741433 +2014-02-27 23:00:00,1942.5295950155764 +2014-02-28 00:00:00,1565.2585669781931 +2014-02-28 01:00:00,1257.5545171339563 +2014-02-28 02:00:00,1205.3146417445482 +2014-02-28 03:00:00,1170.3271028037384 +2014-02-28 04:00:00,1146.5482866043615 +2014-02-28 05:00:00,1211.0467289719627 +2014-02-28 06:00:00,1408.6822429906542 +2014-02-28 07:00:00,1641.3831775700935 +2014-02-28 08:00:00,1787.607476635514 +2014-02-28 09:00:00,2187.6666666666665 +2014-02-28 10:00:00,2366.722741433022 +2014-02-28 11:00:00,2586.7476635514017 +2014-02-28 12:00:00,2644.6417445482866 +2014-02-28 13:00:00,2620.271028037383 +2014-02-28 14:00:00,2615.7196261682243 +2014-02-28 15:00:00,2641.271028037383 +2014-02-28 16:00:00,2665.221183800623 +2014-02-28 17:00:00,2714.0498442367602 +2014-02-28 18:00:00,2763.676012461059 +2014-02-28 19:00:00,2883.1246105919004 +2014-02-28 20:00:00,2811.4143302180687 +2014-02-28 21:00:00,2620.6947040498444 +2014-02-28 22:00:00,2365.355140186916 +2014-02-28 23:00:00,2058.8535825545173 +2014-03-01 00:00:00,1656.5202492211838 +2014-03-01 01:00:00,1382.981308411215 +2014-03-01 02:00:00,1300.2616822429907 +2014-03-01 03:00:00,1177.6822429906542 +2014-03-01 04:00:00,1144.4859813084113 +2014-03-01 05:00:00,1205.0280373831777 +2014-03-01 06:00:00,1400.0031152647975 +2014-03-01 07:00:00,1604.0623052959502 +2014-03-01 08:00:00,1754.8660436137072 +2014-03-01 09:00:00,2162.947040498442 +2014-03-01 10:00:00,2439.127725856698 +2014-03-01 11:00:00,2733.3520249221183 +2014-03-01 12:00:00,2712.8317757009345 +2014-03-01 13:00:00,2707.2585669781934 +2014-03-01 14:00:00,2689.510903426791 +2014-03-01 15:00:00,2681.847352024922 +2014-03-01 16:00:00,2738.0 +2014-03-01 17:00:00,2753.520249221184 +2014-03-01 18:00:00,2811.676012461059 +2014-03-01 19:00:00,2895.4859813084113 +2014-03-01 20:00:00,2792.5794392523367 +2014-03-01 21:00:00,2598.9532710280373 +2014-03-01 22:00:00,2350.355140186916 +2014-03-01 23:00:00,2026.8785046728972 +2014-03-02 00:00:00,1650.797507788162 +2014-03-02 01:00:00,1371.7881619937696 +2014-03-02 02:00:00,1312.3738317757009 +2014-03-02 03:00:00,1270.785046728972 +2014-03-02 04:00:00,1149.3894080996886 +2014-03-02 05:00:00,1201.2429906542056 +2014-03-02 06:00:00,1396.3457943925234 +2014-03-02 07:00:00,1567.2834890965732 +2014-03-02 08:00:00,1679.797507788162 +2014-03-02 09:00:00,2113.6791277258567 +2014-03-02 10:00:00,2417.1464174454827 +2014-03-02 11:00:00,2700.9968847352025 +2014-03-02 12:00:00,2673.3333333333335 +2014-03-02 13:00:00,2595.9595015576324 +2014-03-02 14:00:00,2574.442367601246 +2014-03-02 15:00:00,2601.0155763239877 +2014-03-02 16:00:00,2627.4859813084113 +2014-03-02 17:00:00,2665.520249221184 +2014-03-02 18:00:00,2684.177570093458 +2014-03-02 19:00:00,2777.760124610592 +2014-03-02 20:00:00,2686.183800623053 +2014-03-02 21:00:00,2533.551401869159 +2014-03-02 22:00:00,2261.2679127725855 +2014-03-02 23:00:00,1829.8847352024923 +2014-03-03 00:00:00,1505.4205607476636 +2014-03-03 01:00:00,1204.5046728971963 +2014-03-03 02:00:00,1144.6261682242991 +2014-03-03 03:00:00,1121.6915887850466 +2014-03-03 04:00:00,1115.8411214953271 +2014-03-03 05:00:00,1162.4984423676012 +2014-03-03 06:00:00,1354.5358255451713 +2014-03-03 07:00:00,1558.6479750778817 +2014-03-03 08:00:00,1714.3302180685357 +2014-03-03 09:00:00,2100.4018691588785 +2014-03-03 10:00:00,2290.0280373831774 +2014-03-03 11:00:00,2570.1090342679126 +2014-03-03 12:00:00,2611.803738317757 +2014-03-03 13:00:00,2629.2118380062307 +2014-03-03 14:00:00,2599.0841121495328 +2014-03-03 15:00:00,2612.052959501558 +2014-03-03 16:00:00,2628.277258566978 +2014-03-03 17:00:00,2664.753894080997 +2014-03-03 18:00:00,2665.816199376947 +2014-03-03 19:00:00,2807.866043613707 +2014-03-03 20:00:00,2718.02492211838 +2014-03-03 21:00:00,2521.4548286604363 +2014-03-03 22:00:00,2258.6728971962616 +2014-03-03 23:00:00,1929.4423676012461 +2014-03-04 00:00:00,1576.2990654205607 +2014-03-04 01:00:00,1225.7040498442368 +2014-03-04 02:00:00,1171.5482866043615 +2014-03-04 03:00:00,1139.3208722741433 +2014-03-04 04:00:00,1142.6542056074766 +2014-03-04 05:00:00,1202.7227414330218 +2014-03-04 06:00:00,1379.4423676012461 +2014-03-04 07:00:00,1582.1557632398753 +2014-03-04 08:00:00,1738.380062305296 +2014-03-04 09:00:00,2085.5794392523367 +2014-03-04 10:00:00,2287.4330218068535 +2014-03-04 11:00:00,2498.9221183800623 +2014-03-04 12:00:00,2592.495327102804 +2014-03-04 13:00:00,2604.5856697819313 +2014-03-04 14:00:00,2592.233644859813 +2014-03-04 15:00:00,2613.271028037383 +2014-03-04 16:00:00,2639.2523364485983 +2014-03-04 17:00:00,2671.233644859813 +2014-03-04 18:00:00,2691.7383177570096 +2014-03-04 19:00:00,2815.735202492212 +2014-03-04 20:00:00,2723.302180685358 +2014-03-04 21:00:00,2544.940809968847 +2014-03-04 22:00:00,2276.5015576323985 +2014-03-04 23:00:00,1939.5981308411215 +2014-03-05 00:00:00,1615.3208722741433 +2014-03-05 01:00:00,1321.8442367601247 +2014-03-05 02:00:00,1254.4890965732088 +2014-03-05 03:00:00,1209.0467289719627 +2014-03-05 04:00:00,1200.3302180685357 +2014-03-05 05:00:00,1265.588785046729 +2014-03-05 06:00:00,1451.797507788162 +2014-03-05 07:00:00,1640.9750778816199 +2014-03-05 08:00:00,1764.632398753894 +2014-03-05 09:00:00,2151.4018691588785 +2014-03-05 10:00:00,2336.031152647975 +2014-03-05 11:00:00,2697.626168224299 +2014-03-05 12:00:00,2714.8068535825546 +2014-03-05 13:00:00,2719.9345794392525 +2014-03-05 14:00:00,2572.308411214953 +2014-03-05 15:00:00,2675.956386292835 +2014-03-05 16:00:00,2656.7383177570096 +2014-03-05 17:00:00,2636.5669781931465 +2014-03-05 18:00:00,2634.909657320872 +2014-03-05 19:00:00,2800.286604361371 +2014-03-05 20:00:00,2703.7632398753894 +2014-03-05 21:00:00,2553.2305295950155 +2014-03-05 22:00:00,2275.744548286604 +2014-03-05 23:00:00,1913.423676012461 +2014-03-06 00:00:00,1555.0249221183801 +2014-03-06 01:00:00,1259.361370716511 +2014-03-06 02:00:00,1183.1121495327102 +2014-03-06 03:00:00,1142.803738317757 +2014-03-06 04:00:00,1144.7133956386292 +2014-03-06 05:00:00,1195.3707165109033 +2014-03-06 06:00:00,1390.1433021806854 +2014-03-06 07:00:00,1595.03738317757 +2014-03-06 08:00:00,1744.7507788161993 +2014-03-06 09:00:00,2114.1464174454827 +2014-03-06 10:00:00,2326.06230529595 +2014-03-06 11:00:00,2574.404984423676 +2014-03-06 12:00:00,2577.4454828660437 +2014-03-06 13:00:00,2628.4018691588785 +2014-03-06 14:00:00,2600.2679127725855 +2014-03-06 15:00:00,2944.043613707165 +2014-03-06 16:00:00,2774.121495327103 +2014-03-06 17:00:00,2746.92523364486 +2014-03-06 18:00:00,2776.473520249221 +2014-03-06 19:00:00,2921.9813084112147 +2014-03-06 20:00:00,2804.392523364486 +2014-03-06 21:00:00,2619.6728971962616 +2014-03-06 22:00:00,2302.4517133956388 +2014-03-06 23:00:00,1916.8099688473521 +2014-03-07 00:00:00,1562.436137071651 +2014-03-07 01:00:00,1257.361370716511 +2014-03-07 02:00:00,1193.214953271028 +2014-03-07 03:00:00,1147.214953271028 +2014-03-07 04:00:00,1135.3052959501558 +2014-03-07 05:00:00,1207.2585669781931 +2014-03-07 06:00:00,1406.5171339563863 +2014-03-07 07:00:00,1616.0996884735202 +2014-03-07 08:00:00,1638.6604361370717 +2014-03-07 09:00:00,2117.728971962617 +2014-03-07 10:00:00,2315.7102803738317 +2014-03-07 11:00:00,2612.834890965732 +2014-03-07 12:00:00,2652.0093457943926 +2014-03-07 13:00:00,2641.196261682243 +2014-03-07 14:00:00,2673.931464174455 +2014-03-07 15:00:00,2694.0093457943926 +2014-03-07 16:00:00,2716.105919003115 +2014-03-07 17:00:00,2739.4766355140187 +2014-03-07 18:00:00,2740.7881619937693 +2014-03-07 19:00:00,2881.2305295950155 +2014-03-07 20:00:00,2809.3489096573207 +2014-03-07 21:00:00,2643.2242990654204 +2014-03-07 22:00:00,2361.778816199377 +2014-03-07 23:00:00,2035.0280373831777 +2014-03-08 00:00:00,1629.651090342679 +2014-03-08 01:00:00,1358.1495327102805 +2014-03-08 02:00:00,1257.5919003115264 +2014-03-08 03:00:00,1138.8660436137072 +2014-03-08 04:00:00,1119.006230529595 +2014-03-08 05:00:00,1194.4454828660437 +2014-03-08 06:00:00,1389.4018691588785 +2014-03-08 07:00:00,1553.5109034267912 +2014-03-08 08:00:00,1680.3707165109033 +2014-03-08 09:00:00,2069.0778816199377 +2014-03-08 10:00:00,2324.691588785047 +2014-03-08 11:00:00,2638.96261682243 +2014-03-08 12:00:00,2658.7258566978194 +2014-03-08 13:00:00,2612.090342679128 +2014-03-08 14:00:00,2616.3894080996884 +2014-03-08 15:00:00,2657.7943925233644 +2014-03-08 16:00:00,2701.373831775701 +2014-03-08 17:00:00,2712.9719626168226 +2014-03-08 18:00:00,2716.601246105919 +2014-03-08 19:00:00,2865.735202492212 +2014-03-08 20:00:00,2774.4517133956388 +2014-03-08 21:00:00,2600.0155763239877 +2014-03-08 22:00:00,2342.3177570093458 +2014-03-08 23:00:00,2020.98753894081 +2014-03-09 00:00:00,1631.0218068535826 +2014-03-09 01:00:00,1344.7133956386292 +2014-03-09 02:00:00,1270.7757009345794 +2014-03-09 03:00:00,1228.0 +2014-03-09 04:00:00,1110.595015576324 +2014-03-09 05:00:00,1174.018691588785 +2014-03-09 06:00:00,1364.1526479750778 +2014-03-09 07:00:00,1530.1495327102805 +2014-03-09 08:00:00,1612.7165109034268 +2014-03-09 09:00:00,2020.7694704049845 +2014-03-09 10:00:00,2310.0934579439254 +2014-03-09 11:00:00,2621.01246105919 +2014-03-09 12:00:00,2634.88785046729 +2014-03-09 13:00:00,2614.6822429906542 +2014-03-09 14:00:00,2570.88785046729 +2014-03-09 15:00:00,2568.11214953271 +2014-03-09 16:00:00,2591.654205607477 +2014-03-09 17:00:00,2600.909657320872 +2014-03-09 18:00:00,2633.239875389408 +2014-03-09 19:00:00,2828.753894080997 +2014-03-09 20:00:00,2740.676012461059 +2014-03-09 21:00:00,2543.88785046729 +2014-03-09 22:00:00,2228.526479750779 +2014-03-09 23:00:00,1833.214953271028 +2014-03-10 00:00:00,1509.1619937694704 +2014-03-10 01:00:00,1192.473520249221 +2014-03-10 02:00:00,1133.7445482866044 +2014-03-10 03:00:00,1111.4454828660437 +2014-03-10 04:00:00,1100.0155763239875 +2014-03-10 05:00:00,1201.545171339564 +2014-03-10 06:00:00,1378.0685358255453 +2014-03-10 07:00:00,1563.9906542056074 +2014-03-10 08:00:00,1659.7258566978194 +2014-03-10 09:00:00,2054.1619937694704 +2014-03-10 10:00:00,2263.669781931464 +2014-03-10 11:00:00,2607.88785046729 +2014-03-10 12:00:00,2762.707165109034 +2014-03-10 13:00:00,2648.208722741433 +2014-03-10 14:00:00,2648.4018691588785 +2014-03-10 15:00:00,2645.504672897196 +2014-03-10 16:00:00,2668.4641744548285 +2014-03-10 17:00:00,2679.0031152647975 +2014-03-10 18:00:00,2737.803738317757 +2014-03-10 19:00:00,2853.856697819315 +2014-03-10 20:00:00,2772.068535825545 +2014-03-10 21:00:00,2578.809968847352 +2014-03-10 22:00:00,2299.043613707165 +2014-03-10 23:00:00,1960.127725856698 +2014-03-11 00:00:00,1634.588785046729 +2014-03-11 01:00:00,1299.9314641744547 +2014-03-11 02:00:00,1222.8130841121495 +2014-03-11 03:00:00,1169.2056074766356 +2014-03-11 04:00:00,1127.1495327102805 +2014-03-11 05:00:00,1199.2897196261683 +2014-03-11 06:00:00,1389.348909657321 +2014-03-11 07:00:00,1578.657320872274 +2014-03-11 08:00:00,1678.2803738317757 +2014-03-11 09:00:00,2060.489096573209 +2014-03-11 10:00:00,2279.797507788162 +2014-03-11 11:00:00,2562.632398753894 +2014-03-11 12:00:00,2649.588785046729 +2014-03-11 13:00:00,2657.006230529595 +2014-03-11 14:00:00,2677.6292834890965 +2014-03-11 15:00:00,2696.171339563863 +2014-03-11 16:00:00,2716.0841121495328 +2014-03-11 17:00:00,2707.07476635514 +2014-03-11 18:00:00,2703.0342679127725 +2014-03-11 19:00:00,2842.9657320872275 +2014-03-11 20:00:00,2778.4704049844236 +2014-03-11 21:00:00,2636.1308411214955 +2014-03-11 22:00:00,2307.0280373831774 +2014-03-11 23:00:00,1932.202492211838 +2014-03-12 00:00:00,1571.4890965732088 +2014-03-12 01:00:00,1245.1121495327102 +2014-03-12 02:00:00,1173.5607476635514 +2014-03-12 03:00:00,1126.9532710280373 +2014-03-12 04:00:00,1106.239875389408 +2014-03-12 05:00:00,1184.1121495327102 +2014-03-12 06:00:00,1373.7445482866044 +2014-03-12 07:00:00,1571.1121495327102 +2014-03-12 08:00:00,1673.417445482866 +2014-03-12 09:00:00,2066.5732087227416 +2014-03-12 10:00:00,2271.221183800623 +2014-03-12 11:00:00,2569.183800623053 +2014-03-12 12:00:00,2693.5669781931465 +2014-03-12 13:00:00,2718.4922118380064 +2014-03-12 14:00:00,2686.264797507788 +2014-03-12 15:00:00,2647.638629283489 +2014-03-12 16:00:00,2764.632398753894 +2014-03-12 17:00:00,2687.7570093457944 +2014-03-12 18:00:00,2704.221183800623 +2014-03-12 19:00:00,2899.872274143302 +2014-03-12 20:00:00,2790.809968847352 +2014-03-12 21:00:00,2639.0186915887853 +2014-03-12 22:00:00,2311.638629283489 +2014-03-12 23:00:00,1938.404984423676 +2014-03-13 00:00:00,1567.0841121495328 +2014-03-13 01:00:00,1248.3177570093458 +2014-03-13 02:00:00,1169.7133956386292 +2014-03-13 03:00:00,1136.6355140186915 +2014-03-13 04:00:00,1128.0747663551401 +2014-03-13 05:00:00,1211.0716510903426 +2014-03-13 06:00:00,1407.619937694704 +2014-03-13 07:00:00,1568.3115264797507 +2014-03-13 08:00:00,1688.8442367601247 +2014-03-13 09:00:00,2084.1308411214955 +2014-03-13 10:00:00,2291.822429906542 +2014-03-13 11:00:00,2575.3800623052957 +2014-03-13 12:00:00,2675.1028037383176 +2014-03-13 13:00:00,2664.654205607477 +2014-03-13 14:00:00,2702.336448598131 +2014-03-13 15:00:00,2677.127725856698 +2014-03-13 16:00:00,2670.3333333333335 +2014-03-13 17:00:00,2676.2242990654204 +2014-03-13 18:00:00,2712.520249221184 +2014-03-13 19:00:00,2841.043613707165 +2014-03-13 20:00:00,2770.8504672897197 +2014-03-13 21:00:00,2592.98753894081 +2014-03-13 22:00:00,2281.286604361371 +2014-03-13 23:00:00,1932.8816199376947 +2014-03-14 00:00:00,1573.7196261682243 +2014-03-14 01:00:00,1275.8878504672898 +2014-03-14 02:00:00,1188.1619937694704 +2014-03-14 03:00:00,1154.4018691588785 +2014-03-14 04:00:00,1141.728971962617 +2014-03-14 05:00:00,1218.6822429906542 +2014-03-14 06:00:00,1393.3956386292834 +2014-03-14 07:00:00,1614.3582554517134 +2014-03-14 08:00:00,1721.0218068535826 +2014-03-14 09:00:00,2117.2367601246106 +2014-03-14 10:00:00,2310.292834890966 +2014-03-14 11:00:00,2604.772585669782 +2014-03-14 12:00:00,2651.685358255452 +2014-03-14 13:00:00,2664.8816199376947 +2014-03-14 14:00:00,2693.5794392523367 +2014-03-14 15:00:00,2706.246105919003 +2014-03-14 16:00:00,2730.196261682243 +2014-03-14 17:00:00,2666.1028037383176 +2014-03-14 18:00:00,2743.4392523364486 +2014-03-14 19:00:00,2894.398753894081 +2014-03-14 20:00:00,2839.2305295950155 +2014-03-14 21:00:00,2637.105919003115 +2014-03-14 22:00:00,2362.993769470405 +2014-03-14 23:00:00,2036.2585669781931 +2014-03-15 00:00:00,1628.3333333333333 +2014-03-15 01:00:00,1370.183800623053 +2014-03-15 02:00:00,1297.2274143302182 +2014-03-15 03:00:00,1226.1433021806854 +2014-03-15 04:00:00,1215.5233644859813 +2014-03-15 05:00:00,1282.4704049844236 +2014-03-15 06:00:00,1472.9968847352025 +2014-03-15 07:00:00,1660.9657320872275 +2014-03-15 08:00:00,1750.342679127726 +2014-03-15 09:00:00,2112.816199376947 +2014-03-15 10:00:00,2359.3800623052957 +2014-03-15 11:00:00,2652.2429906542056 +2014-03-15 12:00:00,2727.8535825545173 +2014-03-15 13:00:00,2695.489096573209 +2014-03-15 14:00:00,2720.1152647975077 +2014-03-15 15:00:00,2768.152647975078 +2014-03-15 16:00:00,2804.7165109034268 +2014-03-15 17:00:00,2812.3582554517134 +2014-03-15 18:00:00,2818.2056074766356 +2014-03-15 19:00:00,2957.713395638629 +2014-03-15 20:00:00,2881.467289719626 +2014-03-15 21:00:00,2672.7507788161993 +2014-03-15 22:00:00,2371.595015576324 +2014-03-15 23:00:00,2030.785046728972 +2014-03-16 00:00:00,1625.9003115264798 +2014-03-16 01:00:00,1346.9314641744547 +2014-03-16 02:00:00,1274.526479750779 +2014-03-16 03:00:00,1232.8909657320871 +2014-03-16 04:00:00,1109.1713395638628 +2014-03-16 05:00:00,1152.2679127725858 +2014-03-16 06:00:00,1337.177570093458 +2014-03-16 07:00:00,1511.1588785046729 +2014-03-16 08:00:00,1626.2990654205607 +2014-03-16 09:00:00,2031.9221183800623 +2014-03-16 10:00:00,2343.93769470405 +2014-03-16 11:00:00,2754.4517133956388 +2014-03-16 12:00:00,2762.1246105919004 +2014-03-16 13:00:00,2738.7819314641742 +2014-03-16 14:00:00,2715.6666666666665 +2014-03-16 15:00:00,2810.834890965732 +2014-03-16 16:00:00,2820.520249221184 +2014-03-16 17:00:00,2792.7694704049845 +2014-03-16 18:00:00,2813.7414330218066 +2014-03-16 19:00:00,2902.7819314641742 +2014-03-16 20:00:00,2862.722741433022 +2014-03-16 21:00:00,2636.8971962616824 +2014-03-16 22:00:00,2300.3271028037384 +2014-03-16 23:00:00,1890.9283489096574 +2014-03-17 00:00:00,1543.607476635514 +2014-03-17 01:00:00,1267.0093457943926 +2014-03-17 02:00:00,1216.0747663551401 +2014-03-17 03:00:00,1166.9376947040498 +2014-03-17 04:00:00,1153.3115264797507 +2014-03-17 05:00:00,1224.3084112149534 +2014-03-17 06:00:00,1394.822429906542 +2014-03-17 07:00:00,1564.9501557632398 +2014-03-17 08:00:00,1682.9034267912773 +2014-03-17 09:00:00,2078.2834890965732 +2014-03-17 10:00:00,2259.336448598131 +2014-03-17 11:00:00,2627.595015576324 +2014-03-17 12:00:00,2724.993769470405 +2014-03-17 13:00:00,2748.5077881619936 +2014-03-17 14:00:00,2720.467289719626 +2014-03-17 15:00:00,2727.1028037383176 +2014-03-17 16:00:00,2755.4174454828662 +2014-03-17 17:00:00,2730.6199376947043 +2014-03-17 18:00:00,2705.98753894081 +2014-03-17 19:00:00,2857.1806853582552 +2014-03-17 20:00:00,2785.2616822429904 +2014-03-17 21:00:00,2585.373831775701 +2014-03-17 22:00:00,2306.760124610592 +2014-03-17 23:00:00,1971.0654205607477 +2014-03-18 00:00:00,1633.196261682243 +2014-03-18 01:00:00,1322.4423676012461 +2014-03-18 02:00:00,1223.0 +2014-03-18 03:00:00,1170.872274143302 +2014-03-18 04:00:00,1158.5015576323988 +2014-03-18 05:00:00,1235.797507788162 +2014-03-18 06:00:00,1412.3177570093458 +2014-03-18 07:00:00,1585.6417445482866 +2014-03-18 08:00:00,1706.9158878504672 +2014-03-18 09:00:00,2101.105919003115 +2014-03-18 10:00:00,2343.7383177570096 +2014-03-18 11:00:00,2605.654205607477 +2014-03-18 12:00:00,2644.931464174455 +2014-03-18 13:00:00,2644.314641744548 +2014-03-18 14:00:00,2664.6510903426793 +2014-03-18 15:00:00,2723.3333333333335 +2014-03-18 16:00:00,2834.143302180685 +2014-03-18 17:00:00,2748.06230529595 +2014-03-18 18:00:00,2727.3426791277257 +2014-03-18 19:00:00,2868.0186915887853 +2014-03-18 20:00:00,2823.5856697819313 +2014-03-18 21:00:00,2535.0186915887853 +2014-03-18 22:00:00,2267.5233644859813 +2014-03-18 23:00:00,1916.1214953271028 +2014-03-19 00:00:00,1549.3333333333333 +2014-03-19 01:00:00,1258.404984423676 +2014-03-19 02:00:00,1209.4610591900312 +2014-03-19 03:00:00,1157.0778816199377 +2014-03-19 04:00:00,1141.6417445482866 +2014-03-19 05:00:00,1215.3271028037384 +2014-03-19 06:00:00,1411.271028037383 +2014-03-19 07:00:00,1579.5140186915887 +2014-03-19 08:00:00,1719.9501557632398 +2014-03-19 09:00:00,2126.1152647975077 +2014-03-19 10:00:00,2348.4828660436137 +2014-03-19 11:00:00,2594.713395638629 +2014-03-19 12:00:00,2687.436137071651 +2014-03-19 13:00:00,2690.0093457943926 +2014-03-19 14:00:00,2721.5171339563863 +2014-03-19 15:00:00,2761.461059190031 +2014-03-19 16:00:00,2795.367601246106 +2014-03-19 17:00:00,2759.442367601246 +2014-03-19 18:00:00,2769.06230529595 +2014-03-19 19:00:00,2879.8971962616824 +2014-03-19 20:00:00,2790.2429906542056 +2014-03-19 21:00:00,2579.3520249221183 +2014-03-19 22:00:00,2297.059190031153 +2014-03-19 23:00:00,1931.651090342679 +2014-03-20 00:00:00,1544.993769470405 +2014-03-20 01:00:00,1231.3084112149534 +2014-03-20 02:00:00,1186.7507788161993 +2014-03-20 03:00:00,1150.816199376947 +2014-03-20 04:00:00,1134.7725856697818 +2014-03-20 05:00:00,1216.0778816199377 +2014-03-20 06:00:00,1398.9595015576324 +2014-03-20 07:00:00,1587.3021806853583 +2014-03-20 08:00:00,1714.9221183800623 +2014-03-20 09:00:00,2139.968847352025 +2014-03-20 10:00:00,2365.931464174455 +2014-03-20 11:00:00,2591.866043613707 +2014-03-20 12:00:00,2654.7476635514017 +2014-03-20 13:00:00,2681.8816199376947 +2014-03-20 14:00:00,2684.6168224299067 +2014-03-20 15:00:00,2735.1495327102803 +2014-03-20 16:00:00,2745.510903426791 +2014-03-20 17:00:00,2727.345794392523 +2014-03-20 18:00:00,2735.4641744548285 +2014-03-20 19:00:00,2853.355140186916 +2014-03-20 20:00:00,2823.133956386293 +2014-03-20 21:00:00,2604.7196261682243 +2014-03-20 22:00:00,2325.6417445482866 +2014-03-20 23:00:00,1925.8909657320871 +2014-03-21 00:00:00,1553.1682242990655 +2014-03-21 01:00:00,1230.1370716510903 +2014-03-21 02:00:00,1206.2180685358255 +2014-03-21 03:00:00,1166.7632398753894 +2014-03-21 04:00:00,1159.7445482866044 +2014-03-21 05:00:00,1225.0218068535826 +2014-03-21 06:00:00,1420.2492211838007 +2014-03-21 07:00:00,1602.177570093458 +2014-03-21 08:00:00,1741.4485981308412 +2014-03-21 09:00:00,2170.504672897196 +2014-03-21 10:00:00,2466.171339563863 +2014-03-21 11:00:00,2583.6573208722743 +2014-03-21 12:00:00,2689.361370716511 +2014-03-21 13:00:00,2686.0778816199377 +2014-03-21 14:00:00,2682.3489096573207 +2014-03-21 15:00:00,2704.461059190031 +2014-03-21 16:00:00,2743.461059190031 +2014-03-21 17:00:00,2768.940809968847 +2014-03-21 18:00:00,2795.809968847352 +2014-03-21 19:00:00,2897.6573208722743 +2014-03-21 20:00:00,2866.367601246106 +2014-03-21 21:00:00,2633.0467289719627 +2014-03-21 22:00:00,2378.196261682243 +2014-03-21 23:00:00,2052.239875389408 +2014-03-22 00:00:00,1632.0 +2014-03-22 01:00:00,1392.3956386292834 +2014-03-22 02:00:00,1279.7725856697818 +2014-03-22 03:00:00,1175.834890965732 +2014-03-22 04:00:00,1152.7538940809968 +2014-03-22 05:00:00,1211.8411214953271 +2014-03-22 06:00:00,1402.5514018691588 +2014-03-22 07:00:00,1571.8006230529595 +2014-03-22 08:00:00,1663.6822429906542 +2014-03-22 09:00:00,2100.7476635514017 +2014-03-22 10:00:00,2403.7258566978194 +2014-03-22 11:00:00,2577.052959501558 +2014-03-22 12:00:00,2602.3395638629286 +2014-03-22 13:00:00,2624.700934579439 +2014-03-22 14:00:00,2589.0996884735205 +2014-03-22 15:00:00,2654.700934579439 +2014-03-22 16:00:00,2672.133956386293 +2014-03-22 17:00:00,2628.1744548286606 +2014-03-22 18:00:00,2669.7258566978194 +2014-03-22 19:00:00,2776.6417445482866 +2014-03-22 20:00:00,2767.96261682243 +2014-03-22 21:00:00,2534.6573208722743 +2014-03-22 22:00:00,2286.2180685358258 +2014-03-22 23:00:00,1963.4517133956385 +2014-03-23 00:00:00,1574.728971962617 +2014-03-23 01:00:00,1303.404984423676 +2014-03-23 02:00:00,1249.398753894081 +2014-03-23 03:00:00,1187.728971962617 +2014-03-23 04:00:00,1082.6604361370717 +2014-03-23 05:00:00,1152.0155763239875 +2014-03-23 06:00:00,1317.8566978193146 +2014-03-23 07:00:00,1493.872274143302 +2014-03-23 08:00:00,1624.0093457943926 +2014-03-23 09:00:00,2023.563862928349 +2014-03-23 10:00:00,2389.744548286604 +2014-03-23 11:00:00,2474.9813084112147 +2014-03-23 12:00:00,2523.613707165109 +2014-03-23 13:00:00,2518.97507788162 +2014-03-23 14:00:00,2518.797507788162 +2014-03-23 15:00:00,2525.663551401869 +2014-03-23 16:00:00,2533.5607476635514 +2014-03-23 17:00:00,2584.1682242990655 +2014-03-23 18:00:00,2566.504672897196 +2014-03-23 19:00:00,2716.809968847352 +2014-03-23 20:00:00,2689.1152647975077 +2014-03-23 21:00:00,2514.183800623053 +2014-03-23 22:00:00,2231.0560747663553 +2014-03-23 23:00:00,1816.7757009345794 +2014-03-24 00:00:00,1480.3146417445482 +2014-03-24 01:00:00,1232.0467289719627 +2014-03-24 02:00:00,1172.3239875389409 +2014-03-24 03:00:00,1150.9345794392523 +2014-03-24 04:00:00,1139.8785046728972 +2014-03-24 05:00:00,1205.3707165109033 +2014-03-24 06:00:00,1378.8286604361372 +2014-03-24 07:00:00,1554.747663551402 +2014-03-24 08:00:00,1693.4828660436137 +2014-03-24 09:00:00,2119.4174454828662 +2014-03-24 10:00:00,2394.0155763239877 +2014-03-24 11:00:00,2516.233644859813 +2014-03-24 12:00:00,2619.1806853582552 +2014-03-24 13:00:00,2638.2367601246106 +2014-03-24 14:00:00,2599.520249221184 +2014-03-24 15:00:00,2558.286604361371 +2014-03-24 16:00:00,2586.0872274143303 +2014-03-24 17:00:00,2638.700934579439 +2014-03-24 18:00:00,2615.355140186916 +2014-03-24 19:00:00,2793.0342679127725 +2014-03-24 20:00:00,2723.722741433022 +2014-03-24 21:00:00,2554.797507788162 +2014-03-24 22:00:00,2275.0654205607475 +2014-03-24 23:00:00,1924.411214953271 +2014-03-25 00:00:00,1553.7507788161993 +2014-03-25 01:00:00,1227.6666666666667 +2014-03-25 02:00:00,1173.1246105919004 +2014-03-25 03:00:00,1138.4922118380061 +2014-03-25 04:00:00,1148.3302180685357 +2014-03-25 05:00:00,1218.6947040498442 +2014-03-25 06:00:00,1390.9719626168223 +2014-03-25 07:00:00,1610.0809968847352 +2014-03-25 08:00:00,1722.233644859813 +2014-03-25 09:00:00,2130.5545171339563 +2014-03-25 10:00:00,2368.292834890966 +2014-03-25 11:00:00,2502.3956386292834 +2014-03-25 12:00:00,2576.834890965732 +2014-03-25 13:00:00,2577.841121495327 +2014-03-25 14:00:00,2592.644859813084 +2014-03-25 15:00:00,2557.588785046729 +2014-03-25 16:00:00,2589.5669781931465 +2014-03-25 17:00:00,2612.436137071651 +2014-03-25 18:00:00,2663.11214953271 +2014-03-25 19:00:00,2811.7258566978194 +2014-03-25 20:00:00,2716.133956386293 +2014-03-25 21:00:00,2509.090342679128 +2014-03-25 22:00:00,2247.1183800623053 +2014-03-25 23:00:00,1877.4392523364486 +2014-03-26 00:00:00,1495.6915887850466 +2014-03-26 01:00:00,1205.9501557632398 +2014-03-26 02:00:00,1179.4423676012461 +2014-03-26 03:00:00,1116.981308411215 +2014-03-26 04:00:00,1100.5856697819315 +2014-03-26 05:00:00,1168.6760124610591 +2014-03-26 06:00:00,1351.2118380062304 +2014-03-26 07:00:00,1561.588785046729 +2014-03-26 08:00:00,1707.9345794392523 +2014-03-26 09:00:00,2101.2242990654204 +2014-03-26 10:00:00,2354.3956386292834 +2014-03-26 11:00:00,2470.4766355140187 +2014-03-26 12:00:00,2530.0467289719627 +2014-03-26 13:00:00,2546.5140186915887 +2014-03-26 14:00:00,2549.221183800623 +2014-03-26 15:00:00,2498.778816199377 +2014-03-26 16:00:00,2555.931464174455 +2014-03-26 17:00:00,2545.1495327102803 +2014-03-26 18:00:00,2619.894080996885 +2014-03-26 19:00:00,2749.202492211838 +2014-03-26 20:00:00,2715.5140186915887 +2014-03-26 21:00:00,2514.797507788162 +2014-03-26 22:00:00,2240.8535825545173 +2014-03-26 23:00:00,1870.4704049844236 +2014-03-27 00:00:00,1497.252336448598 +2014-03-27 01:00:00,1181.8099688473521 +2014-03-27 02:00:00,1135.233644859813 +2014-03-27 03:00:00,1110.0591900311526 +2014-03-27 04:00:00,1105.221183800623 +2014-03-27 05:00:00,1184.6728971962616 +2014-03-27 06:00:00,1368.7320872274142 +2014-03-27 07:00:00,1568.5171339563863 +2014-03-27 08:00:00,1732.6791277258567 +2014-03-27 09:00:00,2132.3333333333335 +2014-03-27 10:00:00,2359.9158878504672 +2014-03-27 11:00:00,2515.1152647975077 +2014-03-27 12:00:00,2575.2959501557634 +2014-03-27 13:00:00,2533.7881619937693 +2014-03-27 14:00:00,2554.183800623053 +2014-03-27 15:00:00,2524.0872274143303 +2014-03-27 16:00:00,2571.4080996884736 +2014-03-27 17:00:00,2614.043613707165 +2014-03-27 18:00:00,2639.3582554517134 +2014-03-27 19:00:00,2783.105919003115 +2014-03-27 20:00:00,2736.866043613707 +2014-03-27 21:00:00,2549.3769470404986 +2014-03-27 22:00:00,2308.735202492212 +2014-03-27 23:00:00,1933.7570093457944 +2014-03-28 00:00:00,1597.0498442367602 +2014-03-28 01:00:00,1202.8068535825546 +2014-03-28 02:00:00,1163.018691588785 +2014-03-28 03:00:00,1125.4454828660437 +2014-03-28 04:00:00,1117.0498442367602 +2014-03-28 05:00:00,1187.7570093457944 +2014-03-28 06:00:00,1371.9906542056074 +2014-03-28 07:00:00,1576.0436137071652 +2014-03-28 08:00:00,1769.7071651090343 +2014-03-28 09:00:00,2269.760124610592 +2014-03-28 10:00:00,2425.302180685358 +2014-03-28 11:00:00,2504.1152647975077 +2014-03-28 12:00:00,2596.919003115265 +2014-03-28 13:00:00,2568.308411214953 +2014-03-28 14:00:00,2575.1744548286606 +2014-03-28 15:00:00,2630.227414330218 +2014-03-28 16:00:00,2680.345794392523 +2014-03-28 17:00:00,2642.894080996885 +2014-03-28 18:00:00,2681.532710280374 +2014-03-28 19:00:00,2852.3115264797507 +2014-03-28 20:00:00,2786.386292834891 +2014-03-28 21:00:00,2572.6479750778817 +2014-03-28 22:00:00,2338.02492211838 +2014-03-28 23:00:00,2018.0342679127725 +2014-03-29 00:00:00,1588.0996884735202 +2014-03-29 01:00:00,1335.5077881619939 +2014-03-29 02:00:00,1195.2461059190032 +2014-03-29 03:00:00,1099.1744548286604 +2014-03-29 04:00:00,1077.348909657321 +2014-03-29 05:00:00,1158.96261682243 +2014-03-29 06:00:00,1329.5420560747664 +2014-03-29 07:00:00,1513.1682242990655 +2014-03-29 08:00:00,1692.545171339564 +2014-03-29 09:00:00,2115.8193146417448 +2014-03-29 10:00:00,2403.8629283489095 +2014-03-29 11:00:00,2516.993769470405 +2014-03-29 12:00:00,2636.4205607476633 +2014-03-29 13:00:00,2597.1308411214955 +2014-03-29 14:00:00,2564.4205607476633 +2014-03-29 15:00:00,2547.2180685358258 +2014-03-29 16:00:00,2638.01246105919 +2014-03-29 17:00:00,2659.2492211838007 +2014-03-29 18:00:00,2613.07476635514 +2014-03-29 19:00:00,2811.6604361370714 +2014-03-29 20:00:00,2794.9968847352025 +2014-03-29 21:00:00,2573.894080996885 +2014-03-29 22:00:00,2326.2180685358258 +2014-03-29 23:00:00,1997.196261682243 +2014-03-30 00:00:00,1601.981308411215 +2014-03-30 01:00:00,5.8473520249221185 +2014-03-30 02:00:00,1294.5514018691588 +2014-03-30 03:00:00,1211.9283489096574 +2014-03-30 04:00:00,1106.3177570093458 +2014-03-30 05:00:00,1136.6292834890967 +2014-03-30 06:00:00,1338.1246105919004 +2014-03-30 07:00:00,1500.872274143302 +2014-03-30 08:00:00,1629.9190031152648 +2014-03-30 09:00:00,2055.856697819315 +2014-03-30 10:00:00,2357.2367601246106 +2014-03-30 11:00:00,2577.8847352024923 +2014-03-30 12:00:00,2634.2367601246106 +2014-03-30 13:00:00,2537.121495327103 +2014-03-30 14:00:00,2566.0716510903426 +2014-03-30 15:00:00,2602.423676012461 +2014-03-30 16:00:00,2642.133956386293 +2014-03-30 17:00:00,2606.07476635514 +2014-03-30 18:00:00,2618.0404984423676 +2014-03-30 19:00:00,2655.9657320872275 +2014-03-30 20:00:00,2721.6791277258567 +2014-03-30 21:00:00,2575.816199376947 +2014-03-30 22:00:00,2317.2523364485983 +2014-03-30 23:00:00,1856.5202492211838 +2014-03-31 00:00:00,1518.943925233645 +2014-03-31 01:00:00,1212.4828660436137 +2014-03-31 02:00:00,1156.9750778816199 +2014-03-31 03:00:00,1144.1246105919004 +2014-03-31 04:00:00,1143.803738317757 +2014-03-31 05:00:00,1235.8753894080996 +2014-03-31 06:00:00,1383.6853582554518 +2014-03-31 07:00:00,1571.7538940809968 +2014-03-31 08:00:00,1733.7538940809968 +2014-03-31 09:00:00,2126.6666666666665 +2014-03-31 10:00:00,2390.3707165109035 +2014-03-31 11:00:00,2543.6884735202493 +2014-03-31 12:00:00,2594.7881619937693 +2014-03-31 13:00:00,2612.3489096573207 +2014-03-31 14:00:00,2603.3800623052957 +2014-03-31 15:00:00,2604.669781931464 +2014-03-31 16:00:00,2622.467289719626 +2014-03-31 17:00:00,2635.7165109034268 +2014-03-31 18:00:00,2674.052959501558 +2014-03-31 19:00:00,2713.8971962616824 +2014-03-31 20:00:00,2763.919003115265 +2014-03-31 21:00:00,2595.3271028037384 +2014-03-31 22:00:00,2291.931464174455 +2014-03-31 23:00:00,1935.9657320872275 +2014-04-01 00:00:00,1541.9190031152648 +2014-04-01 01:00:00,1264.5358255451713 +2014-04-01 02:00:00,1173.7819314641745 +2014-04-01 03:00:00,1140.9719626168223 +2014-04-01 04:00:00,1119.601246105919 +2014-04-01 05:00:00,1206.214953271028 +2014-04-01 06:00:00,1388.0467289719627 +2014-04-01 07:00:00,1552.9065420560748 +2014-04-01 08:00:00,1735.1152647975077 +2014-04-01 09:00:00,2157.557632398754 +2014-04-01 10:00:00,2446.286604361371 +2014-04-01 11:00:00,2597.3395638629286 +2014-04-01 12:00:00,2647.97507788162 +2014-04-01 13:00:00,2625.2616822429904 +2014-04-01 14:00:00,2620.8504672897197 +2014-04-01 15:00:00,2575.4174454828662 +2014-04-01 16:00:00,2654.510903426791 +2014-04-01 17:00:00,2659.504672897196 +2014-04-01 18:00:00,2678.9501557632398 +2014-04-01 19:00:00,2753.398753894081 +2014-04-01 20:00:00,2709.3582554517134 +2014-04-01 21:00:00,2581.903426791277 +2014-04-01 22:00:00,2298.778816199377 +2014-04-01 23:00:00,1926.8598130841121 +2014-04-02 00:00:00,1539.8130841121495 +2014-04-02 01:00:00,1229.545171339564 +2014-04-02 02:00:00,1177.271028037383 +2014-04-02 03:00:00,1134.0249221183801 +2014-04-02 04:00:00,1115.785046728972 +2014-04-02 05:00:00,1219.348909657321 +2014-04-02 06:00:00,1406.7227414330218 +2014-04-02 07:00:00,1570.576323987539 +2014-04-02 08:00:00,1736.651090342679 +2014-04-02 09:00:00,2143.6791277258567 +2014-04-02 10:00:00,2388.6105919003116 +2014-04-02 11:00:00,2503.0560747663553 +2014-04-02 12:00:00,2644.4205607476633 +2014-04-02 13:00:00,2580.1931464174454 +2014-04-02 14:00:00,2566.8691588785045 +2014-04-02 15:00:00,2612.3395638629286 +2014-04-02 16:00:00,2657.3489096573207 +2014-04-02 17:00:00,2583.4766355140187 +2014-04-02 18:00:00,2663.8317757009345 +2014-04-02 19:00:00,2636.6884735202493 +2014-04-02 20:00:00,2695.9127725856697 +2014-04-02 21:00:00,2580.872274143302 +2014-04-02 22:00:00,2312.4267912772584 +2014-04-02 23:00:00,1931.3582554517134 +2014-04-03 00:00:00,1527.4205607476636 +2014-04-03 01:00:00,1221.595015576324 +2014-04-03 02:00:00,1170.816199376947 +2014-04-03 03:00:00,1127.3084112149534 +2014-04-03 04:00:00,1115.214953271028 +2014-04-03 05:00:00,1207.4641744548287 +2014-04-03 06:00:00,1383.5233644859813 +2014-04-03 07:00:00,1542.4579439252336 +2014-04-03 08:00:00,1751.9781931464174 +2014-04-03 09:00:00,2132.9906542056074 +2014-04-03 10:00:00,2370.713395638629 +2014-04-03 11:00:00,2522.3052959501556 +2014-04-03 12:00:00,2570.510903426791 +2014-04-03 13:00:00,2586.271028037383 +2014-04-03 14:00:00,2596.361370716511 +2014-04-03 15:00:00,2606.0996884735205 +2014-04-03 16:00:00,2631.6791277258567 +2014-04-03 17:00:00,2636.9657320872275 +2014-04-03 18:00:00,2630.4766355140187 +2014-04-03 19:00:00,2632.538940809969 +2014-04-03 20:00:00,2673.07476635514 +2014-04-03 21:00:00,2583.878504672897 +2014-04-03 22:00:00,2294.5919003115264 +2014-04-03 23:00:00,1929.2959501557632 +2014-04-04 00:00:00,1526.3395638629283 +2014-04-04 01:00:00,1226.9657320872275 +2014-04-04 02:00:00,1179.1931464174454 +2014-04-04 03:00:00,1132.6697819314643 +2014-04-04 04:00:00,1109.1308411214952 +2014-04-04 05:00:00,1201.7819314641745 +2014-04-04 06:00:00,1387.1713395638628 +2014-04-04 07:00:00,1603.6822429906542 +2014-04-04 08:00:00,1784.728971962617 +2014-04-04 09:00:00,2192.4018691588785 +2014-04-04 10:00:00,2438.785046728972 +2014-04-04 11:00:00,2576.760124610592 +2014-04-04 12:00:00,2647.264797507788 +2014-04-04 13:00:00,2680.3520249221183 +2014-04-04 14:00:00,2660.4205607476633 +2014-04-04 15:00:00,2656.255451713396 +2014-04-04 16:00:00,2680.4330218068535 +2014-04-04 17:00:00,2724.626168224299 +2014-04-04 18:00:00,2718.442367601246 +2014-04-04 19:00:00,2764.277258566978 +2014-04-04 20:00:00,2834.105919003115 +2014-04-04 21:00:00,2683.03738317757 +2014-04-04 22:00:00,2432.909657320872 +2014-04-04 23:00:00,2113.5358255451715 +2014-04-05 00:00:00,1690.8598130841121 +2014-04-05 01:00:00,1423.5358255451713 +2014-04-05 02:00:00,1290.2367601246106 +2014-04-05 03:00:00,1188.1183800623053 +2014-04-05 04:00:00,1167.4267912772586 +2014-04-05 05:00:00,1253.5046728971963 +2014-04-05 06:00:00,1434.127725856698 +2014-04-05 07:00:00,1585.8068535825546 +2014-04-05 08:00:00,1749.8286604361372 +2014-04-05 09:00:00,2207.158878504673 +2014-04-05 10:00:00,2499.479750778816 +2014-04-05 11:00:00,2679.847352024922 +2014-04-05 12:00:00,2740.436137071651 +2014-04-05 13:00:00,2699.373831775701 +2014-04-05 14:00:00,2711.479750778816 +2014-04-05 15:00:00,2785.669781931464 +2014-04-05 16:00:00,2779.866043613707 +2014-04-05 17:00:00,2813.778816199377 +2014-04-05 18:00:00,2807.1370716510905 +2014-04-05 19:00:00,2783.0467289719627 +2014-04-05 20:00:00,2870.735202492212 +2014-04-05 21:00:00,2722.3520249221183 +2014-04-05 22:00:00,2417.8006230529595 +2014-04-05 23:00:00,2076.255451713396 +2014-04-06 00:00:00,1674.0872274143303 +2014-04-06 01:00:00,1391.8286604361372 +2014-04-06 02:00:00,1318.3520249221183 +2014-04-06 03:00:00,1259.6697819314643 +2014-04-06 04:00:00,1136.146417445483 +2014-04-06 05:00:00,1238.0093457943926 +2014-04-06 06:00:00,1407.595015576324 +2014-04-06 07:00:00,1543.98753894081 +2014-04-06 08:00:00,1685.7445482866044 +2014-04-06 09:00:00,2125.8193146417448 +2014-04-06 10:00:00,2471.570093457944 +2014-04-06 11:00:00,2758.9158878504672 +2014-04-06 12:00:00,2768.9283489096574 +2014-04-06 13:00:00,2741.9813084112147 +2014-04-06 14:00:00,2810.489096573209 +2014-04-06 15:00:00,2848.1993769470405 +2014-04-06 16:00:00,2876.9781931464177 +2014-04-06 17:00:00,2980.1028037383176 +2014-04-06 18:00:00,2970.0186915887853 +2014-04-06 19:00:00,2939.0 +2014-04-06 20:00:00,2935.7165109034268 +2014-04-06 21:00:00,2800.1090342679126 +2014-04-06 22:00:00,2342.878504672897 +2014-04-06 23:00:00,1894.7943925233644 +2014-04-07 00:00:00,1528.6448598130842 +2014-04-07 01:00:00,1232.760124610592 +2014-04-07 02:00:00,1200.0841121495328 +2014-04-07 03:00:00,1168.4984423676012 +2014-04-07 04:00:00,1158.1028037383178 +2014-04-07 05:00:00,1270.8566978193146 +2014-04-07 06:00:00,1467.348909657321 +2014-04-07 07:00:00,1559.392523364486 +2014-04-07 08:00:00,1725.7414330218069 +2014-04-07 09:00:00,2129.02492211838 +2014-04-07 10:00:00,2463.3489096573207 +2014-04-07 11:00:00,2749.3956386292834 +2014-04-07 12:00:00,2892.246105919003 +2014-04-07 13:00:00,2837.7414330218066 +2014-04-07 14:00:00,2894.7040498442366 +2014-04-07 15:00:00,2959.0031152647975 +2014-04-07 16:00:00,2888.5295950155764 +2014-04-07 17:00:00,2887.595015576324 +2014-04-07 18:00:00,2950.654205607477 +2014-04-07 19:00:00,2875.6791277258567 +2014-04-07 20:00:00,2864.196261682243 +2014-04-07 21:00:00,2700.143302180685 +2014-04-07 22:00:00,2391.052959501558 +2014-04-07 23:00:00,2024.1557632398753 +2014-04-08 00:00:00,1600.5545171339563 +2014-04-08 01:00:00,1294.0934579439252 +2014-04-08 02:00:00,1232.6479750778817 +2014-04-08 03:00:00,1200.361370716511 +2014-04-08 04:00:00,1178.146417445483 +2014-04-08 05:00:00,1277.423676012461 +2014-04-08 06:00:00,1443.4828660436137 +2014-04-08 07:00:00,1593.8566978193146 +2014-04-08 08:00:00,1752.2429906542056 +2014-04-08 09:00:00,2166.1183800623053 +2014-04-08 10:00:00,2577.878504672897 +2014-04-08 11:00:00,2867.1246105919004 +2014-04-08 12:00:00,3070.5607476635514 +2014-04-08 13:00:00,3071.386292834891 +2014-04-08 14:00:00,3139.9283489096574 +2014-04-08 15:00:00,3150.0934579439254 +2014-04-08 16:00:00,3194.271028037383 +2014-04-08 17:00:00,3210.367601246106 +2014-04-08 18:00:00,3202.06230529595 +2014-04-08 19:00:00,3100.373831775701 +2014-04-08 20:00:00,3085.7414330218066 +2014-04-08 21:00:00,2768.6510903426793 +2014-04-08 22:00:00,2414.5732087227416 +2014-04-08 23:00:00,2016.5015576323988 +2014-04-09 00:00:00,1606.0467289719627 +2014-04-09 01:00:00,1288.5109034267912 +2014-04-09 02:00:00,1238.7881619937696 +2014-04-09 03:00:00,1212.0093457943926 +2014-04-09 04:00:00,1198.380062305296 +2014-04-09 05:00:00,1287.1713395638628 +2014-04-09 06:00:00,1465.2959501557632 +2014-04-09 07:00:00,1605.6728971962616 +2014-04-09 08:00:00,1774.797507788162 +2014-04-09 09:00:00,2187.2834890965732 +2014-04-09 10:00:00,2690.785046728972 +2014-04-09 11:00:00,2765.006230529595 +2014-04-09 12:00:00,2992.7165109034268 +2014-04-09 13:00:00,2921.5482866043612 +2014-04-09 14:00:00,2920.03738317757 +2014-04-09 15:00:00,3023.7943925233644 +2014-04-09 16:00:00,3058.6105919003116 +2014-04-09 17:00:00,3107.834890965732 +2014-04-09 18:00:00,3202.2492211838007 +2014-04-09 19:00:00,3036.722741433022 +2014-04-09 20:00:00,3082.2959501557634 +2014-04-09 21:00:00,2754.504672897196 +2014-04-09 22:00:00,2403.7881619937693 +2014-04-09 23:00:00,2045.8317757009345 +2014-04-10 00:00:00,1610.4018691588785 +2014-04-10 01:00:00,1326.2554517133956 +2014-04-10 02:00:00,1260.4143302180685 +2014-04-10 03:00:00,1233.9470404984424 +2014-04-10 04:00:00,1206.7352024922118 +2014-04-10 05:00:00,1277.4080996884736 +2014-04-10 06:00:00,1445.6105919003114 +2014-04-10 07:00:00,1614.8286604361372 +2014-04-10 08:00:00,1761.0623052959502 +2014-04-10 09:00:00,2179.834890965732 +2014-04-10 10:00:00,2706.654205607477 +2014-04-10 11:00:00,2864.6355140186915 +2014-04-10 12:00:00,3085.993769470405 +2014-04-10 13:00:00,3004.03738317757 +2014-04-10 14:00:00,3012.4205607476633 +2014-04-10 15:00:00,2994.361370716511 +2014-04-10 16:00:00,3091.9844236760123 +2014-04-10 17:00:00,3033.4392523364486 +2014-04-10 18:00:00,2995.7258566978194 +2014-04-10 19:00:00,2981.3831775700933 +2014-04-10 20:00:00,2981.121495327103 +2014-04-10 21:00:00,2775.105919003115 +2014-04-10 22:00:00,2421.6292834890965 +2014-04-10 23:00:00,2026.7694704049845 +2014-04-11 00:00:00,1607.2087227414331 +2014-04-11 01:00:00,1243.2274143302182 +2014-04-11 02:00:00,1279.6697819314643 +2014-04-11 03:00:00,1216.4080996884736 +2014-04-11 04:00:00,1202.582554517134 +2014-04-11 05:00:00,1278.4267912772586 +2014-04-11 06:00:00,1435.5077881619939 +2014-04-11 07:00:00,1612.8566978193146 +2014-04-11 08:00:00,1771.98753894081 +2014-04-11 09:00:00,2182.2492211838007 +2014-04-11 10:00:00,2580.0155763239877 +2014-04-11 11:00:00,2778.286604361371 +2014-04-11 12:00:00,2959.5607476635514 +2014-04-11 13:00:00,2983.6292834890965 +2014-04-11 14:00:00,3020.632398753894 +2014-04-11 15:00:00,3026.0218068535823 +2014-04-11 16:00:00,3125.847352024922 +2014-04-11 17:00:00,3243.227414330218 +2014-04-11 18:00:00,3140.4641744548285 +2014-04-11 19:00:00,3023.669781931464 +2014-04-11 20:00:00,2960.3489096573207 +2014-04-11 21:00:00,2774.1744548286606 +2014-04-11 22:00:00,2462.299065420561 +2014-04-11 23:00:00,2097.3052959501556 +2014-04-12 00:00:00,1682.9283489096574 +2014-04-12 01:00:00,1441.9595015576324 +2014-04-12 02:00:00,1324.0591900311526 +2014-04-12 03:00:00,1212.785046728972 +2014-04-12 04:00:00,1175.146417445483 +2014-04-12 05:00:00,1266.7757009345794 +2014-04-12 06:00:00,1444.7694704049845 +2014-04-12 07:00:00,1594.436137071651 +2014-04-12 08:00:00,1739.526479750779 +2014-04-12 09:00:00,2179.4267912772584 +2014-04-12 10:00:00,2601.1931464174454 +2014-04-12 11:00:00,2819.308411214953 +2014-04-12 12:00:00,2890.0155763239877 +2014-04-12 13:00:00,2979.196261682243 +2014-04-12 14:00:00,2996.753894080997 +2014-04-12 15:00:00,3085.1682242990655 +2014-04-12 16:00:00,3146.866043613707 +2014-04-12 17:00:00,3235.542056074766 +2014-04-12 18:00:00,3140.816199376947 +2014-04-12 19:00:00,3043.538940809969 +2014-04-12 20:00:00,3077.676012461059 +2014-04-12 21:00:00,2803.467289719626 +2014-04-12 22:00:00,2451.3769470404986 +2014-04-12 23:00:00,2096.1246105919004 +2014-04-13 00:00:00,1706.7538940809968 +2014-04-13 01:00:00,1401.4579439252336 +2014-04-13 02:00:00,1347.202492211838 +2014-04-13 03:00:00,1291.1931464174454 +2014-04-13 04:00:00,1173.3239875389409 +2014-04-13 05:00:00,1261.4672897196263 +2014-04-13 06:00:00,1423.0872274143303 +2014-04-13 07:00:00,1575.404984423676 +2014-04-13 08:00:00,1699.834890965732 +2014-04-13 09:00:00,2176.105919003115 +2014-04-13 10:00:00,2615.735202492212 +2014-04-13 11:00:00,2919.152647975078 +2014-04-13 12:00:00,2938.302180685358 +2014-04-13 13:00:00,3004.841121495327 +2014-04-13 14:00:00,3080.6292834890965 +2014-04-13 15:00:00,3125.663551401869 +2014-04-13 16:00:00,3189.2056074766356 +2014-04-13 17:00:00,3262.5856697819313 +2014-04-13 18:00:00,3176.436137071651 +2014-04-13 19:00:00,3137.8130841121497 +2014-04-13 20:00:00,3094.271028037383 +2014-04-13 21:00:00,2861.373831775701 +2014-04-13 22:00:00,2471.2118380062307 +2014-04-13 23:00:00,1942.8193146417445 +2014-04-14 00:00:00,1565.7445482866044 +2014-04-14 01:00:00,1278.7757009345794 +2014-04-14 02:00:00,1226.8442367601247 +2014-04-14 03:00:00,1196.8785046728972 +2014-04-14 04:00:00,1187.8442367601247 +2014-04-14 05:00:00,1280.4299065420562 +2014-04-14 06:00:00,1460.233644859813 +2014-04-14 07:00:00,1597.8878504672898 +2014-04-14 08:00:00,1763.8909657320871 +2014-04-14 09:00:00,2174.1495327102803 +2014-04-14 10:00:00,2595.02492211838 +2014-04-14 11:00:00,2860.3333333333335 +2014-04-14 12:00:00,3001.5140186915887 +2014-04-14 13:00:00,3077.286604361371 +2014-04-14 14:00:00,3076.473520249221 +2014-04-14 15:00:00,3106.8535825545173 +2014-04-14 16:00:00,3114.778816199377 +2014-04-14 17:00:00,3128.828660436137 +2014-04-14 18:00:00,3066.728971962617 +2014-04-14 19:00:00,3019.4080996884736 +2014-04-14 20:00:00,3004.1152647975077 +2014-04-14 21:00:00,2768.8691588785045 +2014-04-14 22:00:00,2439.654205607477 +2014-04-14 23:00:00,2067.165109034268 +2014-04-15 00:00:00,1614.1121495327102 +2014-04-15 01:00:00,1320.588785046729 +2014-04-15 02:00:00,1258.6822429906542 +2014-04-15 03:00:00,1225.9158878504672 +2014-04-15 04:00:00,1204.0591900311526 +2014-04-15 05:00:00,1307.7632398753894 +2014-04-15 06:00:00,1474.8317757009345 +2014-04-15 07:00:00,1636.1152647975077 +2014-04-15 08:00:00,1785.4392523364486 +2014-04-15 09:00:00,2207.8816199376947 +2014-04-15 10:00:00,2653.607476635514 +2014-04-15 11:00:00,2892.9813084112147 +2014-04-15 12:00:00,3073.98753894081 +2014-04-15 13:00:00,3102.2834890965732 +2014-04-15 14:00:00,3054.7694704049845 +2014-04-15 15:00:00,3171.3395638629286 +2014-04-15 16:00:00,3219.9127725856697 +2014-04-15 17:00:00,3263.6666666666665 +2014-04-15 18:00:00,3148.7320872274145 +2014-04-15 19:00:00,3031.4205607476633 +2014-04-15 20:00:00,3066.520249221184 +2014-04-15 21:00:00,2813.043613707165 +2014-04-15 22:00:00,2492.685358255452 +2014-04-15 23:00:00,2096.080996884735 +2014-04-16 00:00:00,1637.6542056074766 +2014-04-16 01:00:00,1310.1183800623053 +2014-04-16 02:00:00,1247.5794392523364 +2014-04-16 03:00:00,1220.2242990654206 +2014-04-16 04:00:00,1227.2056074766356 +2014-04-16 05:00:00,1334.8847352024923 +2014-04-16 06:00:00,1506.2056074766356 +2014-04-16 07:00:00,1616.0218068535826 +2014-04-16 08:00:00,1790.3177570093458 +2014-04-16 09:00:00,2235.0654205607475 +2014-04-16 10:00:00,2613.165109034268 +2014-04-16 11:00:00,2865.2492211838007 +2014-04-16 12:00:00,2989.01246105919 +2014-04-16 13:00:00,3134.336448598131 +2014-04-16 14:00:00,3158.323987538941 +2014-04-16 15:00:00,3149.88785046729 +2014-04-16 16:00:00,3223.570093457944 +2014-04-16 17:00:00,3152.7757009345796 +2014-04-16 18:00:00,3181.2959501557634 +2014-04-16 19:00:00,3107.1464174454827 +2014-04-16 20:00:00,3048.9781931464177 +2014-04-16 21:00:00,2782.785046728972 +2014-04-16 22:00:00,2418.246105919003 +2014-04-16 23:00:00,2061.8971962616824 +2014-04-17 00:00:00,1627.7507788161993 +2014-04-17 01:00:00,1310.632398753894 +2014-04-17 02:00:00,1258.6666666666667 +2014-04-17 03:00:00,1221.7040498442368 +2014-04-17 04:00:00,1208.853582554517 +2014-04-17 05:00:00,1290.0778816199377 +2014-04-17 06:00:00,1465.3177570093458 +2014-04-17 07:00:00,1614.5171339563863 +2014-04-17 08:00:00,1762.4953271028037 +2014-04-17 09:00:00,2224.6230529595014 +2014-04-17 10:00:00,2616.4454828660437 +2014-04-17 11:00:00,2909.816199376947 +2014-04-17 12:00:00,3186.532710280374 +2014-04-17 13:00:00,3304.361370716511 +2014-04-17 14:00:00,3345.595015576324 +2014-04-17 15:00:00,3440.467289719626 +2014-04-17 16:00:00,3485.4018691588785 +2014-04-17 17:00:00,3457.676012461059 +2014-04-17 18:00:00,3364.644859813084 +2014-04-17 19:00:00,3278.0404984423676 +2014-04-17 20:00:00,3139.479750778816 +2014-04-17 21:00:00,2902.5295950155764 +2014-04-17 22:00:00,2539.1152647975077 +2014-04-17 23:00:00,2127.728971962617 +2014-04-18 00:00:00,1719.3146417445482 +2014-04-18 01:00:00,1352.8099688473521 +2014-04-18 02:00:00,1280.1059190031153 +2014-04-18 03:00:00,1241.9968847352025 +2014-04-18 04:00:00,1215.7165109034268 +2014-04-18 05:00:00,1327.872274143302 +2014-04-18 06:00:00,1504.1308411214952 +2014-04-18 07:00:00,1635.1619937694704 +2014-04-18 08:00:00,1770.0342679127725 +2014-04-18 09:00:00,2255.0560747663553 +2014-04-18 10:00:00,2673.171339563863 +2014-04-18 11:00:00,2845.532710280374 +2014-04-18 12:00:00,3140.7476635514017 +2014-04-18 13:00:00,3099.429906542056 +2014-04-18 14:00:00,3125.88785046729 +2014-04-18 15:00:00,3196.01246105919 +2014-04-18 16:00:00,3222.96261682243 +2014-04-18 17:00:00,3222.0031152647975 +2014-04-18 18:00:00,3168.314641744548 +2014-04-18 19:00:00,3099.7383177570096 +2014-04-18 20:00:00,3047.588785046729 +2014-04-18 21:00:00,2796.5358255451715 +2014-04-18 22:00:00,2546.9657320872275 +2014-04-18 23:00:00,2184.5825545171338 +2014-04-19 00:00:00,1702.6542056074766 +2014-04-19 01:00:00,1413.056074766355 +2014-04-19 02:00:00,1290.9470404984424 +2014-04-19 03:00:00,1213.766355140187 +2014-04-19 04:00:00,1181.3239875389409 +2014-04-19 05:00:00,1291.4299065420562 +2014-04-19 06:00:00,1454.3021806853583 +2014-04-19 07:00:00,1568.1339563862928 +2014-04-19 08:00:00,1733.3644859813085 +2014-04-19 09:00:00,2181.9532710280373 +2014-04-19 10:00:00,2604.6573208722743 +2014-04-19 11:00:00,2779.5794392523367 +2014-04-19 12:00:00,3065.1744548286606 +2014-04-19 13:00:00,2988.3831775700933 +2014-04-19 14:00:00,2957.526479750779 +2014-04-19 15:00:00,3054.3333333333335 +2014-04-19 16:00:00,3043.3271028037384 +2014-04-19 17:00:00,3027.909657320872 +2014-04-19 18:00:00,2994.4984423676015 +2014-04-19 19:00:00,2893.271028037383 +2014-04-19 20:00:00,2930.538940809969 +2014-04-19 21:00:00,2762.0934579439254 +2014-04-19 22:00:00,2455.299065420561 +2014-04-19 23:00:00,2074.171339563863 +2014-04-20 00:00:00,1678.5607476635514 +2014-04-20 01:00:00,1382.146417445483 +2014-04-20 02:00:00,1313.2959501557632 +2014-04-20 03:00:00,1266.5327102803737 +2014-04-20 04:00:00,1146.1682242990655 +2014-04-20 05:00:00,1241.9657320872275 +2014-04-20 06:00:00,1406.5856697819315 +2014-04-20 07:00:00,1522.6884735202493 +2014-04-20 08:00:00,1669.0093457943926 +2014-04-20 09:00:00,2102.3489096573207 +2014-04-20 10:00:00,2506.361370716511 +2014-04-20 11:00:00,2842.4922118380064 +2014-04-20 12:00:00,2802.822429906542 +2014-04-20 13:00:00,2817.3426791277257 +2014-04-20 14:00:00,2776.467289719626 +2014-04-20 15:00:00,2800.0654205607475 +2014-04-20 16:00:00,2783.6573208722743 +2014-04-20 17:00:00,2699.8442367601247 +2014-04-20 18:00:00,2645.4330218068535 +2014-04-20 19:00:00,2452.068535825545 +2014-04-20 20:00:00,2331.3395638629286 +2014-04-20 21:00:00,2224.06230529595 +2014-04-20 22:00:00,1985.5794392523364 +2014-04-20 23:00:00,1695.3894080996886 +2014-04-21 00:00:00,1443.7632398753894 +2014-04-21 01:00:00,1215.9532710280373 +2014-04-21 02:00:00,1179.8971962616822 +2014-04-21 03:00:00,1166.2772585669782 +2014-04-21 04:00:00,1169.8785046728972 +2014-04-21 05:00:00,1287.4267912772586 +2014-04-21 06:00:00,1428.9408099688474 +2014-04-21 07:00:00,1563.816199376947 +2014-04-21 08:00:00,1713.4579439252336 +2014-04-21 09:00:00,2102.052959501558 +2014-04-21 10:00:00,2482.595015576324 +2014-04-21 11:00:00,2690.96261682243 +2014-04-21 12:00:00,2806.8535825545173 +2014-04-21 13:00:00,2806.8847352024923 +2014-04-21 14:00:00,2832.03738317757 +2014-04-21 15:00:00,2810.0872274143303 +2014-04-21 16:00:00,2838.286604361371 +2014-04-21 17:00:00,2909.0498442367602 +2014-04-21 18:00:00,2821.373831775701 +2014-04-21 19:00:00,2799.5171339563863 +2014-04-21 20:00:00,2799.638629283489 +2014-04-21 21:00:00,2671.158878504673 +2014-04-21 22:00:00,2351.856697819315 +2014-04-21 23:00:00,2015.6043613707166 +2014-04-22 00:00:00,1634.968847352025 +2014-04-22 01:00:00,1329.8753894080996 +2014-04-22 02:00:00,1262.9595015576324 +2014-04-22 03:00:00,1227.5669781931465 +2014-04-22 04:00:00,1212.2616822429907 +2014-04-22 05:00:00,1321.404984423676 +2014-04-22 06:00:00,1449.2585669781931 +2014-04-22 07:00:00,1601.2959501557632 +2014-04-22 08:00:00,1746.2741433021806 +2014-04-22 09:00:00,2135.473520249221 +2014-04-22 10:00:00,2454.700934579439 +2014-04-22 11:00:00,2734.713395638629 +2014-04-22 12:00:00,2827.644859813084 +2014-04-22 13:00:00,2921.4859813084113 +2014-04-22 14:00:00,2876.183800623053 +2014-04-22 15:00:00,2908.7102803738317 +2014-04-22 16:00:00,2907.872274143302 +2014-04-22 17:00:00,2906.2367601246106 +2014-04-22 18:00:00,2871.563862928349 +2014-04-22 19:00:00,2842.196261682243 +2014-04-22 20:00:00,2850.386292834891 +2014-04-22 21:00:00,2660.448598130841 +2014-04-22 22:00:00,2366.772585669782 +2014-04-22 23:00:00,1988.6417445482866 +2014-04-23 00:00:00,1585.0404984423676 +2014-04-23 01:00:00,1293.8878504672898 +2014-04-23 02:00:00,1212.5420560747664 +2014-04-23 03:00:00,1185.8598130841121 +2014-04-23 04:00:00,1183.8785046728972 +2014-04-23 05:00:00,1282.8847352024923 +2014-04-23 06:00:00,1430.98753894081 +2014-04-23 07:00:00,1567.5981308411215 +2014-04-23 08:00:00,1722.7071651090343 +2014-04-23 09:00:00,2154.2959501557634 +2014-04-23 10:00:00,2460.1183800623053 +2014-04-23 11:00:00,2751.367601246106 +2014-04-23 12:00:00,2863.663551401869 +2014-04-23 13:00:00,2833.940809968847 +2014-04-23 14:00:00,2893.8442367601247 +2014-04-23 15:00:00,2891.4392523364486 +2014-04-23 16:00:00,2910.6604361370714 +2014-04-23 17:00:00,2942.7507788161993 +2014-04-23 18:00:00,2885.993769470405 +2014-04-23 19:00:00,2827.3395638629286 +2014-04-23 20:00:00,2879.557632398754 +2014-04-23 21:00:00,2677.208722741433 +2014-04-23 22:00:00,2396.3426791277257 +2014-04-23 23:00:00,1951.1308411214952 +2014-04-24 00:00:00,1559.177570093458 +2014-04-24 01:00:00,1241.5389408099688 +2014-04-24 02:00:00,1189.1495327102805 +2014-04-24 03:00:00,1162.1214953271028 +2014-04-24 04:00:00,1149.454828660436 +2014-04-24 05:00:00,1241.9034267912773 +2014-04-24 06:00:00,1383.2772585669782 +2014-04-24 07:00:00,1536.7943925233644 +2014-04-24 08:00:00,1703.4485981308412 +2014-04-24 09:00:00,2139.0498442367602 +2014-04-24 10:00:00,2435.6604361370714 +2014-04-24 11:00:00,2647.6355140186915 +2014-04-24 12:00:00,2850.1246105919004 +2014-04-24 13:00:00,2842.9813084112147 +2014-04-24 14:00:00,2853.0155763239877 +2014-04-24 15:00:00,2815.1370716510905 +2014-04-24 16:00:00,2842.3115264797507 +2014-04-24 17:00:00,2801.638629283489 +2014-04-24 18:00:00,2829.9283489096574 +2014-04-24 19:00:00,2796.760124610592 +2014-04-24 20:00:00,2816.6573208722743 +2014-04-24 21:00:00,2629.4205607476633 +2014-04-24 22:00:00,2417.4330218068535 +2014-04-24 23:00:00,2039.7165109034268 +2014-04-25 00:00:00,1600.766355140187 +2014-04-25 01:00:00,1269.6791277258567 +2014-04-25 02:00:00,1202.3520249221183 +2014-04-25 03:00:00,1149.4704049844236 +2014-04-25 04:00:00,1131.1869158878505 +2014-04-25 05:00:00,1227.7196261682243 +2014-04-25 06:00:00,1365.127725856698 +2014-04-25 07:00:00,1499.1588785046729 +2014-04-25 08:00:00,1678.0778816199377 +2014-04-25 09:00:00,2108.330218068536 +2014-04-25 10:00:00,2428.588785046729 +2014-04-25 11:00:00,2652.7632398753894 +2014-04-25 12:00:00,2766.4641744548285 +2014-04-25 13:00:00,2729.411214953271 +2014-04-25 14:00:00,2805.9906542056074 +2014-04-25 15:00:00,2816.9345794392525 +2014-04-25 16:00:00,2898.345794392523 +2014-04-25 17:00:00,2908.700934579439 +2014-04-25 18:00:00,2858.6728971962616 +2014-04-25 19:00:00,2830.0934579439254 +2014-04-25 20:00:00,2837.878504672897 +2014-04-25 21:00:00,2718.227414330218 +2014-04-25 22:00:00,2446.7196261682243 +2014-04-25 23:00:00,2050.6573208722743 +2014-04-26 00:00:00,1625.6417445482866 +2014-04-26 01:00:00,1380.2834890965732 +2014-04-26 02:00:00,1270.2803738317757 +2014-04-26 03:00:00,1172.7040498442368 +2014-04-26 04:00:00,1153.4018691588785 +2014-04-26 05:00:00,1262.2274143302182 +2014-04-26 06:00:00,1403.9781931464174 +2014-04-26 07:00:00,1553.0467289719627 +2014-04-26 08:00:00,1685.0996884735202 +2014-04-26 09:00:00,2157.105919003115 +2014-04-26 10:00:00,2631.96261682243 +2014-04-26 11:00:00,2943.246105919003 +2014-04-26 12:00:00,2947.299065420561 +2014-04-26 13:00:00,2980.2679127725855 +2014-04-26 14:00:00,2911.3707165109035 +2014-04-26 15:00:00,2996.3177570093458 +2014-04-26 16:00:00,2992.4143302180687 +2014-04-26 17:00:00,2964.4859813084113 +2014-04-26 18:00:00,2869.7320872274145 +2014-04-26 19:00:00,2881.457943925234 +2014-04-26 20:00:00,2863.5545171339563 +2014-04-26 21:00:00,2736.9158878504672 +2014-04-26 22:00:00,2380.803738317757 +2014-04-26 23:00:00,2032.8878504672898 +2014-04-27 00:00:00,1632.4299065420562 +2014-04-27 01:00:00,1344.6479750778817 +2014-04-27 02:00:00,1289.6355140186915 +2014-04-27 03:00:00,1226.9750778816199 +2014-04-27 04:00:00,1133.1619937694704 +2014-04-27 05:00:00,1207.9127725856697 +2014-04-27 06:00:00,1362.5140186915887 +2014-04-27 07:00:00,1490.9563862928348 +2014-04-27 08:00:00,1609.8255451713396 +2014-04-27 09:00:00,2081.6666666666665 +2014-04-27 10:00:00,2508.2897196261683 +2014-04-27 11:00:00,2897.4517133956388 +2014-04-27 12:00:00,2875.956386292835 +2014-04-27 13:00:00,2874.0093457943926 +2014-04-27 14:00:00,2957.9906542056074 +2014-04-27 15:00:00,2972.8691588785045 +2014-04-27 16:00:00,3015.3489096573207 +2014-04-27 17:00:00,3016.105919003115 +2014-04-27 18:00:00,2981.255451713396 +2014-04-27 19:00:00,2884.2834890965732 +2014-04-27 20:00:00,2862.7320872274145 +2014-04-27 21:00:00,2729.4517133956388 +2014-04-27 22:00:00,2282.6510903426793 +2014-04-27 23:00:00,1847.8971962616822 +2014-04-28 00:00:00,1492.2647975077882 +2014-04-28 01:00:00,1233.760124610592 +2014-04-28 02:00:00,1201.8691588785048 +2014-04-28 03:00:00,1177.5046728971963 +2014-04-28 04:00:00,1173.1900311526479 +2014-04-28 05:00:00,1262.0249221183801 +2014-04-28 06:00:00,1389.1588785046729 +2014-04-28 07:00:00,1516.7725856697818 +2014-04-28 08:00:00,1656.146417445483 +2014-04-28 09:00:00,2116.4174454828662 +2014-04-28 10:00:00,2513.520249221184 +2014-04-28 11:00:00,2814.7819314641742 +2014-04-28 12:00:00,2934.735202492212 +2014-04-28 13:00:00,3032.8193146417448 +2014-04-28 14:00:00,2997.632398753894 +2014-04-28 15:00:00,3055.5140186915887 +2014-04-28 16:00:00,3134.1090342679126 +2014-04-28 17:00:00,3139.722741433022 +2014-04-28 18:00:00,3090.479750778816 +2014-04-28 19:00:00,3026.3520249221183 +2014-04-28 20:00:00,2911.336448598131 +2014-04-28 21:00:00,2705.956386292835 +2014-04-28 22:00:00,2373.8598130841124 +2014-04-28 23:00:00,2015.2429906542056 +2014-04-29 00:00:00,1597.9376947040498 +2014-04-29 01:00:00,1296.6791277258567 +2014-04-29 02:00:00,1219.0623052959502 +2014-04-29 03:00:00,1184.5077881619939 +2014-04-29 04:00:00,1182.3644859813085 +2014-04-29 05:00:00,1279.9345794392523 +2014-04-29 06:00:00,1417.9781931464174 +2014-04-29 07:00:00,1568.202492211838 +2014-04-29 08:00:00,1728.9190031152648 +2014-04-29 09:00:00,2138.02492211838 +2014-04-29 10:00:00,2582.626168224299 +2014-04-29 11:00:00,2772.92523364486 +2014-04-29 12:00:00,2882.6355140186915 +2014-04-29 13:00:00,3005.0218068535823 +2014-04-29 14:00:00,2994.4454828660437 +2014-04-29 15:00:00,3176.2585669781934 +2014-04-29 16:00:00,3216.8130841121497 +2014-04-29 17:00:00,3264.105919003115 +2014-04-29 18:00:00,3164.1090342679126 +2014-04-29 19:00:00,3080.7881619937693 +2014-04-29 20:00:00,3040.9719626168226 +2014-04-29 21:00:00,2748.473520249221 +2014-04-29 22:00:00,2397.386292834891 +2014-04-29 23:00:00,1991.6822429906542 +2014-04-30 00:00:00,1585.8909657320871 +2014-04-30 01:00:00,1289.7881619937696 +2014-04-30 02:00:00,1238.5171339563863 +2014-04-30 03:00:00,1204.3644859813085 +2014-04-30 04:00:00,1192.2866043613708 +2014-04-30 05:00:00,1281.1214953271028 +2014-04-30 06:00:00,1437.5327102803737 +2014-04-30 07:00:00,1593.7881619937696 +2014-04-30 08:00:00,1754.1370716510903 +2014-04-30 09:00:00,2217.4454828660437 +2014-04-30 10:00:00,2689.828660436137 +2014-04-30 11:00:00,3080.6604361370714 +2014-04-30 12:00:00,3196.98753894081 +2014-04-30 13:00:00,3300.330218068536 +2014-04-30 14:00:00,3310.0186915887853 +2014-04-30 15:00:00,3402.0093457943926 +2014-04-30 16:00:00,3475.1682242990655 +2014-04-30 17:00:00,3434.6479750778817 +2014-04-30 18:00:00,3320.9003115264795 +2014-04-30 19:00:00,3226.8816199376947 +2014-04-30 20:00:00,3155.8816199376947 +2014-04-30 21:00:00,2865.9844236760123 +2014-04-30 22:00:00,2504.3177570093458 +2014-04-30 23:00:00,2055.286604361371 +2014-05-01 00:00:00,1655.1900311526479 +2014-05-01 01:00:00,1299.4080996884736 +2014-05-01 02:00:00,1236.2772585669782 +2014-05-01 03:00:00,1210.7507788161993 +2014-05-01 04:00:00,1192.6947040498442 +2014-05-01 05:00:00,1289.5607476635514 +2014-05-01 06:00:00,1401.1370716510903 +2014-05-01 07:00:00,1575.9657320872275 +2014-05-01 08:00:00,1702.7040498442368 +2014-05-01 09:00:00,2170.052959501558 +2014-05-01 10:00:00,2690.760124610592 +2014-05-01 11:00:00,3028.7757009345796 +2014-05-01 12:00:00,3173.2897196261683 +2014-05-01 13:00:00,3309.068535825545 +2014-05-01 14:00:00,3367.158878504673 +2014-05-01 15:00:00,3461.5451713395637 +2014-05-01 16:00:00,3433.744548286604 +2014-05-01 17:00:00,3472.5794392523367 +2014-05-01 18:00:00,3311.1619937694704 +2014-05-01 19:00:00,3276.872274143302 +2014-05-01 20:00:00,3191.133956386293 +2014-05-01 21:00:00,2815.5015576323985 +2014-05-01 22:00:00,2399.208722741433 +2014-05-01 23:00:00,1955.8317757009345 +2014-05-02 00:00:00,1597.613707165109 +2014-05-02 01:00:00,1289.9470404984424 +2014-05-02 02:00:00,1245.526479750779 +2014-05-02 03:00:00,1201.404984423676 +2014-05-02 04:00:00,1196.943925233645 +2014-05-02 05:00:00,1286.202492211838 +2014-05-02 06:00:00,1441.9501557632398 +2014-05-02 07:00:00,1600.01246105919 +2014-05-02 08:00:00,1743.6261682242991 +2014-05-02 09:00:00,2233.6573208722743 +2014-05-02 10:00:00,2714.940809968847 +2014-05-02 11:00:00,3203.2741433021806 +2014-05-02 12:00:00,3411.330218068536 +2014-05-02 13:00:00,3500.0654205607475 +2014-05-02 14:00:00,3596.4704049844236 +2014-05-02 15:00:00,3580.4704049844236 +2014-05-02 16:00:00,3700.8909657320874 +2014-05-02 17:00:00,3671.1246105919004 +2014-05-02 18:00:00,3537.5295950155764 +2014-05-02 19:00:00,3348.3333333333335 +2014-05-02 20:00:00,3341.626168224299 +2014-05-02 21:00:00,2958.5295950155764 +2014-05-02 22:00:00,2593.2242990654204 +2014-05-02 23:00:00,2140.9906542056074 +2014-05-03 00:00:00,1700.4517133956385 +2014-05-03 01:00:00,1411.3302180685357 +2014-05-03 02:00:00,1304.5233644859813 +2014-05-03 03:00:00,1234.1588785046729 +2014-05-03 04:00:00,1209.4610591900312 +2014-05-03 05:00:00,1301.0903426791276 +2014-05-03 06:00:00,1441.1526479750778 +2014-05-03 07:00:00,1588.766355140187 +2014-05-03 08:00:00,1723.8753894080996 +2014-05-03 09:00:00,2238.8193146417448 +2014-05-03 10:00:00,2767.2834890965732 +2014-05-03 11:00:00,3305.3831775700933 +2014-05-03 12:00:00,3456.7570093457944 +2014-05-03 13:00:00,3469.6947040498444 +2014-05-03 14:00:00,3497.588785046729 +2014-05-03 15:00:00,3633.626168224299 +2014-05-03 16:00:00,3557.551401869159 +2014-05-03 17:00:00,3558.563862928349 +2014-05-03 18:00:00,3462.233644859813 +2014-05-03 19:00:00,3332.92523364486 +2014-05-03 20:00:00,3286.214953271028 +2014-05-03 21:00:00,2992.785046728972 +2014-05-03 22:00:00,2614.816199376947 +2014-05-03 23:00:00,2124.685358255452 +2014-05-04 00:00:00,1706.3052959501558 +2014-05-04 01:00:00,1405.214953271028 +2014-05-04 02:00:00,1333.5607476635514 +2014-05-04 03:00:00,1284.0623052959502 +2014-05-04 04:00:00,1195.0903426791276 +2014-05-04 05:00:00,1272.943925233645 +2014-05-04 06:00:00,1396.563862928349 +2014-05-04 07:00:00,1554.9968847352025 +2014-05-04 08:00:00,1699.177570093458 +2014-05-04 09:00:00,2229.0996884735205 +2014-05-04 10:00:00,2796.894080996885 +2014-05-04 11:00:00,3475.8691588785045 +2014-05-04 12:00:00,3342.2056074766356 +2014-05-04 13:00:00,3403.7507788161993 +2014-05-04 14:00:00,3431.03738317757 +2014-05-04 15:00:00,3499.3894080996884 +2014-05-04 16:00:00,3556.367601246106 +2014-05-04 17:00:00,3548.165109034268 +2014-05-04 18:00:00,3472.956386292835 +2014-05-04 19:00:00,3359.06230529595 +2014-05-04 20:00:00,3278.9813084112147 +2014-05-04 21:00:00,3095.314641744548 +2014-05-04 22:00:00,2489.386292834891 +2014-05-04 23:00:00,1932.3457943925234 +2014-05-05 00:00:00,1581.0498442367602 +2014-05-05 01:00:00,1285.0903426791276 +2014-05-05 02:00:00,1240.0841121495328 +2014-05-05 03:00:00,1226.4922118380061 +2014-05-05 04:00:00,1227.1744548286604 +2014-05-05 05:00:00,1306.9719626168223 +2014-05-05 06:00:00,1440.1214953271028 +2014-05-05 07:00:00,1602.2087227414331 +2014-05-05 08:00:00,1785.8785046728972 +2014-05-05 09:00:00,2242.856697819315 +2014-05-05 10:00:00,2829.576323987539 +2014-05-05 11:00:00,3315.760124610592 +2014-05-05 12:00:00,3456.302180685358 +2014-05-05 13:00:00,3558.940809968847 +2014-05-05 14:00:00,3462.06230529595 +2014-05-05 15:00:00,3463.2897196261683 +2014-05-05 16:00:00,3496.0031152647975 +2014-05-05 17:00:00,3550.03738317757 +2014-05-05 18:00:00,3502.2959501557634 +2014-05-05 19:00:00,3366.6105919003116 +2014-05-05 20:00:00,3247.090342679128 +2014-05-05 21:00:00,2906.3769470404986 +2014-05-05 22:00:00,2482.355140186916 +2014-05-05 23:00:00,2037.981308411215 +2014-05-06 00:00:00,1648.9190031152648 +2014-05-06 01:00:00,1330.2461059190032 +2014-05-06 02:00:00,1272.417445482866 +2014-05-06 03:00:00,1265.3208722741433 +2014-05-06 04:00:00,1255.2679127725858 +2014-05-06 05:00:00,1349.3177570093458 +2014-05-06 06:00:00,1474.0342679127725 +2014-05-06 07:00:00,1604.9563862928348 +2014-05-06 08:00:00,1784.398753894081 +2014-05-06 09:00:00,2273.856697819315 +2014-05-06 10:00:00,2803.0186915887853 +2014-05-06 11:00:00,3180.227414330218 +2014-05-06 12:00:00,3303.006230529595 +2014-05-06 13:00:00,3376.97507788162 +2014-05-06 14:00:00,3414.872274143302 +2014-05-06 15:00:00,3490.495327102804 +2014-05-06 16:00:00,3499.691588785047 +2014-05-06 17:00:00,3503.043613707165 +2014-05-06 18:00:00,3377.8629283489095 +2014-05-06 19:00:00,3259.6791277258567 +2014-05-06 20:00:00,3206.510903426791 +2014-05-06 21:00:00,2855.271028037383 +2014-05-06 22:00:00,2461.700934579439 +2014-05-06 23:00:00,2030.1526479750778 +2014-05-07 00:00:00,1631.6292834890967 +2014-05-07 01:00:00,1335.7694704049845 +2014-05-07 02:00:00,1260.638629283489 +2014-05-07 03:00:00,1226.380062305296 +2014-05-07 04:00:00,1210.3146417445482 +2014-05-07 05:00:00,1300.4392523364486 +2014-05-07 06:00:00,1458.2866043613708 +2014-05-07 07:00:00,1601.348909657321 +2014-05-07 08:00:00,1769.0778816199377 +2014-05-07 09:00:00,2207.735202492212 +2014-05-07 10:00:00,2690.0186915887853 +2014-05-07 11:00:00,3077.6168224299067 +2014-05-07 12:00:00,3242.7819314641742 +2014-05-07 13:00:00,3370.92523364486 +2014-05-07 14:00:00,3403.1619937694704 +2014-05-07 15:00:00,3535.6791277258567 +2014-05-07 16:00:00,3478.6355140186915 +2014-05-07 17:00:00,3459.158878504673 +2014-05-07 18:00:00,3380.489096573209 +2014-05-07 19:00:00,3233.171339563863 +2014-05-07 20:00:00,3198.947040498442 +2014-05-07 21:00:00,2838.1152647975077 +2014-05-07 22:00:00,2441.5233644859813 +2014-05-07 23:00:00,2034.785046728972 +2014-05-08 00:00:00,1634.853582554517 +2014-05-08 01:00:00,1321.4922118380061 +2014-05-08 02:00:00,1254.7819314641745 +2014-05-08 03:00:00,1222.9190031152648 +2014-05-08 04:00:00,1207.0623052959502 +2014-05-08 05:00:00,1316.0841121495328 +2014-05-08 06:00:00,1471.7071651090343 +2014-05-08 07:00:00,1622.5109034267912 +2014-05-08 08:00:00,1767.8006230529595 +2014-05-08 09:00:00,2274.1993769470405 +2014-05-08 10:00:00,2730.9221183800623 +2014-05-08 11:00:00,3024.956386292835 +2014-05-08 12:00:00,3221.031152647975 +2014-05-08 13:00:00,3334.791277258567 +2014-05-08 14:00:00,3439.940809968847 +2014-05-08 15:00:00,3521.411214953271 +2014-05-08 16:00:00,3567.271028037383 +2014-05-08 17:00:00,3504.0404984423676 +2014-05-08 18:00:00,3384.1464174454827 +2014-05-08 19:00:00,3259.5856697819313 +2014-05-08 20:00:00,3191.797507788162 +2014-05-08 21:00:00,2813.7102803738317 +2014-05-08 22:00:00,2415.816199376947 +2014-05-08 23:00:00,2021.632398753894 +2014-05-09 00:00:00,1618.7196261682243 +2014-05-09 01:00:00,1324.7102803738317 +2014-05-09 02:00:00,1253.7071651090343 +2014-05-09 03:00:00,1222.3364485981308 +2014-05-09 04:00:00,1201.4610591900312 +2014-05-09 05:00:00,1304.6355140186915 +2014-05-09 06:00:00,1455.8660436137072 +2014-05-09 07:00:00,1620.1214953271028 +2014-05-09 08:00:00,1779.6697819314643 +2014-05-09 09:00:00,2305.7881619937693 +2014-05-09 10:00:00,2816.2959501557634 +2014-05-09 11:00:00,3194.286604361371 +2014-05-09 12:00:00,3367.4766355140187 +2014-05-09 13:00:00,3399.467289719626 +2014-05-09 14:00:00,3470.1152647975077 +2014-05-09 15:00:00,3497.3956386292834 +2014-05-09 16:00:00,3560.489096573209 +2014-05-09 17:00:00,3604.9968847352025 +2014-05-09 18:00:00,3519.772585669782 +2014-05-09 19:00:00,3326.0218068535823 +2014-05-09 20:00:00,3359.4267912772584 +2014-05-09 21:00:00,2942.940809968847 +2014-05-09 22:00:00,2612.8193146417448 +2014-05-09 23:00:00,2241.0031152647975 +2014-05-10 00:00:00,1732.5732087227414 +2014-05-10 01:00:00,1444.0623052959502 +2014-05-10 02:00:00,1325.2087227414331 +2014-05-10 03:00:00,1257.2990654205607 +2014-05-10 04:00:00,1235.785046728972 +2014-05-10 05:00:00,1315.6947040498442 +2014-05-10 06:00:00,1450.563862928349 +2014-05-10 07:00:00,1591.4392523364486 +2014-05-10 08:00:00,1767.2367601246106 +2014-05-10 09:00:00,2257.01246105919 +2014-05-10 10:00:00,2778.772585669782 +2014-05-10 11:00:00,3325.308411214953 +2014-05-10 12:00:00,3382.993769470405 +2014-05-10 13:00:00,3536.4859813084113 +2014-05-10 14:00:00,3552.6355140186915 +2014-05-10 15:00:00,3653.7165109034268 +2014-05-10 16:00:00,3636.0654205607475 +2014-05-10 17:00:00,3715.1183800623053 +2014-05-10 18:00:00,3667.903426791277 +2014-05-10 19:00:00,3443.404984423676 +2014-05-10 20:00:00,3381.292834890966 +2014-05-10 21:00:00,3010.947040498442 +2014-05-10 22:00:00,2575.7570093457944 +2014-05-10 23:00:00,2137.473520249221 +2014-05-11 00:00:00,1725.252336448598 +2014-05-11 01:00:00,1437.9345794392523 +2014-05-11 02:00:00,1356.8909657320871 +2014-05-11 03:00:00,1320.9127725856697 +2014-05-11 04:00:00,1211.0467289719627 +2014-05-11 05:00:00,1291.4485981308412 +2014-05-11 06:00:00,1435.6915887850466 +2014-05-11 07:00:00,1571.6635514018692 +2014-05-11 08:00:00,1702.5171339563863 +2014-05-11 09:00:00,2355.7507788161993 +2014-05-11 10:00:00,2903.6168224299067 +2014-05-11 11:00:00,3302.277258566978 +2014-05-11 12:00:00,3348.7881619937693 +2014-05-11 13:00:00,3501.133956386293 +2014-05-11 14:00:00,3497.834890965732 +2014-05-11 15:00:00,3609.043613707165 +2014-05-11 16:00:00,3625.308411214953 +2014-05-11 17:00:00,3612.6043613707166 +2014-05-11 18:00:00,3583.1869158878503 +2014-05-11 19:00:00,3388.2803738317757 +2014-05-11 20:00:00,3354.3582554517134 +2014-05-11 21:00:00,3003.5077881619936 +2014-05-11 22:00:00,2618.766355140187 +2014-05-11 23:00:00,1951.6448598130842 +2014-05-12 00:00:00,1564.5202492211838 +2014-05-12 01:00:00,1304.6230529595016 +2014-05-12 02:00:00,1231.872274143302 +2014-05-12 03:00:00,1217.9283489096574 +2014-05-12 04:00:00,1240.4080996884736 +2014-05-12 05:00:00,1302.526479750779 +2014-05-12 06:00:00,1420.127725856698 +2014-05-12 07:00:00,1577.3520249221183 +2014-05-12 08:00:00,1754.2959501557632 +2014-05-12 09:00:00,2210.105919003115 +2014-05-12 10:00:00,2767.5295950155764 +2014-05-12 11:00:00,3159.5358255451715 +2014-05-12 12:00:00,3312.8380062305296 +2014-05-12 13:00:00,3434.6666666666665 +2014-05-12 14:00:00,3338.7258566978194 +2014-05-12 15:00:00,3464.286604361371 +2014-05-12 16:00:00,3436.872274143302 +2014-05-12 17:00:00,3500.5669781931465 +2014-05-12 18:00:00,3478.3800623052957 +2014-05-12 19:00:00,3331.6666666666665 +2014-05-12 20:00:00,3198.691588785047 +2014-05-12 21:00:00,2950.607476635514 +2014-05-12 22:00:00,2485.7757009345796 +2014-05-12 23:00:00,1889.0965732087227 +2014-05-13 00:00:00,1659.2928348909657 +2014-05-13 01:00:00,1375.0436137071652 +2014-05-13 02:00:00,1308.2647975077882 +2014-05-13 03:00:00,1264.0436137071652 +2014-05-13 04:00:00,1150.613707165109 +2014-05-13 05:00:00,1168.9376947040498 +2014-05-13 06:00:00,1436.943925233645 +2014-05-13 07:00:00,1602.1339563862928 +2014-05-13 08:00:00,1785.411214953271 +2014-05-13 09:00:00,2352.043613707165 +2014-05-13 10:00:00,2866.143302180685 +2014-05-13 11:00:00,3251.2367601246106 +2014-05-13 12:00:00,3375.345794392523 +2014-05-13 13:00:00,3399.588785046729 +2014-05-13 14:00:00,3512.947040498442 +2014-05-13 15:00:00,3595.1183800623053 +2014-05-13 16:00:00,3576.8691588785045 +2014-05-13 17:00:00,3603.4174454828662 +2014-05-13 18:00:00,3528.1246105919004 +2014-05-13 19:00:00,3368.931464174455 +2014-05-13 20:00:00,3338.3333333333335 +2014-05-13 21:00:00,3063.5607476635514 +2014-05-13 22:00:00,2477.753894080997 +2014-05-13 23:00:00,2035.6261682242991 +2014-05-14 00:00:00,1640.5015576323988 +2014-05-14 01:00:00,1351.5327102803737 +2014-05-14 02:00:00,1280.1900311526479 +2014-05-14 03:00:00,1257.4828660436137 +2014-05-14 04:00:00,1231.9221183800623 +2014-05-14 05:00:00,1322.4797507788162 +2014-05-14 06:00:00,1436.595015576324 +2014-05-14 07:00:00,1606.6479750778817 +2014-05-14 08:00:00,1774.01246105919 +2014-05-14 09:00:00,2430.88785046729 +2014-05-14 10:00:00,2944.3426791277257 +2014-05-14 11:00:00,3335.4641744548285 +2014-05-14 12:00:00,3304.9065420560746 +2014-05-14 13:00:00,3449.8504672897197 +2014-05-14 14:00:00,3518.479750778816 +2014-05-14 15:00:00,3605.7414330218066 +2014-05-14 16:00:00,3679.576323987539 +2014-05-14 17:00:00,3673.7476635514017 +2014-05-14 18:00:00,3594.052959501558 +2014-05-14 19:00:00,3428.9813084112147 +2014-05-14 20:00:00,3258.0342679127725 +2014-05-14 21:00:00,3194.133956386293 +2014-05-14 22:00:00,2581.0155763239877 +2014-05-14 23:00:00,2082.5295950155764 +2014-05-15 00:00:00,1665.638629283489 +2014-05-15 01:00:00,1359.2741433021806 +2014-05-15 02:00:00,1296.1619937694704 +2014-05-15 03:00:00,1276.2959501557632 +2014-05-15 04:00:00,1261.2772585669782 +2014-05-15 05:00:00,1348.5981308411215 +2014-05-15 06:00:00,1483.9283489096574 +2014-05-15 07:00:00,1640.4392523364486 +2014-05-15 08:00:00,1823.5732087227414 +2014-05-15 09:00:00,2449.4859813084113 +2014-05-15 10:00:00,3026.096573208723 +2014-05-15 11:00:00,3387.909657320872 +2014-05-15 12:00:00,3421.3707165109035 +2014-05-15 13:00:00,3549.4143302180687 +2014-05-15 14:00:00,3562.6168224299067 +2014-05-15 15:00:00,3665.404984423676 +2014-05-15 16:00:00,3637.208722741433 +2014-05-15 17:00:00,3619.0654205607475 +2014-05-15 18:00:00,3491.436137071651 +2014-05-15 19:00:00,3355.4548286604363 +2014-05-15 20:00:00,3193.171339563863 +2014-05-15 21:00:00,3201.8317757009345 +2014-05-15 22:00:00,2748.791277258567 +2014-05-15 23:00:00,2099.931464174455 +2014-05-16 00:00:00,1703.0467289719627 +2014-05-16 01:00:00,1409.5295950155764 +2014-05-16 02:00:00,1350.1588785046729 +2014-05-16 03:00:00,1300.2056074766356 +2014-05-16 04:00:00,1271.2834890965732 +2014-05-16 05:00:00,1372.5576323987539 +2014-05-16 06:00:00,1526.4641744548287 +2014-05-16 07:00:00,1676.5545171339563 +2014-05-16 08:00:00,1871.5171339563863 +2014-05-16 09:00:00,2453.538940809969 +2014-05-16 10:00:00,3039.1495327102803 +2014-05-16 11:00:00,3214.0716510903426 +2014-05-16 12:00:00,3383.165109034268 +2014-05-16 13:00:00,3452.3177570093458 +2014-05-16 14:00:00,3534.3395638629286 +2014-05-16 15:00:00,3571.576323987539 +2014-05-16 16:00:00,3593.822429906542 +2014-05-16 17:00:00,3607.557632398754 +2014-05-16 18:00:00,3547.98753894081 +2014-05-16 19:00:00,3468.0031152647975 +2014-05-16 20:00:00,3329.4859813084113 +2014-05-16 21:00:00,3248.8255451713394 +2014-05-16 22:00:00,2846.457943925234 +2014-05-16 23:00:00,2205.663551401869 +2014-05-17 00:00:00,1754.3520249221183 +2014-05-17 01:00:00,1476.822429906542 +2014-05-17 02:00:00,1354.0218068535826 +2014-05-17 03:00:00,1287.6168224299065 +2014-05-17 04:00:00,1252.8193146417445 +2014-05-17 05:00:00,1325.2897196261683 +2014-05-17 06:00:00,1476.853582554517 +2014-05-17 07:00:00,1612.0591900311526 +2014-05-17 08:00:00,1782.766355140187 +2014-05-17 09:00:00,2405.127725856698 +2014-05-17 10:00:00,3016.7040498442366 +2014-05-17 11:00:00,3372.3271028037384 +2014-05-17 12:00:00,3435.856697819315 +2014-05-17 13:00:00,3466.6510903426793 +2014-05-17 14:00:00,3485.0155763239877 +2014-05-17 15:00:00,3564.5794392523367 +2014-05-17 16:00:00,3608.264797507788 +2014-05-17 17:00:00,3553.01246105919 +2014-05-17 18:00:00,3473.143302180685 +2014-05-17 19:00:00,3323.96261682243 +2014-05-17 20:00:00,3192.532710280374 +2014-05-17 21:00:00,3190.697819314642 +2014-05-17 22:00:00,2784.448598130841 +2014-05-17 23:00:00,2161.8753894080996 +2014-05-18 00:00:00,1731.1713395638628 +2014-05-18 01:00:00,1438.031152647975 +2014-05-18 02:00:00,1362.0498442367602 +2014-05-18 03:00:00,1319.1619937694704 +2014-05-18 04:00:00,1220.1744548286604 +2014-05-18 05:00:00,1299.6448598130842 +2014-05-18 06:00:00,1425.601246105919 +2014-05-18 07:00:00,1560.9221183800623 +2014-05-18 08:00:00,1719.4454828660437 +2014-05-18 09:00:00,2254.644859813084 +2014-05-18 10:00:00,2921.0778816199377 +2014-05-18 11:00:00,3639.9595015576324 +2014-05-18 12:00:00,3513.7040498442366 +2014-05-18 13:00:00,3525.5077881619936 +2014-05-18 14:00:00,3529.1370716510905 +2014-05-18 15:00:00,3568.0280373831774 +2014-05-18 16:00:00,3526.489096573209 +2014-05-18 17:00:00,3462.6666666666665 +2014-05-18 18:00:00,3374.152647975078 +2014-05-18 19:00:00,3185.9657320872275 +2014-05-18 20:00:00,3062.2429906542056 +2014-05-18 21:00:00,3132.4641744548285 +2014-05-18 22:00:00,2597.9065420560746 +2014-05-18 23:00:00,1944.2367601246106 +2014-05-19 00:00:00,1603.177570093458 +2014-05-19 01:00:00,1327.7912772585669 +2014-05-19 02:00:00,1285.031152647975 +2014-05-19 03:00:00,1253.271028037383 +2014-05-19 04:00:00,1239.9283489096574 +2014-05-19 05:00:00,1309.2242990654206 +2014-05-19 06:00:00,1437.0747663551401 +2014-05-19 07:00:00,1608.1214953271028 +2014-05-19 08:00:00,1757.4610591900312 +2014-05-19 09:00:00,2296.7165109034268 +2014-05-19 10:00:00,2854.302180685358 +2014-05-19 11:00:00,3134.4548286604363 +2014-05-19 12:00:00,3064.6666666666665 +2014-05-19 13:00:00,3022.778816199377 +2014-05-19 14:00:00,3037.096573208723 +2014-05-19 15:00:00,3054.7507788161993 +2014-05-19 16:00:00,3050.398753894081 +2014-05-19 17:00:00,3051.570093457944 +2014-05-19 18:00:00,3006.532710280374 +2014-05-19 19:00:00,2927.0872274143303 +2014-05-19 20:00:00,2817.872274143302 +2014-05-19 21:00:00,2881.2523364485983 +2014-05-19 22:00:00,2544.373831775701 +2014-05-19 23:00:00,2024.6884735202493 +2014-05-20 00:00:00,1640.0841121495328 +2014-05-20 01:00:00,1344.6728971962616 +2014-05-20 02:00:00,1295.9221183800623 +2014-05-20 03:00:00,1250.0654205607477 +2014-05-20 04:00:00,1227.1183800623053 +2014-05-20 05:00:00,1320.3177570093458 +2014-05-20 06:00:00,1441.006230529595 +2014-05-20 07:00:00,1561.3395638629283 +2014-05-20 08:00:00,1760.0623052959502 +2014-05-20 09:00:00,2255.735202492212 +2014-05-20 10:00:00,2762.239875389408 +2014-05-20 11:00:00,2937.2616822429904 +2014-05-20 12:00:00,2915.822429906542 +2014-05-20 13:00:00,2833.7476635514017 +2014-05-20 14:00:00,2875.595015576324 +2014-05-20 15:00:00,2889.8535825545173 +2014-05-20 16:00:00,2908.7943925233644 +2014-05-20 17:00:00,2918.1152647975077 +2014-05-20 18:00:00,2892.841121495327 +2014-05-20 19:00:00,2907.7881619937693 +2014-05-20 20:00:00,2898.6822429906542 +2014-05-20 21:00:00,2842.4641744548285 +2014-05-20 22:00:00,2516.7040498442366 +2014-05-20 23:00:00,2005.5981308411215 +2014-05-21 00:00:00,1565.8878504672898 +2014-05-21 01:00:00,1257.7352024922118 +2014-05-21 02:00:00,1229.6168224299065 +2014-05-21 03:00:00,1191.563862928349 +2014-05-21 04:00:00,1168.9221183800623 +2014-05-21 05:00:00,1259.4859813084113 +2014-05-21 06:00:00,1381.3894080996886 +2014-05-21 07:00:00,1542.8878504672898 +2014-05-21 08:00:00,1711.9595015576324 +2014-05-21 09:00:00,2221.1682242990655 +2014-05-21 10:00:00,2743.510903426791 +2014-05-21 11:00:00,2783.4641744548285 +2014-05-21 12:00:00,2804.532710280374 +2014-05-21 13:00:00,2786.7476635514017 +2014-05-21 14:00:00,2818.5981308411215 +2014-05-21 15:00:00,2842.423676012461 +2014-05-21 16:00:00,2850.532710280374 +2014-05-21 17:00:00,2857.0404984423676 +2014-05-21 18:00:00,2864.6791277258567 +2014-05-21 19:00:00,2805.1152647975077 +2014-05-21 20:00:00,2791.457943925234 +2014-05-21 21:00:00,2819.196261682243 +2014-05-21 22:00:00,2465.255451713396 +2014-05-21 23:00:00,1925.7507788161993 +2014-05-22 00:00:00,1543.4672897196263 +2014-05-22 01:00:00,1227.5669781931465 +2014-05-22 02:00:00,1206.6760124610591 +2014-05-22 03:00:00,1196.380062305296 +2014-05-22 04:00:00,1176.7258566978194 +2014-05-22 05:00:00,1264.5981308411215 +2014-05-22 06:00:00,1407.6261682242991 +2014-05-22 07:00:00,1537.2990654205607 +2014-05-22 08:00:00,1715.2741433021806 +2014-05-22 09:00:00,2179.809968847352 +2014-05-22 10:00:00,2595.5077881619936 +2014-05-22 11:00:00,2958.239875389408 +2014-05-22 12:00:00,2887.3582554517134 +2014-05-22 13:00:00,2896.872274143302 +2014-05-22 14:00:00,2910.2585669781934 +2014-05-22 15:00:00,2908.563862928349 +2014-05-22 16:00:00,2959.3395638629286 +2014-05-22 17:00:00,2961.5732087227416 +2014-05-22 18:00:00,2973.4267912772584 +2014-05-22 19:00:00,2943.3831775700933 +2014-05-22 20:00:00,2873.532710280374 +2014-05-22 21:00:00,2935.551401869159 +2014-05-22 22:00:00,2538.722741433022 +2014-05-22 23:00:00,2053.0404984423676 +2014-05-23 00:00:00,1606.728971962617 +2014-05-23 01:00:00,1302.657320872274 +2014-05-23 02:00:00,1245.9719626168223 +2014-05-23 03:00:00,1213.9408099688474 +2014-05-23 04:00:00,1196.0218068535826 +2014-05-23 05:00:00,1287.1869158878505 +2014-05-23 06:00:00,1428.8629283489097 +2014-05-23 07:00:00,1581.404984423676 +2014-05-23 08:00:00,1758.3582554517134 +2014-05-23 09:00:00,2284.8255451713394 +2014-05-23 10:00:00,2767.940809968847 +2014-05-23 11:00:00,2910.510903426791 +2014-05-23 12:00:00,2888.0560747663553 +2014-05-23 13:00:00,2861.255451713396 +2014-05-23 14:00:00,2891.5856697819313 +2014-05-23 15:00:00,2928.909657320872 +2014-05-23 16:00:00,2967.090342679128 +2014-05-23 17:00:00,2962.735202492212 +2014-05-23 18:00:00,2945.8691588785045 +2014-05-23 19:00:00,2933.8598130841124 +2014-05-23 20:00:00,2855.3115264797507 +2014-05-23 21:00:00,2860.096573208723 +2014-05-23 22:00:00,2597.9719626168226 +2014-05-23 23:00:00,2080.4641744548285 +2014-05-24 00:00:00,1620.5482866043615 +2014-05-24 01:00:00,1361.657320872274 +2014-05-24 02:00:00,1258.9127725856697 +2014-05-24 03:00:00,1198.8816199376947 +2014-05-24 04:00:00,1161.9408099688474 +2014-05-24 05:00:00,1249.0623052959502 +2014-05-24 06:00:00,1388.0249221183801 +2014-05-24 07:00:00,1521.7414330218069 +2014-05-24 08:00:00,1687.8504672897195 +2014-05-24 09:00:00,2196.495327102804 +2014-05-24 10:00:00,2772.7881619937693 +2014-05-24 11:00:00,2813.644859813084 +2014-05-24 12:00:00,2891.308411214953 +2014-05-24 13:00:00,2838.0654205607475 +2014-05-24 14:00:00,2863.8847352024923 +2014-05-24 15:00:00,2946.068535825545 +2014-05-24 16:00:00,2993.0498442367602 +2014-05-24 17:00:00,2947.1090342679126 +2014-05-24 18:00:00,2948.01246105919 +2014-05-24 19:00:00,2847.919003115265 +2014-05-24 20:00:00,2777.6479750778817 +2014-05-24 21:00:00,2823.0404984423676 +2014-05-24 22:00:00,2524.121495327103 +2014-05-24 23:00:00,2012.177570093458 +2014-05-25 00:00:00,1599.8971962616822 +2014-05-25 01:00:00,1351.2647975077882 +2014-05-25 02:00:00,1285.0 +2014-05-25 03:00:00,1230.7258566978194 +2014-05-25 04:00:00,1125.5669781931465 +2014-05-25 05:00:00,1211.5358255451713 +2014-05-25 06:00:00,1339.834890965732 +2014-05-25 07:00:00,1465.0 +2014-05-25 08:00:00,1610.1246105919004 +2014-05-25 09:00:00,2090.88785046729 +2014-05-25 10:00:00,2695.4828660436137 +2014-05-25 11:00:00,2797.208722741433 +2014-05-25 12:00:00,2786.0654205607475 +2014-05-25 13:00:00,2789.856697819315 +2014-05-25 14:00:00,2822.4517133956388 +2014-05-25 15:00:00,2848.8006230529595 +2014-05-25 16:00:00,2845.0031152647975 +2014-05-25 17:00:00,2914.601246105919 +2014-05-25 18:00:00,2865.2523364485983 +2014-05-25 19:00:00,2768.7476635514017 +2014-05-25 20:00:00,2703.0 +2014-05-25 21:00:00,2766.7320872274145 +2014-05-25 22:00:00,2405.345794392523 +2014-05-25 23:00:00,1812.4299065420562 +2014-05-26 00:00:00,1472.766355140187 +2014-05-26 01:00:00,1217.2367601246106 +2014-05-26 02:00:00,1161.4890965732088 +2014-05-26 03:00:00,1144.8068535825546 +2014-05-26 04:00:00,1123.8598130841121 +2014-05-26 05:00:00,1228.8660436137072 +2014-05-26 06:00:00,1326.0841121495328 +2014-05-26 07:00:00,1495.3271028037384 +2014-05-26 08:00:00,1665.3115264797507 +2014-05-26 09:00:00,2134.532710280374 +2014-05-26 10:00:00,2640.436137071651 +2014-05-26 11:00:00,2726.9968847352025 +2014-05-26 12:00:00,2797.803738317757 +2014-05-26 13:00:00,2759.8691588785045 +2014-05-26 14:00:00,2852.872274143302 +2014-05-26 15:00:00,2876.336448598131 +2014-05-26 16:00:00,2896.4205607476633 +2014-05-26 17:00:00,2932.713395638629 +2014-05-26 18:00:00,2934.1869158878503 +2014-05-26 19:00:00,2855.1993769470405 +2014-05-26 20:00:00,2754.6043613707166 +2014-05-26 21:00:00,2804.6168224299067 +2014-05-26 22:00:00,2501.7102803738317 +2014-05-26 23:00:00,2039.0809968847352 +2014-05-27 00:00:00,1591.8193146417445 +2014-05-27 01:00:00,1313.2803738317757 +2014-05-27 02:00:00,1256.2461059190032 +2014-05-27 03:00:00,1224.778816199377 +2014-05-27 04:00:00,1200.0529595015576 +2014-05-27 05:00:00,1287.4828660436137 +2014-05-27 06:00:00,1424.3738317757009 +2014-05-27 07:00:00,1552.6635514018692 +2014-05-27 08:00:00,1723.9003115264798 +2014-05-27 09:00:00,2208.8193146417448 +2014-05-27 10:00:00,2697.9968847352025 +2014-05-27 11:00:00,2839.246105919003 +2014-05-27 12:00:00,2884.947040498442 +2014-05-27 13:00:00,2838.6822429906542 +2014-05-27 14:00:00,2905.7632398753894 +2014-05-27 15:00:00,2952.9127725856697 +2014-05-27 16:00:00,2964.196261682243 +2014-05-27 17:00:00,2932.3831775700933 +2014-05-27 18:00:00,2987.9657320872275 +2014-05-27 19:00:00,2909.97507788162 +2014-05-27 20:00:00,2877.4828660436137 +2014-05-27 21:00:00,2894.292834890966 +2014-05-27 22:00:00,2525.271028037383 +2014-05-27 23:00:00,2032.4610591900312 +2014-05-28 00:00:00,1571.5389408099688 +2014-05-28 01:00:00,1300.2897196261683 +2014-05-28 02:00:00,1247.4610591900312 +2014-05-28 03:00:00,1214.8691588785048 +2014-05-28 04:00:00,1191.177570093458 +2014-05-28 05:00:00,1271.1806853582555 +2014-05-28 06:00:00,1406.6635514018692 +2014-05-28 07:00:00,1572.5607476635514 +2014-05-28 08:00:00,1753.0404984423676 +2014-05-28 09:00:00,2225.9657320872275 +2014-05-28 10:00:00,2843.735202492212 +2014-05-28 11:00:00,2935.760124610592 +2014-05-28 12:00:00,2923.919003115265 +2014-05-28 13:00:00,2900.947040498442 +2014-05-28 14:00:00,2992.323987538941 +2014-05-28 15:00:00,3021.0654205607475 +2014-05-28 16:00:00,3008.3956386292834 +2014-05-28 17:00:00,2998.1464174454827 +2014-05-28 18:00:00,3039.3582554517134 +2014-05-28 19:00:00,2984.7507788161993 +2014-05-28 20:00:00,2926.043613707165 +2014-05-28 21:00:00,2916.8006230529595 +2014-05-28 22:00:00,2578.0560747663553 +2014-05-28 23:00:00,2003.5732087227414 +2014-05-29 00:00:00,1563.9906542056074 +2014-05-29 01:00:00,1268.98753894081 +2014-05-29 02:00:00,1237.943925233645 +2014-05-29 03:00:00,1222.7071651090343 +2014-05-29 04:00:00,1202.386292834891 +2014-05-29 05:00:00,1286.8598130841121 +2014-05-29 06:00:00,1423.6884735202493 +2014-05-29 07:00:00,1581.1028037383178 +2014-05-29 08:00:00,1772.3520249221183 +2014-05-29 09:00:00,2376.7570093457944 +2014-05-29 10:00:00,2887.6947040498444 +2014-05-29 11:00:00,3057.1806853582552 +2014-05-29 12:00:00,3030.5856697819313 +2014-05-29 13:00:00,3042.6355140186915 +2014-05-29 14:00:00,3146.5825545171338 +2014-05-29 15:00:00,3130.1370716510905 +2014-05-29 16:00:00,3181.588785046729 +2014-05-29 17:00:00,3223.7943925233644 +2014-05-29 18:00:00,3232.0996884735205 +2014-05-29 19:00:00,3146.8971962616824 +2014-05-29 20:00:00,2989.6822429906542 +2014-05-29 21:00:00,3002.809968847352 +2014-05-29 22:00:00,2560.052959501558 +2014-05-29 23:00:00,2038.6292834890967 +2014-05-30 00:00:00,1595.3707165109033 +2014-05-30 01:00:00,1303.9844236760125 +2014-05-30 02:00:00,1274.822429906542 +2014-05-30 03:00:00,1262.4984423676012 +2014-05-30 04:00:00,1239.7352024922118 +2014-05-30 05:00:00,1306.0404984423676 +2014-05-30 06:00:00,1446.981308411215 +2014-05-30 07:00:00,1603.3333333333333 +2014-05-30 08:00:00,1768.5732087227414 +2014-05-30 09:00:00,2345.2803738317757 +2014-05-30 10:00:00,2868.006230529595 +2014-05-30 11:00:00,3059.903426791277 +2014-05-30 12:00:00,3037.2834890965732 +2014-05-30 13:00:00,3145.6573208722743 +2014-05-30 14:00:00,3239.330218068536 +2014-05-30 15:00:00,3291.7102803738317 +2014-05-30 16:00:00,3394.096573208723 +2014-05-30 17:00:00,3416.183800623053 +2014-05-30 18:00:00,3325.4080996884736 +2014-05-30 19:00:00,3191.8847352024923 +2014-05-30 20:00:00,3053.538940809969 +2014-05-30 21:00:00,3045.11214953271 +2014-05-30 22:00:00,2664.5233644859813 +2014-05-30 23:00:00,2131.448598130841 +2014-05-31 00:00:00,1679.6355140186915 +2014-05-31 01:00:00,1383.582554517134 +2014-05-31 02:00:00,1284.3271028037384 +2014-05-31 03:00:00,1226.417445482866 +2014-05-31 04:00:00,1196.9657320872275 +2014-05-31 05:00:00,1275.6542056074766 +2014-05-31 06:00:00,1406.5171339563863 +2014-05-31 07:00:00,1563.6635514018692 +2014-05-31 08:00:00,1717.3551401869158 +2014-05-31 09:00:00,2256.722741433022 +2014-05-31 10:00:00,2960.9532710280373 +2014-05-31 11:00:00,3142.8535825545173 +2014-05-31 12:00:00,3185.8193146417448 +2014-05-31 13:00:00,3335.6791277258567 +2014-05-31 14:00:00,3353.5919003115264 +2014-05-31 15:00:00,3458.5794392523367 +2014-05-31 16:00:00,3546.3115264797507 +2014-05-31 17:00:00,3515.0841121495328 +2014-05-31 18:00:00,3434.2118380062307 +2014-05-31 19:00:00,3322.246105919003 +2014-05-31 20:00:00,3142.392523364486 +2014-05-31 21:00:00,3136.495327102804 +2014-05-31 22:00:00,2680.872274143302 +2014-05-31 23:00:00,2138.9532710280373 +2014-06-01 00:00:00,1711.657320872274 +2014-06-01 01:00:00,1403.0903426791276 +2014-06-01 02:00:00,1327.1869158878505 +2014-06-01 03:00:00,1276.7165109034268 +2014-06-01 04:00:00,1191.632398753894 +2014-06-01 05:00:00,1248.4454828660437 +2014-06-01 06:00:00,1377.3302180685357 +2014-06-01 07:00:00,1534.9065420560748 +2014-06-01 08:00:00,1671.4018691588785 +2014-06-01 09:00:00,2316.7102803738317 +2014-06-01 10:00:00,3027.1869158878503 +2014-06-01 11:00:00,3286.7258566978194 +2014-06-01 12:00:00,3298.0872274143303 +2014-06-01 13:00:00,3320.448598130841 +2014-06-01 14:00:00,3308.9439252336447 +2014-06-01 15:00:00,3461.669781931464 +2014-06-01 16:00:00,3408.2616822429904 +2014-06-01 17:00:00,3484.8255451713394 +2014-06-01 18:00:00,3470.308411214953 +2014-06-01 19:00:00,3362.121495327103 +2014-06-01 20:00:00,3173.5358255451715 +2014-06-01 21:00:00,3198.4859813084113 +2014-06-01 22:00:00,2593.3800623052957 +2014-06-01 23:00:00,1934.3146417445482 +2014-06-02 00:00:00,1568.2180685358255 +2014-06-02 01:00:00,1282.4579439252336 +2014-06-02 02:00:00,1235.4018691588785 +2014-06-02 03:00:00,1225.5669781931465 +2014-06-02 04:00:00,1216.056074766355 +2014-06-02 05:00:00,1281.7694704049845 +2014-06-02 06:00:00,1429.0342679127725 +2014-06-02 07:00:00,1590.9003115264798 +2014-06-02 08:00:00,1781.4485981308412 +2014-06-02 09:00:00,2286.96261682243 +2014-06-02 10:00:00,3099.2679127725855 +2014-06-02 11:00:00,3323.1183800623053 +2014-06-02 12:00:00,3309.271028037383 +2014-06-02 13:00:00,3324.308411214953 +2014-06-02 14:00:00,3347.6791277258567 +2014-06-02 15:00:00,3410.2242990654204 +2014-06-02 16:00:00,3489.3208722741433 +2014-06-02 17:00:00,3480.489096573209 +2014-06-02 18:00:00,3392.88785046729 +2014-06-02 19:00:00,3346.595015576324 +2014-06-02 20:00:00,3190.4330218068535 +2014-06-02 21:00:00,3193.834890965732 +2014-06-02 22:00:00,2625.7040498442366 +2014-06-02 23:00:00,2059.93769470405 +2014-06-03 00:00:00,1611.8660436137072 +2014-06-03 01:00:00,1313.5171339563863 +2014-06-03 02:00:00,1271.01246105919 +2014-06-03 03:00:00,1255.7912772585669 +2014-06-03 04:00:00,1257.728971962617 +2014-06-03 05:00:00,1331.7414330218069 +2014-06-03 06:00:00,1466.177570093458 +2014-06-03 07:00:00,1612.2866043613708 +2014-06-03 08:00:00,1779.0436137071652 +2014-06-03 09:00:00,2386.461059190031 +2014-06-03 10:00:00,2971.096573208723 +2014-06-03 11:00:00,3254.7258566978194 +2014-06-03 12:00:00,3199.504672897196 +2014-06-03 13:00:00,3251.669781931464 +2014-06-03 14:00:00,3368.7258566978194 +2014-06-03 15:00:00,3392.8255451713394 +2014-06-03 16:00:00,3438.563862928349 +2014-06-03 17:00:00,3352.3800623052957 +2014-06-03 18:00:00,3330.88785046729 +2014-06-03 19:00:00,3229.847352024922 +2014-06-03 20:00:00,3025.791277258567 +2014-06-03 21:00:00,2961.6791277258567 +2014-06-03 22:00:00,2571.3271028037384 +2014-06-03 23:00:00,2045.8753894080996 +2014-06-04 00:00:00,1607.9408099688474 +2014-06-04 01:00:00,1304.4454828660437 +2014-06-04 02:00:00,1258.7071651090343 +2014-06-04 03:00:00,1255.2056074766356 +2014-06-04 04:00:00,1255.0685358255453 +2014-06-04 05:00:00,1325.03738317757 +2014-06-04 06:00:00,1462.3738317757009 +2014-06-04 07:00:00,1605.6822429906542 +2014-06-04 08:00:00,1767.834890965732 +2014-06-04 09:00:00,2348.8847352024923 +2014-06-04 10:00:00,2897.9501557632398 +2014-06-04 11:00:00,3179.7414330218066 +2014-06-04 12:00:00,3174.461059190031 +2014-06-04 13:00:00,3233.8971962616824 +2014-06-04 14:00:00,3331.6199376947043 +2014-06-04 15:00:00,3397.919003115265 +2014-06-04 16:00:00,3384.227414330218 +2014-06-04 17:00:00,3368.143302180685 +2014-06-04 18:00:00,3342.4018691588785 +2014-06-04 19:00:00,3255.448598130841 +2014-06-04 20:00:00,3102.7819314641742 +2014-06-04 21:00:00,3015.4828660436137 +2014-06-04 22:00:00,2624.0155763239877 +2014-06-04 23:00:00,2002.9563862928348 +2014-06-05 00:00:00,1570.8504672897195 +2014-06-05 01:00:00,1275.1028037383178 +2014-06-05 02:00:00,1229.728971962617 +2014-06-05 03:00:00,1202.0716510903426 +2014-06-05 04:00:00,1189.4641744548287 +2014-06-05 05:00:00,1254.7320872274142 +2014-06-05 06:00:00,1392.2242990654206 +2014-06-05 07:00:00,1566.8317757009345 +2014-06-05 08:00:00,1743.1401869158879 +2014-06-05 09:00:00,2278.542056074766 +2014-06-05 10:00:00,2914.367601246106 +2014-06-05 11:00:00,3139.2803738317757 +2014-06-05 12:00:00,3145.5794392523367 +2014-06-05 13:00:00,3231.0716510903426 +2014-06-05 14:00:00,3185.9003115264795 +2014-06-05 15:00:00,3343.5140186915887 +2014-06-05 16:00:00,3329.1557632398753 +2014-06-05 17:00:00,3301.2118380062307 +2014-06-05 18:00:00,3295.143302180685 +2014-06-05 19:00:00,3197.728971962617 +2014-06-05 20:00:00,3197.02492211838 +2014-06-05 21:00:00,3176.436137071651 +2014-06-05 22:00:00,2703.588785046729 +2014-06-05 23:00:00,2074.4143302180687 +2014-06-06 00:00:00,1639.9906542056074 +2014-06-06 01:00:00,1351.2056074766356 +2014-06-06 02:00:00,1298.7320872274142 +2014-06-06 03:00:00,1277.7538940809968 +2014-06-06 04:00:00,1256.7258566978194 +2014-06-06 05:00:00,1347.031152647975 +2014-06-06 06:00:00,1499.0841121495328 +2014-06-06 07:00:00,1672.6261682242991 +2014-06-06 08:00:00,1858.423676012461 +2014-06-06 09:00:00,2410.3395638629286 +2014-06-06 10:00:00,3030.588785046729 +2014-06-06 11:00:00,3196.386292834891 +2014-06-06 12:00:00,3165.7196261682243 +2014-06-06 13:00:00,3170.8753894080996 +2014-06-06 14:00:00,3188.8130841121497 +2014-06-06 15:00:00,3292.8255451713394 +2014-06-06 16:00:00,3239.031152647975 +2014-06-06 17:00:00,3206.2616822429904 +2014-06-06 18:00:00,3103.98753894081 +2014-06-06 19:00:00,3139.1370716510905 +2014-06-06 20:00:00,3124.856697819315 +2014-06-06 21:00:00,3103.542056074766 +2014-06-06 22:00:00,2712.2523364485983 +2014-06-06 23:00:00,2198.9532710280373 +2014-06-07 00:00:00,1702.018691588785 +2014-06-07 01:00:00,1435.4299065420562 +2014-06-07 02:00:00,1348.8504672897195 +2014-06-07 03:00:00,1267.8598130841121 +2014-06-07 04:00:00,1233.6697819314643 +2014-06-07 05:00:00,1306.0841121495328 +2014-06-07 06:00:00,1444.0342679127725 +2014-06-07 07:00:00,1593.202492211838 +2014-06-07 08:00:00,1738.2928348909657 +2014-06-07 09:00:00,2323.233644859813 +2014-06-07 10:00:00,2987.361370716511 +2014-06-07 11:00:00,3147.8816199376947 +2014-06-07 12:00:00,3153.9127725856697 +2014-06-07 13:00:00,3202.052959501558 +2014-06-07 14:00:00,3205.8971962616824 +2014-06-07 15:00:00,3297.1495327102803 +2014-06-07 16:00:00,3303.919003115265 +2014-06-07 17:00:00,3292.8971962616824 +2014-06-07 18:00:00,3226.6417445482866 +2014-06-07 19:00:00,3098.1869158878503 +2014-06-07 20:00:00,3054.919003115265 +2014-06-07 21:00:00,3048.7570093457944 +2014-06-07 22:00:00,2704.707165109034 +2014-06-07 23:00:00,2183.956386292835 +2014-06-08 00:00:00,1692.3177570093458 +2014-06-08 01:00:00,1418.766355140187 +2014-06-08 02:00:00,1344.5358255451713 +2014-06-08 03:00:00,1300.5015576323988 +2014-06-08 04:00:00,1196.7694704049845 +2014-06-08 05:00:00,1266.006230529595 +2014-06-08 06:00:00,1401.0404984423676 +2014-06-08 07:00:00,1558.9595015576324 +2014-06-08 08:00:00,1677.4579439252336 +2014-06-08 09:00:00,2275.663551401869 +2014-06-08 10:00:00,2935.4454828660437 +2014-06-08 11:00:00,3125.052959501558 +2014-06-08 12:00:00,3137.8816199376947 +2014-06-08 13:00:00,3103.894080996885 +2014-06-08 14:00:00,3144.4454828660437 +2014-06-08 15:00:00,3232.1464174454827 +2014-06-08 16:00:00,3232.7881619937693 +2014-06-08 17:00:00,3273.92523364486 +2014-06-08 18:00:00,3191.2679127725855 +2014-06-08 19:00:00,3069.190031152648 +2014-06-08 20:00:00,3066.872274143302 +2014-06-08 21:00:00,3021.644859813084 +2014-06-08 22:00:00,2665.931464174455 +2014-06-08 23:00:00,2012.7725856697818 +2014-06-09 00:00:00,1564.018691588785 +2014-06-09 01:00:00,1297.9376947040498 +2014-06-09 02:00:00,1253.7632398753894 +2014-06-09 03:00:00,1247.361370716511 +2014-06-09 04:00:00,1239.423676012461 +2014-06-09 05:00:00,1358.031152647975 +2014-06-09 06:00:00,1469.638629283489 +2014-06-09 07:00:00,1648.9844236760125 +2014-06-09 08:00:00,1778.6853582554518 +2014-06-09 09:00:00,2290.1370716510905 +2014-06-09 10:00:00,2882.6230529595014 +2014-06-09 11:00:00,2983.06230529595 +2014-06-09 12:00:00,2994.2305295950155 +2014-06-09 13:00:00,3015.442367601246 +2014-06-09 14:00:00,3039.461059190031 +2014-06-09 15:00:00,3642.828660436137 +2014-06-09 16:00:00,3318.96261682243 +2014-06-09 17:00:00,3385.0280373831774 +2014-06-09 18:00:00,3273.7414330218066 +2014-06-09 19:00:00,3275.1152647975077 +2014-06-09 20:00:00,3126.722741433022 +2014-06-09 21:00:00,3031.0280373831774 +2014-06-09 22:00:00,2685.551401869159 +2014-06-09 23:00:00,2085.6230529595014 +2014-06-10 00:00:00,1659.968847352025 +2014-06-10 01:00:00,1339.9563862928348 +2014-06-10 02:00:00,1299.1495327102805 +2014-06-10 03:00:00,1259.526479750779 +2014-06-10 04:00:00,1234.7881619937696 +2014-06-10 05:00:00,1318.1588785046729 +2014-06-10 06:00:00,1454.9034267912773 +2014-06-10 07:00:00,1592.943925233645 +2014-06-10 08:00:00,1741.386292834891 +2014-06-10 09:00:00,2323.92523364486 +2014-06-10 10:00:00,2962.0716510903426 +2014-06-10 11:00:00,3068.429906542056 +2014-06-10 12:00:00,3177.208722741433 +2014-06-10 13:00:00,3329.404984423676 +2014-06-10 14:00:00,3401.909657320872 +2014-06-10 15:00:00,3454.6791277258567 +2014-06-10 16:00:00,3498.816199376947 +2014-06-10 17:00:00,3456.697819314642 +2014-06-10 18:00:00,3360.9657320872275 +2014-06-10 19:00:00,3276.4143302180687 +2014-06-10 20:00:00,3108.7258566978194 +2014-06-10 21:00:00,3070.9158878504672 +2014-06-10 22:00:00,2608.271028037383 +2014-06-10 23:00:00,1990.5514018691588 +2014-06-11 00:00:00,1524.4299065420562 +2014-06-11 01:00:00,1247.1433021806854 +2014-06-11 02:00:00,1246.778816199377 +2014-06-11 03:00:00,1229.031152647975 +2014-06-11 04:00:00,1208.2180685358255 +2014-06-11 05:00:00,1279.7102803738317 +2014-06-11 06:00:00,1424.0498442367602 +2014-06-11 07:00:00,1600.4080996884736 +2014-06-11 08:00:00,1784.545171339564 +2014-06-11 09:00:00,2276.538940809969 +2014-06-11 10:00:00,3424.968847352025 +2014-06-11 11:00:00,3424.778816199377 +2014-06-11 12:00:00,3471.3115264797507 +2014-06-11 13:00:00,3599.6822429906542 +2014-06-11 14:00:00,3698.9127725856697 +2014-06-11 15:00:00,3732.97507788162 +2014-06-11 16:00:00,3820.3769470404986 +2014-06-11 17:00:00,3786.5451713395637 +2014-06-11 18:00:00,3742.429906542056 +2014-06-11 19:00:00,3585.5451713395637 +2014-06-11 20:00:00,3455.6168224299067 +2014-06-11 21:00:00,3409.043613707165 +2014-06-11 22:00:00,2903.03738317757 +2014-06-11 23:00:00,2133.772585669782 +2014-06-12 00:00:00,1686.545171339564 +2014-06-12 01:00:00,1392.5919003115264 +2014-06-12 02:00:00,1347.1682242990655 +2014-06-12 03:00:00,1325.5856697819315 +2014-06-12 04:00:00,1297.8504672897195 +2014-06-12 05:00:00,1365.1183800623053 +2014-06-12 06:00:00,1532.4330218068535 +2014-06-12 07:00:00,1705.127725856698 +2014-06-12 08:00:00,1825.9314641744547 +2014-06-12 09:00:00,2598.429906542056 +2014-06-12 10:00:00,3571.722741433022 +2014-06-12 11:00:00,3801.8816199376947 +2014-06-12 12:00:00,3844.1993769470405 +2014-06-12 13:00:00,3947.785046728972 +2014-06-12 14:00:00,4154.018691588785 +2014-06-12 15:00:00,4155.336448598131 +2014-06-12 16:00:00,4210.08722741433 +2014-06-12 17:00:00,4222.607476635514 +2014-06-12 18:00:00,4145.676012461059 +2014-06-12 19:00:00,3937.6884735202493 +2014-06-12 20:00:00,3683.2367601246106 +2014-06-12 21:00:00,3615.1464174454827 +2014-06-12 22:00:00,3071.778816199377 +2014-06-12 23:00:00,2214.797507788162 +2014-06-13 00:00:00,1768.3208722741433 +2014-06-13 01:00:00,1475.3956386292834 +2014-06-13 02:00:00,1421.411214953271 +2014-06-13 03:00:00,1375.7352024922118 +2014-06-13 04:00:00,1362.3021806853583 +2014-06-13 05:00:00,1447.8411214953271 +2014-06-13 06:00:00,1602.943925233645 +2014-06-13 07:00:00,1772.9719626168223 +2014-06-13 08:00:00,1991.2180685358255 +2014-06-13 09:00:00,2805.323987538941 +2014-06-13 10:00:00,3916.5732087227416 +2014-06-13 11:00:00,4100.071651090343 +2014-06-13 12:00:00,4178.330218068536 +2014-06-13 13:00:00,4399.694704049844 +2014-06-13 14:00:00,4551.339563862928 +2014-06-13 15:00:00,4599.22429906542 +2014-06-13 16:00:00,4642.859813084112 +2014-06-13 17:00:00,4636.115264797508 +2014-06-13 18:00:00,4440.704049844237 +2014-06-13 19:00:00,4253.757009345794 +2014-06-13 20:00:00,4142.6386292834895 +2014-06-13 21:00:00,3903.772585669782 +2014-06-13 22:00:00,3311.0031152647975 +2014-06-13 23:00:00,2351.8006230529595 +2014-06-14 00:00:00,1857.8971962616822 +2014-06-14 01:00:00,1570.5420560747664 +2014-06-14 02:00:00,1453.5046728971963 +2014-06-14 03:00:00,1386.9158878504672 +2014-06-14 04:00:00,1357.0280373831777 +2014-06-14 05:00:00,1422.0716510903426 +2014-06-14 06:00:00,1601.4672897196263 +2014-06-14 07:00:00,1748.6947040498442 +2014-06-14 08:00:00,1972.981308411215 +2014-06-14 09:00:00,3227.8255451713394 +2014-06-14 10:00:00,4351.956386292835 +2014-06-14 11:00:00,4518.115264797508 +2014-06-14 12:00:00,4549.4361370716515 +2014-06-14 13:00:00,4639.940809968847 +2014-06-14 14:00:00,4626.376947040499 +2014-06-14 15:00:00,4656.152647975078 +2014-06-14 16:00:00,4713.376947040499 +2014-06-14 17:00:00,4775.439252336449 +2014-06-14 18:00:00,4740.856697819315 +2014-06-14 19:00:00,4547.517133956387 +2014-06-14 20:00:00,4345.317757009346 +2014-06-14 21:00:00,4110.510903426792 +2014-06-14 22:00:00,3554.4205607476633 +2014-06-14 23:00:00,2647.6728971962616 +2014-06-15 00:00:00,1887.5669781931465 +2014-06-15 01:00:00,1576.9345794392523 +2014-06-15 02:00:00,1513.4392523364486 +2014-06-15 03:00:00,1434.4267912772586 +2014-06-15 04:00:00,1347.7320872274142 +2014-06-15 05:00:00,1396.8691588785048 +2014-06-15 06:00:00,1545.9283489096574 +2014-06-15 07:00:00,1729.9657320872275 +2014-06-15 08:00:00,1872.1370716510903 +2014-06-15 09:00:00,3125.2492211838007 +2014-06-15 10:00:00,4214.644859813084 +2014-06-15 11:00:00,4451.109034267913 +2014-06-15 12:00:00,4588.806853582554 +2014-06-15 13:00:00,4492.554517133956 +2014-06-15 14:00:00,4507.545171339564 +2014-06-15 15:00:00,4479.940809968847 +2014-06-15 16:00:00,4502.984423676013 +2014-06-15 17:00:00,4529.408099688473 +2014-06-15 18:00:00,4472.663551401869 +2014-06-15 19:00:00,4312.8317757009345 +2014-06-15 20:00:00,4290.202492211838 +2014-06-15 21:00:00,3980.06230529595 +2014-06-15 22:00:00,3398.510903426791 +2014-06-15 23:00:00,2289.728971962617 +2014-06-16 00:00:00,1733.239875389408 +2014-06-16 01:00:00,1448.6542056074766 +2014-06-16 02:00:00,1413.1152647975077 +2014-06-16 03:00:00,1382.582554517134 +2014-06-16 04:00:00,1369.4579439252336 +2014-06-16 05:00:00,1403.3831775700935 +2014-06-16 06:00:00,1558.7943925233644 +2014-06-16 07:00:00,1728.9283489096574 +2014-06-16 08:00:00,1962.797507788162 +2014-06-16 09:00:00,2966.728971962617 +2014-06-16 10:00:00,3783.8068535825546 +2014-06-16 11:00:00,3959.7943925233644 +2014-06-16 12:00:00,4116.01246105919 +2014-06-16 13:00:00,4162.894080996884 +2014-06-16 14:00:00,4277.722741433022 +2014-06-16 15:00:00,4297.146417445483 +2014-06-16 16:00:00,4315.052959501558 +2014-06-16 17:00:00,4267.448598130841 +2014-06-16 18:00:00,4147.922118380062 +2014-06-16 19:00:00,3944.6355140186915 +2014-06-16 20:00:00,3802.8629283489095 +2014-06-16 21:00:00,3741.5856697819313 +2014-06-16 22:00:00,3296.9595015576324 +2014-06-16 23:00:00,2237.98753894081 +2014-06-17 00:00:00,1808.4922118380061 +2014-06-17 01:00:00,1488.6168224299065 +2014-06-17 02:00:00,1432.657320872274 +2014-06-17 03:00:00,1383.1900311526479 +2014-06-17 04:00:00,1364.6947040498442 +2014-06-17 05:00:00,1446.3707165109033 +2014-06-17 06:00:00,1587.632398753894 +2014-06-17 07:00:00,1761.2305295950155 +2014-06-17 08:00:00,1926.98753894081 +2014-06-17 09:00:00,2588.1152647975077 +2014-06-17 10:00:00,3550.2679127725855 +2014-06-17 11:00:00,3681.3644859813085 +2014-06-17 12:00:00,3706.308411214953 +2014-06-17 13:00:00,3903.0498442367602 +2014-06-17 14:00:00,3914.442367601246 +2014-06-17 15:00:00,3969.4267912772584 +2014-06-17 16:00:00,4055.1806853582552 +2014-06-17 17:00:00,3991.1993769470405 +2014-06-17 18:00:00,3892.847352024922 +2014-06-17 19:00:00,3839.6043613707166 +2014-06-17 20:00:00,3629.3831775700933 +2014-06-17 21:00:00,3512.5015576323985 +2014-06-17 22:00:00,3098.504672897196 +2014-06-17 23:00:00,2244.0093457943926 +2014-06-18 00:00:00,1734.5358255451713 +2014-06-18 01:00:00,1425.271028037383 +2014-06-18 02:00:00,1363.7165109034268 +2014-06-18 03:00:00,1340.3177570093458 +2014-06-18 04:00:00,1332.423676012461 +2014-06-18 05:00:00,1393.9408099688474 +2014-06-18 06:00:00,1565.6542056074766 +2014-06-18 07:00:00,1722.993769470405 +2014-06-18 08:00:00,1936.6791277258567 +2014-06-18 09:00:00,2683.4859813084113 +2014-06-18 10:00:00,3499.778816199377 +2014-06-18 11:00:00,3620.685358255452 +2014-06-18 12:00:00,3667.4766355140187 +2014-06-18 13:00:00,3765.5482866043612 +2014-06-18 14:00:00,3840.0404984423676 +2014-06-18 15:00:00,3798.1619937694704 +2014-06-18 16:00:00,3825.7694704049845 +2014-06-18 17:00:00,3774.5077881619936 +2014-06-18 18:00:00,3685.1993769470405 +2014-06-18 19:00:00,3564.0404984423676 +2014-06-18 20:00:00,3441.93769470405 +2014-06-18 21:00:00,3345.8504672897197 +2014-06-18 22:00:00,2936.3395638629286 +2014-06-18 23:00:00,2158.7165109034268 +2014-06-19 00:00:00,1710.8099688473521 +2014-06-19 01:00:00,1418.582554517134 +2014-06-19 02:00:00,1367.214953271028 +2014-06-19 03:00:00,1350.9003115264798 +2014-06-19 04:00:00,1330.1495327102805 +2014-06-19 05:00:00,1404.214953271028 +2014-06-19 06:00:00,1532.221183800623 +2014-06-19 07:00:00,1720.0654205607477 +2014-06-19 08:00:00,1936.1370716510903 +2014-06-19 09:00:00,2799.3271028037384 +2014-06-19 10:00:00,3301.753894080997 +2014-06-19 11:00:00,3503.277258566978 +2014-06-19 12:00:00,3530.11214953271 +2014-06-19 13:00:00,3636.576323987539 +2014-06-19 14:00:00,3655.5919003115264 +2014-06-19 15:00:00,3657.3333333333335 +2014-06-19 16:00:00,3694.127725856698 +2014-06-19 17:00:00,3666.0155763239877 +2014-06-19 18:00:00,3626.8847352024923 +2014-06-19 19:00:00,3489.9283489096574 +2014-06-19 20:00:00,3358.8193146417448 +2014-06-19 21:00:00,3297.5732087227416 +2014-06-19 22:00:00,2876.6604361370714 +2014-06-19 23:00:00,2133.302180685358 +2014-06-20 00:00:00,1568.853582554517 +2014-06-20 01:00:00,1366.2492211838007 +2014-06-20 02:00:00,1365.214953271028 +2014-06-20 03:00:00,1343.2959501557632 +2014-06-20 04:00:00,1333.8317757009345 +2014-06-20 05:00:00,1404.595015576324 +2014-06-20 06:00:00,1538.7912772585669 +2014-06-20 07:00:00,1732.8660436137072 +2014-06-20 08:00:00,1941.3115264797507 +2014-06-20 09:00:00,2797.3894080996884 +2014-06-20 10:00:00,3275.2180685358258 +2014-06-20 11:00:00,3512.183800623053 +2014-06-20 12:00:00,3576.7570093457944 +2014-06-20 13:00:00,3673.526479750779 +2014-06-20 14:00:00,3748.3582554517134 +2014-06-20 15:00:00,3697.2492211838007 +2014-06-20 16:00:00,3724.8255451713394 +2014-06-20 17:00:00,3744.809968847352 +2014-06-20 18:00:00,3732.8068535825546 +2014-06-20 19:00:00,3601.866043613707 +2014-06-20 20:00:00,3485.5140186915887 +2014-06-20 21:00:00,3454.7383177570096 +2014-06-20 22:00:00,2988.3800623052957 +2014-06-20 23:00:00,2256.1401869158876 +2014-06-21 00:00:00,1780.8099688473521 +2014-06-21 01:00:00,1515.2118380062304 +2014-06-21 02:00:00,1397.2056074766356 +2014-06-21 03:00:00,1335.8193146417445 +2014-06-21 04:00:00,1316.3520249221183 +2014-06-21 05:00:00,1401.2647975077882 +2014-06-21 06:00:00,1527.0155763239875 +2014-06-21 07:00:00,1702.5607476635514 +2014-06-21 08:00:00,1877.3894080996886 +2014-06-21 09:00:00,2835.1028037383176 +2014-06-21 10:00:00,3330.98753894081 +2014-06-21 11:00:00,3485.495327102804 +2014-06-21 12:00:00,3544.993769470405 +2014-06-21 13:00:00,3552.5451713395637 +2014-06-21 14:00:00,3567.080996884735 +2014-06-21 15:00:00,3617.467289719626 +2014-06-21 16:00:00,3641.2118380062307 +2014-06-21 17:00:00,3610.6947040498444 +2014-06-21 18:00:00,3575.158878504673 +2014-06-21 19:00:00,3496.570093457944 +2014-06-21 20:00:00,3393.314641744548 +2014-06-21 21:00:00,3355.9657320872275 +2014-06-21 22:00:00,2971.1993769470405 +2014-06-21 23:00:00,2230.411214953271 +2014-06-22 00:00:00,1759.5981308411215 +2014-06-22 01:00:00,1469.2803738317757 +2014-06-22 02:00:00,1424.5545171339563 +2014-06-22 03:00:00,1378.1339563862928 +2014-06-22 04:00:00,1277.2866043613708 +2014-06-22 05:00:00,1347.595015576324 +2014-06-22 06:00:00,1463.4922118380061 +2014-06-22 07:00:00,1666.2087227414331 +2014-06-22 08:00:00,1815.613707165109 +2014-06-22 09:00:00,2698.080996884735 +2014-06-22 10:00:00,3209.031152647975 +2014-06-22 11:00:00,3474.2429906542056 +2014-06-22 12:00:00,3548.7383177570096 +2014-06-22 13:00:00,3483.2585669781934 +2014-06-22 14:00:00,3477.613707165109 +2014-06-22 15:00:00,3503.7414330218066 +2014-06-22 16:00:00,3501.323987538941 +2014-06-22 17:00:00,3506.9003115264795 +2014-06-22 18:00:00,3470.239875389408 +2014-06-22 19:00:00,3434.461059190031 +2014-06-22 20:00:00,3316.2118380062307 +2014-06-22 21:00:00,3290.323987538941 +2014-06-22 22:00:00,2833.6230529595014 +2014-06-22 23:00:00,1959.2492211838007 +2014-06-23 00:00:00,1592.9158878504672 +2014-06-23 01:00:00,1318.4641744548287 +2014-06-23 02:00:00,1281.0778816199377 +2014-06-23 03:00:00,1268.7133956386292 +2014-06-23 04:00:00,1255.4018691588785 +2014-06-23 05:00:00,1348.4299065420562 +2014-06-23 06:00:00,1486.4579439252336 +2014-06-23 07:00:00,1659.1090342679129 +2014-06-23 08:00:00,1860.0623052959502 +2014-06-23 09:00:00,2690.5140186915887 +2014-06-23 10:00:00,3230.520249221184 +2014-06-23 11:00:00,3397.1619937694704 +2014-06-23 12:00:00,3489.479750778816 +2014-06-23 13:00:00,3574.314641744548 +2014-06-23 14:00:00,3553.542056074766 +2014-06-23 15:00:00,3590.5358255451715 +2014-06-23 16:00:00,3609.059190031153 +2014-06-23 17:00:00,3548.5233644859813 +2014-06-23 18:00:00,3508.404984423676 +2014-06-23 19:00:00,3441.856697819315 +2014-06-23 20:00:00,3317.246105919003 +2014-06-23 21:00:00,3243.367601246106 +2014-06-23 22:00:00,2849.264797507788 +2014-06-23 23:00:00,2145.3894080996884 +2014-06-24 00:00:00,1717.1713395638628 +2014-06-24 01:00:00,1386.6355140186915 +2014-06-24 02:00:00,1314.3551401869158 +2014-06-24 03:00:00,1296.4299065420562 +2014-06-24 04:00:00,1289.239875389408 +2014-06-24 05:00:00,1358.6448598130842 +2014-06-24 06:00:00,1503.943925233645 +2014-06-24 07:00:00,1685.545171339564 +2014-06-24 08:00:00,1867.526479750779 +2014-06-24 09:00:00,2692.0 +2014-06-24 10:00:00,3173.7320872274145 +2014-06-24 11:00:00,3351.255451713396 +2014-06-24 12:00:00,3354.601246105919 +2014-06-24 13:00:00,3380.576323987539 +2014-06-24 14:00:00,3399.8629283489095 +2014-06-24 15:00:00,3449.760124610592 +2014-06-24 16:00:00,3535.404984423676 +2014-06-24 17:00:00,3503.8598130841124 +2014-06-24 18:00:00,3482.6604361370714 +2014-06-24 19:00:00,3446.9781931464177 +2014-06-24 20:00:00,3333.728971962617 +2014-06-24 21:00:00,3301.6604361370714 +2014-06-24 22:00:00,2887.423676012461 +2014-06-24 23:00:00,2101.691588785047 +2014-06-25 00:00:00,1668.2180685358255 +2014-06-25 01:00:00,1361.5981308411215 +2014-06-25 02:00:00,1315.4205607476636 +2014-06-25 03:00:00,1293.1059190031153 +2014-06-25 04:00:00,1287.9750778816199 +2014-06-25 05:00:00,1366.0965732087227 +2014-06-25 06:00:00,1511.5732087227414 +2014-06-25 07:00:00,1689.6697819314643 +2014-06-25 08:00:00,1870.7445482866044 +2014-06-25 09:00:00,2700.9968847352025 +2014-06-25 10:00:00,3127.6230529595014 +2014-06-25 11:00:00,3377.02492211838 +2014-06-25 12:00:00,3456.6292834890965 +2014-06-25 13:00:00,3475.1619937694704 +2014-06-25 14:00:00,3521.214953271028 +2014-06-25 15:00:00,3594.411214953271 +2014-06-25 16:00:00,3644.931464174455 +2014-06-25 17:00:00,3555.834890965732 +2014-06-25 18:00:00,3495.367601246106 +2014-06-25 19:00:00,3433.4704049844236 +2014-06-25 20:00:00,3241.143302180685 +2014-06-25 21:00:00,3191.828660436137 +2014-06-25 22:00:00,2790.92523364486 +2014-06-25 23:00:00,2088.6479750778817 +2014-06-26 00:00:00,1648.766355140187 +2014-06-26 01:00:00,1359.0809968847352 +2014-06-26 02:00:00,1305.8068535825546 +2014-06-26 03:00:00,1296.0996884735202 +2014-06-26 04:00:00,1273.3707165109033 +2014-06-26 05:00:00,1341.7445482866044 +2014-06-26 06:00:00,1495.4143302180685 +2014-06-26 07:00:00,1679.797507788162 +2014-06-26 08:00:00,1848.5389408099688 +2014-06-26 09:00:00,2661.06230529595 +2014-06-26 10:00:00,3140.02492211838 +2014-06-26 11:00:00,3386.9283489096574 +2014-06-26 12:00:00,3416.828660436137 +2014-06-26 13:00:00,3492.2803738317757 +2014-06-26 14:00:00,3525.2523364485983 +2014-06-26 15:00:00,3597.6479750778817 +2014-06-26 16:00:00,3644.2118380062307 +2014-06-26 17:00:00,3597.834890965732 +2014-06-26 18:00:00,3564.791277258567 +2014-06-26 19:00:00,3505.9719626168226 +2014-06-26 20:00:00,3352.3831775700933 +2014-06-26 21:00:00,3270.1028037383176 +2014-06-26 22:00:00,2884.07476635514 +2014-06-26 23:00:00,2117.6043613707166 +2014-06-27 00:00:00,1678.1059190031153 +2014-06-27 01:00:00,1390.3271028037384 +2014-06-27 02:00:00,1357.4828660436137 +2014-06-27 03:00:00,1309.5919003115264 +2014-06-27 04:00:00,1290.651090342679 +2014-06-27 05:00:00,1363.6292834890967 +2014-06-27 06:00:00,1505.7943925233644 +2014-06-27 07:00:00,1672.0872274143303 +2014-06-27 08:00:00,1842.5171339563863 +2014-06-27 09:00:00,2686.968847352025 +2014-06-27 10:00:00,3209.7632398753894 +2014-06-27 11:00:00,3442.735202492212 +2014-06-27 12:00:00,3598.1993769470405 +2014-06-27 13:00:00,3621.183800623053 +2014-06-27 14:00:00,3553.0560747663553 +2014-06-27 15:00:00,3778.9906542056074 +2014-06-27 16:00:00,3825.392523364486 +2014-06-27 17:00:00,3918.308411214953 +2014-06-27 18:00:00,3810.8971962616824 +2014-06-27 19:00:00,3753.0654205607475 +2014-06-27 20:00:00,3510.6417445482866 +2014-06-27 21:00:00,3423.5545171339563 +2014-06-27 22:00:00,3052.1028037383176 +2014-06-27 23:00:00,2271.5825545171338 +2014-06-28 00:00:00,1752.1028037383178 +2014-06-28 01:00:00,1476.202492211838 +2014-06-28 02:00:00,1355.386292834891 +2014-06-28 03:00:00,1302.9719626168223 +2014-06-28 04:00:00,1275.1370716510903 +2014-06-28 05:00:00,1336.8753894080996 +2014-06-28 06:00:00,1493.8816199376947 +2014-06-28 07:00:00,1677.9563862928348 +2014-06-28 08:00:00,1870.6043613707166 +2014-06-28 09:00:00,2831.0186915887853 +2014-06-28 10:00:00,3369.968847352025 +2014-06-28 11:00:00,3581.576323987539 +2014-06-28 12:00:00,3709.1619937694704 +2014-06-28 13:00:00,3713.165109034268 +2014-06-28 14:00:00,4004.442367601246 +2014-06-28 15:00:00,4050.722741433022 +2014-06-28 16:00:00,4070.8847352024923 +2014-06-28 17:00:00,4050.520249221184 +2014-06-28 18:00:00,3923.323987538941 +2014-06-28 19:00:00,3734.903426791277 +2014-06-28 20:00:00,3557.495327102804 +2014-06-28 21:00:00,3512.059190031153 +2014-06-28 22:00:00,3107.2056074766356 +2014-06-28 23:00:00,2201.423676012461 +2014-06-29 00:00:00,1733.1526479750778 +2014-06-29 01:00:00,1468.8816199376947 +2014-06-29 02:00:00,1410.3115264797507 +2014-06-29 03:00:00,1352.2056074766356 +2014-06-29 04:00:00,1275.3831775700935 +2014-06-29 05:00:00,1302.619937694704 +2014-06-29 06:00:00,1439.4423676012461 +2014-06-29 07:00:00,1625.2647975077882 +2014-06-29 08:00:00,1756.8006230529595 +2014-06-29 09:00:00,2690.9781931464177 +2014-06-29 10:00:00,3213.031152647975 +2014-06-29 11:00:00,3424.722741433022 +2014-06-29 12:00:00,3554.264797507788 +2014-06-29 13:00:00,3538.4548286604363 +2014-06-29 14:00:00,3660.4517133956388 +2014-06-29 15:00:00,3738.6168224299067 +2014-06-29 16:00:00,3810.043613707165 +2014-06-29 17:00:00,3820.461059190031 +2014-06-29 18:00:00,3750.5607476635514 +2014-06-29 19:00:00,3581.9844236760123 +2014-06-29 20:00:00,3463.1619937694704 +2014-06-29 21:00:00,3202.1744548286606 +2014-06-29 22:00:00,2676.2679127725855 +2014-06-29 23:00:00,1952.7943925233644 +2014-06-30 00:00:00,1608.8286604361372 +2014-06-30 01:00:00,1335.3302180685357 +2014-06-30 02:00:00,1270.0 +2014-06-30 03:00:00,1261.7102803738317 +2014-06-30 04:00:00,1263.7258566978194 +2014-06-30 05:00:00,1334.7538940809968 +2014-06-30 06:00:00,1463.8940809968847 +2014-06-30 07:00:00,1617.8785046728972 +2014-06-30 08:00:00,1796.4984423676012 +2014-06-30 09:00:00,2555.345794392523 +2014-06-30 10:00:00,3195.1152647975077 +2014-06-30 11:00:00,3261.1495327102803 +2014-06-30 12:00:00,3443.968847352025 +2014-06-30 13:00:00,3540.1495327102803 +2014-06-30 14:00:00,3573.4205607476633 +2014-06-30 15:00:00,3643.2367601246106 +2014-06-30 16:00:00,3690.96261682243 +2014-06-30 17:00:00,3719.158878504673 +2014-06-30 18:00:00,3611.314641744548 +2014-06-30 19:00:00,3494.171339563863 +2014-06-30 20:00:00,3265.947040498442 +2014-06-30 21:00:00,3253.0155763239877 +2014-06-30 22:00:00,2922.105919003115 +2014-06-30 23:00:00,2278.713395638629 +2014-07-01 00:00:00,1703.2180685358255 +2014-07-01 01:00:00,1396.3395638629283 +2014-07-01 02:00:00,1335.2959501557632 +2014-07-01 03:00:00,1319.8629283489097 +2014-07-01 04:00:00,1316.0934579439252 +2014-07-01 05:00:00,1379.1713395638628 +2014-07-01 06:00:00,1509.5732087227414 +2014-07-01 07:00:00,1688.6417445482866 +2014-07-01 08:00:00,1838.006230529595 +2014-07-01 09:00:00,2693.0934579439254 +2014-07-01 10:00:00,3164.1246105919004 +2014-07-01 11:00:00,3388.03738317757 +2014-07-01 12:00:00,3440.6105919003116 +2014-07-01 13:00:00,3542.4641744548285 +2014-07-01 14:00:00,3568.3489096573207 +2014-07-01 15:00:00,3549.1495327102803 +2014-07-01 16:00:00,3602.2305295950155 +2014-07-01 17:00:00,3503.9158878504672 +2014-07-01 18:00:00,3468.822429906542 +2014-07-01 19:00:00,3406.0560747663553 +2014-07-01 20:00:00,3337.532710280374 +2014-07-01 21:00:00,3192.595015576324 +2014-07-01 22:00:00,2857.345794392523 +2014-07-01 23:00:00,2296.97507788162 +2014-07-02 00:00:00,1690.6915887850466 +2014-07-02 01:00:00,1360.8909657320871 +2014-07-02 02:00:00,1314.728971962617 +2014-07-02 03:00:00,1292.3551401869158 +2014-07-02 04:00:00,1284.6105919003114 +2014-07-02 05:00:00,1343.9781931464174 +2014-07-02 06:00:00,1499.8442367601247 +2014-07-02 07:00:00,1660.8380062305296 +2014-07-02 08:00:00,1817.9781931464174 +2014-07-02 09:00:00,2639.7320872274145 +2014-07-02 10:00:00,3053.127725856698 +2014-07-02 11:00:00,3235.2180685358258 +2014-07-02 12:00:00,3353.4766355140187 +2014-07-02 13:00:00,3421.878504672897 +2014-07-02 14:00:00,3485.96261682243 +2014-07-02 15:00:00,3546.07476635514 +2014-07-02 16:00:00,3521.5482866043612 +2014-07-02 17:00:00,3473.8130841121497 +2014-07-02 18:00:00,3473.6728971962616 +2014-07-02 19:00:00,3395.3489096573207 +2014-07-02 20:00:00,3318.2242990654204 +2014-07-02 21:00:00,3255.6947040498444 +2014-07-02 22:00:00,2941.3956386292834 +2014-07-02 23:00:00,2334.6199376947043 +2014-07-03 00:00:00,1706.6915887850466 +2014-07-03 01:00:00,1360.6760124610591 +2014-07-03 02:00:00,1321.8442367601247 +2014-07-03 03:00:00,1306.271028037383 +2014-07-03 04:00:00,1308.9657320872275 +2014-07-03 05:00:00,1387.214953271028 +2014-07-03 06:00:00,1527.5700934579438 +2014-07-03 07:00:00,1699.8473520249222 +2014-07-03 08:00:00,1841.6697819314643 +2014-07-03 09:00:00,2671.2118380062307 +2014-07-03 10:00:00,3235.0841121495328 +2014-07-03 11:00:00,3419.461059190031 +2014-07-03 12:00:00,3553.7383177570096 +2014-07-03 13:00:00,3595.6417445482866 +2014-07-03 14:00:00,3649.5919003115264 +2014-07-03 15:00:00,3680.878504672897 +2014-07-03 16:00:00,3731.2242990654204 +2014-07-03 17:00:00,3725.841121495327 +2014-07-03 18:00:00,3773.1495327102803 +2014-07-03 19:00:00,3653.5981308411215 +2014-07-03 20:00:00,3452.361370716511 +2014-07-03 21:00:00,3413.7632398753894 +2014-07-03 22:00:00,3155.713395638629 +2014-07-03 23:00:00,2468.6230529595014 +2014-07-04 00:00:00,1756.0965732087227 +2014-07-04 01:00:00,1447.5358255451713 +2014-07-04 02:00:00,1391.4143302180685 +2014-07-04 03:00:00,1350.563862928349 +2014-07-04 04:00:00,1335.5202492211838 +2014-07-04 05:00:00,1405.853582554517 +2014-07-04 06:00:00,1559.0747663551401 +2014-07-04 07:00:00,1723.127725856698 +2014-07-04 08:00:00,1905.8317757009345 +2014-07-04 09:00:00,2754.1993769470405 +2014-07-04 10:00:00,3300.429906542056 +2014-07-04 11:00:00,3504.3769470404986 +2014-07-04 12:00:00,3647.797507788162 +2014-07-04 13:00:00,3860.1993769470405 +2014-07-04 14:00:00,3949.8535825545173 +2014-07-04 15:00:00,4013.1028037383176 +2014-07-04 16:00:00,4182.919003115265 +2014-07-04 17:00:00,4110.554517133956 +2014-07-04 18:00:00,3985.5794392523367 +2014-07-04 19:00:00,3898.8598130841124 +2014-07-04 20:00:00,3734.5171339563863 +2014-07-04 21:00:00,3455.595015576324 +2014-07-04 22:00:00,3234.0654205607475 +2014-07-04 23:00:00,2572.5451713395637 +2014-07-05 00:00:00,1890.834890965732 +2014-07-05 01:00:00,1515.7943925233644 +2014-07-05 02:00:00,1431.3551401869158 +2014-07-05 03:00:00,1339.183800623053 +2014-07-05 04:00:00,1296.361370716511 +2014-07-05 05:00:00,1362.0778816199377 +2014-07-05 06:00:00,1524.2834890965732 +2014-07-05 07:00:00,1688.7414330218069 +2014-07-05 08:00:00,1870.6978193146417 +2014-07-05 09:00:00,2755.5856697819313 +2014-07-05 10:00:00,3333.8317757009345 +2014-07-05 11:00:00,3629.1869158878503 +2014-07-05 12:00:00,3797.6884735202493 +2014-07-05 13:00:00,3841.9595015576324 +2014-07-05 14:00:00,3940.7040498442366 +2014-07-05 15:00:00,4149.3644859813085 +2014-07-05 16:00:00,4156.97507788162 +2014-07-05 17:00:00,4177.866043613707 +2014-07-05 18:00:00,4086.6791277258567 +2014-07-05 19:00:00,3887.6604361370714 +2014-07-05 20:00:00,3676.766355140187 +2014-07-05 21:00:00,3550.4330218068535 +2014-07-05 22:00:00,3230.919003115265 +2014-07-05 23:00:00,2533.4392523364486 +2014-07-06 00:00:00,1827.1931464174454 +2014-07-06 01:00:00,1502.7009345794393 +2014-07-06 02:00:00,1448.361370716511 +2014-07-06 03:00:00,1394.9844236760125 +2014-07-06 04:00:00,1311.3457943925234 +2014-07-06 05:00:00,1365.8940809968847 +2014-07-06 06:00:00,1499.0342679127725 +2014-07-06 07:00:00,1684.853582554517 +2014-07-06 08:00:00,1827.0404984423676 +2014-07-06 09:00:00,2712.3115264797507 +2014-07-06 10:00:00,3328.940809968847 +2014-07-06 11:00:00,3497.158878504673 +2014-07-06 12:00:00,3593.5825545171338 +2014-07-06 13:00:00,3574.277258566978 +2014-07-06 14:00:00,3581.5358255451715 +2014-07-06 15:00:00,3642.336448598131 +2014-07-06 16:00:00,3706.7757009345796 +2014-07-06 17:00:00,3750.239875389408 +2014-07-06 18:00:00,3692.626168224299 +2014-07-06 19:00:00,3642.8909657320874 +2014-07-06 20:00:00,3516.5981308411215 +2014-07-06 21:00:00,3393.822429906542 +2014-07-06 22:00:00,3104.1744548286606 +2014-07-06 23:00:00,2337.6168224299067 +2014-07-07 00:00:00,1803.2741433021806 +2014-07-07 01:00:00,1376.96261682243 +2014-07-07 02:00:00,1328.6230529595016 +2014-07-07 03:00:00,1288.7632398753894 +2014-07-07 04:00:00,1257.3769470404984 +2014-07-07 05:00:00,1322.7102803738317 +2014-07-07 06:00:00,1458.576323987539 +2014-07-07 07:00:00,1597.1121495327102 +2014-07-07 08:00:00,1777.872274143302 +2014-07-07 09:00:00,2574.1744548286606 +2014-07-07 10:00:00,3070.221183800623 +2014-07-07 11:00:00,3292.7040498442366 +2014-07-07 12:00:00,3413.563862928349 +2014-07-07 13:00:00,3554.700934579439 +2014-07-07 14:00:00,3567.5482866043612 +2014-07-07 15:00:00,3644.3894080996884 +2014-07-07 16:00:00,3682.1869158878503 +2014-07-07 17:00:00,3734.1495327102803 +2014-07-07 18:00:00,3690.3800623052957 +2014-07-07 19:00:00,3552.0031152647975 +2014-07-07 20:00:00,3369.722741433022 +2014-07-07 21:00:00,3300.576323987539 +2014-07-07 22:00:00,3048.8629283489095 +2014-07-07 23:00:00,2428.2367601246106 +2014-07-08 00:00:00,1775.6105919003114 +2014-07-08 01:00:00,1430.3956386292834 +2014-07-08 02:00:00,1389.386292834891 +2014-07-08 03:00:00,1344.3956386292834 +2014-07-08 04:00:00,1303.361370716511 +2014-07-08 05:00:00,1374.981308411215 +2014-07-08 06:00:00,1536.0747663551401 +2014-07-08 07:00:00,1690.9657320872275 +2014-07-08 08:00:00,1826.9532710280373 +2014-07-08 09:00:00,2525.9844236760123 +2014-07-08 10:00:00,3221.473520249221 +2014-07-08 11:00:00,3462.9065420560746 +2014-07-08 12:00:00,3662.8753894080996 +2014-07-08 13:00:00,3889.171339563863 +2014-07-08 14:00:00,4073.436137071651 +2014-07-08 15:00:00,4261.358255451713 +2014-07-08 16:00:00,4391.046728971963 +2014-07-08 17:00:00,4405.031152647975 +2014-07-08 18:00:00,4313.342679127726 +2014-07-08 19:00:00,4121.517133956387 +2014-07-08 20:00:00,3918.292834890966 +2014-07-08 21:00:00,3723.4143302180687 +2014-07-08 22:00:00,3333.9657320872275 +2014-07-08 23:00:00,2619.0778816199377 +2014-07-09 00:00:00,1741.1744548286604 +2014-07-09 01:00:00,1434.031152647975 +2014-07-09 02:00:00,1391.7570093457944 +2014-07-09 03:00:00,1348.0685358255453 +2014-07-09 04:00:00,1321.252336448598 +2014-07-09 05:00:00,1373.9532710280373 +2014-07-09 06:00:00,1514.9376947040498 +2014-07-09 07:00:00,1686.0872274143303 +2014-07-09 08:00:00,1864.8753894080996 +2014-07-09 09:00:00,2802.956386292835 +2014-07-09 10:00:00,3408.6292834890965 +2014-07-09 11:00:00,3701.5451713395637 +2014-07-09 12:00:00,3875.2616822429904 +2014-07-09 13:00:00,4012.713395638629 +2014-07-09 14:00:00,4053.8006230529595 +2014-07-09 15:00:00,4187.691588785046 +2014-07-09 16:00:00,4215.115264797508 +2014-07-09 17:00:00,4188.052959501558 +2014-07-09 18:00:00,4200.722741433022 +2014-07-09 19:00:00,4052.0404984423676 +2014-07-09 20:00:00,3824.97507788162 +2014-07-09 21:00:00,3723.0342679127725 +2014-07-09 22:00:00,3375.7102803738317 +2014-07-09 23:00:00,2590.8006230529595 +2014-07-10 00:00:00,1787.6697819314643 +2014-07-10 01:00:00,1491.619937694704 +2014-07-10 02:00:00,1443.202492211838 +2014-07-10 03:00:00,1382.803738317757 +2014-07-10 04:00:00,1337.6417445482866 +2014-07-10 05:00:00,1403.5669781931465 +2014-07-10 06:00:00,1525.348909657321 +2014-07-10 07:00:00,1712.5919003115264 +2014-07-10 08:00:00,1907.1900311526479 +2014-07-10 09:00:00,2894.031152647975 +2014-07-10 10:00:00,3479.0093457943926 +2014-07-10 11:00:00,3715.5919003115264 +2014-07-10 12:00:00,3894.177570093458 +2014-07-10 13:00:00,4188.607476635514 +2014-07-10 14:00:00,4283.585669781932 +2014-07-10 15:00:00,4359.077881619938 +2014-07-10 16:00:00,4411.314641744549 +2014-07-10 17:00:00,4433.894080996884 +2014-07-10 18:00:00,4388.585669781932 +2014-07-10 19:00:00,4215.205607476635 +2014-07-10 20:00:00,3993.336448598131 +2014-07-10 21:00:00,3842.255451713396 +2014-07-10 22:00:00,3531.068535825545 +2014-07-10 23:00:00,2597.4548286604363 +2014-07-11 00:00:00,1794.8785046728972 +2014-07-11 01:00:00,1507.0 +2014-07-11 02:00:00,1444.5420560747664 +2014-07-11 03:00:00,1406.4392523364486 +2014-07-11 04:00:00,1366.0996884735202 +2014-07-11 05:00:00,1425.177570093458 +2014-07-11 06:00:00,1565.6417445482866 +2014-07-11 07:00:00,1739.5794392523364 +2014-07-11 08:00:00,1950.2242990654206 +2014-07-11 09:00:00,3104.772585669782 +2014-07-11 10:00:00,3893.570093457944 +2014-07-11 11:00:00,4056.345794392523 +2014-07-11 12:00:00,4247.613707165109 +2014-07-11 13:00:00,4470.345794392523 +2014-07-11 14:00:00,4468.0965732087225 +2014-07-11 15:00:00,4651.323987538941 +2014-07-11 16:00:00,4726.781931464175 +2014-07-11 17:00:00,4666.467289719626 +2014-07-11 18:00:00,4623.532710280374 +2014-07-11 19:00:00,4431.613707165109 +2014-07-11 20:00:00,4204.4330218068535 +2014-07-11 21:00:00,3890.96261682243 +2014-07-11 22:00:00,3559.02492211838 +2014-07-11 23:00:00,2782.183800623053 +2014-07-12 00:00:00,1879.2087227414331 +2014-07-12 01:00:00,1572.7570093457944 +2014-07-12 02:00:00,1482.1152647975077 +2014-07-12 03:00:00,1400.5482866043615 +2014-07-12 04:00:00,1381.6105919003114 +2014-07-12 05:00:00,1453.1619937694704 +2014-07-12 06:00:00,1584.2429906542056 +2014-07-12 07:00:00,1752.0841121495328 +2014-07-12 08:00:00,1941.4485981308412 +2014-07-12 09:00:00,3113.947040498442 +2014-07-12 10:00:00,3918.722741433022 +2014-07-12 11:00:00,4348.878504672897 +2014-07-12 12:00:00,4503.71339563863 +2014-07-12 13:00:00,4525.13707165109 +2014-07-12 14:00:00,4547.956386292835 +2014-07-12 15:00:00,4519.934579439252 +2014-07-12 16:00:00,4578.560747663551 +2014-07-12 17:00:00,4537.461059190031 +2014-07-12 18:00:00,4670.71339563863 +2014-07-12 19:00:00,4620.803738317757 +2014-07-12 20:00:00,4303.9657320872275 +2014-07-12 21:00:00,3974.8629283489095 +2014-07-12 22:00:00,3620.5732087227416 +2014-07-12 23:00:00,2762.436137071651 +2014-07-13 00:00:00,1870.7819314641745 +2014-07-13 01:00:00,1553.9719626168223 +2014-07-13 02:00:00,1494.233644859813 +2014-07-13 03:00:00,1426.3052959501558 +2014-07-13 04:00:00,1334.367601246106 +2014-07-13 05:00:00,1390.0155763239875 +2014-07-13 06:00:00,1530.380062305296 +2014-07-13 07:00:00,1693.6604361370717 +2014-07-13 08:00:00,1858.6822429906542 +2014-07-13 09:00:00,2922.0654205607475 +2014-07-13 10:00:00,3774.7757009345796 +2014-07-13 11:00:00,4184.856697819315 +2014-07-13 12:00:00,4357.177570093458 +2014-07-13 13:00:00,4343.884735202492 +2014-07-13 14:00:00,4277.370716510904 +2014-07-13 15:00:00,4272.626168224299 +2014-07-13 16:00:00,4351.02492211838 +2014-07-13 17:00:00,4359.398753894081 +2014-07-13 18:00:00,4341.314641744549 +2014-07-13 19:00:00,4284.707165109035 +2014-07-13 20:00:00,4099.526479750779 +2014-07-13 21:00:00,3853.778816199377 +2014-07-13 22:00:00,3387.760124610592 +2014-07-13 23:00:00,2470.866043613707 +2014-07-14 00:00:00,1761.0498442367602 +2014-07-14 01:00:00,1486.6915887850466 +2014-07-14 02:00:00,1457.0404984423676 +2014-07-14 03:00:00,1417.4984423676012 +2014-07-14 04:00:00,1406.657320872274 +2014-07-14 05:00:00,1458.766355140187 +2014-07-14 06:00:00,1587.8006230529595 +2014-07-14 07:00:00,1733.7445482866044 +2014-07-14 08:00:00,1937.9719626168223 +2014-07-14 09:00:00,3061.8909657320874 +2014-07-14 10:00:00,3790.11214953271 +2014-07-14 11:00:00,4119.806853582554 +2014-07-14 12:00:00,4380.806853582554 +2014-07-14 13:00:00,4551.959501557632 +2014-07-14 14:00:00,4559.1651090342675 +2014-07-14 15:00:00,4651.068535825545 +2014-07-14 16:00:00,4619.557632398754 +2014-07-14 17:00:00,4702.0373831775705 +2014-07-14 18:00:00,4639.242990654206 +2014-07-14 19:00:00,4473.0 +2014-07-14 20:00:00,4283.747663551402 +2014-07-14 21:00:00,4003.8971962616824 +2014-07-14 22:00:00,3504.510903426791 +2014-07-14 23:00:00,2633.1619937694704 +2014-07-15 00:00:00,1883.8660436137072 +2014-07-15 01:00:00,1583.7694704049845 +2014-07-15 02:00:00,1528.146417445483 +2014-07-15 03:00:00,1478.7009345794393 +2014-07-15 04:00:00,1447.9470404984424 +2014-07-15 05:00:00,1501.545171339564 +2014-07-15 06:00:00,1626.9719626168223 +2014-07-15 07:00:00,1804.5295950155764 +2014-07-15 08:00:00,2008.3395638629283 +2014-07-15 09:00:00,3146.323987538941 +2014-07-15 10:00:00,3980.5358255451715 +2014-07-15 11:00:00,4244.613707165109 +2014-07-15 12:00:00,4438.093457943925 +2014-07-15 13:00:00,4542.152647975078 +2014-07-15 14:00:00,4622.604361370716 +2014-07-15 15:00:00,4631.227414330218 +2014-07-15 16:00:00,4671.5638629283485 +2014-07-15 17:00:00,4652.336448598131 +2014-07-15 18:00:00,4606.869158878505 +2014-07-15 19:00:00,4377.311526479751 +2014-07-15 20:00:00,4199.056074766355 +2014-07-15 21:00:00,3982.8255451713394 +2014-07-15 22:00:00,3682.299065420561 +2014-07-15 23:00:00,2745.0404984423676 +2014-07-16 00:00:00,1833.0155763239875 +2014-07-16 01:00:00,1544.8380062305296 +2014-07-16 02:00:00,1501.3738317757009 +2014-07-16 03:00:00,1439.1433021806854 +2014-07-16 04:00:00,1413.6043613707166 +2014-07-16 05:00:00,1476.853582554517 +2014-07-16 06:00:00,1623.9595015576324 +2014-07-16 07:00:00,1764.1090342679129 +2014-07-16 08:00:00,1946.3333333333333 +2014-07-16 09:00:00,3086.214953271028 +2014-07-16 10:00:00,3991.638629283489 +2014-07-16 11:00:00,4281.95015576324 +2014-07-16 12:00:00,4462.380062305296 +2014-07-16 13:00:00,4615.953271028037 +2014-07-16 14:00:00,4662.719626168225 +2014-07-16 15:00:00,4724.056074766355 +2014-07-16 16:00:00,4714.0373831775705 +2014-07-16 17:00:00,4678.909657320873 +2014-07-16 18:00:00,4637.869158878505 +2014-07-16 19:00:00,4470.305295950156 +2014-07-16 20:00:00,4306.828660436137 +2014-07-16 21:00:00,4181.579439252337 +2014-07-16 22:00:00,3716.495327102804 +2014-07-16 23:00:00,2753.2741433021806 +2014-07-17 00:00:00,1848.7943925233644 +2014-07-17 01:00:00,1543.2928348909657 +2014-07-17 02:00:00,1489.0809968847352 +2014-07-17 03:00:00,1444.657320872274 +2014-07-17 04:00:00,1397.8566978193146 +2014-07-17 05:00:00,1476.5576323987539 +2014-07-17 06:00:00,1628.619937694704 +2014-07-17 07:00:00,1758.6542056074766 +2014-07-17 08:00:00,1955.165109034268 +2014-07-17 09:00:00,3021.0841121495328 +2014-07-17 10:00:00,3793.239875389408 +2014-07-17 11:00:00,4090.246105919003 +2014-07-17 12:00:00,4335.517133956387 +2014-07-17 13:00:00,4483.760124610591 +2014-07-17 14:00:00,4485.760124610591 +2014-07-17 15:00:00,4548.408099688473 +2014-07-17 16:00:00,4630.722741433022 +2014-07-17 17:00:00,4563.442367601246 +2014-07-17 18:00:00,4535.07476635514 +2014-07-17 19:00:00,4359.367601246106 +2014-07-17 20:00:00,4159.725856697819 +2014-07-17 21:00:00,3894.3426791277257 +2014-07-17 22:00:00,3434.8909657320874 +2014-07-17 23:00:00,2668.0716510903426 +2014-07-18 00:00:00,1823.3738317757009 +2014-07-18 01:00:00,1519.797507788162 +2014-07-18 02:00:00,1474.2274143302182 +2014-07-18 03:00:00,1419.8068535825546 +2014-07-18 04:00:00,1380.4610591900312 +2014-07-18 05:00:00,1459.239875389408 +2014-07-18 06:00:00,1619.1121495327102 +2014-07-18 07:00:00,1788.0809968847352 +2014-07-18 08:00:00,1959.5576323987539 +2014-07-18 09:00:00,2938.052959501558 +2014-07-18 10:00:00,3600.299065420561 +2014-07-18 11:00:00,3929.1370716510905 +2014-07-18 12:00:00,4034.345794392523 +2014-07-18 13:00:00,4093.165109034268 +2014-07-18 14:00:00,4092.6105919003116 +2014-07-18 15:00:00,4168.071651090343 +2014-07-18 16:00:00,4227.9034267912775 +2014-07-18 17:00:00,4211.04984423676 +2014-07-18 18:00:00,4160.461059190031 +2014-07-18 19:00:00,3972.6510903426793 +2014-07-18 20:00:00,3821.1308411214955 +2014-07-18 21:00:00,3752.404984423676 +2014-07-18 22:00:00,3478.190031152648 +2014-07-18 23:00:00,2722.7757009345796 +2014-07-19 00:00:00,1868.1401869158879 +2014-07-19 01:00:00,1562.7071651090343 +2014-07-19 02:00:00,1467.9314641744547 +2014-07-19 03:00:00,1416.4797507788162 +2014-07-19 04:00:00,1375.526479750779 +2014-07-19 05:00:00,1466.9127725856697 +2014-07-19 06:00:00,1601.9190031152648 +2014-07-19 07:00:00,1778.3177570093458 +2014-07-19 08:00:00,1938.006230529595 +2014-07-19 09:00:00,2945.01246105919 +2014-07-19 10:00:00,3718.8130841121497 +2014-07-19 11:00:00,4012.489096573209 +2014-07-19 12:00:00,4026.2897196261683 +2014-07-19 13:00:00,3964.1152647975077 +2014-07-19 14:00:00,4031.947040498442 +2014-07-19 15:00:00,4075.7383177570096 +2014-07-19 16:00:00,4095.8193146417448 +2014-07-19 17:00:00,4101.015576323987 +2014-07-19 18:00:00,3974.068535825545 +2014-07-19 19:00:00,3937.797507788162 +2014-07-19 20:00:00,3733.4080996884736 +2014-07-19 21:00:00,3650.809968847352 +2014-07-19 22:00:00,3394.6573208722743 +2014-07-19 23:00:00,2526.520249221184 +2014-07-20 00:00:00,1823.5856697819315 +2014-07-20 01:00:00,1502.3582554517134 +2014-07-20 02:00:00,1452.0436137071652 +2014-07-20 03:00:00,1406.03738317757 +2014-07-20 04:00:00,1316.4610591900312 +2014-07-20 05:00:00,1376.8130841121495 +2014-07-20 06:00:00,1532.1121495327102 +2014-07-20 07:00:00,1688.5919003115264 +2014-07-20 08:00:00,1845.8847352024923 +2014-07-20 09:00:00,2828.894080996885 +2014-07-20 10:00:00,3441.0841121495328 +2014-07-20 11:00:00,3721.9158878504672 +2014-07-20 12:00:00,3866.744548286604 +2014-07-20 13:00:00,3904.2523364485983 +2014-07-20 14:00:00,3881.2834890965732 +2014-07-20 15:00:00,3943.264797507788 +2014-07-20 16:00:00,4011.98753894081 +2014-07-20 17:00:00,4102.953271028037 +2014-07-20 18:00:00,3999.9003115264795 +2014-07-20 19:00:00,3856.5794392523367 +2014-07-20 20:00:00,3681.202492211838 +2014-07-20 21:00:00,3583.3894080996884 +2014-07-20 22:00:00,3201.595015576324 +2014-07-20 23:00:00,2301.5451713395637 +2014-07-21 00:00:00,1706.8909657320871 +2014-07-21 01:00:00,1401.9595015576324 +2014-07-21 02:00:00,1369.1370716510903 +2014-07-21 03:00:00,1348.3707165109033 +2014-07-21 04:00:00,1309.233644859813 +2014-07-21 05:00:00,1378.9127725856697 +2014-07-21 06:00:00,1516.8380062305296 +2014-07-21 07:00:00,1684.9781931464174 +2014-07-21 08:00:00,1869.2367601246106 +2014-07-21 09:00:00,2891.803738317757 +2014-07-21 10:00:00,3591.0467289719627 +2014-07-21 11:00:00,3925.5732087227416 +2014-07-21 12:00:00,4220.6355140186915 +2014-07-21 13:00:00,4253.819314641744 +2014-07-21 14:00:00,4268.591900311527 +2014-07-21 15:00:00,4306.6355140186915 +2014-07-21 16:00:00,4396.616822429906 +2014-07-21 17:00:00,4411.065420560748 +2014-07-21 18:00:00,4384.694704049844 +2014-07-21 19:00:00,4282.28660436137 +2014-07-21 20:00:00,4010.5295950155764 +2014-07-21 21:00:00,3798.96261682243 +2014-07-21 22:00:00,3392.1557632398753 +2014-07-21 23:00:00,2475.532710280374 +2014-07-22 00:00:00,1792.778816199377 +2014-07-22 01:00:00,1486.7570093457944 +2014-07-22 02:00:00,1439.233644859813 +2014-07-22 03:00:00,1391.2242990654206 +2014-07-22 04:00:00,1367.6043613707166 +2014-07-22 05:00:00,1438.006230529595 +2014-07-22 06:00:00,1565.6479750778817 +2014-07-22 07:00:00,1763.056074766355 +2014-07-22 08:00:00,1962.7881619937696 +2014-07-22 09:00:00,2991.1619937694704 +2014-07-22 10:00:00,3966.753894080997 +2014-07-22 11:00:00,4151.102803738318 +2014-07-22 12:00:00,4307.395638629284 +2014-07-22 13:00:00,4422.133956386293 +2014-07-22 14:00:00,4507.028037383177 +2014-07-22 15:00:00,4594.657320872274 +2014-07-22 16:00:00,4575.408099688473 +2014-07-22 17:00:00,4645.573208722742 +2014-07-22 18:00:00,4578.423676012461 +2014-07-22 19:00:00,4413.716510903427 +2014-07-22 20:00:00,4156.006230529595 +2014-07-22 21:00:00,3921.0342679127725 +2014-07-22 22:00:00,3624.3208722741433 +2014-07-22 23:00:00,2614.4641744548285 +2014-07-23 00:00:00,1789.9906542056074 +2014-07-23 01:00:00,1481.9034267912773 +2014-07-23 02:00:00,1427.9221183800623 +2014-07-23 03:00:00,1396.6978193146417 +2014-07-23 04:00:00,1394.0 +2014-07-23 05:00:00,1459.943925233645 +2014-07-23 06:00:00,1585.7445482866044 +2014-07-23 07:00:00,1765.8317757009345 +2014-07-23 08:00:00,1950.5327102803737 +2014-07-23 09:00:00,3060.0716510903426 +2014-07-23 10:00:00,3709.436137071651 +2014-07-23 11:00:00,4044.0872274143303 +2014-07-23 12:00:00,4217.414330218068 +2014-07-23 13:00:00,4153.376947040499 +2014-07-23 14:00:00,4341.560747663551 +2014-07-23 15:00:00,4505.242990654206 +2014-07-23 16:00:00,4596.426791277258 +2014-07-23 17:00:00,4505.529595015576 +2014-07-23 18:00:00,4369.336448598131 +2014-07-23 19:00:00,4148.641744548287 +2014-07-23 20:00:00,3966.436137071651 +2014-07-23 21:00:00,3754.1370716510905 +2014-07-23 22:00:00,3490.068535825545 +2014-07-23 23:00:00,2604.152647975078 +2014-07-24 00:00:00,1773.8255451713396 +2014-07-24 01:00:00,1481.0031152647975 +2014-07-24 02:00:00,1443.2772585669782 +2014-07-24 03:00:00,1411.6043613707166 +2014-07-24 04:00:00,1373.0591900311526 +2014-07-24 05:00:00,1457.4423676012461 +2014-07-24 06:00:00,1597.4890965732088 +2014-07-24 07:00:00,1773.9657320872275 +2014-07-24 08:00:00,1950.2585669781931 +2014-07-24 09:00:00,2942.4143302180687 +2014-07-24 10:00:00,3549.6604361370714 +2014-07-24 11:00:00,3842.5607476635514 +2014-07-24 12:00:00,4042.1028037383176 +2014-07-24 13:00:00,4117.0 +2014-07-24 14:00:00,4194.339563862928 +2014-07-24 15:00:00,4263.6978193146415 +2014-07-24 16:00:00,4252.909657320873 +2014-07-24 17:00:00,4218.183800623053 +2014-07-24 18:00:00,4148.582554517134 +2014-07-24 19:00:00,4001.98753894081 +2014-07-24 20:00:00,3912.3208722741433 +2014-07-24 21:00:00,3758.8598130841124 +2014-07-24 22:00:00,3323.6791277258567 +2014-07-24 23:00:00,2513.227414330218 +2014-07-25 00:00:00,1795.8598130841121 +2014-07-25 01:00:00,1471.657320872274 +2014-07-25 02:00:00,1447.2897196261683 +2014-07-25 03:00:00,1401.0404984423676 +2014-07-25 04:00:00,1368.2274143302182 +2014-07-25 05:00:00,1446.2928348909657 +2014-07-25 06:00:00,1610.436137071651 +2014-07-25 07:00:00,1784.526479750779 +2014-07-25 08:00:00,1979.4080996884736 +2014-07-25 09:00:00,3045.98753894081 +2014-07-25 10:00:00,3710.2741433021806 +2014-07-25 11:00:00,3869.7507788161993 +2014-07-25 12:00:00,4052.760124610592 +2014-07-25 13:00:00,4212.383177570094 +2014-07-25 14:00:00,4248.968847352025 +2014-07-25 15:00:00,4433.7009345794395 +2014-07-25 16:00:00,4529.395638629284 +2014-07-25 17:00:00,4571.735202492212 +2014-07-25 18:00:00,4517.317757009346 +2014-07-25 19:00:00,4337.676012461059 +2014-07-25 20:00:00,4075.638629283489 +2014-07-25 21:00:00,3903.323987538941 +2014-07-25 22:00:00,3583.6573208722743 +2014-07-25 23:00:00,2817.208722741433 +2014-07-26 00:00:00,2003.1028037383178 +2014-07-26 01:00:00,1597.9376947040498 +2014-07-26 02:00:00,1504.7165109034268 +2014-07-26 03:00:00,1423.6666666666667 +2014-07-26 04:00:00,1385.7165109034268 +2014-07-26 05:00:00,1449.7912772585669 +2014-07-26 06:00:00,1593.6479750778817 +2014-07-26 07:00:00,1763.0342679127725 +2014-07-26 08:00:00,1956.2242990654206 +2014-07-26 09:00:00,3039.931464174455 +2014-07-26 10:00:00,3806.685358255452 +2014-07-26 11:00:00,4171.3021806853585 +2014-07-26 12:00:00,4301.8753894081 +2014-07-26 13:00:00,4377.289719626168 +2014-07-26 14:00:00,4406.6386292834895 +2014-07-26 15:00:00,4491.0342679127725 +2014-07-26 16:00:00,4538.467289719626 +2014-07-26 17:00:00,4565.289719626168 +2014-07-26 18:00:00,4527.333333333333 +2014-07-26 19:00:00,4407.6355140186915 +2014-07-26 20:00:00,4219.01246105919 +2014-07-26 21:00:00,3959.0280373831774 +2014-07-26 22:00:00,3623.1744548286606 +2014-07-26 23:00:00,2676.7507788161993 +2014-07-27 00:00:00,1909.6760124610591 +2014-07-27 01:00:00,1574.1059190031153 +2014-07-27 02:00:00,1508.7352024922118 +2014-07-27 03:00:00,1451.8317757009345 +2014-07-27 04:00:00,1369.9003115264798 +2014-07-27 05:00:00,1436.0280373831777 +2014-07-27 06:00:00,1577.6355140186915 +2014-07-27 07:00:00,1713.4423676012461 +2014-07-27 08:00:00,1921.454828660436 +2014-07-27 09:00:00,2983.6355140186915 +2014-07-27 10:00:00,3710.5171339563863 +2014-07-27 11:00:00,4021.3707165109035 +2014-07-27 12:00:00,4161.919003115265 +2014-07-27 13:00:00,4134.345794392523 +2014-07-27 14:00:00,4129.071651090343 +2014-07-27 15:00:00,4245.560747663551 +2014-07-27 16:00:00,4269.97507788162 +2014-07-27 17:00:00,4232.3021806853585 +2014-07-27 18:00:00,4171.01246105919 +2014-07-27 19:00:00,4104.454828660436 +2014-07-27 20:00:00,4005.8847352024923 +2014-07-27 21:00:00,3811.330218068536 +2014-07-27 22:00:00,3283.940809968847 +2014-07-27 23:00:00,2415.638629283489 +2014-07-28 00:00:00,1766.8317757009345 +2014-07-28 01:00:00,1472.8380062305296 +2014-07-28 02:00:00,1428.6292834890967 +2014-07-28 03:00:00,1396.8878504672898 +2014-07-28 04:00:00,1368.747663551402 +2014-07-28 05:00:00,1443.766355140187 +2014-07-28 06:00:00,1606.2554517133956 +2014-07-28 07:00:00,1761.4392523364486 +2014-07-28 08:00:00,1943.9750778816199 +2014-07-28 09:00:00,3047.803738317757 +2014-07-28 10:00:00,3707.9221183800623 +2014-07-28 11:00:00,3948.2429906542056 +2014-07-28 12:00:00,4054.744548286604 +2014-07-28 13:00:00,4224.0965732087225 +2014-07-28 14:00:00,4192.750778816199 +2014-07-28 15:00:00,4318.828660436137 +2014-07-28 16:00:00,4350.570093457944 +2014-07-28 17:00:00,4356.647975077882 +2014-07-28 18:00:00,4353.722741433022 +2014-07-28 19:00:00,4178.841121495327 +2014-07-28 20:00:00,3997.613707165109 +2014-07-28 21:00:00,3973.2616822429904 +2014-07-28 22:00:00,3492.1744548286606 +2014-07-28 23:00:00,2762.286604361371 +2014-07-29 00:00:00,1976.6292834890967 +2014-07-29 01:00:00,1531.853582554517 +2014-07-29 02:00:00,1482.7725856697818 +2014-07-29 03:00:00,1460.1993769470405 +2014-07-29 04:00:00,1437.7320872274142 +2014-07-29 05:00:00,1507.6261682242991 +2014-07-29 06:00:00,1657.9283489096574 +2014-07-29 07:00:00,1817.6915887850466 +2014-07-29 08:00:00,1984.7445482866044 +2014-07-29 09:00:00,2978.3426791277257 +2014-07-29 10:00:00,3767.3489096573207 +2014-07-29 11:00:00,4051.06230529595 +2014-07-29 12:00:00,4188.395638629284 +2014-07-29 13:00:00,4289.423676012461 +2014-07-29 14:00:00,4264.922118380062 +2014-07-29 15:00:00,4431.492211838006 +2014-07-29 16:00:00,4478.489096573208 +2014-07-29 17:00:00,4554.112149532711 +2014-07-29 18:00:00,4482.105919003116 +2014-07-29 19:00:00,4359.78816199377 +2014-07-29 20:00:00,4121.267912772586 +2014-07-29 21:00:00,3990.5295950155764 +2014-07-29 22:00:00,3609.785046728972 +2014-07-29 23:00:00,2773.059190031153 +2014-07-30 00:00:00,1846.576323987539 +2014-07-30 01:00:00,1539.271028037383 +2014-07-30 02:00:00,1493.7258566978194 +2014-07-30 03:00:00,1459.7943925233644 +2014-07-30 04:00:00,1403.5794392523364 +2014-07-30 05:00:00,1473.588785046729 +2014-07-30 06:00:00,1623.595015576324 +2014-07-30 07:00:00,1798.7320872274142 +2014-07-30 08:00:00,1978.785046728972 +2014-07-30 09:00:00,3005.551401869159 +2014-07-30 10:00:00,3620.479750778816 +2014-07-30 11:00:00,3979.6604361370714 +2014-07-30 12:00:00,4201.339563862928 +2014-07-30 13:00:00,4232.557632398754 +2014-07-30 14:00:00,4295.813084112149 +2014-07-30 15:00:00,4362.915887850468 +2014-07-30 16:00:00,4411.647975077882 +2014-07-30 17:00:00,4441.492211838006 +2014-07-30 18:00:00,4333.084112149532 +2014-07-30 19:00:00,4196.981308411215 +2014-07-30 20:00:00,4049.0778816199377 +2014-07-30 21:00:00,3956.1619937694704 +2014-07-30 22:00:00,3570.766355140187 +2014-07-30 23:00:00,2596.0186915887853 +2014-07-31 00:00:00,1829.588785046729 +2014-07-31 01:00:00,1528.031152647975 +2014-07-31 02:00:00,1479.0716510903426 +2014-07-31 03:00:00,1429.2772585669782 +2014-07-31 04:00:00,1401.398753894081 +2014-07-31 05:00:00,1471.7694704049845 +2014-07-31 06:00:00,1617.367601246106 +2014-07-31 07:00:00,1805.7694704049845 +2014-07-31 08:00:00,2008.4890965732088 +2014-07-31 09:00:00,2775.7881619937693 +2014-07-31 10:00:00,3603.7943925233644 +2014-07-31 11:00:00,3842.2242990654204 +2014-07-31 12:00:00,3926.778816199377 +2014-07-31 13:00:00,4016.526479750779 +2014-07-31 14:00:00,4133.738317757009 +2014-07-31 15:00:00,4162.822429906542 +2014-07-31 16:00:00,4179.352024922118 +2014-07-31 17:00:00,4162.95015576324 +2014-07-31 18:00:00,4166.376947040499 +2014-07-31 19:00:00,3989.1993769470405 +2014-07-31 20:00:00,3818.7040498442366 +2014-07-31 21:00:00,3757.7819314641742 +2014-07-31 22:00:00,3383.96261682243 +2014-07-31 23:00:00,2477.663551401869 +2014-08-01 00:00:00,1820.7912772585669 +2014-08-01 01:00:00,1511.8317757009345 +2014-08-01 02:00:00,1465.0 +2014-08-01 03:00:00,1425.0872274143303 +2014-08-01 04:00:00,1402.5856697819315 +2014-08-01 05:00:00,1468.8099688473521 +2014-08-01 06:00:00,1650.0249221183801 +2014-08-01 07:00:00,1822.4579439252336 +2014-08-01 08:00:00,2015.1370716510903 +2014-08-01 09:00:00,2904.06230529595 +2014-08-01 10:00:00,3535.676012461059 +2014-08-01 11:00:00,3734.1152647975077 +2014-08-01 12:00:00,3949.127725856698 +2014-08-01 13:00:00,4068.956386292835 +2014-08-01 14:00:00,4236.028037383177 +2014-08-01 15:00:00,4209.728971962617 +2014-08-01 16:00:00,4359.358255451713 +2014-08-01 17:00:00,4159.252336448598 +2014-08-01 18:00:00,4152.778816199377 +2014-08-01 19:00:00,3962.88785046729 +2014-08-01 20:00:00,3772.4922118380064 +2014-08-01 21:00:00,3719.760124610592 +2014-08-01 22:00:00,3409.302180685358 +2014-08-01 23:00:00,2752.423676012461 +2014-08-02 00:00:00,2057.878504672897 +2014-08-02 01:00:00,1707.2585669781931 +2014-08-02 02:00:00,1493.411214953271 +2014-08-02 03:00:00,1403.1183800623053 +2014-08-02 04:00:00,1368.981308411215 +2014-08-02 05:00:00,1435.8130841121495 +2014-08-02 06:00:00,1612.6542056074766 +2014-08-02 07:00:00,1752.3894080996886 +2014-08-02 08:00:00,1941.9158878504672 +2014-08-02 09:00:00,2680.7102803738317 +2014-08-02 10:00:00,3385.0841121495328 +2014-08-02 11:00:00,3869.0872274143303 +2014-08-02 12:00:00,3962.772585669782 +2014-08-02 13:00:00,3964.691588785047 +2014-08-02 14:00:00,4041.323987538941 +2014-08-02 15:00:00,4126.059190031153 +2014-08-02 16:00:00,4246.915887850468 +2014-08-02 17:00:00,4211.236760124611 +2014-08-02 18:00:00,4151.507788161994 +2014-08-02 19:00:00,4048.947040498442 +2014-08-02 20:00:00,3965.2242990654204 +2014-08-02 21:00:00,3796.88785046729 +2014-08-02 22:00:00,3502.4984423676015 +2014-08-02 23:00:00,2785.6199376947043 +2014-08-03 00:00:00,1913.8006230529595 +2014-08-03 01:00:00,1579.0872274143303 +2014-08-03 02:00:00,1520.2616822429907 +2014-08-03 03:00:00,1436.6853582554518 +2014-08-03 04:00:00,1348.03738317757 +2014-08-03 05:00:00,1398.1619937694704 +2014-08-03 06:00:00,1553.3052959501558 +2014-08-03 07:00:00,1694.6635514018692 +2014-08-03 08:00:00,1888.3738317757009 +2014-08-03 09:00:00,2892.190031152648 +2014-08-03 10:00:00,3650.753894080997 +2014-08-03 11:00:00,3931.8130841121497 +2014-08-03 12:00:00,3958.1557632398753 +2014-08-03 13:00:00,4044.0716510903426 +2014-08-03 14:00:00,4109.887850467289 +2014-08-03 15:00:00,4155.582554517134 +2014-08-03 16:00:00,4207.78816199377 +2014-08-03 17:00:00,4195.305295950156 +2014-08-03 18:00:00,4161.417445482866 +2014-08-03 19:00:00,3939.3520249221183 +2014-08-03 20:00:00,3770.5233644859813 +2014-08-03 21:00:00,3620.2585669781934 +2014-08-03 22:00:00,3314.5825545171338 +2014-08-03 23:00:00,2558.1806853582552 +2014-08-04 00:00:00,1707.0778816199377 +2014-08-04 01:00:00,1458.9844236760125 +2014-08-04 02:00:00,1412.6791277258567 +2014-08-04 03:00:00,1367.5919003115264 +2014-08-04 04:00:00,1352.361370716511 +2014-08-04 05:00:00,1418.2897196261683 +2014-08-04 06:00:00,1539.1401869158879 +2014-08-04 07:00:00,1658.1090342679129 +2014-08-04 08:00:00,1847.8286604361372 +2014-08-04 09:00:00,2728.4922118380064 +2014-08-04 10:00:00,3275.0560747663553 +2014-08-04 11:00:00,3583.791277258567 +2014-08-04 12:00:00,3860.909657320872 +2014-08-04 13:00:00,3993.4080996884736 +2014-08-04 14:00:00,4218.2305295950155 +2014-08-04 15:00:00,4276.1682242990655 +2014-08-04 16:00:00,4454.794392523365 +2014-08-04 17:00:00,4260.059190031153 +2014-08-04 18:00:00,4235.199376947041 +2014-08-04 19:00:00,4012.8255451713394 +2014-08-04 20:00:00,3857.797507788162 +2014-08-04 21:00:00,3652.0778816199377 +2014-08-04 22:00:00,3342.3894080996884 +2014-08-04 23:00:00,2452.6573208722743 +2014-08-05 00:00:00,1775.214953271028 +2014-08-05 01:00:00,1523.834890965732 +2014-08-05 02:00:00,1469.0093457943926 +2014-08-05 03:00:00,1428.834890965732 +2014-08-05 04:00:00,1396.436137071651 +2014-08-05 05:00:00,1453.0809968847352 +2014-08-05 06:00:00,1590.7507788161993 +2014-08-05 07:00:00,1773.8193146417445 +2014-08-05 08:00:00,1966.8130841121495 +2014-08-05 09:00:00,2791.5794392523367 +2014-08-05 10:00:00,3515.8380062305296 +2014-08-05 11:00:00,3850.8535825545173 +2014-08-05 12:00:00,4168.084112149532 +2014-08-05 13:00:00,4354.457943925234 +2014-08-05 14:00:00,4463.274143302181 +2014-08-05 15:00:00,4628.174454828661 +2014-08-05 16:00:00,4711.816199376947 +2014-08-05 17:00:00,4669.535825545171 +2014-08-05 18:00:00,4605.813084112149 +2014-08-05 19:00:00,4440.006230529595 +2014-08-05 20:00:00,4242.526479750779 +2014-08-05 21:00:00,4032.551401869159 +2014-08-05 22:00:00,3593.2585669781934 +2014-08-05 23:00:00,2601.691588785047 +2014-08-06 00:00:00,1795.146417445483 +2014-08-06 01:00:00,1493.4267912772586 +2014-08-06 02:00:00,1463.993769470405 +2014-08-06 03:00:00,1407.417445482866 +2014-08-06 04:00:00,1371.8380062305296 +2014-08-06 05:00:00,1445.0996884735202 +2014-08-06 06:00:00,1612.778816199377 +2014-08-06 07:00:00,1779.8629283489097 +2014-08-06 08:00:00,1969.8629283489097 +2014-08-06 09:00:00,2708.557632398754 +2014-08-06 10:00:00,3746.3769470404986 +2014-08-06 11:00:00,4010.473520249221 +2014-08-06 12:00:00,4288.98753894081 +2014-08-06 13:00:00,4496.538940809969 +2014-08-06 14:00:00,4626.383177570094 +2014-08-06 15:00:00,4695.545171339564 +2014-08-06 16:00:00,4657.21183800623 +2014-08-06 17:00:00,4637.919003115265 +2014-08-06 18:00:00,4549.922118380062 +2014-08-06 19:00:00,4402.613707165109 +2014-08-06 20:00:00,4169.0373831775705 +2014-08-06 21:00:00,3997.2056074766356 +2014-08-06 22:00:00,3487.2834890965732 +2014-08-06 23:00:00,2746.8380062305296 +2014-08-07 00:00:00,1847.1526479750778 +2014-08-07 01:00:00,1524.0467289719627 +2014-08-07 02:00:00,1462.9563862928348 +2014-08-07 03:00:00,1407.0342679127725 +2014-08-07 04:00:00,1393.3333333333333 +2014-08-07 05:00:00,1479.8847352024923 +2014-08-07 06:00:00,1638.9127725856697 +2014-08-07 07:00:00,1841.0685358255453 +2014-08-07 08:00:00,2012.8068535825546 +2014-08-07 09:00:00,2790.6666666666665 +2014-08-07 10:00:00,3861.3115264797507 +2014-08-07 11:00:00,4125.953271028037 +2014-08-07 12:00:00,4439.093457943925 +2014-08-07 13:00:00,4598.267912772586 +2014-08-07 14:00:00,4762.551401869159 +2014-08-07 15:00:00,4806.1651090342675 +2014-08-07 16:00:00,4869.520249221184 +2014-08-07 17:00:00,4869.295950155763 +2014-08-07 18:00:00,4785.031152647975 +2014-08-07 19:00:00,4580.909657320873 +2014-08-07 20:00:00,4342.445482866044 +2014-08-07 21:00:00,4221.327102803738 +2014-08-07 22:00:00,3719.214953271028 +2014-08-07 23:00:00,2771.4828660436137 +2014-08-08 00:00:00,1835.127725856698 +2014-08-08 01:00:00,1559.4579439252336 +2014-08-08 02:00:00,1520.4984423676012 +2014-08-08 03:00:00,1456.638629283489 +2014-08-08 04:00:00,1442.728971962617 +2014-08-08 05:00:00,1526.1152647975077 +2014-08-08 06:00:00,1684.1869158878505 +2014-08-08 07:00:00,1878.6635514018692 +2014-08-08 08:00:00,2037.2616822429907 +2014-08-08 09:00:00,3097.894080996885 +2014-08-08 10:00:00,3860.2679127725855 +2014-08-08 11:00:00,4303.694704049844 +2014-08-08 12:00:00,4504.246105919003 +2014-08-08 13:00:00,4541.91277258567 +2014-08-08 14:00:00,4595.489096573208 +2014-08-08 15:00:00,4835.616822429906 +2014-08-08 16:00:00,4897.367601246106 +2014-08-08 17:00:00,4846.342679127726 +2014-08-08 18:00:00,4703.373831775701 +2014-08-08 19:00:00,4593.0342679127725 +2014-08-08 20:00:00,4339.336448598131 +2014-08-08 21:00:00,4200.86292834891 +2014-08-08 22:00:00,3710.92523364486 +2014-08-08 23:00:00,2879.6791277258567 +2014-08-09 00:00:00,1901.3956386292834 +2014-08-09 01:00:00,1602.651090342679 +2014-08-09 02:00:00,1526.822429906542 +2014-08-09 03:00:00,1454.7133956386292 +2014-08-09 04:00:00,1418.7538940809968 +2014-08-09 05:00:00,1501.9408099688474 +2014-08-09 06:00:00,1670.423676012461 +2014-08-09 07:00:00,1799.632398753894 +2014-08-09 08:00:00,2015.2616822429907 +2014-08-09 09:00:00,3154.3426791277257 +2014-08-09 10:00:00,4030.722741433022 +2014-08-09 11:00:00,4376.5638629283485 +2014-08-09 12:00:00,4505.660436137072 +2014-08-09 13:00:00,4477.707165109035 +2014-08-09 14:00:00,4493.457943925234 +2014-08-09 15:00:00,4584.890965732087 +2014-08-09 16:00:00,4648.370716510904 +2014-08-09 17:00:00,4718.632398753894 +2014-08-09 18:00:00,4639.345794392523 +2014-08-09 19:00:00,4459.283489096573 +2014-08-09 20:00:00,4206.28660436137 +2014-08-09 21:00:00,4152.221183800623 +2014-08-09 22:00:00,3746.5981308411215 +2014-08-09 23:00:00,2790.1401869158876 +2014-08-10 00:00:00,1882.423676012461 +2014-08-10 01:00:00,1583.2554517133956 +2014-08-10 02:00:00,1516.7912772585669 +2014-08-10 03:00:00,1455.619937694704 +2014-08-10 04:00:00,1372.5856697819315 +2014-08-10 05:00:00,1432.127725856698 +2014-08-10 06:00:00,1605.6542056074766 +2014-08-10 07:00:00,1759.6760124610591 +2014-08-10 08:00:00,1940.367601246106 +2014-08-10 09:00:00,3076.1028037383176 +2014-08-10 10:00:00,3905.97507788162 +2014-08-10 11:00:00,4167.308411214954 +2014-08-10 12:00:00,4306.414330218068 +2014-08-10 13:00:00,4345.757009345794 +2014-08-10 14:00:00,4323.9003115264795 +2014-08-10 15:00:00,4334.92523364486 +2014-08-10 16:00:00,4370.757009345794 +2014-08-10 17:00:00,4497.14953271028 +2014-08-10 18:00:00,4443.283489096573 +2014-08-10 19:00:00,4324.971962616823 +2014-08-10 20:00:00,4213.601246105919 +2014-08-10 21:00:00,4003.404984423676 +2014-08-10 22:00:00,3601.663551401869 +2014-08-10 23:00:00,2764.538940809969 +2014-08-11 00:00:00,1889.6604361370717 +2014-08-11 01:00:00,1497.657320872274 +2014-08-11 02:00:00,1456.8660436137072 +2014-08-11 03:00:00,1416.2616822429907 +2014-08-11 04:00:00,1420.632398753894 +2014-08-11 05:00:00,1511.196261682243 +2014-08-11 06:00:00,1635.9096573208724 +2014-08-11 07:00:00,1790.0809968847352 +2014-08-11 08:00:00,1991.8878504672898 +2014-08-11 09:00:00,3078.6292834890965 +2014-08-11 10:00:00,3923.644859813084 +2014-08-11 11:00:00,4207.878504672897 +2014-08-11 12:00:00,4336.261682242991 +2014-08-11 13:00:00,4465.772585669782 +2014-08-11 14:00:00,4485.725856697819 +2014-08-11 15:00:00,4554.514018691589 +2014-08-11 16:00:00,4574.04984423676 +2014-08-11 17:00:00,4565.931464174455 +2014-08-11 18:00:00,4389.323987538941 +2014-08-11 19:00:00,4272.890965732087 +2014-08-11 20:00:00,3944.4267912772584 +2014-08-11 21:00:00,3826.9127725856697 +2014-08-11 22:00:00,3414.4174454828662 +2014-08-11 23:00:00,2618.8691588785045 +2014-08-12 00:00:00,1799.7538940809968 +2014-08-12 01:00:00,1519.2554517133956 +2014-08-12 02:00:00,1469.0404984423676 +2014-08-12 03:00:00,1424.3738317757009 +2014-08-12 04:00:00,1403.0903426791276 +2014-08-12 05:00:00,1459.9065420560748 +2014-08-12 06:00:00,1620.3052959501558 +2014-08-12 07:00:00,1785.146417445483 +2014-08-12 08:00:00,1988.436137071651 +2014-08-12 09:00:00,3070.5825545171338 +2014-08-12 10:00:00,3628.6604361370714 +2014-08-12 11:00:00,4114.651090342679 +2014-08-12 12:00:00,4301.781931464175 +2014-08-12 13:00:00,4468.271028037383 +2014-08-12 14:00:00,4614.781931464175 +2014-08-12 15:00:00,4692.981308411215 +2014-08-12 16:00:00,4842.669781931464 +2014-08-12 17:00:00,4763.133956386293 +2014-08-12 18:00:00,4642.109034267913 +2014-08-12 19:00:00,4457.526479750779 +2014-08-12 20:00:00,4305.339563862928 +2014-08-12 21:00:00,4096.214953271028 +2014-08-12 22:00:00,3675.5140186915887 +2014-08-12 23:00:00,2765.3831775700933 +2014-08-13 00:00:00,1808.4299065420562 +2014-08-13 01:00:00,1498.778816199377 +2014-08-13 02:00:00,1456.785046728972 +2014-08-13 03:00:00,1383.2242990654206 +2014-08-13 04:00:00,1352.1900311526479 +2014-08-13 05:00:00,1430.3831775700935 +2014-08-13 06:00:00,1600.8317757009345 +2014-08-13 07:00:00,1754.9563862928348 +2014-08-13 08:00:00,1935.8442367601247 +2014-08-13 09:00:00,3021.336448598131 +2014-08-13 10:00:00,3795.7414330218066 +2014-08-13 11:00:00,4028.1401869158876 +2014-08-13 12:00:00,4071.504672897196 +2014-08-13 13:00:00,4102.080996884735 +2014-08-13 14:00:00,4203.383177570094 +2014-08-13 15:00:00,4359.264797507788 +2014-08-13 16:00:00,4369.056074766355 +2014-08-13 17:00:00,4360.08722741433 +2014-08-13 18:00:00,4290.015576323987 +2014-08-13 19:00:00,4105.380062305296 +2014-08-13 20:00:00,3872.052959501558 +2014-08-13 21:00:00,3749.052959501558 +2014-08-13 22:00:00,3385.03738317757 +2014-08-13 23:00:00,2645.9719626168226 +2014-08-14 00:00:00,1717.6230529595016 +2014-08-14 01:00:00,1436.4953271028037 +2014-08-14 02:00:00,1375.5732087227414 +2014-08-14 03:00:00,1325.1090342679129 +2014-08-14 04:00:00,1304.0965732087227 +2014-08-14 05:00:00,1371.4454828660437 +2014-08-14 06:00:00,1533.651090342679 +2014-08-14 07:00:00,1694.853582554517 +2014-08-14 08:00:00,1895.4454828660437 +2014-08-14 09:00:00,2782.834890965732 +2014-08-14 10:00:00,3435.5825545171338 +2014-08-14 11:00:00,3869.411214953271 +2014-08-14 12:00:00,4023.8193146417448 +2014-08-14 13:00:00,4197.0965732087225 +2014-08-14 14:00:00,4384.813084112149 +2014-08-14 15:00:00,4473.557632398754 +2014-08-14 16:00:00,4529.778816199377 +2014-08-14 17:00:00,4516.669781931464 +2014-08-14 18:00:00,4386.473520249221 +2014-08-14 19:00:00,4264.92523364486 +2014-08-14 20:00:00,3965.330218068536 +2014-08-14 21:00:00,3860.894080996885 +2014-08-14 22:00:00,3439.0093457943926 +2014-08-14 23:00:00,2647.2180685358258 +2014-08-15 00:00:00,1800.3956386292834 +2014-08-15 01:00:00,1442.4267912772586 +2014-08-15 02:00:00,1398.7102803738317 +2014-08-15 03:00:00,1341.6479750778817 +2014-08-15 04:00:00,1309.9376947040498 +2014-08-15 05:00:00,1389.0996884735202 +2014-08-15 06:00:00,1560.6915887850466 +2014-08-15 07:00:00,1696.9532710280373 +2014-08-15 08:00:00,1901.9595015576324 +2014-08-15 09:00:00,2883.5607476635514 +2014-08-15 10:00:00,3606.0498442367602 +2014-08-15 11:00:00,4033.841121495327 +2014-08-15 12:00:00,4322.654205607477 +2014-08-15 13:00:00,4448.728971962617 +2014-08-15 14:00:00,4315.520249221184 +2014-08-15 15:00:00,4415.922118380062 +2014-08-15 16:00:00,4504.598130841122 +2014-08-15 17:00:00,4556.595015576324 +2014-08-15 18:00:00,4616.579439252337 +2014-08-15 19:00:00,4447.968847352025 +2014-08-15 20:00:00,4217.2305295950155 +2014-08-15 21:00:00,3977.8598130841124 +2014-08-15 22:00:00,3585.3956386292834 +2014-08-15 23:00:00,2768.6355140186915 +2014-08-16 00:00:00,1794.454828660436 +2014-08-16 01:00:00,1528.5794392523364 +2014-08-16 02:00:00,1446.7881619937696 +2014-08-16 03:00:00,1351.5607476635514 +2014-08-16 04:00:00,1299.2928348909657 +2014-08-16 05:00:00,1378.127725856698 +2014-08-16 06:00:00,1547.9345794392523 +2014-08-16 07:00:00,1679.2959501557632 +2014-08-16 08:00:00,1881.2429906542056 +2014-08-16 09:00:00,2925.1869158878503 +2014-08-16 10:00:00,3728.8816199376947 +2014-08-16 11:00:00,4100.570093457944 +2014-08-16 12:00:00,4268.171339563863 +2014-08-16 13:00:00,4234.993769470405 +2014-08-16 14:00:00,4355.588785046729 +2014-08-16 15:00:00,4428.866043613707 +2014-08-16 16:00:00,4487.492211838006 +2014-08-16 17:00:00,4529.401869158878 +2014-08-16 18:00:00,4495.585669781932 +2014-08-16 19:00:00,4352.473520249221 +2014-08-16 20:00:00,4060.3271028037384 +2014-08-16 21:00:00,3840.6417445482866 +2014-08-16 22:00:00,3530.1308411214955 +2014-08-16 23:00:00,2591.3208722741433 +2014-08-17 00:00:00,1824.582554517134 +2014-08-17 01:00:00,1527.8411214953271 +2014-08-17 02:00:00,1481.9844236760125 +2014-08-17 03:00:00,1409.8940809968847 +2014-08-17 04:00:00,1318.760124610592 +2014-08-17 05:00:00,1373.056074766355 +2014-08-17 06:00:00,1560.766355140187 +2014-08-17 07:00:00,1693.5046728971963 +2014-08-17 08:00:00,1869.3831775700935 +2014-08-17 09:00:00,2866.07476635514 +2014-08-17 10:00:00,4113.031152647975 +2014-08-17 11:00:00,4342.404984423676 +2014-08-17 12:00:00,4558.473520249221 +2014-08-17 13:00:00,4554.28660436137 +2014-08-17 14:00:00,4554.22429906542 +2014-08-17 15:00:00,4592.380062305296 +2014-08-17 16:00:00,4621.0342679127725 +2014-08-17 17:00:00,4615.931464174455 +2014-08-17 18:00:00,4527.943925233645 +2014-08-17 19:00:00,4402.722741433022 +2014-08-17 20:00:00,4256.336448598131 +2014-08-17 21:00:00,4162.86292834891 +2014-08-17 22:00:00,3626.5140186915887 +2014-08-17 23:00:00,2548.3489096573207 +2014-08-18 00:00:00,1755.7445482866044 +2014-08-18 01:00:00,1480.632398753894 +2014-08-18 02:00:00,1444.2461059190032 +2014-08-18 03:00:00,1424.8940809968847 +2014-08-18 04:00:00,1394.386292834891 +2014-08-18 05:00:00,1460.3738317757009 +2014-08-18 06:00:00,1593.3457943925234 +2014-08-18 07:00:00,1744.6043613707166 +2014-08-18 08:00:00,1946.7009345794393 +2014-08-18 09:00:00,2959.0186915887853 +2014-08-18 10:00:00,3792.5233644859813 +2014-08-18 11:00:00,4228.080996884735 +2014-08-18 12:00:00,4429.348909657321 +2014-08-18 13:00:00,4497.190031152648 +2014-08-18 14:00:00,4560.747663551402 +2014-08-18 15:00:00,4555.9657320872275 +2014-08-18 16:00:00,4619.741433021807 +2014-08-18 17:00:00,4612.0 +2014-08-18 18:00:00,4584.934579439252 +2014-08-18 19:00:00,4307.071651090343 +2014-08-18 20:00:00,4005.3769470404986 +2014-08-18 21:00:00,3870.6479750778817 +2014-08-18 22:00:00,3426.6884735202493 +2014-08-18 23:00:00,2729.93769470405 +2014-08-19 00:00:00,1914.9781931464174 +2014-08-19 01:00:00,1552.8504672897195 +2014-08-19 02:00:00,1479.146417445483 +2014-08-19 03:00:00,1417.7414330218069 +2014-08-19 04:00:00,1397.7165109034268 +2014-08-19 05:00:00,1460.5327102803737 +2014-08-19 06:00:00,1613.9844236760125 +2014-08-19 07:00:00,1767.3302180685357 +2014-08-19 08:00:00,1941.8816199376947 +2014-08-19 09:00:00,2859.3769470404986 +2014-08-19 10:00:00,3493.753894080997 +2014-08-19 11:00:00,3749.722741433022 +2014-08-19 12:00:00,3990.8598130841124 +2014-08-19 13:00:00,4112.9003115264795 +2014-08-19 14:00:00,4166.028037383177 +2014-08-19 15:00:00,4180.376947040499 +2014-08-19 16:00:00,4584.429906542056 +2014-08-19 17:00:00,4343.669781931464 +2014-08-19 18:00:00,4199.588785046729 +2014-08-19 19:00:00,4016.669781931464 +2014-08-19 20:00:00,3839.7694704049845 +2014-08-19 21:00:00,3723.691588785047 +2014-08-19 22:00:00,3324.551401869159 +2014-08-19 23:00:00,2529.2242990654204 +2014-08-20 00:00:00,1752.4610591900312 +2014-08-20 01:00:00,1450.797507788162 +2014-08-20 02:00:00,1411.8006230529595 +2014-08-20 03:00:00,1370.9345794392523 +2014-08-20 04:00:00,1360.657320872274 +2014-08-20 05:00:00,1437.221183800623 +2014-08-20 06:00:00,1569.3738317757009 +2014-08-20 07:00:00,1721.651090342679 +2014-08-20 08:00:00,1919.380062305296 +2014-08-20 09:00:00,2876.8006230529595 +2014-08-20 10:00:00,3542.6105919003116 +2014-08-20 11:00:00,3859.753894080997 +2014-08-20 12:00:00,3974.613707165109 +2014-08-20 13:00:00,4032.5981308411215 +2014-08-20 14:00:00,4110.2305295950155 +2014-08-20 15:00:00,4182.93769470405 +2014-08-20 16:00:00,4238.803738317757 +2014-08-20 17:00:00,4285.582554517134 +2014-08-20 18:00:00,4240.9003115264795 +2014-08-20 19:00:00,4099.859813084112 +2014-08-20 20:00:00,3966.626168224299 +2014-08-20 21:00:00,3725.127725856698 +2014-08-20 22:00:00,3243.080996884735 +2014-08-20 23:00:00,2397.2585669781934 +2014-08-21 00:00:00,1736.526479750779 +2014-08-21 01:00:00,1442.2429906542056 +2014-08-21 02:00:00,1409.2367601246106 +2014-08-21 03:00:00,1365.056074766355 +2014-08-21 04:00:00,1344.423676012461 +2014-08-21 05:00:00,1430.0155763239875 +2014-08-21 06:00:00,1597.785046728972 +2014-08-21 07:00:00,1716.6448598130842 +2014-08-21 08:00:00,1907.1339563862928 +2014-08-21 09:00:00,2771.7165109034268 +2014-08-21 10:00:00,3529.2803738317757 +2014-08-21 11:00:00,3884.06230529595 +2014-08-21 12:00:00,4107.289719626168 +2014-08-21 13:00:00,4160.112149532711 +2014-08-21 14:00:00,4236.971962616823 +2014-08-21 15:00:00,4298.682242990654 +2014-08-21 16:00:00,4319.931464174455 +2014-08-21 17:00:00,4332.841121495327 +2014-08-21 18:00:00,4215.990654205608 +2014-08-21 19:00:00,3996.398753894081 +2014-08-21 20:00:00,3822.931464174455 +2014-08-21 21:00:00,3715.01246105919 +2014-08-21 22:00:00,3359.1806853582552 +2014-08-21 23:00:00,2462.685358255452 +2014-08-22 00:00:00,1764.0342679127725 +2014-08-22 01:00:00,1472.386292834891 +2014-08-22 02:00:00,1411.9719626168223 +2014-08-22 03:00:00,1372.5202492211838 +2014-08-22 04:00:00,1357.3208722741433 +2014-08-22 05:00:00,1448.3551401869158 +2014-08-22 06:00:00,1643.239875389408 +2014-08-22 07:00:00,1751.0280373831777 +2014-08-22 08:00:00,1940.5233644859813 +2014-08-22 09:00:00,2886.11214953271 +2014-08-22 10:00:00,3483.3582554517134 +2014-08-22 11:00:00,3808.080996884735 +2014-08-22 12:00:00,4081.202492211838 +2014-08-22 13:00:00,4120.330218068536 +2014-08-22 14:00:00,4173.280373831775 +2014-08-22 15:00:00,4330.604361370716 +2014-08-22 16:00:00,4294.305295950156 +2014-08-22 17:00:00,4337.535825545171 +2014-08-22 18:00:00,4206.778816199377 +2014-08-22 19:00:00,4030.1495327102803 +2014-08-22 20:00:00,3823.165109034268 +2014-08-22 21:00:00,3709.816199376947 +2014-08-22 22:00:00,3394.6604361370714 +2014-08-22 23:00:00,2622.7570093457944 +2014-08-23 00:00:00,1805.613707165109 +2014-08-23 01:00:00,1525.778816199377 +2014-08-23 02:00:00,1437.2959501557632 +2014-08-23 03:00:00,1355.5171339563863 +2014-08-23 04:00:00,1316.3115264797507 +2014-08-23 05:00:00,1412.0218068535826 +2014-08-23 06:00:00,1563.9127725856697 +2014-08-23 07:00:00,1714.778816199377 +2014-08-23 08:00:00,1880.3084112149534 +2014-08-23 09:00:00,2848.6199376947043 +2014-08-23 10:00:00,3510.0841121495328 +2014-08-23 11:00:00,3772.5825545171338 +2014-08-23 12:00:00,4072.398753894081 +2014-08-23 13:00:00,4125.97507788162 +2014-08-23 14:00:00,4264.348909657321 +2014-08-23 15:00:00,4397.485981308411 +2014-08-23 16:00:00,4428.956386292835 +2014-08-23 17:00:00,4381.180685358256 +2014-08-23 18:00:00,4307.78816199377 +2014-08-23 19:00:00,4018.595015576324 +2014-08-23 20:00:00,3830.1495327102803 +2014-08-23 21:00:00,3676.227414330218 +2014-08-23 22:00:00,3307.3426791277257 +2014-08-23 23:00:00,2597.866043613707 +2014-08-24 00:00:00,1787.760124610592 +2014-08-24 01:00:00,1497.7538940809968 +2014-08-24 02:00:00,1446.411214953271 +2014-08-24 03:00:00,1383.4454828660437 +2014-08-24 04:00:00,1288.5171339563863 +2014-08-24 05:00:00,1366.9158878504672 +2014-08-24 06:00:00,1533.4672897196263 +2014-08-24 07:00:00,1680.3831775700935 +2014-08-24 08:00:00,1850.4922118380061 +2014-08-24 09:00:00,2786.467289719626 +2014-08-24 10:00:00,3545.2367601246106 +2014-08-24 11:00:00,3888.2741433021806 +2014-08-24 12:00:00,4123.85046728972 +2014-08-24 13:00:00,4026.1028037383176 +2014-08-24 14:00:00,4085.2180685358258 +2014-08-24 15:00:00,4215.052959501558 +2014-08-24 16:00:00,4178.021806853582 +2014-08-24 17:00:00,4256.267912772586 +2014-08-24 18:00:00,4162.056074766355 +2014-08-24 19:00:00,4053.4174454828662 +2014-08-24 20:00:00,3820.214953271028 +2014-08-24 21:00:00,3686.2741433021806 +2014-08-24 22:00:00,3094.5482866043612 +2014-08-24 23:00:00,2333.7320872274145 +2014-08-25 00:00:00,1698.9252336448599 +2014-08-25 01:00:00,1412.8473520249222 +2014-08-25 02:00:00,1357.8598130841121 +2014-08-25 03:00:00,1342.6791277258567 +2014-08-25 04:00:00,1314.7352024922118 +2014-08-25 05:00:00,1395.2461059190032 +2014-08-25 06:00:00,1573.3239875389409 +2014-08-25 07:00:00,1692.6853582554518 +2014-08-25 08:00:00,1861.252336448598 +2014-08-25 09:00:00,2925.8504672897197 +2014-08-25 10:00:00,3621.3582554517134 +2014-08-25 11:00:00,3985.386292834891 +2014-08-25 12:00:00,4162.2305295950155 +2014-08-25 13:00:00,4213.890965732087 +2014-08-25 14:00:00,4252.825545171339 +2014-08-25 15:00:00,4305.414330218068 +2014-08-25 16:00:00,4422.800623052959 +2014-08-25 17:00:00,4451.0373831775705 +2014-08-25 18:00:00,4567.052959501558 +2014-08-25 19:00:00,4434.526479750779 +2014-08-25 20:00:00,4133.669781931464 +2014-08-25 21:00:00,3956.308411214953 +2014-08-25 22:00:00,3521.031152647975 +2014-08-25 23:00:00,2802.5669781931465 +2014-08-26 00:00:00,1892.582554517134 +2014-08-26 01:00:00,1571.1183800623053 +2014-08-26 02:00:00,1497.7320872274142 +2014-08-26 03:00:00,1474.3208722741433 +2014-08-26 04:00:00,1484.5327102803737 +2014-08-26 05:00:00,1549.5981308411215 +2014-08-26 06:00:00,1685.1059190031153 +2014-08-26 07:00:00,1852.7102803738317 +2014-08-26 08:00:00,1992.7570093457944 +2014-08-26 09:00:00,3028.1744548286606 +2014-08-26 10:00:00,3988.5545171339563 +2014-08-26 11:00:00,4375.077881619938 +2014-08-26 12:00:00,4559.750778816199 +2014-08-26 13:00:00,4674.389408099689 +2014-08-26 14:00:00,4730.090342679127 +2014-08-26 15:00:00,4816.398753894081 +2014-08-26 16:00:00,4872.654205607477 +2014-08-26 17:00:00,4990.971962616823 +2014-08-26 18:00:00,4927.140186915888 +2014-08-26 19:00:00,4705.411214953271 +2014-08-26 20:00:00,4491.295950155763 +2014-08-26 21:00:00,4331.13707165109 +2014-08-26 22:00:00,3810.791277258567 +2014-08-26 23:00:00,2865.7320872274145 +2014-08-27 00:00:00,1913.6292834890967 +2014-08-27 01:00:00,1526.8629283489097 +2014-08-27 02:00:00,1480.8940809968847 +2014-08-27 03:00:00,1428.2118380062304 +2014-08-27 04:00:00,1394.380062305296 +2014-08-27 05:00:00,1493.3052959501558 +2014-08-27 06:00:00,1645.4330218068535 +2014-08-27 07:00:00,1810.8068535825546 +2014-08-27 08:00:00,1976.1433021806854 +2014-08-27 09:00:00,3061.866043613707 +2014-08-27 10:00:00,4029.448598130841 +2014-08-27 11:00:00,4418.651090342679 +2014-08-27 12:00:00,4706.7009345794395 +2014-08-27 13:00:00,4786.576323987539 +2014-08-27 14:00:00,4856.884735202492 +2014-08-27 15:00:00,4969.819314641744 +2014-08-27 16:00:00,4905.535825545171 +2014-08-27 17:00:00,4869.28660436137 +2014-08-27 18:00:00,4865.0 +2014-08-27 19:00:00,4616.750778816199 +2014-08-27 20:00:00,4365.392523364486 +2014-08-27 21:00:00,4191.202492211838 +2014-08-27 22:00:00,3682.6947040498444 +2014-08-27 23:00:00,2675.6168224299067 +2014-08-28 00:00:00,1806.7165109034268 +2014-08-28 01:00:00,1502.7570093457944 +2014-08-28 02:00:00,1466.006230529595 +2014-08-28 03:00:00,1429.1214953271028 +2014-08-28 04:00:00,1397.386292834891 +2014-08-28 05:00:00,1495.3239875389409 +2014-08-28 06:00:00,1722.8286604361372 +2014-08-28 07:00:00,1817.196261682243 +2014-08-28 08:00:00,1976.3831775700935 +2014-08-28 09:00:00,3021.1183800623053 +2014-08-28 10:00:00,3923.0560747663553 +2014-08-28 11:00:00,4273.0 +2014-08-28 12:00:00,4473.115264797508 +2014-08-28 13:00:00,4573.305295950156 +2014-08-28 14:00:00,4573.355140186916 +2014-08-28 15:00:00,4648.4984423676015 +2014-08-28 16:00:00,4781.560747663551 +2014-08-28 17:00:00,4785.981308411215 +2014-08-28 18:00:00,4638.130841121495 +2014-08-28 19:00:00,4308.676012461059 +2014-08-28 20:00:00,4115.6978193146415 +2014-08-28 21:00:00,3934.697819314642 +2014-08-28 22:00:00,3494.308411214953 +2014-08-28 23:00:00,2503.2834890965732 +2014-08-29 00:00:00,1780.3956386292834 +2014-08-29 01:00:00,1490.7943925233644 +2014-08-29 02:00:00,1437.2990654205607 +2014-08-29 03:00:00,1387.8909657320871 +2014-08-29 04:00:00,1349.1214953271028 +2014-08-29 05:00:00,1429.7881619937696 +2014-08-29 06:00:00,1605.146417445483 +2014-08-29 07:00:00,1755.2056074766356 +2014-08-29 08:00:00,1914.2772585669782 +2014-08-29 09:00:00,2888.744548286604 +2014-08-29 10:00:00,3549.766355140187 +2014-08-29 11:00:00,3982.03738317757 +2014-08-29 12:00:00,4218.214953271028 +2014-08-29 13:00:00,4326.109034267913 +2014-08-29 14:00:00,4444.647975077882 +2014-08-29 15:00:00,4433.517133956387 +2014-08-29 16:00:00,4490.545171339564 +2014-08-29 17:00:00,4610.0342679127725 +2014-08-29 18:00:00,4535.2990654205605 +2014-08-29 19:00:00,4342.464174454829 +2014-08-29 20:00:00,4092.98753894081 +2014-08-29 21:00:00,3929.308411214953 +2014-08-29 22:00:00,3410.183800623053 +2014-08-29 23:00:00,2558.9221183800623 +2014-08-30 00:00:00,1814.981308411215 +2014-08-30 01:00:00,1551.146417445483 +2014-08-30 02:00:00,1455.4704049844236 +2014-08-30 03:00:00,1389.1900311526479 +2014-08-30 04:00:00,1321.2741433021806 +2014-08-30 05:00:00,1424.7227414330218 +2014-08-30 06:00:00,1615.728971962617 +2014-08-30 07:00:00,1757.1433021806854 +2014-08-30 08:00:00,1919.221183800623 +2014-08-30 09:00:00,2915.828660436137 +2014-08-30 10:00:00,3617.323987538941 +2014-08-30 11:00:00,4047.5015576323985 +2014-08-30 12:00:00,4276.682242990654 +2014-08-30 13:00:00,4318.794392523365 +2014-08-30 14:00:00,4456.1682242990655 +2014-08-30 15:00:00,4494.342679127726 +2014-08-30 16:00:00,4553.015576323987 +2014-08-30 17:00:00,4433.529595015576 +2014-08-30 18:00:00,4383.660436137072 +2014-08-30 19:00:00,4175.345794392523 +2014-08-30 20:00:00,3911.828660436137 +2014-08-30 21:00:00,3742.576323987539 +2014-08-30 22:00:00,3391.6355140186915 +2014-08-30 23:00:00,2566.4454828660437 +2014-08-31 00:00:00,1833.8785046728972 +2014-08-31 01:00:00,1538.183800623053 +2014-08-31 02:00:00,1480.872274143302 +2014-08-31 03:00:00,1419.8629283489097 +2014-08-31 04:00:00,1322.4922118380061 +2014-08-31 05:00:00,1393.4953271028037 +2014-08-31 06:00:00,1593.454828660436 +2014-08-31 07:00:00,1729.3208722741433 +2014-08-31 08:00:00,1903.1588785046729 +2014-08-31 09:00:00,2916.227414330218 +2014-08-31 10:00:00,3668.02492211838 +2014-08-31 11:00:00,4044.3769470404986 +2014-08-31 12:00:00,4232.647975077882 +2014-08-31 13:00:00,4160.3021806853585 +2014-08-31 14:00:00,4275.576323987539 +2014-08-31 15:00:00,4291.8753894081 +2014-08-31 16:00:00,4273.613707165109 +2014-08-31 17:00:00,4291.719626168225 +2014-08-31 18:00:00,4259.722741433022 +2014-08-31 19:00:00,4164.660436137072 +2014-08-31 20:00:00,4113.046728971963 +2014-08-31 21:00:00,3838.8193146417448 +2014-08-31 22:00:00,3416.323987538941 +2014-08-31 23:00:00,2629.5794392523367 +2014-09-01 00:00:00,1971.8411214953271 +2014-09-01 01:00:00,1451.3457943925234 +2014-09-01 02:00:00,1412.4080996884736 +2014-09-01 03:00:00,1394.0903426791276 +2014-09-01 04:00:00,1366.5794392523364 +2014-09-01 05:00:00,1450.803738317757 +2014-09-01 06:00:00,1604.872274143302 +2014-09-01 07:00:00,1719.2616822429907 +2014-09-01 08:00:00,1878.7414330218069 +2014-09-01 09:00:00,2912.834890965732 +2014-09-01 10:00:00,3881.2118380062307 +2014-09-01 11:00:00,4298.130841121495 +2014-09-01 12:00:00,4463.342679127726 +2014-09-01 13:00:00,4509.467289719626 +2014-09-01 14:00:00,4601.791277258567 +2014-09-01 15:00:00,4553.956386292835 +2014-09-01 16:00:00,4531.4361370716515 +2014-09-01 17:00:00,4603.897196261682 +2014-09-01 18:00:00,4590.953271028037 +2014-09-01 19:00:00,4457.591900311527 +2014-09-01 20:00:00,4277.199376947041 +2014-09-01 21:00:00,4146.146417445483 +2014-09-01 22:00:00,3534.993769470405 +2014-09-01 23:00:00,2797.221183800623 +2014-09-02 00:00:00,2058.6105919003116 +2014-09-02 01:00:00,1548.9408099688474 +2014-09-02 02:00:00,1471.6542056074766 +2014-09-02 03:00:00,1423.4454828660437 +2014-09-02 04:00:00,1389.3115264797507 +2014-09-02 05:00:00,1499.5482866043615 +2014-09-02 06:00:00,1675.6791277258567 +2014-09-02 07:00:00,1821.6604361370717 +2014-09-02 08:00:00,2017.4517133956385 +2014-09-02 09:00:00,3103.520249221184 +2014-09-02 10:00:00,3921.8971962616824 +2014-09-02 11:00:00,4276.08722741433 +2014-09-02 12:00:00,4494.473520249221 +2014-09-02 13:00:00,4555.4984423676015 +2014-09-02 14:00:00,4555.386292834891 +2014-09-02 15:00:00,4580.934579439252 +2014-09-02 16:00:00,4557.554517133956 +2014-09-02 17:00:00,4576.4984423676015 +2014-09-02 18:00:00,4542.794392523365 +2014-09-02 19:00:00,4427.548286604361 +2014-09-02 20:00:00,4234.289719626168 +2014-09-02 21:00:00,4028.1370716510905 +2014-09-02 22:00:00,3600.1869158878503 +2014-09-02 23:00:00,2516.5482866043612 +2014-09-03 00:00:00,1792.8130841121495 +2014-09-03 01:00:00,1500.1619937694704 +2014-09-03 02:00:00,1462.0716510903426 +2014-09-03 03:00:00,1424.7414330218069 +2014-09-03 04:00:00,1405.3208722741433 +2014-09-03 05:00:00,1490.576323987539 +2014-09-03 06:00:00,1677.6043613707166 +2014-09-03 07:00:00,1826.4672897196263 +2014-09-03 08:00:00,2000.214953271028 +2014-09-03 09:00:00,3018.5825545171338 +2014-09-03 10:00:00,3703.5295950155764 +2014-09-03 11:00:00,4016.2305295950155 +2014-09-03 12:00:00,4206.457943925234 +2014-09-03 13:00:00,4204.878504672897 +2014-09-03 14:00:00,4219.507788161994 +2014-09-03 15:00:00,4188.535825545171 +2014-09-03 16:00:00,4296.841121495327 +2014-09-03 17:00:00,4333.85046728972 +2014-09-03 18:00:00,4334.06230529595 +2014-09-03 19:00:00,4227.853582554517 +2014-09-03 20:00:00,4073.3831775700933 +2014-09-03 21:00:00,3939.956386292835 +2014-09-03 22:00:00,3542.663551401869 +2014-09-03 23:00:00,2579.595015576324 +2014-09-04 00:00:00,1797.1433021806854 +2014-09-04 01:00:00,1514.2834890965732 +2014-09-04 02:00:00,1459.1059190031153 +2014-09-04 03:00:00,1410.031152647975 +2014-09-04 04:00:00,1370.0778816199377 +2014-09-04 05:00:00,1461.7507788161993 +2014-09-04 06:00:00,1649.5732087227414 +2014-09-04 07:00:00,1806.3738317757009 +2014-09-04 08:00:00,1973.0155763239875 +2014-09-04 09:00:00,2922.2834890965732 +2014-09-04 10:00:00,3777.919003115265 +2014-09-04 11:00:00,4035.429906542056 +2014-09-04 12:00:00,4205.514018691589 +2014-09-04 13:00:00,4200.844236760125 +2014-09-04 14:00:00,4212.196261682243 +2014-09-04 15:00:00,4240.080996884735 +2014-09-04 16:00:00,4198.255451713396 +2014-09-04 17:00:00,4261.529595015576 +2014-09-04 18:00:00,4247.5669781931465 +2014-09-04 19:00:00,4106.330218068536 +2014-09-04 20:00:00,4038.803738317757 +2014-09-04 21:00:00,3812.9127725856697 +2014-09-04 22:00:00,3433.828660436137 +2014-09-04 23:00:00,2598.9906542056074 +2014-09-05 00:00:00,1763.766355140187 +2014-09-05 01:00:00,1485.2367601246106 +2014-09-05 02:00:00,1429.5482866043615 +2014-09-05 03:00:00,1379.2429906542056 +2014-09-05 04:00:00,1335.9283489096574 +2014-09-05 05:00:00,1416.1993769470405 +2014-09-05 06:00:00,1604.8940809968847 +2014-09-05 07:00:00,1795.4890965732088 +2014-09-05 08:00:00,1924.0436137071652 +2014-09-05 09:00:00,2832.872274143302 +2014-09-05 10:00:00,3676.8130841121497 +2014-09-05 11:00:00,3911.02492211838 +2014-09-05 12:00:00,4102.844236760125 +2014-09-05 13:00:00,4089.8753894080996 +2014-09-05 14:00:00,4170.576323987539 +2014-09-05 15:00:00,4301.610591900311 +2014-09-05 16:00:00,4473.015576323987 +2014-09-05 17:00:00,4395.940809968847 +2014-09-05 18:00:00,4299.554517133956 +2014-09-05 19:00:00,4161.314641744549 +2014-09-05 20:00:00,4217.414330218068 +2014-09-05 21:00:00,3973.031152647975 +2014-09-05 22:00:00,3616.931464174455 +2014-09-05 23:00:00,2850.7165109034268 +2014-09-06 00:00:00,1842.5794392523364 +2014-09-06 01:00:00,1573.7320872274142 +2014-09-06 02:00:00,1486.785046728972 +2014-09-06 03:00:00,1414.4984423676012 +2014-09-06 04:00:00,1373.7040498442368 +2014-09-06 05:00:00,1458.8847352024923 +2014-09-06 06:00:00,1644.8878504672898 +2014-09-06 07:00:00,1805.9034267912773 +2014-09-06 08:00:00,1978.5109034267912 +2014-09-06 09:00:00,3088.96261682243 +2014-09-06 10:00:00,3848.822429906542 +2014-09-06 11:00:00,4163.2336448598135 +2014-09-06 12:00:00,4194.236760124611 +2014-09-06 13:00:00,4234.052959501558 +2014-09-06 14:00:00,4309.872274143302 +2014-09-06 15:00:00,4366.83800623053 +2014-09-06 16:00:00,4369.183800623053 +2014-09-06 17:00:00,4354.476635514019 +2014-09-06 18:00:00,4295.971962616823 +2014-09-06 19:00:00,4175.473520249221 +2014-09-06 20:00:00,4133.7009345794395 +2014-09-06 21:00:00,4017.2492211838007 +2014-09-06 22:00:00,3650.3271028037384 +2014-09-06 23:00:00,2750.6884735202493 +2014-09-07 00:00:00,1850.638629283489 +2014-09-07 01:00:00,1579.5856697819315 +2014-09-07 02:00:00,1512.8442367601247 +2014-09-07 03:00:00,1454.7196261682243 +2014-09-07 04:00:00,1362.417445482866 +2014-09-07 05:00:00,1441.5202492211838 +2014-09-07 06:00:00,1603.9345794392523 +2014-09-07 07:00:00,1776.7725856697818 +2014-09-07 08:00:00,1909.2616822429907 +2014-09-07 09:00:00,2983.5732087227416 +2014-09-07 10:00:00,3787.4517133956388 +2014-09-07 11:00:00,4131.411214953271 +2014-09-07 12:00:00,4208.83800623053 +2014-09-07 13:00:00,4201.806853582554 +2014-09-07 14:00:00,4201.043613707165 +2014-09-07 15:00:00,4273.616822429906 +2014-09-07 16:00:00,4270.97507788162 +2014-09-07 17:00:00,4264.928348909657 +2014-09-07 18:00:00,4245.009345794392 +2014-09-07 19:00:00,4098.919003115265 +2014-09-07 20:00:00,4072.9003115264795 +2014-09-07 21:00:00,3934.286604361371 +2014-09-07 22:00:00,3557.6884735202493 +2014-09-07 23:00:00,2650.2616822429904 +2014-09-08 00:00:00,1788.7912772585669 +2014-09-08 01:00:00,1487.760124610592 +2014-09-08 02:00:00,1438.031152647975 +2014-09-08 03:00:00,1386.5981308411215 +2014-09-08 04:00:00,1379.2274143302182 +2014-09-08 05:00:00,1469.2928348909657 +2014-09-08 06:00:00,1663.9221183800623 +2014-09-08 07:00:00,1824.5669781931465 +2014-09-08 08:00:00,2017.5514018691588 +2014-09-08 09:00:00,3001.495327102804 +2014-09-08 10:00:00,3807.6728971962616 +2014-09-08 11:00:00,4109.0342679127725 +2014-09-08 12:00:00,4271.071651090343 +2014-09-08 13:00:00,4376.847352024922 +2014-09-08 14:00:00,4356.292834890965 +2014-09-08 15:00:00,4329.3021806853585 +2014-09-08 16:00:00,4319.607476635514 +2014-09-08 17:00:00,4369.330218068536 +2014-09-08 18:00:00,4225.663551401869 +2014-09-08 19:00:00,4143.333333333333 +2014-09-08 20:00:00,4046.8598130841124 +2014-09-08 21:00:00,3921.707165109034 +2014-09-08 22:00:00,3545.4080996884736 +2014-09-08 23:00:00,2692.638629283489 +2014-09-09 00:00:00,1799.3582554517134 +2014-09-09 01:00:00,1516.6448598130842 +2014-09-09 02:00:00,1472.3302180685357 +2014-09-09 03:00:00,1431.9781931464174 +2014-09-09 04:00:00,1416.2928348909657 +2014-09-09 05:00:00,1499.576323987539 +2014-09-09 06:00:00,1681.7632398753894 +2014-09-09 07:00:00,1811.3021806853583 +2014-09-09 08:00:00,1993.2647975077882 +2014-09-09 09:00:00,2896.105919003115 +2014-09-09 10:00:00,3920.299065420561 +2014-09-09 11:00:00,4073.489096573209 +2014-09-09 12:00:00,4191.872274143302 +2014-09-09 13:00:00,4269.445482866044 +2014-09-09 14:00:00,4309.454828660436 +2014-09-09 15:00:00,4317.193146417446 +2014-09-09 16:00:00,4323.981308411215 +2014-09-09 17:00:00,4303.844236760125 +2014-09-09 18:00:00,4218.280373831775 +2014-09-09 19:00:00,4045.4641744548285 +2014-09-09 20:00:00,3990.9003115264795 +2014-09-09 21:00:00,3841.7632398753894 +2014-09-09 22:00:00,3485.3271028037384 +2014-09-09 23:00:00,2654.5015576323985 +2014-09-10 00:00:00,1770.5171339563863 +2014-09-10 01:00:00,1510.872274143302 +2014-09-10 02:00:00,1468.6915887850466 +2014-09-10 03:00:00,1451.4953271028037 +2014-09-10 04:00:00,1405.4766355140187 +2014-09-10 05:00:00,1480.8878504672898 +2014-09-10 06:00:00,1657.1401869158879 +2014-09-10 07:00:00,1808.5856697819315 +2014-09-10 08:00:00,1969.1370716510903 +2014-09-10 09:00:00,2939.9906542056074 +2014-09-10 10:00:00,3652.3769470404986 +2014-09-10 11:00:00,4060.878504672897 +2014-09-10 12:00:00,3990.919003115265 +2014-09-10 13:00:00,4084.6417445482866 +2014-09-10 14:00:00,4041.7320872274145 +2014-09-10 15:00:00,4115.13707165109 +2014-09-10 16:00:00,4039.2305295950155 +2014-09-10 17:00:00,4219.616822429906 +2014-09-10 18:00:00,4148.2336448598135 +2014-09-10 19:00:00,4052.171339563863 +2014-09-10 20:00:00,3969.286604361371 +2014-09-10 21:00:00,3855.9158878504672 +2014-09-10 22:00:00,3486.0280373831774 +2014-09-10 23:00:00,2653.4859813084113 +2014-09-11 00:00:00,1762.404984423676 +2014-09-11 01:00:00,1468.7040498442368 +2014-09-11 02:00:00,1448.6261682242991 +2014-09-11 03:00:00,1410.7881619937696 +2014-09-11 04:00:00,1403.436137071651 +2014-09-11 05:00:00,1479.9719626168223 +2014-09-11 06:00:00,1595.1214953271028 +2014-09-11 07:00:00,1761.3894080996886 +2014-09-11 08:00:00,1933.9252336448599 +2014-09-11 09:00:00,2692.7165109034268 +2014-09-11 10:00:00,3911.9003115264795 +2014-09-11 11:00:00,3955.436137071651 +2014-09-11 12:00:00,3950.5077881619936 +2014-09-11 13:00:00,4081.894080996885 +2014-09-11 14:00:00,4197.819314641744 +2014-09-11 15:00:00,4397.685358255451 +2014-09-11 16:00:00,4264.16199376947 +2014-09-11 17:00:00,4162.514018691589 +2014-09-11 18:00:00,4191.619937694704 +2014-09-11 19:00:00,4161.859813084112 +2014-09-11 20:00:00,4058.632398753894 +2014-09-11 21:00:00,4007.4828660436137 +2014-09-11 22:00:00,3592.1308411214955 +2014-09-11 23:00:00,2656.816199376947 +2014-09-12 00:00:00,1782.7538940809968 +2014-09-12 01:00:00,1507.3956386292834 +2014-09-12 02:00:00,1479.6292834890967 +2014-09-12 03:00:00,1444.03738317757 +2014-09-12 04:00:00,1400.1744548286604 +2014-09-12 05:00:00,1484.0498442367602 +2014-09-12 06:00:00,1679.4143302180685 +2014-09-12 07:00:00,1855.5700934579438 +2014-09-12 08:00:00,1991.1869158878505 +2014-09-12 09:00:00,2773.8193146417448 +2014-09-12 10:00:00,3893.707165109034 +2014-09-12 11:00:00,4040.4392523364486 +2014-09-12 12:00:00,4051.1152647975077 +2014-09-12 13:00:00,4204.242990654206 +2014-09-12 14:00:00,4225.922118380062 +2014-09-12 15:00:00,4276.420560747663 +2014-09-12 16:00:00,4300.92523364486 +2014-09-12 17:00:00,4292.657320872274 +2014-09-12 18:00:00,4203.582554517134 +2014-09-12 19:00:00,4026.423676012461 +2014-09-12 20:00:00,4071.314641744548 +2014-09-12 21:00:00,3877.4517133956388 +2014-09-12 22:00:00,3587.713395638629 +2014-09-12 23:00:00,2869.3644859813085 +2014-09-13 00:00:00,1926.3644859813085 +2014-09-13 01:00:00,1553.386292834891 +2014-09-13 02:00:00,1464.9345794392523 +2014-09-13 03:00:00,1405.8006230529595 +2014-09-13 04:00:00,1353.0342679127725 +2014-09-13 05:00:00,1457.7133956386292 +2014-09-13 06:00:00,1619.0965732087227 +2014-09-13 07:00:00,1770.146417445483 +2014-09-13 08:00:00,1923.2554517133956 +2014-09-13 09:00:00,2893.271028037383 +2014-09-13 10:00:00,3685.676012461059 +2014-09-13 11:00:00,4004.7694704049845 +2014-09-13 12:00:00,4098.781931464175 +2014-09-13 13:00:00,4099.404984423676 +2014-09-13 14:00:00,4139.314641744549 +2014-09-13 15:00:00,4199.598130841122 +2014-09-13 16:00:00,4193.448598130841 +2014-09-13 17:00:00,4152.183800623053 +2014-09-13 18:00:00,4036.6822429906542 +2014-09-13 19:00:00,3976.0093457943926 +2014-09-13 20:00:00,3987.0031152647975 +2014-09-13 21:00:00,3883.2741433021806 +2014-09-13 22:00:00,3503.2429906542056 +2014-09-13 23:00:00,2762.4922118380064 +2014-09-14 00:00:00,1848.4143302180685 +2014-09-14 01:00:00,1547.4953271028037 +2014-09-14 02:00:00,1486.6479750778817 +2014-09-14 03:00:00,1424.6978193146417 +2014-09-14 04:00:00,1349.5732087227414 +2014-09-14 05:00:00,1410.96261682243 +2014-09-14 06:00:00,1572.8068535825546 +2014-09-14 07:00:00,1730.8193146417445 +2014-09-14 08:00:00,1877.9221183800623 +2014-09-14 09:00:00,2829.6728971962616 +2014-09-14 10:00:00,3479.3395638629286 +2014-09-14 11:00:00,3837.299065420561 +2014-09-14 12:00:00,4023.6168224299067 +2014-09-14 13:00:00,4062.133956386293 +2014-09-14 14:00:00,3967.638629283489 +2014-09-14 15:00:00,4053.0934579439254 +2014-09-14 16:00:00,4081.1401869158876 +2014-09-14 17:00:00,4047.797507788162 +2014-09-14 18:00:00,3973.797507788162 +2014-09-14 19:00:00,3889.7414330218066 +2014-09-14 20:00:00,3872.866043613707 +2014-09-14 21:00:00,3718.127725856698 +2014-09-14 22:00:00,3342.919003115265 +2014-09-14 23:00:00,2578.2741433021806 +2014-09-15 00:00:00,1760.386292834891 +2014-09-15 01:00:00,1451.8411214953271 +2014-09-15 02:00:00,1416.7383177570093 +2014-09-15 03:00:00,1400.2367601246106 +2014-09-15 04:00:00,1399.5981308411215 +2014-09-15 05:00:00,1456.6947040498442 +2014-09-15 06:00:00,1628.651090342679 +2014-09-15 07:00:00,1758.7694704049845 +2014-09-15 08:00:00,1907.6417445482866 +2014-09-15 09:00:00,2859.1557632398753 +2014-09-15 10:00:00,3674.436137071651 +2014-09-15 11:00:00,3844.8068535825546 +2014-09-15 12:00:00,4022.2585669781934 +2014-09-15 13:00:00,4022.632398753894 +2014-09-15 14:00:00,4047.728971962617 +2014-09-15 15:00:00,4057.735202492212 +2014-09-15 16:00:00,4174.127725856698 +2014-09-15 17:00:00,4021.1806853582552 +2014-09-15 18:00:00,3988.7320872274145 +2014-09-15 19:00:00,3843.9439252336447 +2014-09-15 20:00:00,3841.361370716511 +2014-09-15 21:00:00,3708.663551401869 +2014-09-15 22:00:00,3322.1931464174454 +2014-09-15 23:00:00,2374.6199376947043 +2014-09-16 00:00:00,1765.3395638629283 +2014-09-16 01:00:00,1519.9034267912773 +2014-09-16 02:00:00,1475.5482866043615 +2014-09-16 03:00:00,1435.7040498442368 +2014-09-16 04:00:00,1414.8629283489097 +2014-09-16 05:00:00,1499.2056074766356 +2014-09-16 06:00:00,1632.5202492211838 +2014-09-16 07:00:00,1802.4454828660437 +2014-09-16 08:00:00,1936.7570093457944 +2014-09-16 09:00:00,2907.1308411214955 +2014-09-16 10:00:00,3517.4766355140187 +2014-09-16 11:00:00,3753.2616822429904 +2014-09-16 12:00:00,3898.5015576323985 +2014-09-16 13:00:00,3968.3333333333335 +2014-09-16 14:00:00,3871.9657320872275 +2014-09-16 15:00:00,3954.5919003115264 +2014-09-16 16:00:00,3985.457943925234 +2014-09-16 17:00:00,3972.1308411214955 +2014-09-16 18:00:00,3851.3333333333335 +2014-09-16 19:00:00,3848.8598130841124 +2014-09-16 20:00:00,3792.1682242990655 +2014-09-16 21:00:00,3677.1682242990655 +2014-09-16 22:00:00,3047.2959501557634 +2014-09-16 23:00:00,2192.6355140186915 +2014-09-17 00:00:00,1739.8006230529595 +2014-09-17 01:00:00,1485.6791277258567 +2014-09-17 02:00:00,1432.5046728971963 +2014-09-17 03:00:00,1399.1308411214952 +2014-09-17 04:00:00,1366.9221183800623 +2014-09-17 05:00:00,1458.4143302180685 +2014-09-17 06:00:00,1632.9719626168223 +2014-09-17 07:00:00,1799.3052959501558 +2014-09-17 08:00:00,1930.3551401869158 +2014-09-17 09:00:00,2897.1246105919004 +2014-09-17 10:00:00,3481.233644859813 +2014-09-17 11:00:00,3792.3956386292834 +2014-09-17 12:00:00,3835.9158878504672 +2014-09-17 13:00:00,3895.068535825545 +2014-09-17 14:00:00,3856.1183800623053 +2014-09-17 15:00:00,3892.6822429906542 +2014-09-17 16:00:00,3930.5015576323985 +2014-09-17 17:00:00,3860.613707165109 +2014-09-17 18:00:00,3766.8006230529595 +2014-09-17 19:00:00,3686.595015576324 +2014-09-17 20:00:00,3692.461059190031 +2014-09-17 21:00:00,3586.791277258567 +2014-09-17 22:00:00,2888.461059190031 +2014-09-17 23:00:00,2132.2305295950155 +2014-09-18 00:00:00,1700.4704049844236 +2014-09-18 01:00:00,1454.271028037383 +2014-09-18 02:00:00,1421.4579439252336 +2014-09-18 03:00:00,1394.7040498442368 +2014-09-18 04:00:00,1364.7352024922118 +2014-09-18 05:00:00,1457.872274143302 +2014-09-18 06:00:00,1613.7538940809968 +2014-09-18 07:00:00,1793.8099688473521 +2014-09-18 08:00:00,1919.3894080996886 +2014-09-18 09:00:00,2875.5171339563863 +2014-09-18 10:00:00,3542.0498442367602 +2014-09-18 11:00:00,3567.221183800623 +2014-09-18 12:00:00,3716.467289719626 +2014-09-18 13:00:00,3665.5825545171338 +2014-09-18 14:00:00,3766.828660436137 +2014-09-18 15:00:00,3664.152647975078 +2014-09-18 16:00:00,3694.542056074766 +2014-09-18 17:00:00,3676.7258566978194 +2014-09-18 18:00:00,3646.255451713396 +2014-09-18 19:00:00,3584.0841121495328 +2014-09-18 20:00:00,3643.7040498442366 +2014-09-18 21:00:00,3544.6479750778817 +2014-09-18 22:00:00,2818.006230529595 +2014-09-18 23:00:00,2109.6822429906542 +2014-09-19 00:00:00,1643.9283489096574 +2014-09-19 01:00:00,1385.6853582554518 +2014-09-19 02:00:00,1354.4828660436137 +2014-09-19 03:00:00,1340.9096573208724 +2014-09-19 04:00:00,1321.7819314641745 +2014-09-19 05:00:00,1405.5015576323988 +2014-09-19 06:00:00,1596.2647975077882 +2014-09-19 07:00:00,1767.3115264797507 +2014-09-19 08:00:00,1901.5794392523364 +2014-09-19 09:00:00,2770.2429906542056 +2014-09-19 10:00:00,3592.9127725856697 +2014-09-19 11:00:00,3639.0186915887853 +2014-09-19 12:00:00,3693.551401869159 +2014-09-19 13:00:00,3744.9501557632398 +2014-09-19 14:00:00,3841.8909657320874 +2014-09-19 15:00:00,3867.0716510903426 +2014-09-19 16:00:00,3808.2741433021806 +2014-09-19 17:00:00,3821.190031152648 +2014-09-19 18:00:00,3729.6510903426793 +2014-09-19 19:00:00,3705.7383177570096 +2014-09-19 20:00:00,3753.753894080997 +2014-09-19 21:00:00,3560.7476635514017 +2014-09-19 22:00:00,2956.847352024922 +2014-09-19 23:00:00,2238.607476635514 +2014-09-20 00:00:00,1758.7102803738317 +2014-09-20 01:00:00,1503.8660436137072 +2014-09-20 02:00:00,1416.7258566978194 +2014-09-20 03:00:00,1352.638629283489 +2014-09-20 04:00:00,1308.6604361370717 +2014-09-20 05:00:00,1394.6635514018692 +2014-09-20 06:00:00,1572.2897196261683 +2014-09-20 07:00:00,1718.0872274143303 +2014-09-20 08:00:00,1851.3738317757009 +2014-09-20 09:00:00,2794.5919003115264 +2014-09-20 10:00:00,3537.5545171339563 +2014-09-20 11:00:00,3694.8380062305296 +2014-09-20 12:00:00,3627.8971962616824 +2014-09-20 13:00:00,3779.570093457944 +2014-09-20 14:00:00,3762.271028037383 +2014-09-20 15:00:00,3829.3707165109035 +2014-09-20 16:00:00,3814.0 +2014-09-20 17:00:00,3899.6604361370714 +2014-09-20 18:00:00,3730.5077881619936 +2014-09-20 19:00:00,3627.0280373831774 +2014-09-20 20:00:00,3719.4143302180687 +2014-09-20 21:00:00,3602.5077881619936 +2014-09-20 22:00:00,3259.744548286604 +2014-09-20 23:00:00,2263.6666666666665 +2014-09-21 00:00:00,1755.657320872274 +2014-09-21 01:00:00,1500.3239875389409 +2014-09-21 02:00:00,1449.7133956386292 +2014-09-21 03:00:00,1391.5607476635514 +2014-09-21 04:00:00,1296.3302180685357 +2014-09-21 05:00:00,1378.8411214953271 +2014-09-21 06:00:00,1553.4610591900312 +2014-09-21 07:00:00,1709.031152647975 +2014-09-21 08:00:00,1823.436137071651 +2014-09-21 09:00:00,2630.06230529595 +2014-09-21 10:00:00,3464.93769470405 +2014-09-21 11:00:00,3585.707165109034 +2014-09-21 12:00:00,3733.2118380062307 +2014-09-21 13:00:00,3622.165109034268 +2014-09-21 14:00:00,3653.3489096573207 +2014-09-21 15:00:00,3805.744548286604 +2014-09-21 16:00:00,3814.190031152648 +2014-09-21 17:00:00,3809.4143302180687 +2014-09-21 18:00:00,3673.613707165109 +2014-09-21 19:00:00,3635.5482866043612 +2014-09-21 20:00:00,3666.448598130841 +2014-09-21 21:00:00,3531.2492211838007 +2014-09-21 22:00:00,3073.744548286604 +2014-09-21 23:00:00,2056.0498442367602 +2014-09-22 00:00:00,1641.4143302180685 +2014-09-22 01:00:00,1388.8691588785048 +2014-09-22 02:00:00,1375.5700934579438 +2014-09-22 03:00:00,1377.2741433021806 +2014-09-22 04:00:00,1388.4859813084113 +2014-09-22 05:00:00,1442.9906542056074 +2014-09-22 06:00:00,1601.2897196261683 +2014-09-22 07:00:00,1739.8660436137072 +2014-09-22 08:00:00,1875.8785046728972 +2014-09-22 09:00:00,2658.4205607476633 +2014-09-22 10:00:00,3417.1682242990655 +2014-09-22 11:00:00,3504.4018691588785 +2014-09-22 12:00:00,3542.654205607477 +2014-09-22 13:00:00,3543.707165109034 +2014-09-22 14:00:00,3574.841121495327 +2014-09-22 15:00:00,3602.121495327103 +2014-09-22 16:00:00,3566.1028037383176 +2014-09-22 17:00:00,3645.700934579439 +2014-09-22 18:00:00,3553.676012461059 +2014-09-22 19:00:00,3485.894080996885 +2014-09-22 20:00:00,3554.2523364485983 +2014-09-22 21:00:00,3465.856697819315 +2014-09-22 22:00:00,2994.3052959501556 +2014-09-22 23:00:00,2127.3489096573207 +2014-09-23 00:00:00,1692.3644859813085 +2014-09-23 01:00:00,1405.3302180685357 +2014-09-23 02:00:00,1374.9968847352025 +2014-09-23 03:00:00,1366.8442367601247 +2014-09-23 04:00:00,1354.853582554517 +2014-09-23 05:00:00,1436.7165109034268 +2014-09-23 06:00:00,1614.9532710280373 +2014-09-23 07:00:00,1747.613707165109 +2014-09-23 08:00:00,1889.1869158878505 +2014-09-23 09:00:00,2625.0996884735205 +2014-09-23 10:00:00,3385.299065420561 +2014-09-23 11:00:00,3469.993769470405 +2014-09-23 12:00:00,3500.728971962617 +2014-09-23 13:00:00,3566.7570093457944 +2014-09-23 14:00:00,3650.133956386293 +2014-09-23 15:00:00,3725.4330218068535 +2014-09-23 16:00:00,3738.239875389408 +2014-09-23 17:00:00,3756.271028037383 +2014-09-23 18:00:00,3654.255451713396 +2014-09-23 19:00:00,3564.613707165109 +2014-09-23 20:00:00,3606.4548286604363 +2014-09-23 21:00:00,3473.847352024922 +2014-09-23 22:00:00,2970.177570093458 +2014-09-23 23:00:00,2085.3800623052957 +2014-09-24 00:00:00,1626.6978193146417 +2014-09-24 01:00:00,1369.8691588785048 +2014-09-24 02:00:00,1332.0155763239875 +2014-09-24 03:00:00,1306.9844236760125 +2014-09-24 04:00:00,1308.3457943925234 +2014-09-24 05:00:00,1433.3302180685357 +2014-09-24 06:00:00,1573.9906542056074 +2014-09-24 07:00:00,1734.5514018691588 +2014-09-24 08:00:00,1858.183800623053 +2014-09-24 09:00:00,2596.255451713396 +2014-09-24 10:00:00,3290.489096573209 +2014-09-24 11:00:00,3398.127725856698 +2014-09-24 12:00:00,3491.940809968847 +2014-09-24 13:00:00,3610.968847352025 +2014-09-24 14:00:00,3619.4704049844236 +2014-09-24 15:00:00,3665.246105919003 +2014-09-24 16:00:00,3674.753894080997 +2014-09-24 17:00:00,3669.8535825545173 +2014-09-24 18:00:00,3586.457943925234 +2014-09-24 19:00:00,3556.6105919003116 +2014-09-24 20:00:00,3605.8068535825546 +2014-09-24 21:00:00,3448.3426791277257 +2014-09-24 22:00:00,2935.4205607476633 +2014-09-24 23:00:00,2077.663551401869 +2014-09-25 00:00:00,1641.2679127725858 +2014-09-25 01:00:00,1368.4641744548287 +2014-09-25 02:00:00,1340.4579439252336 +2014-09-25 03:00:00,1317.7881619937696 +2014-09-25 04:00:00,1302.252336448598 +2014-09-25 05:00:00,1397.1619937694704 +2014-09-25 06:00:00,1566.4485981308412 +2014-09-25 07:00:00,1732.436137071651 +2014-09-25 08:00:00,1858.3208722741433 +2014-09-25 09:00:00,2573.8006230529595 +2014-09-25 10:00:00,3314.5732087227416 +2014-09-25 11:00:00,3408.5140186915887 +2014-09-25 12:00:00,3495.9968847352025 +2014-09-25 13:00:00,3508.196261682243 +2014-09-25 14:00:00,3557.744548286604 +2014-09-25 15:00:00,3625.398753894081 +2014-09-25 16:00:00,3624.903426791277 +2014-09-25 17:00:00,3666.7943925233644 +2014-09-25 18:00:00,3600.096573208723 +2014-09-25 19:00:00,3572.626168224299 +2014-09-25 20:00:00,3630.760124610592 +2014-09-25 21:00:00,3385.809968847352 +2014-09-25 22:00:00,2836.196261682243 +2014-09-25 23:00:00,2098.510903426791 +2014-09-26 00:00:00,1649.5482866043615 +2014-09-26 01:00:00,1374.3084112149534 +2014-09-26 02:00:00,1335.0778816199377 +2014-09-26 03:00:00,1304.1993769470405 +2014-09-26 04:00:00,1272.5295950155764 +2014-09-26 05:00:00,1370.9314641744547 +2014-09-26 06:00:00,1540.1900311526479 +2014-09-26 07:00:00,1707.7040498442368 +2014-09-26 08:00:00,1849.588785046729 +2014-09-26 09:00:00,2431.152647975078 +2014-09-26 10:00:00,3510.9283489096574 +2014-09-26 11:00:00,3547.0280373831774 +2014-09-26 12:00:00,3646.878504672897 +2014-09-26 13:00:00,3695.1557632398753 +2014-09-26 14:00:00,3748.127725856698 +2014-09-26 15:00:00,3804.4143302180687 +2014-09-26 16:00:00,3821.0280373831774 +2014-09-26 17:00:00,3788.551401869159 +2014-09-26 18:00:00,3659.9439252336447 +2014-09-26 19:00:00,3658.613707165109 +2014-09-26 20:00:00,3652.080996884735 +2014-09-26 21:00:00,3525.7943925233644 +2014-09-26 22:00:00,3143.286604361371 +2014-09-26 23:00:00,2266.8442367601247 +2014-09-27 00:00:00,1769.8971962616822 +2014-09-27 01:00:00,1527.98753894081 +2014-09-27 02:00:00,1449.2554517133956 +2014-09-27 03:00:00,1379.4641744548287 +2014-09-27 04:00:00,1323.7227414330218 +2014-09-27 05:00:00,1410.342679127726 +2014-09-27 06:00:00,1592.968847352025 +2014-09-27 07:00:00,1733.0623052959502 +2014-09-27 08:00:00,1868.2990654205607 +2014-09-27 09:00:00,2652.1993769470405 +2014-09-27 10:00:00,3436.3489096573207 +2014-09-27 11:00:00,3537.3894080996884 +2014-09-27 12:00:00,3706.700934579439 +2014-09-27 13:00:00,3719.5451713395637 +2014-09-27 14:00:00,3826.866043613707 +2014-09-27 15:00:00,3867.105919003115 +2014-09-27 16:00:00,3794.791277258567 +2014-09-27 17:00:00,3754.5732087227416 +2014-09-27 18:00:00,3700.766355140187 +2014-09-27 19:00:00,3593.8193146417448 +2014-09-27 20:00:00,3624.043613707165 +2014-09-27 21:00:00,3523.4517133956388 +2014-09-27 22:00:00,3127.271028037383 +2014-09-27 23:00:00,2206.654205607477 +2014-09-28 00:00:00,1739.8473520249222 +2014-09-28 01:00:00,1464.1152647975077 +2014-09-28 02:00:00,1414.7102803738317 +2014-09-28 03:00:00,1343.1993769470405 +2014-09-28 04:00:00,1266.4610591900312 +2014-09-28 05:00:00,1351.0342679127725 +2014-09-28 06:00:00,1522.4454828660437 +2014-09-28 07:00:00,1688.0903426791276 +2014-09-28 08:00:00,1795.1744548286604 +2014-09-28 09:00:00,2597.3956386292834 +2014-09-28 10:00:00,3350.7414330218066 +2014-09-28 11:00:00,3469.5825545171338 +2014-09-28 12:00:00,3621.286604361371 +2014-09-28 13:00:00,3618.3426791277257 +2014-09-28 14:00:00,3576.691588785047 +2014-09-28 15:00:00,3598.809968847352 +2014-09-28 16:00:00,3473.3426791277257 +2014-09-28 17:00:00,3618.4641744548285 +2014-09-28 18:00:00,3511.1806853582552 +2014-09-28 19:00:00,3533.2959501557634 +2014-09-28 20:00:00,3558.4018691588785 +2014-09-28 21:00:00,3438.392523364486 +2014-09-28 22:00:00,3044.538940809969 +2014-09-28 23:00:00,2138.9781931464177 +2014-09-29 00:00:00,1629.2180685358255 +2014-09-29 01:00:00,1370.3177570093458 +2014-09-29 02:00:00,1341.6417445482866 +2014-09-29 03:00:00,1344.7445482866044 +2014-09-29 04:00:00,1358.0467289719627 +2014-09-29 05:00:00,1426.8130841121495 +2014-09-29 06:00:00,1546.2928348909657 +2014-09-29 07:00:00,1720.6791277258567 +2014-09-29 08:00:00,1849.3520249221183 +2014-09-29 09:00:00,2565.1931464174454 +2014-09-29 10:00:00,3281.2897196261683 +2014-09-29 11:00:00,3339.411214953271 +2014-09-29 12:00:00,3513.7819314641742 +2014-09-29 13:00:00,3682.0155763239877 +2014-09-29 14:00:00,3678.613707165109 +2014-09-29 15:00:00,3749.1152647975077 +2014-09-29 16:00:00,3802.3489096573207 +2014-09-29 17:00:00,3698.442367601246 +2014-09-29 18:00:00,3661.7757009345796 +2014-09-29 19:00:00,3580.0 +2014-09-29 20:00:00,3555.551401869159 +2014-09-29 21:00:00,3377.264797507788 +2014-09-29 22:00:00,2985.3644859813085 +2014-09-29 23:00:00,2084.208722741433 +2014-09-30 00:00:00,1636.436137071651 +2014-09-30 01:00:00,1350.7009345794393 +2014-09-30 02:00:00,1303.816199376947 +2014-09-30 03:00:00,1311.1682242990655 +2014-09-30 04:00:00,1310.2928348909657 +2014-09-30 05:00:00,1413.2834890965732 +2014-09-30 06:00:00,1552.6853582554518 +2014-09-30 07:00:00,1698.3333333333333 +2014-09-30 08:00:00,1814.5856697819315 +2014-09-30 09:00:00,2500.11214953271 +2014-09-30 10:00:00,3222.196261682243 +2014-09-30 11:00:00,3324.8255451713394 +2014-09-30 12:00:00,3385.5171339563863 +2014-09-30 13:00:00,3488.3644859813085 +2014-09-30 14:00:00,3599.4922118380064 +2014-09-30 15:00:00,3731.6105919003116 +2014-09-30 16:00:00,3695.903426791277 +2014-09-30 17:00:00,3644.5545171339563 +2014-09-30 18:00:00,3594.919003115265 +2014-09-30 19:00:00,3567.0996884735205 +2014-09-30 20:00:00,3534.423676012461 +2014-09-30 21:00:00,3404.2585669781934 +2014-09-30 22:00:00,2985.457943925234 +2014-09-30 23:00:00,2145.6947040498444 +2014-10-01 00:00:00,1660.3052959501558 +2014-10-01 01:00:00,1364.4080996884736 +2014-10-01 02:00:00,1325.1090342679129 +2014-10-01 03:00:00,1311.6604361370717 +2014-10-01 04:00:00,1294.7165109034268 +2014-10-01 05:00:00,1367.8286604361372 +2014-10-01 06:00:00,1540.9252336448599 +2014-10-01 07:00:00,1717.6760124610591 +2014-10-01 08:00:00,1858.8566978193146 +2014-10-01 09:00:00,2473.264797507788 +2014-10-01 10:00:00,3330.5171339563863 +2014-10-01 11:00:00,3419.993769470405 +2014-10-01 12:00:00,3561.532710280374 +2014-10-01 13:00:00,3808.423676012461 +2014-10-01 14:00:00,3936.956386292835 +2014-10-01 15:00:00,4045.11214953271 +2014-10-01 16:00:00,3996.744548286604 +2014-10-01 17:00:00,4017.392523364486 +2014-10-01 18:00:00,3853.3800623052957 +2014-10-01 19:00:00,3774.133956386293 +2014-10-01 20:00:00,3762.3582554517134 +2014-10-01 21:00:00,3549.4174454828662 +2014-10-01 22:00:00,3209.361370716511 +2014-10-01 23:00:00,2144.448598130841 +2014-10-02 00:00:00,1698.2928348909657 +2014-10-02 01:00:00,1410.6355140186915 +2014-10-02 02:00:00,1376.3894080996886 +2014-10-02 03:00:00,1369.1900311526479 +2014-10-02 04:00:00,1362.766355140187 +2014-10-02 05:00:00,1433.0467289719627 +2014-10-02 06:00:00,1590.6105919003114 +2014-10-02 07:00:00,1795.545171339564 +2014-10-02 08:00:00,1914.239875389408 +2014-10-02 09:00:00,2563.052959501558 +2014-10-02 10:00:00,3261.208722741433 +2014-10-02 11:00:00,3845.4080996884736 +2014-10-02 12:00:00,3741.06230529595 +2014-10-02 13:00:00,3855.9127725856697 +2014-10-02 14:00:00,4026.778816199377 +2014-10-02 15:00:00,4001.3333333333335 +2014-10-02 16:00:00,4102.093457943925 +2014-10-02 17:00:00,4079.5482866043612 +2014-10-02 18:00:00,3950.7694704049845 +2014-10-02 19:00:00,3833.467289719626 +2014-10-02 20:00:00,3857.4517133956388 +2014-10-02 21:00:00,3680.6947040498444 +2014-10-02 22:00:00,3303.0093457943926 +2014-10-02 23:00:00,2256.3956386292834 +2014-10-03 00:00:00,1720.9844236760125 +2014-10-03 01:00:00,1430.1619937694704 +2014-10-03 02:00:00,1390.6355140186915 +2014-10-03 03:00:00,1367.0747663551401 +2014-10-03 04:00:00,1349.3271028037384 +2014-10-03 05:00:00,1422.177570093458 +2014-10-03 06:00:00,1575.7009345794393 +2014-10-03 07:00:00,1768.3052959501558 +2014-10-03 08:00:00,1943.9127725856697 +2014-10-03 09:00:00,2536.9813084112147 +2014-10-03 10:00:00,3625.785046728972 +2014-10-03 11:00:00,3815.8691588785045 +2014-10-03 12:00:00,3958.588785046729 +2014-10-03 13:00:00,3969.510903426791 +2014-10-03 14:00:00,4142.545171339564 +2014-10-03 15:00:00,4124.358255451713 +2014-10-03 16:00:00,4191.084112149532 +2014-10-03 17:00:00,4106.320872274143 +2014-10-03 18:00:00,3935.8909657320874 +2014-10-03 19:00:00,3941.392523364486 +2014-10-03 20:00:00,3870.2056074766356 +2014-10-03 21:00:00,3667.632398753894 +2014-10-03 22:00:00,3259.9657320872275 +2014-10-03 23:00:00,2255.744548286604 +2014-10-04 00:00:00,1793.6542056074766 +2014-10-04 01:00:00,1525.361370716511 +2014-10-04 02:00:00,1435.4143302180685 +2014-10-04 03:00:00,1372.1526479750778 +2014-10-04 04:00:00,1319.5856697819315 +2014-10-04 05:00:00,1411.3582554517134 +2014-10-04 06:00:00,1571.760124610592 +2014-10-04 07:00:00,1767.526479750779 +2014-10-04 08:00:00,1880.8753894080996 +2014-10-04 09:00:00,2659.255451713396 +2014-10-04 10:00:00,3493.152647975078 +2014-10-04 11:00:00,3617.866043613707 +2014-10-04 12:00:00,3746.766355140187 +2014-10-04 13:00:00,3796.143302180685 +2014-10-04 14:00:00,3877.772585669782 +2014-10-04 15:00:00,3944.2679127725855 +2014-10-04 16:00:00,3906.6822429906542 +2014-10-04 17:00:00,3938.93769470405 +2014-10-04 18:00:00,3752.4922118380064 +2014-10-04 19:00:00,3727.803738317757 +2014-10-04 20:00:00,3654.479750778816 +2014-10-04 21:00:00,3489.7694704049845 +2014-10-04 22:00:00,3119.778816199377 +2014-10-04 23:00:00,2204.479750778816 +2014-10-05 00:00:00,1751.853582554517 +2014-10-05 01:00:00,1502.9283489096574 +2014-10-05 02:00:00,1450.7196261682243 +2014-10-05 03:00:00,1369.1308411214952 +2014-10-05 04:00:00,1288.8317757009345 +2014-10-05 05:00:00,1373.423676012461 +2014-10-05 06:00:00,1503.4517133956385 +2014-10-05 07:00:00,1696.5295950155764 +2014-10-05 08:00:00,1798.872274143302 +2014-10-05 09:00:00,2518.1246105919004 +2014-10-05 10:00:00,3263.510903426791 +2014-10-05 11:00:00,3370.1806853582552 +2014-10-05 12:00:00,3453.4641744548285 +2014-10-05 13:00:00,3417.0560747663553 +2014-10-05 14:00:00,3463.0093457943926 +2014-10-05 15:00:00,3409.5171339563863 +2014-10-05 16:00:00,3441.0654205607475 +2014-10-05 17:00:00,3421.11214953271 +2014-10-05 18:00:00,3341.8691588785045 +2014-10-05 19:00:00,3285.613707165109 +2014-10-05 20:00:00,3349.98753894081 +2014-10-05 21:00:00,3194.8847352024923 +2014-10-05 22:00:00,2791.239875389408 +2014-10-05 23:00:00,2001.3520249221183 +2014-10-06 00:00:00,1605.436137071651 +2014-10-06 01:00:00,1363.0155763239875 +2014-10-06 02:00:00,1335.3707165109033 +2014-10-06 03:00:00,1340.1682242990655 +2014-10-06 04:00:00,1336.4672897196263 +2014-10-06 05:00:00,1404.8380062305296 +2014-10-06 06:00:00,1541.7445482866044 +2014-10-06 07:00:00,1706.367601246106 +2014-10-06 08:00:00,1828.8847352024923 +2014-10-06 09:00:00,2435.8504672897197 +2014-10-06 10:00:00,3150.6417445482866 +2014-10-06 11:00:00,3243.127725856698 +2014-10-06 12:00:00,3350.277258566978 +2014-10-06 13:00:00,3401.8691588785045 +2014-10-06 14:00:00,3474.0872274143303 +2014-10-06 15:00:00,3576.691588785047 +2014-10-06 16:00:00,3614.3395638629286 +2014-10-06 17:00:00,3552.158878504673 +2014-10-06 18:00:00,3476.8380062305296 +2014-10-06 19:00:00,3526.6168224299067 +2014-10-06 20:00:00,3496.9439252336447 +2014-10-06 21:00:00,3354.3426791277257 +2014-10-06 22:00:00,2753.903426791277 +2014-10-06 23:00:00,2113.052959501558 +2014-10-07 00:00:00,1704.4922118380061 +2014-10-07 01:00:00,1443.8411214953271 +2014-10-07 02:00:00,1385.5732087227414 +2014-10-07 03:00:00,1368.9595015576324 +2014-10-07 04:00:00,1372.348909657321 +2014-10-07 05:00:00,1461.6230529595016 +2014-10-07 06:00:00,1600.0591900311526 +2014-10-07 07:00:00,1769.4485981308412 +2014-10-07 08:00:00,1892.177570093458 +2014-10-07 09:00:00,2515.919003115265 +2014-10-07 10:00:00,3374.707165109034 +2014-10-07 11:00:00,3326.9439252336447 +2014-10-07 12:00:00,3488.2492211838007 +2014-10-07 13:00:00,3525.5482866043612 +2014-10-07 14:00:00,3557.3271028037384 +2014-10-07 15:00:00,3594.121495327103 +2014-10-07 16:00:00,3616.6417445482866 +2014-10-07 17:00:00,3615.0560747663553 +2014-10-07 18:00:00,3563.11214953271 +2014-10-07 19:00:00,3617.2523364485983 +2014-10-07 20:00:00,3631.2523364485983 +2014-10-07 21:00:00,3487.2118380062307 +2014-10-07 22:00:00,3028.0654205607475 +2014-10-07 23:00:00,2138.816199376947 +2014-10-08 00:00:00,1708.728971962617 +2014-10-08 01:00:00,1425.98753894081 +2014-10-08 02:00:00,1382.0934579439252 +2014-10-08 03:00:00,1372.1495327102805 +2014-10-08 04:00:00,1366.2959501557632 +2014-10-08 05:00:00,1469.8816199376947 +2014-10-08 06:00:00,1631.9563862928348 +2014-10-08 07:00:00,1803.8442367601247 +2014-10-08 08:00:00,1950.9190031152648 +2014-10-08 09:00:00,2735.271028037383 +2014-10-08 10:00:00,3489.6947040498444 +2014-10-08 11:00:00,3524.314641744548 +2014-10-08 12:00:00,3580.707165109034 +2014-10-08 13:00:00,3641.373831775701 +2014-10-08 14:00:00,3714.271028037383 +2014-10-08 15:00:00,3719.632398753894 +2014-10-08 16:00:00,3702.5451713395637 +2014-10-08 17:00:00,3725.7320872274145 +2014-10-08 18:00:00,3666.822429906542 +2014-10-08 19:00:00,3751.728971962617 +2014-10-08 20:00:00,3741.7881619937693 +2014-10-08 21:00:00,3580.423676012461 +2014-10-08 22:00:00,3121.227414330218 +2014-10-08 23:00:00,2151.7757009345796 +2014-10-09 00:00:00,1713.6417445482866 +2014-10-09 01:00:00,1430.7071651090343 +2014-10-09 02:00:00,1383.7570093457944 +2014-10-09 03:00:00,1376.8691588785048 +2014-10-09 04:00:00,1363.993769470405 +2014-10-09 05:00:00,1459.9065420560748 +2014-10-09 06:00:00,1602.3707165109033 +2014-10-09 07:00:00,1778.9190031152648 +2014-10-09 08:00:00,1891.5794392523364 +2014-10-09 09:00:00,2672.2523364485983 +2014-10-09 10:00:00,3317.5856697819313 +2014-10-09 11:00:00,3364.4704049844236 +2014-10-09 12:00:00,3543.3707165109035 +2014-10-09 13:00:00,3616.713395638629 +2014-10-09 14:00:00,3644.1931464174454 +2014-10-09 15:00:00,3637.457943925234 +2014-10-09 16:00:00,3575.1246105919004 +2014-10-09 17:00:00,3509.080996884735 +2014-10-09 18:00:00,3483.654205607477 +2014-10-09 19:00:00,3540.308411214953 +2014-10-09 20:00:00,3466.059190031153 +2014-10-09 21:00:00,3396.4704049844236 +2014-10-09 22:00:00,2889.6728971962616 +2014-10-09 23:00:00,2043.2834890965732 +2014-10-10 00:00:00,1646.1619937694704 +2014-10-10 01:00:00,1395.822429906542 +2014-10-10 02:00:00,1331.7538940809968 +2014-10-10 03:00:00,1312.9221183800623 +2014-10-10 04:00:00,1279.993769470405 +2014-10-10 05:00:00,1365.9719626168223 +2014-10-10 06:00:00,1536.8099688473521 +2014-10-10 07:00:00,1713.9221183800623 +2014-10-10 08:00:00,1831.8130841121495 +2014-10-10 09:00:00,2459.1183800623053 +2014-10-10 10:00:00,3372.8909657320874 +2014-10-10 11:00:00,3351.096573208723 +2014-10-10 12:00:00,3410.816199376947 +2014-10-10 13:00:00,3476.7507788161993 +2014-10-10 14:00:00,3527.183800623053 +2014-10-10 15:00:00,3597.9906542056074 +2014-10-10 16:00:00,3598.7507788161993 +2014-10-10 17:00:00,3543.510903426791 +2014-10-10 18:00:00,3527.7943925233644 +2014-10-10 19:00:00,3563.4984423676015 +2014-10-10 20:00:00,3524.5981308411215 +2014-10-10 21:00:00,3340.080996884735 +2014-10-10 22:00:00,2965.8847352024923 +2014-10-10 23:00:00,2144.8380062305296 +2014-10-11 00:00:00,1702.1588785046729 +2014-10-11 01:00:00,1460.8504672897195 +2014-10-11 02:00:00,1373.1931464174454 +2014-10-11 03:00:00,1299.2928348909657 +2014-10-11 04:00:00,1249.2616822429907 +2014-10-11 05:00:00,1346.1059190031153 +2014-10-11 06:00:00,1501.0685358255453 +2014-10-11 07:00:00,1655.3115264797507 +2014-10-11 08:00:00,1785.4205607476636 +2014-10-11 09:00:00,2542.3333333333335 +2014-10-11 10:00:00,3189.183800623053 +2014-10-11 11:00:00,3286.345794392523 +2014-10-11 12:00:00,3296.0342679127725 +2014-10-11 13:00:00,3276.5451713395637 +2014-10-11 14:00:00,3268.6168224299067 +2014-10-11 15:00:00,3381.9719626168226 +2014-10-11 16:00:00,3460.392523364486 +2014-10-11 17:00:00,3402.2056074766356 +2014-10-11 18:00:00,3411.436137071651 +2014-10-11 19:00:00,3429.9719626168226 +2014-10-11 20:00:00,3390.8068535825546 +2014-10-11 21:00:00,3191.8598130841124 +2014-10-11 22:00:00,2910.669781931464 +2014-10-11 23:00:00,2160.8535825545173 +2014-10-12 00:00:00,1720.03738317757 +2014-10-12 01:00:00,1448.9376947040498 +2014-10-12 02:00:00,1399.1059190031153 +2014-10-12 03:00:00,1325.6791277258567 +2014-10-12 04:00:00,1238.6978193146417 +2014-10-12 05:00:00,1325.183800623053 +2014-10-12 06:00:00,1461.638629283489 +2014-10-12 07:00:00,1612.7165109034268 +2014-10-12 08:00:00,1731.747663551402 +2014-10-12 09:00:00,2458.9595015576324 +2014-10-12 10:00:00,3075.9065420560746 +2014-10-12 11:00:00,3086.744548286604 +2014-10-12 12:00:00,3133.227414330218 +2014-10-12 13:00:00,3103.2959501557634 +2014-10-12 14:00:00,3125.9719626168226 +2014-10-12 15:00:00,3211.196261682243 +2014-10-12 16:00:00,3242.6230529595014 +2014-10-12 17:00:00,3225.2585669781934 +2014-10-12 18:00:00,3222.6791277258567 +2014-10-12 19:00:00,3304.8380062305296 +2014-10-12 20:00:00,3231.233644859813 +2014-10-12 21:00:00,2965.626168224299 +2014-10-12 22:00:00,2567.3800623052957 +2014-10-12 23:00:00,1928.233644859813 +2014-10-13 00:00:00,1573.8193146417445 +2014-10-13 01:00:00,1348.5669781931465 +2014-10-13 02:00:00,1327.4080996884736 +2014-10-13 03:00:00,1338.0218068535826 +2014-10-13 04:00:00,1327.595015576324 +2014-10-13 05:00:00,1387.271028037383 +2014-10-13 06:00:00,1523.3738317757009 +2014-10-13 07:00:00,1617.367601246106 +2014-10-13 08:00:00,1765.348909657321 +2014-10-13 09:00:00,2347.809968847352 +2014-10-13 10:00:00,2715.7320872274145 +2014-10-13 11:00:00,2771.423676012461 +2014-10-13 12:00:00,2718.6199376947043 +2014-10-13 13:00:00,2865.292834890966 +2014-10-13 14:00:00,2842.632398753894 +2014-10-13 15:00:00,2928.246105919003 +2014-10-13 16:00:00,2916.8504672897197 +2014-10-13 17:00:00,2919.791277258567 +2014-10-13 18:00:00,3184.4143302180687 +2014-10-13 19:00:00,3200.0560747663553 +2014-10-13 20:00:00,3090.3582554517134 +2014-10-13 21:00:00,2890.4454828660437 +2014-10-13 22:00:00,2621.728971962617 +2014-10-13 23:00:00,2031.0436137071652 +2014-10-14 00:00:00,1609.4859813084113 +2014-10-14 01:00:00,1333.0 +2014-10-14 02:00:00,1302.6292834890967 +2014-10-14 03:00:00,1284.01246105919 +2014-10-14 04:00:00,1285.9158878504672 +2014-10-14 05:00:00,1360.6604361370717 +2014-10-14 06:00:00,1486.7320872274142 +2014-10-14 07:00:00,1654.8193146417445 +2014-10-14 08:00:00,1769.01246105919 +2014-10-14 09:00:00,2296.0654205607475 +2014-10-14 10:00:00,2868.2429906542056 +2014-10-14 11:00:00,2829.7757009345796 +2014-10-14 12:00:00,2934.816199376947 +2014-10-14 13:00:00,2969.3271028037384 +2014-10-14 14:00:00,3016.6791277258567 +2014-10-14 15:00:00,3002.4205607476633 +2014-10-14 16:00:00,3041.9595015576324 +2014-10-14 17:00:00,3040.6292834890965 +2014-10-14 18:00:00,3003.878504672897 +2014-10-14 19:00:00,3161.822429906542 +2014-10-14 20:00:00,3061.676012461059 +2014-10-14 21:00:00,3008.98753894081 +2014-10-14 22:00:00,2671.866043613707 +2014-10-14 23:00:00,2030.4205607476636 +2014-10-15 00:00:00,1627.7258566978194 +2014-10-15 01:00:00,1367.2647975077882 +2014-10-15 02:00:00,1339.9781931464174 +2014-10-15 03:00:00,1317.2928348909657 +2014-10-15 04:00:00,1310.1246105919004 +2014-10-15 05:00:00,1396.1433021806854 +2014-10-15 06:00:00,1541.0404984423676 +2014-10-15 07:00:00,1740.2866043613708 +2014-10-15 08:00:00,1855.4984423676012 +2014-10-15 09:00:00,2450.4143302180687 +2014-10-15 10:00:00,3059.728971962617 +2014-10-15 11:00:00,3152.4922118380064 +2014-10-15 12:00:00,3255.7476635514017 +2014-10-15 13:00:00,3253.8442367601247 +2014-10-15 14:00:00,3339.5794392523367 +2014-10-15 15:00:00,3359.8193146417448 +2014-10-15 16:00:00,3389.8753894080996 +2014-10-15 17:00:00,3377.700934579439 +2014-10-15 18:00:00,3509.2180685358258 +2014-10-15 19:00:00,3520.632398753894 +2014-10-15 20:00:00,3434.0996884735205 +2014-10-15 21:00:00,3182.01246105919 +2014-10-15 22:00:00,2724.467289719626 +2014-10-15 23:00:00,2095.595015576324 +2014-10-16 00:00:00,1683.872274143302 +2014-10-16 01:00:00,1428.8411214953271 +2014-10-16 02:00:00,1387.1869158878505 +2014-10-16 03:00:00,1376.0467289719627 +2014-10-16 04:00:00,1363.632398753894 +2014-10-16 05:00:00,1454.4704049844236 +2014-10-16 06:00:00,1604.3084112149534 +2014-10-16 07:00:00,1790.3769470404984 +2014-10-16 08:00:00,1917.473520249221 +2014-10-16 09:00:00,2506.03738317757 +2014-10-16 10:00:00,3064.323987538941 +2014-10-16 11:00:00,3123.7881619937693 +2014-10-16 12:00:00,3552.0654205607475 +2014-10-16 13:00:00,3410.4641744548285 +2014-10-16 14:00:00,3531.691588785047 +2014-10-16 15:00:00,3509.1869158878503 +2014-10-16 16:00:00,3651.872274143302 +2014-10-16 17:00:00,3530.0654205607475 +2014-10-16 18:00:00,3547.059190031153 +2014-10-16 19:00:00,3610.0280373831774 +2014-10-16 20:00:00,3516.489096573209 +2014-10-16 21:00:00,3347.489096573209 +2014-10-16 22:00:00,2969.1495327102803 +2014-10-16 23:00:00,2095.834890965732 +2014-10-17 00:00:00,1667.1090342679129 +2014-10-17 01:00:00,1409.7632398753894 +2014-10-17 02:00:00,1377.3052959501558 +2014-10-17 03:00:00,1361.0436137071652 +2014-10-17 04:00:00,1370.8380062305296 +2014-10-17 05:00:00,1438.0903426791276 +2014-10-17 06:00:00,1591.8130841121495 +2014-10-17 07:00:00,1816.6230529595016 +2014-10-17 08:00:00,1954.5046728971963 +2014-10-17 09:00:00,2520.856697819315 +2014-10-17 10:00:00,2938.411214953271 +2014-10-17 11:00:00,3432.404984423676 +2014-10-17 12:00:00,3629.3520249221183 +2014-10-17 13:00:00,3528.429906542056 +2014-10-17 14:00:00,3556.654205607477 +2014-10-17 15:00:00,3547.1869158878503 +2014-10-17 16:00:00,3592.1495327102803 +2014-10-17 17:00:00,3571.993769470405 +2014-10-17 18:00:00,3520.919003115265 +2014-10-17 19:00:00,3571.7040498442366 +2014-10-17 20:00:00,3563.0872274143303 +2014-10-17 21:00:00,3375.0342679127725 +2014-10-17 22:00:00,3074.4548286604363 +2014-10-17 23:00:00,2239.3707165109035 +2014-10-18 00:00:00,1761.4080996884736 +2014-10-18 01:00:00,1509.7507788161993 +2014-10-18 02:00:00,1422.2461059190032 +2014-10-18 03:00:00,1357.1339563862928 +2014-10-18 04:00:00,1315.632398753894 +2014-10-18 05:00:00,1415.1214953271028 +2014-10-18 06:00:00,1590.4984423676012 +2014-10-18 07:00:00,1740.8068535825546 +2014-10-18 08:00:00,1850.638629283489 +2014-10-18 09:00:00,2464.669781931464 +2014-10-18 10:00:00,3222.152647975078 +2014-10-18 11:00:00,3483.271028037383 +2014-10-18 12:00:00,3504.2523364485983 +2014-10-18 13:00:00,3570.8598130841124 +2014-10-18 14:00:00,3616.202492211838 +2014-10-18 15:00:00,3649.5669781931465 +2014-10-18 16:00:00,3689.7196261682243 +2014-10-18 17:00:00,3676.5981308411215 +2014-10-18 18:00:00,3616.3831775700933 +2014-10-18 19:00:00,3597.4922118380064 +2014-10-18 20:00:00,3531.8971962616824 +2014-10-18 21:00:00,3382.7414330218066 +2014-10-18 22:00:00,2926.663551401869 +2014-10-18 23:00:00,2179.856697819315 +2014-10-19 00:00:00,1748.3177570093458 +2014-10-19 01:00:00,1484.031152647975 +2014-10-19 02:00:00,1438.0809968847352 +2014-10-19 03:00:00,1367.1495327102805 +2014-10-19 04:00:00,1292.0747663551401 +2014-10-19 05:00:00,1371.834890965732 +2014-10-19 06:00:00,1520.2772585669782 +2014-10-19 07:00:00,1688.7009345794393 +2014-10-19 08:00:00,1798.98753894081 +2014-10-19 09:00:00,2446.563862928349 +2014-10-19 10:00:00,3271.3489096573207 +2014-10-19 11:00:00,3602.6105919003116 +2014-10-19 12:00:00,3596.4143302180687 +2014-10-19 13:00:00,3649.1308411214955 +2014-10-19 14:00:00,3762.02492211838 +2014-10-19 15:00:00,3735.0934579439254 +2014-10-19 16:00:00,3866.052959501558 +2014-10-19 17:00:00,3870.11214953271 +2014-10-19 18:00:00,3769.8255451713394 +2014-10-19 19:00:00,3804.302180685358 +2014-10-19 20:00:00,3673.968847352025 +2014-10-19 21:00:00,3215.5856697819313 +2014-10-19 22:00:00,2825.6728971962616 +2014-10-19 23:00:00,2091.0467289719627 +2014-10-20 00:00:00,1689.3956386292834 +2014-10-20 01:00:00,1451.4392523364486 +2014-10-20 02:00:00,1411.214953271028 +2014-10-20 03:00:00,1407.0436137071652 +2014-10-20 04:00:00,1391.0778816199377 +2014-10-20 05:00:00,1473.4579439252336 +2014-10-20 06:00:00,1619.018691588785 +2014-10-20 07:00:00,1753.9065420560748 +2014-10-20 08:00:00,1855.8940809968847 +2014-10-20 09:00:00,2631.392523364486 +2014-10-20 10:00:00,3365.809968847352 +2014-10-20 11:00:00,3648.92523364486 +2014-10-20 12:00:00,3621.713395638629 +2014-10-20 13:00:00,3752.9532710280373 +2014-10-20 14:00:00,3831.3177570093458 +2014-10-20 15:00:00,3887.0560747663553 +2014-10-20 16:00:00,3892.947040498442 +2014-10-20 17:00:00,3804.0280373831774 +2014-10-20 18:00:00,3791.1557632398753 +2014-10-20 19:00:00,3769.5825545171338 +2014-10-20 20:00:00,3626.6292834890965 +2014-10-20 21:00:00,3490.894080996885 +2014-10-20 22:00:00,3071.872274143302 +2014-10-20 23:00:00,2258.461059190031 +2014-10-21 00:00:00,1766.127725856698 +2014-10-21 01:00:00,1515.4828660436137 +2014-10-21 02:00:00,1449.3333333333333 +2014-10-21 03:00:00,1423.6261682242991 +2014-10-21 04:00:00,1397.4080996884736 +2014-10-21 05:00:00,1480.3177570093458 +2014-10-21 06:00:00,1618.0404984423676 +2014-10-21 07:00:00,1762.342679127726 +2014-10-21 08:00:00,1887.778816199377 +2014-10-21 09:00:00,2590.4704049844236 +2014-10-21 10:00:00,3227.9501557632398 +2014-10-21 11:00:00,3554.2741433021806 +2014-10-21 12:00:00,3609.467289719626 +2014-10-21 13:00:00,3767.1090342679126 +2014-10-21 14:00:00,3919.6168224299067 +2014-10-21 15:00:00,3958.314641744548 +2014-10-21 16:00:00,3953.4454828660437 +2014-10-21 17:00:00,3871.423676012461 +2014-10-21 18:00:00,3769.5451713395637 +2014-10-21 19:00:00,3812.644859813084 +2014-10-21 20:00:00,3645.728971962617 +2014-10-21 21:00:00,3556.940809968847 +2014-10-21 22:00:00,3184.0934579439254 +2014-10-21 23:00:00,2219.5358255451715 +2014-10-22 00:00:00,1721.8785046728972 +2014-10-22 01:00:00,1464.0155763239875 +2014-10-22 02:00:00,1429.9408099688474 +2014-10-22 03:00:00,1406.2647975077882 +2014-10-22 04:00:00,1390.1339563862928 +2014-10-22 05:00:00,1477.968847352025 +2014-10-22 06:00:00,1613.8286604361372 +2014-10-22 07:00:00,1785.5015576323988 +2014-10-22 08:00:00,1899.7725856697818 +2014-10-22 09:00:00,2736.0498442367602 +2014-10-22 10:00:00,3299.461059190031 +2014-10-22 11:00:00,3592.386292834891 +2014-10-22 12:00:00,3849.6510903426793 +2014-10-22 13:00:00,4244.1651090342675 +2014-10-22 14:00:00,4066.9719626168226 +2014-10-22 15:00:00,4106.305295950156 +2014-10-22 16:00:00,4141.585669781932 +2014-10-22 17:00:00,4111.588785046729 +2014-10-22 18:00:00,3940.2834890965732 +2014-10-22 19:00:00,3947.429906542056 +2014-10-22 20:00:00,3804.735202492212 +2014-10-22 21:00:00,3631.8255451713394 +2014-10-22 22:00:00,3205.5358255451715 +2014-10-22 23:00:00,2175.563862928349 +2014-10-23 00:00:00,1704.3208722741433 +2014-10-23 01:00:00,1413.7040498442368 +2014-10-23 02:00:00,1375.5202492211838 +2014-10-23 03:00:00,1363.5856697819315 +2014-10-23 04:00:00,1331.7383177570093 +2014-10-23 05:00:00,1425.5514018691588 +2014-10-23 06:00:00,1574.3769470404984 +2014-10-23 07:00:00,1758.7009345794393 +2014-10-23 08:00:00,1900.760124610592 +2014-10-23 09:00:00,2552.654205607477 +2014-10-23 10:00:00,3366.7694704049845 +2014-10-23 11:00:00,3452.3208722741433 +2014-10-23 12:00:00,3578.221183800623 +2014-10-23 13:00:00,3659.1806853582552 +2014-10-23 14:00:00,3703.0841121495328 +2014-10-23 15:00:00,3757.227414330218 +2014-10-23 16:00:00,3729.3426791277257 +2014-10-23 17:00:00,3638.6822429906542 +2014-10-23 18:00:00,3624.436137071651 +2014-10-23 19:00:00,3690.221183800623 +2014-10-23 20:00:00,3538.277258566978 +2014-10-23 21:00:00,3424.644859813084 +2014-10-23 22:00:00,2944.576323987539 +2014-10-23 23:00:00,2112.043613707165 +2014-10-24 00:00:00,1680.5046728971963 +2014-10-24 01:00:00,1409.202492211838 +2014-10-24 02:00:00,1374.2679127725858 +2014-10-24 03:00:00,1357.797507788162 +2014-10-24 04:00:00,1336.0903426791276 +2014-10-24 05:00:00,1430.766355140187 +2014-10-24 06:00:00,1593.526479750779 +2014-10-24 07:00:00,1775.1028037383178 +2014-10-24 08:00:00,1890.3239875389409 +2014-10-24 09:00:00,2624.2242990654204 +2014-10-24 10:00:00,3272.6417445482866 +2014-10-24 11:00:00,3490.355140186916 +2014-10-24 12:00:00,3631.323987538941 +2014-10-24 13:00:00,3720.2834890965732 +2014-10-24 14:00:00,3821.8598130841124 +2014-10-24 15:00:00,3856.542056074766 +2014-10-24 16:00:00,3844.638629283489 +2014-10-24 17:00:00,3848.551401869159 +2014-10-24 18:00:00,3753.5077881619936 +2014-10-24 19:00:00,3781.872274143302 +2014-10-24 20:00:00,3623.956386292835 +2014-10-24 21:00:00,3496.221183800623 +2014-10-24 22:00:00,3143.644859813084 +2014-10-24 23:00:00,2236.9657320872275 +2014-10-25 00:00:00,1780.3831775700935 +2014-10-25 01:00:00,1531.8442367601247 +2014-10-25 02:00:00,1446.7102803738317 +2014-10-25 03:00:00,1365.3115264797507 +2014-10-25 04:00:00,1314.8130841121495 +2014-10-25 05:00:00,1405.348909657321 +2014-10-25 06:00:00,1579.8380062305296 +2014-10-25 07:00:00,1742.252336448598 +2014-10-25 08:00:00,1829.3582554517134 +2014-10-25 09:00:00,2582.0404984423676 +2014-10-25 10:00:00,3223.878504672897 +2014-10-25 11:00:00,3589.97507788162 +2014-10-25 12:00:00,3479.2803738317757 +2014-10-25 13:00:00,3692.956386292835 +2014-10-25 14:00:00,3658.5856697819313 +2014-10-25 15:00:00,3700.9532710280373 +2014-10-25 16:00:00,3738.9065420560746 +2014-10-25 17:00:00,3820.7040498442366 +2014-10-25 18:00:00,3633.654205607477 +2014-10-25 19:00:00,3597.5451713395637 +2014-10-25 20:00:00,3507.638629283489 +2014-10-25 21:00:00,3426.6573208722743 +2014-10-25 22:00:00,3094.5482866043612 +2014-10-25 23:00:00,2248.2429906542056 +2014-10-26 00:00:00,1742.4454828660437 +2014-10-26 01:00:00,2920.8006230529595 +2014-10-26 02:00:00,1402.3551401869158 +2014-10-26 03:00:00,1335.7881619937696 +2014-10-26 04:00:00,1314.6978193146417 +2014-10-26 05:00:00,1328.1401869158879 +2014-10-26 06:00:00,1519.183800623053 +2014-10-26 07:00:00,1672.9719626168223 +2014-10-26 08:00:00,1780.1152647975077 +2014-10-26 09:00:00,2384.1495327102803 +2014-10-26 10:00:00,3242.01246105919 +2014-10-26 11:00:00,3366.940809968847 +2014-10-26 12:00:00,3535.697819314642 +2014-10-26 13:00:00,3515.947040498442 +2014-10-26 14:00:00,3548.563862928349 +2014-10-26 15:00:00,3544.190031152648 +2014-10-26 16:00:00,3512.7258566978194 +2014-10-26 17:00:00,3530.3707165109035 +2014-10-26 18:00:00,3558.526479750779 +2014-10-26 19:00:00,3523.286604361371 +2014-10-26 20:00:00,3370.7040498442366 +2014-10-26 21:00:00,3251.3333333333335 +2014-10-26 22:00:00,2836.8598130841124 +2014-10-26 23:00:00,1982.6230529595016 +2014-10-27 00:00:00,1603.3707165109033 +2014-10-27 01:00:00,1350.0249221183801 +2014-10-27 02:00:00,1320.0031152647975 +2014-10-27 03:00:00,1327.9065420560748 +2014-10-27 04:00:00,1348.853582554517 +2014-10-27 05:00:00,1398.0934579439252 +2014-10-27 06:00:00,1556.853582554517 +2014-10-27 07:00:00,1683.2647975077882 +2014-10-27 08:00:00,1836.651090342679 +2014-10-27 09:00:00,2452.5295950155764 +2014-10-27 10:00:00,3208.644859813084 +2014-10-27 11:00:00,3291.3489096573207 +2014-10-27 12:00:00,3370.8255451713394 +2014-10-27 13:00:00,3408.367601246106 +2014-10-27 14:00:00,3455.3052959501556 +2014-10-27 15:00:00,3461.8006230529595 +2014-10-27 16:00:00,3442.3520249221183 +2014-10-27 17:00:00,3445.2679127725855 +2014-10-27 18:00:00,3512.4859813084113 +2014-10-27 19:00:00,3472.02492211838 +2014-10-27 20:00:00,3367.5077881619936 +2014-10-27 21:00:00,3251.096573208723 +2014-10-27 22:00:00,2832.1682242990655 +2014-10-27 23:00:00,2070.93769470405 +2014-10-28 00:00:00,1692.1713395638628 +2014-10-28 01:00:00,1435.0093457943926 +2014-10-28 02:00:00,1388.9376947040498 +2014-10-28 03:00:00,1358.4205607476636 +2014-10-28 04:00:00,1387.0903426791276 +2014-10-28 05:00:00,1420.5015576323988 +2014-10-28 06:00:00,1562.853582554517 +2014-10-28 07:00:00,1758.221183800623 +2014-10-28 08:00:00,1878.4517133956385 +2014-10-28 09:00:00,2382.7507788161993 +2014-10-28 10:00:00,2916.940809968847 +2014-10-28 11:00:00,3474.059190031153 +2014-10-28 12:00:00,3272.4454828660437 +2014-10-28 13:00:00,3305.601246105919 +2014-10-28 14:00:00,3369.4267912772584 +2014-10-28 15:00:00,3337.461059190031 +2014-10-28 16:00:00,3348.330218068536 +2014-10-28 17:00:00,3348.152647975078 +2014-10-28 18:00:00,3495.0093457943926 +2014-10-28 19:00:00,3361.1557632398753 +2014-10-28 20:00:00,3281.0218068535823 +2014-10-28 21:00:00,3179.8629283489095 +2014-10-28 22:00:00,2726.778816199377 +2014-10-28 23:00:00,2048.423676012461 +2014-10-29 00:00:00,1669.7414330218069 +2014-10-29 01:00:00,1429.8317757009345 +2014-10-29 02:00:00,1380.5202492211838 +2014-10-29 03:00:00,1354.9252336448599 +2014-10-29 04:00:00,1379.1931464174454 +2014-10-29 05:00:00,1417.2461059190032 +2014-10-29 06:00:00,1602.0155763239875 +2014-10-29 07:00:00,1745.7009345794393 +2014-10-29 08:00:00,1874.2180685358255 +2014-10-29 09:00:00,2504.9158878504672 +2014-10-29 10:00:00,3134.227414330218 +2014-10-29 11:00:00,3262.685358255452 +2014-10-29 12:00:00,3413.473520249221 +2014-10-29 13:00:00,3407.143302180685 +2014-10-29 14:00:00,3488.760124610592 +2014-10-29 15:00:00,3456.8971962616824 +2014-10-29 16:00:00,3433.3769470404986 +2014-10-29 17:00:00,3414.7819314641742 +2014-10-29 18:00:00,3454.8317757009345 +2014-10-29 19:00:00,3370.398753894081 +2014-10-29 20:00:00,3299.0872274143303 +2014-10-29 21:00:00,3145.3208722741433 +2014-10-29 22:00:00,2786.0716510903426 +2014-10-29 23:00:00,2044.006230529595 +2014-10-30 00:00:00,1607.8598130841121 +2014-10-30 01:00:00,1319.8442367601247 +2014-10-30 02:00:00,1295.8940809968847 +2014-10-30 03:00:00,1305.760124610592 +2014-10-30 04:00:00,1342.4299065420562 +2014-10-30 05:00:00,1379.7383177570093 +2014-10-30 06:00:00,1549.545171339564 +2014-10-30 07:00:00,1687.1869158878505 +2014-10-30 08:00:00,1832.5420560747664 +2014-10-30 09:00:00,2441.5295950155764 +2014-10-30 10:00:00,3024.8006230529595 +2014-10-30 11:00:00,3193.8380062305296 +2014-10-30 12:00:00,3291.4548286604363 +2014-10-30 13:00:00,3318.0404984423676 +2014-10-30 14:00:00,3401.214953271028 +2014-10-30 15:00:00,3388.7258566978194 +2014-10-30 16:00:00,3351.538940809969 +2014-10-30 17:00:00,3378.6292834890965 +2014-10-30 18:00:00,3502.1682242990655 +2014-10-30 19:00:00,3425.8193146417448 +2014-10-30 20:00:00,3326.448598130841 +2014-10-30 21:00:00,3202.8442367601247 +2014-10-30 22:00:00,2774.6666666666665 +2014-10-30 23:00:00,2026.0467289719627 +2014-10-31 00:00:00,1652.2990654205607 +2014-10-31 01:00:00,1451.5919003115264 +2014-10-31 02:00:00,1255.8255451713396 +2014-10-31 03:00:00,1300.1308411214952 +2014-10-31 04:00:00,1306.367601246106 +2014-10-31 05:00:00,1344.1931464174454 +2014-10-31 06:00:00,1512.5856697819315 +2014-10-31 07:00:00,1715.0778816199377 +2014-10-31 08:00:00,1824.4610591900312 +2014-10-31 09:00:00,2477.8442367601247 +2014-10-31 10:00:00,3119.563862928349 +2014-10-31 11:00:00,3202.968847352025 +2014-10-31 12:00:00,3288.2429906542056 +2014-10-31 13:00:00,3259.5825545171338 +2014-10-31 14:00:00,3306.314641744548 +2014-10-31 15:00:00,3351.5295950155764 +2014-10-31 16:00:00,3327.392523364486 +2014-10-31 17:00:00,3381.0934579439254 +2014-10-31 18:00:00,3468.691588785047 +2014-10-31 19:00:00,3435.080996884735 +2014-10-31 20:00:00,3359.9158878504672 +2014-10-31 21:00:00,3175.5919003115264 +2014-10-31 22:00:00,2912.239875389408 +2014-10-31 23:00:00,2193.448598130841 +2014-11-01 00:00:00,1730.4704049844236 +2014-11-01 01:00:00,1481.398753894081 +2014-11-01 02:00:00,1401.2834890965732 +2014-11-01 03:00:00,1346.760124610592 +2014-11-01 04:00:00,1336.981308411215 +2014-11-01 05:00:00,1381.2834890965732 +2014-11-01 06:00:00,1555.423676012461 +2014-11-01 07:00:00,1706.7757009345794 +2014-11-01 08:00:00,1820.006230529595 +2014-11-01 09:00:00,2350.2056074766356 +2014-11-01 10:00:00,2866.031152647975 +2014-11-01 11:00:00,3342.271028037383 +2014-11-01 12:00:00,3613.096573208723 +2014-11-01 13:00:00,3456.8193146417448 +2014-11-01 14:00:00,3424.4766355140187 +2014-11-01 15:00:00,3444.3582554517134 +2014-11-01 16:00:00,3438.8847352024923 +2014-11-01 17:00:00,3453.1557632398753 +2014-11-01 18:00:00,3561.1619937694704 +2014-11-01 19:00:00,3432.127725856698 +2014-11-01 20:00:00,3279.538940809969 +2014-11-01 21:00:00,3137.6417445482866 +2014-11-01 22:00:00,2893.894080996885 +2014-11-01 23:00:00,2109.2834890965732 +2014-11-02 00:00:00,1686.5140186915887 +2014-11-02 01:00:00,1452.146417445483 +2014-11-02 02:00:00,1391.01246105919 +2014-11-02 03:00:00,1325.6261682242991 +2014-11-02 04:00:00,1279.4859813084113 +2014-11-02 05:00:00,1304.404984423676 +2014-11-02 06:00:00,1493.2554517133956 +2014-11-02 07:00:00,1610.7352024922118 +2014-11-02 08:00:00,1727.9501557632398 +2014-11-02 09:00:00,2229.772585669782 +2014-11-02 10:00:00,2948.299065420561 +2014-11-02 11:00:00,3030.9844236760123 +2014-11-02 12:00:00,3170.847352024922 +2014-11-02 13:00:00,3070.9813084112147 +2014-11-02 14:00:00,3121.5295950155764 +2014-11-02 15:00:00,3147.3489096573207 +2014-11-02 16:00:00,3179.663551401869 +2014-11-02 17:00:00,3152.4859813084113 +2014-11-02 18:00:00,3264.0218068535823 +2014-11-02 19:00:00,3158.856697819315 +2014-11-02 20:00:00,3080.5981308411215 +2014-11-02 21:00:00,2929.669781931464 +2014-11-02 22:00:00,2589.993769470405 +2014-11-02 23:00:00,1919.2554517133956 +2014-11-03 00:00:00,1559.3831775700935 +2014-11-03 01:00:00,1323.2461059190032 +2014-11-03 02:00:00,1322.1713395638628 +2014-11-03 03:00:00,1321.5327102803737 +2014-11-03 04:00:00,1338.8193146417445 +2014-11-03 05:00:00,1362.6542056074766 +2014-11-03 06:00:00,1521.342679127726 +2014-11-03 07:00:00,1676.4953271028037 +2014-11-03 08:00:00,1775.632398753894 +2014-11-03 09:00:00,2293.07476635514 +2014-11-03 10:00:00,2711.121495327103 +2014-11-03 11:00:00,3051.931464174455 +2014-11-03 12:00:00,3129.2897196261683 +2014-11-03 13:00:00,3095.9844236760123 +2014-11-03 14:00:00,3094.0841121495328 +2014-11-03 15:00:00,3050.557632398754 +2014-11-03 16:00:00,2986.8068535825546 +2014-11-03 17:00:00,3087.93769470405 +2014-11-03 18:00:00,3196.713395638629 +2014-11-03 19:00:00,3164.588785046729 +2014-11-03 20:00:00,3101.473520249221 +2014-11-03 21:00:00,2991.6791277258567 +2014-11-03 22:00:00,2653.277258566978 +2014-11-03 23:00:00,1982.5514018691588 +2014-11-04 00:00:00,1581.7165109034268 +2014-11-04 01:00:00,1370.9563862928348 +2014-11-04 02:00:00,1312.01246105919 +2014-11-04 03:00:00,1301.4485981308412 +2014-11-04 04:00:00,1327.834890965732 +2014-11-04 05:00:00,1372.6043613707166 +2014-11-04 06:00:00,1535.1900311526479 +2014-11-04 07:00:00,1661.2834890965732 +2014-11-04 08:00:00,1769.9096573208724 +2014-11-04 09:00:00,2237.2242990654204 +2014-11-04 10:00:00,2608.06230529595 +2014-11-04 11:00:00,2676.7881619937693 +2014-11-04 12:00:00,2700.286604361371 +2014-11-04 13:00:00,2670.1183800623053 +2014-11-04 14:00:00,2667.7570093457944 +2014-11-04 15:00:00,2638.1682242990655 +2014-11-04 16:00:00,2636.171339563863 +2014-11-04 17:00:00,2710.97507788162 +2014-11-04 18:00:00,2910.133956386293 +2014-11-04 19:00:00,2861.9968847352025 +2014-11-04 20:00:00,2785.1993769470405 +2014-11-04 21:00:00,2706.903426791277 +2014-11-04 22:00:00,2443.4080996884736 +2014-11-04 23:00:00,1883.4766355140187 +2014-11-05 00:00:00,1485.8566978193146 +2014-11-05 01:00:00,1274.2616822429907 +2014-11-05 02:00:00,1268.348909657321 +2014-11-05 03:00:00,1242.239875389408 +2014-11-05 04:00:00,1233.3084112149534 +2014-11-05 05:00:00,1276.2897196261683 +2014-11-05 06:00:00,1430.3644859813085 +2014-11-05 07:00:00,1596.8504672897195 +2014-11-05 08:00:00,1706.0934579439252 +2014-11-05 09:00:00,2198.302180685358 +2014-11-05 10:00:00,2761.221183800623 +2014-11-05 11:00:00,2708.7507788161993 +2014-11-05 12:00:00,2719.183800623053 +2014-11-05 13:00:00,2748.177570093458 +2014-11-05 14:00:00,2718.264797507788 +2014-11-05 15:00:00,2776.1401869158876 +2014-11-05 16:00:00,2748.803738317757 +2014-11-05 17:00:00,2767.090342679128 +2014-11-05 18:00:00,2948.221183800623 +2014-11-05 19:00:00,2922.956386292835 +2014-11-05 20:00:00,2880.2616822429904 +2014-11-05 21:00:00,2696.919003115265 +2014-11-05 22:00:00,2421.0093457943926 +2014-11-05 23:00:00,1906.6822429906542 +2014-11-06 00:00:00,1538.9968847352025 +2014-11-06 01:00:00,1310.834890965732 +2014-11-06 02:00:00,1276.221183800623 +2014-11-06 03:00:00,1267.4797507788162 +2014-11-06 04:00:00,1278.1900311526479 +2014-11-06 05:00:00,1317.6822429906542 +2014-11-06 06:00:00,1501.7912772585669 +2014-11-06 07:00:00,1639.943925233645 +2014-11-06 08:00:00,1775.657320872274 +2014-11-06 09:00:00,2209.3395638629286 +2014-11-06 10:00:00,2584.5732087227416 +2014-11-06 11:00:00,2652.6947040498444 +2014-11-06 12:00:00,2650.6510903426793 +2014-11-06 13:00:00,2649.052959501558 +2014-11-06 14:00:00,2674.0778816199377 +2014-11-06 15:00:00,2690.246105919003 +2014-11-06 16:00:00,2644.9221183800623 +2014-11-06 17:00:00,2774.158878504673 +2014-11-06 18:00:00,2915.9657320872275 +2014-11-06 19:00:00,2908.6666666666665 +2014-11-06 20:00:00,2836.5233644859813 +2014-11-06 21:00:00,2743.9439252336447 +2014-11-06 22:00:00,2441.4641744548285 +2014-11-06 23:00:00,1952.6417445482866 +2014-11-07 00:00:00,1555.3177570093458 +2014-11-07 01:00:00,1253.5109034267912 +2014-11-07 02:00:00,1325.9252336448599 +2014-11-07 03:00:00,1342.6292834890967 +2014-11-07 04:00:00,1351.9376947040498 +2014-11-07 05:00:00,1370.728971962617 +2014-11-07 06:00:00,1516.1931464174454 +2014-11-07 07:00:00,1670.4485981308412 +2014-11-07 08:00:00,1790.4454828660437 +2014-11-07 09:00:00,2303.06230529595 +2014-11-07 10:00:00,2628.3956386292834 +2014-11-07 11:00:00,2709.7196261682243 +2014-11-07 12:00:00,2722.2897196261683 +2014-11-07 13:00:00,2689.0155763239877 +2014-11-07 14:00:00,2735.7943925233644 +2014-11-07 15:00:00,2751.7196261682243 +2014-11-07 16:00:00,2762.11214953271 +2014-11-07 17:00:00,2900.4766355140187 +2014-11-07 18:00:00,3008.4704049844236 +2014-11-07 19:00:00,3003.576323987539 +2014-11-07 20:00:00,2928.5451713395637 +2014-11-07 21:00:00,2840.700934579439 +2014-11-07 22:00:00,2576.5919003115264 +2014-11-07 23:00:00,2072.9221183800623 +2014-11-08 00:00:00,1635.968847352025 +2014-11-08 01:00:00,1397.2585669781931 +2014-11-08 02:00:00,1321.3457943925234 +2014-11-08 03:00:00,1267.9657320872275 +2014-11-08 04:00:00,1260.2803738317757 +2014-11-08 05:00:00,1291.2056074766356 +2014-11-08 06:00:00,1473.3894080996886 +2014-11-08 07:00:00,1634.386292834891 +2014-11-08 08:00:00,1759.9034267912773 +2014-11-08 09:00:00,2219.919003115265 +2014-11-08 10:00:00,2856.1152647975077 +2014-11-08 11:00:00,2911.6884735202493 +2014-11-08 12:00:00,2872.3894080996884 +2014-11-08 13:00:00,2861.644859813084 +2014-11-08 14:00:00,2848.947040498442 +2014-11-08 15:00:00,2905.6292834890965 +2014-11-08 16:00:00,2903.700934579439 +2014-11-08 17:00:00,2956.713395638629 +2014-11-08 18:00:00,3074.778816199377 +2014-11-08 19:00:00,3045.127725856698 +2014-11-08 20:00:00,2927.6230529595014 +2014-11-08 21:00:00,2809.822429906542 +2014-11-08 22:00:00,2505.588785046729 +2014-11-08 23:00:00,1990.816199376947 +2014-11-09 00:00:00,1612.1308411214952 +2014-11-09 01:00:00,1375.7632398753894 +2014-11-09 02:00:00,1338.8006230529595 +2014-11-09 03:00:00,1278.7912772585669 +2014-11-09 04:00:00,1244.7414330218069 +2014-11-09 05:00:00,1248.2803738317757 +2014-11-09 06:00:00,1432.2959501557632 +2014-11-09 07:00:00,1546.2305295950155 +2014-11-09 08:00:00,1665.056074766355 +2014-11-09 09:00:00,2200.626168224299 +2014-11-09 10:00:00,2610.143302180685 +2014-11-09 11:00:00,2753.5732087227416 +2014-11-09 12:00:00,2710.7196261682243 +2014-11-09 13:00:00,2671.8255451713394 +2014-11-09 14:00:00,2664.239875389408 +2014-11-09 15:00:00,2681.947040498442 +2014-11-09 16:00:00,2685.1619937694704 +2014-11-09 17:00:00,2748.3426791277257 +2014-11-09 18:00:00,2865.2741433021806 +2014-11-09 19:00:00,2839.607476635514 +2014-11-09 20:00:00,2678.2679127725855 +2014-11-09 21:00:00,2595.0996884735205 +2014-11-09 22:00:00,2319.031152647975 +2014-11-09 23:00:00,1813.5482866043615 +2014-11-10 00:00:00,1446.6355140186915 +2014-11-10 01:00:00,1223.7133956386292 +2014-11-10 02:00:00,1216.6043613707166 +2014-11-10 03:00:00,1207.4299065420562 +2014-11-10 04:00:00,1231.7881619937696 +2014-11-10 05:00:00,1255.2554517133956 +2014-11-10 06:00:00,1409.2959501557632 +2014-11-10 07:00:00,1554.436137071651 +2014-11-10 08:00:00,1677.563862928349 +2014-11-10 09:00:00,2156.105919003115 +2014-11-10 10:00:00,2489.6573208722743 +2014-11-10 11:00:00,2551.1619937694704 +2014-11-10 12:00:00,2573.7632398753894 +2014-11-10 13:00:00,2574.3426791277257 +2014-11-10 14:00:00,2587.8504672897197 +2014-11-10 15:00:00,2611.0872274143303 +2014-11-10 16:00:00,2649.4859813084113 +2014-11-10 17:00:00,2809.386292834891 +2014-11-10 18:00:00,2876.4080996884736 +2014-11-10 19:00:00,2901.97507788162 +2014-11-10 20:00:00,2813.06230529595 +2014-11-10 21:00:00,2739.1152647975077 +2014-11-10 22:00:00,2420.392523364486 +2014-11-10 23:00:00,1953.4828660436137 +2014-11-11 00:00:00,1614.0218068535826 +2014-11-11 01:00:00,1386.816199376947 +2014-11-11 02:00:00,1363.9034267912773 +2014-11-11 03:00:00,1351.981308411215 +2014-11-11 04:00:00,1385.3520249221183 +2014-11-11 05:00:00,1380.0778816199377 +2014-11-11 06:00:00,1515.1028037383178 +2014-11-11 07:00:00,1677.2679127725858 +2014-11-11 08:00:00,1805.2118380062304 +2014-11-11 09:00:00,2228.323987538941 +2014-11-11 10:00:00,2586.286604361371 +2014-11-11 11:00:00,2812.93769470405 +2014-11-11 12:00:00,2981.4018691588785 +2014-11-11 13:00:00,2743.0872274143303 +2014-11-11 14:00:00,2780.797507788162 +2014-11-11 15:00:00,2763.1993769470405 +2014-11-11 16:00:00,2757.5233644859813 +2014-11-11 17:00:00,2867.1806853582552 +2014-11-11 18:00:00,2965.4267912772584 +2014-11-11 19:00:00,2957.6479750778817 +2014-11-11 20:00:00,2802.7196261682243 +2014-11-11 21:00:00,2712.8816199376947 +2014-11-11 22:00:00,2431.4828660436137 +2014-11-11 23:00:00,1905.728971962617 +2014-11-12 00:00:00,1558.8068535825546 +2014-11-12 01:00:00,1319.473520249221 +2014-11-12 02:00:00,1298.7445482866044 +2014-11-12 03:00:00,1293.2242990654206 +2014-11-12 04:00:00,1313.3271028037384 +2014-11-12 05:00:00,1328.8255451713396 +2014-11-12 06:00:00,1489.6542056074766 +2014-11-12 07:00:00,1674.7040498442368 +2014-11-12 08:00:00,1810.3644859813085 +2014-11-12 09:00:00,2341.588785046729 +2014-11-12 10:00:00,2709.373831775701 +2014-11-12 11:00:00,2745.1370716510905 +2014-11-12 12:00:00,2735.495327102804 +2014-11-12 13:00:00,2784.613707165109 +2014-11-12 14:00:00,2764.2741433021806 +2014-11-12 15:00:00,2843.473520249221 +2014-11-12 16:00:00,2807.386292834891 +2014-11-12 17:00:00,2957.697819314642 +2014-11-12 18:00:00,3046.03738317757 +2014-11-12 19:00:00,3015.8971962616824 +2014-11-12 20:00:00,2935.4828660436137 +2014-11-12 21:00:00,2860.1090342679126 +2014-11-12 22:00:00,2544.361370716511 +2014-11-12 23:00:00,1941.3894080996886 +2014-11-13 00:00:00,1581.0498442367602 +2014-11-13 01:00:00,1354.2803738317757 +2014-11-13 02:00:00,1329.1900311526479 +2014-11-13 03:00:00,1336.8442367601247 +2014-11-13 04:00:00,1350.8753894080996 +2014-11-13 05:00:00,1359.6728971962616 +2014-11-13 06:00:00,1550.595015576324 +2014-11-13 07:00:00,1698.9158878504672 +2014-11-13 08:00:00,1808.2928348909657 +2014-11-13 09:00:00,2352.828660436137 +2014-11-13 10:00:00,2795.323987538941 +2014-11-13 11:00:00,2899.8255451713394 +2014-11-13 12:00:00,2942.772585669782 +2014-11-13 13:00:00,2901.4143302180687 +2014-11-13 14:00:00,2920.570093457944 +2014-11-13 15:00:00,2964.968847352025 +2014-11-13 16:00:00,2920.299065420561 +2014-11-13 17:00:00,3063.9968847352025 +2014-11-13 18:00:00,3132.940809968847 +2014-11-13 19:00:00,3136.570093457944 +2014-11-13 20:00:00,3084.0872274143303 +2014-11-13 21:00:00,2963.196261682243 +2014-11-13 22:00:00,2517.2741433021806 +2014-11-13 23:00:00,1941.2616822429907 +2014-11-14 00:00:00,1603.8286604361372 +2014-11-14 01:00:00,1353.5981308411215 +2014-11-14 02:00:00,1297.7165109034268 +2014-11-14 03:00:00,1309.4517133956385 +2014-11-14 04:00:00,1320.1993769470405 +2014-11-14 05:00:00,1347.7102803738317 +2014-11-14 06:00:00,1536.526479750779 +2014-11-14 07:00:00,1682.834890965732 +2014-11-14 08:00:00,1795.2118380062304 +2014-11-14 09:00:00,2297.423676012461 +2014-11-14 10:00:00,2820.121495327103 +2014-11-14 11:00:00,2811.753894080997 +2014-11-14 12:00:00,2821.467289719626 +2014-11-14 13:00:00,2796.1557632398753 +2014-11-14 14:00:00,2772.043613707165 +2014-11-14 15:00:00,2831.398753894081 +2014-11-14 16:00:00,2787.542056074766 +2014-11-14 17:00:00,2866.3208722741433 +2014-11-14 18:00:00,3005.1993769470405 +2014-11-14 19:00:00,2984.613707165109 +2014-11-14 20:00:00,2910.3333333333335 +2014-11-14 21:00:00,2767.7632398753894 +2014-11-14 22:00:00,2526.1744548286606 +2014-11-14 23:00:00,2036.404984423676 +2014-11-15 00:00:00,1619.0778816199377 +2014-11-15 01:00:00,1403.7352024922118 +2014-11-15 02:00:00,1316.8193146417445 +2014-11-15 03:00:00,1261.2741433021806 +2014-11-15 04:00:00,1232.7570093457944 +2014-11-15 05:00:00,1262.4953271028037 +2014-11-15 06:00:00,1432.8504672897195 +2014-11-15 07:00:00,1603.7133956386292 +2014-11-15 08:00:00,1691.2772585669782 +2014-11-15 09:00:00,2241.006230529595 +2014-11-15 10:00:00,2716.1993769470405 +2014-11-15 11:00:00,2739.4828660436137 +2014-11-15 12:00:00,2799.0716510903426 +2014-11-15 13:00:00,2754.6105919003116 +2014-11-15 14:00:00,2736.1370716510905 +2014-11-15 15:00:00,2825.601246105919 +2014-11-15 16:00:00,2842.8971962616824 +2014-11-15 17:00:00,2911.8068535825546 +2014-11-15 18:00:00,3022.3115264797507 +2014-11-15 19:00:00,2953.92523364486 +2014-11-15 20:00:00,2862.0031152647975 +2014-11-15 21:00:00,2731.6168224299067 +2014-11-15 22:00:00,2441.3956386292834 +2014-11-15 23:00:00,1962.3239875389409 +2014-11-16 00:00:00,1588.6822429906542 +2014-11-16 01:00:00,1357.165109034268 +2014-11-16 02:00:00,1325.3177570093458 +2014-11-16 03:00:00,1264.6791277258567 +2014-11-16 04:00:00,1226.0249221183801 +2014-11-16 05:00:00,1241.0031152647975 +2014-11-16 06:00:00,1411.01246105919 +2014-11-16 07:00:00,1555.2087227414331 +2014-11-16 08:00:00,1643.2554517133956 +2014-11-16 09:00:00,2210.9283489096574 +2014-11-16 10:00:00,2653.6728971962616 +2014-11-16 11:00:00,2721.143302180685 +2014-11-16 12:00:00,2728.551401869159 +2014-11-16 13:00:00,2718.4828660436137 +2014-11-16 14:00:00,2675.7258566978194 +2014-11-16 15:00:00,2708.255451713396 +2014-11-16 16:00:00,2732.8130841121497 +2014-11-16 17:00:00,2859.9501557632398 +2014-11-16 18:00:00,2927.9813084112147 +2014-11-16 19:00:00,2872.6417445482866 +2014-11-16 20:00:00,2805.809968847352 +2014-11-16 21:00:00,2715.239875389408 +2014-11-16 22:00:00,2377.4174454828662 +2014-11-16 23:00:00,1845.6261682242991 +2014-11-17 00:00:00,1511.2274143302182 +2014-11-17 01:00:00,1294.1152647975077 +2014-11-17 02:00:00,1273.6791277258567 +2014-11-17 03:00:00,1271.454828660436 +2014-11-17 04:00:00,1289.9750778816199 +2014-11-17 05:00:00,1314.651090342679 +2014-11-17 06:00:00,1469.3831775700935 +2014-11-17 07:00:00,1639.803738317757 +2014-11-17 08:00:00,1740.7196261682243 +2014-11-17 09:00:00,2202.878504672897 +2014-11-17 10:00:00,2552.7694704049845 +2014-11-17 11:00:00,2719.1370716510905 +2014-11-17 12:00:00,2658.3489096573207 +2014-11-17 13:00:00,2642.7757009345796 +2014-11-17 14:00:00,2650.4454828660437 +2014-11-17 15:00:00,2665.588785046729 +2014-11-17 16:00:00,2683.1806853582552 +2014-11-17 17:00:00,2771.5077881619936 +2014-11-17 18:00:00,2962.214953271028 +2014-11-17 19:00:00,2948.1401869158876 +2014-11-17 20:00:00,2851.97507788162 +2014-11-17 21:00:00,2711.3707165109035 +2014-11-17 22:00:00,2442.532710280374 +2014-11-17 23:00:00,1935.2741433021806 +2014-11-18 00:00:00,1588.1526479750778 +2014-11-18 01:00:00,1354.4299065420562 +2014-11-18 02:00:00,1317.582554517134 +2014-11-18 03:00:00,1320.9127725856697 +2014-11-18 04:00:00,1346.348909657321 +2014-11-18 05:00:00,1364.0654205607477 +2014-11-18 06:00:00,1487.0249221183801 +2014-11-18 07:00:00,1645.1495327102805 +2014-11-18 08:00:00,1759.834890965732 +2014-11-18 09:00:00,2199.233644859813 +2014-11-18 10:00:00,2536.5545171339563 +2014-11-18 11:00:00,2644.308411214953 +2014-11-18 12:00:00,2743.171339563863 +2014-11-18 13:00:00,2724.841121495327 +2014-11-18 14:00:00,2707.0716510903426 +2014-11-18 15:00:00,2712.4704049844236 +2014-11-18 16:00:00,2685.177570093458 +2014-11-18 17:00:00,2831.3644859813085 +2014-11-18 18:00:00,2924.214953271028 +2014-11-18 19:00:00,2937.5451713395637 +2014-11-18 20:00:00,2871.6510903426793 +2014-11-18 21:00:00,2820.06230529595 +2014-11-18 22:00:00,2516.791277258567 +2014-11-18 23:00:00,1929.981308411215 +2014-11-19 00:00:00,1577.9657320872275 +2014-11-19 01:00:00,1340.1744548286604 +2014-11-19 02:00:00,1313.96261682243 +2014-11-19 03:00:00,1321.747663551402 +2014-11-19 04:00:00,1335.9096573208724 +2014-11-19 05:00:00,1347.2554517133956 +2014-11-19 06:00:00,1513.9750778816199 +2014-11-19 07:00:00,1681.7819314641745 +2014-11-19 08:00:00,1800.436137071651 +2014-11-19 09:00:00,2270.8193146417448 +2014-11-19 10:00:00,2728.442367601246 +2014-11-19 11:00:00,2748.9532710280373 +2014-11-19 12:00:00,2722.4517133956388 +2014-11-19 13:00:00,2758.1308411214955 +2014-11-19 14:00:00,2740.1464174454827 +2014-11-19 15:00:00,2791.3489096573207 +2014-11-19 16:00:00,2840.0218068535823 +2014-11-19 17:00:00,2934.183800623053 +2014-11-19 18:00:00,3020.0872274143303 +2014-11-19 19:00:00,2994.2834890965732 +2014-11-19 20:00:00,2914.669781931464 +2014-11-19 21:00:00,2849.5607476635514 +2014-11-19 22:00:00,2510.0996884735205 +2014-11-19 23:00:00,1965.5015576323988 +2014-11-20 00:00:00,1553.6604361370717 +2014-11-20 01:00:00,1302.9065420560748 +2014-11-20 02:00:00,1278.2679127725858 +2014-11-20 03:00:00,1277.0716510903426 +2014-11-20 04:00:00,1294.6355140186915 +2014-11-20 05:00:00,1317.0903426791276 +2014-11-20 06:00:00,1500.7943925233644 +2014-11-20 07:00:00,1645.9158878504672 +2014-11-20 08:00:00,1786.454828660436 +2014-11-20 09:00:00,2293.0031152647975 +2014-11-20 10:00:00,2710.2180685358258 +2014-11-20 11:00:00,2793.663551401869 +2014-11-20 12:00:00,2812.5233644859813 +2014-11-20 13:00:00,2785.214953271028 +2014-11-20 14:00:00,2794.196261682243 +2014-11-20 15:00:00,2849.6168224299067 +2014-11-20 16:00:00,2757.171339563863 +2014-11-20 17:00:00,2861.367601246106 +2014-11-20 18:00:00,2925.9439252336447 +2014-11-20 19:00:00,2935.7102803738317 +2014-11-20 20:00:00,2888.9003115264795 +2014-11-20 21:00:00,2798.2741433021806 +2014-11-20 22:00:00,2530.0716510903426 +2014-11-20 23:00:00,1946.1619937694704 +2014-11-21 00:00:00,1569.0623052959502 +2014-11-21 01:00:00,1339.1370716510903 +2014-11-21 02:00:00,1311.3115264797507 +2014-11-21 03:00:00,1320.7943925233644 +2014-11-21 04:00:00,1365.1339563862928 +2014-11-21 05:00:00,1383.7258566978194 +2014-11-21 06:00:00,1546.7414330218069 +2014-11-21 07:00:00,1699.177570093458 +2014-11-21 08:00:00,1807.3395638629283 +2014-11-21 09:00:00,2276.691588785047 +2014-11-21 10:00:00,2707.1028037383176 +2014-11-21 11:00:00,2786.576323987539 +2014-11-21 12:00:00,2781.096573208723 +2014-11-21 13:00:00,2823.2897196261683 +2014-11-21 14:00:00,2808.98753894081 +2014-11-21 15:00:00,2871.8442367601247 +2014-11-21 16:00:00,2882.4517133956388 +2014-11-21 17:00:00,2977.0155763239877 +2014-11-21 18:00:00,3105.2523364485983 +2014-11-21 19:00:00,3076.1869158878503 +2014-11-21 20:00:00,3005.4174454828662 +2014-11-21 21:00:00,2938.3894080996884 +2014-11-21 22:00:00,2649.828660436137 +2014-11-21 23:00:00,2091.6199376947043 +2014-11-22 00:00:00,1679.7196261682243 +2014-11-22 01:00:00,1441.4672897196263 +2014-11-22 02:00:00,1366.5981308411215 +2014-11-22 03:00:00,1316.0654205607477 +2014-11-22 04:00:00,1306.0155763239875 +2014-11-22 05:00:00,1344.3021806853583 +2014-11-22 06:00:00,1477.183800623053 +2014-11-22 07:00:00,1649.0093457943926 +2014-11-22 08:00:00,1738.8255451713396 +2014-11-22 09:00:00,2235.9501557632398 +2014-11-22 10:00:00,2746.1806853582552 +2014-11-22 11:00:00,2833.6417445482866 +2014-11-22 12:00:00,2843.2834890965732 +2014-11-22 13:00:00,2873.2056074766356 +2014-11-22 14:00:00,2836.190031152648 +2014-11-22 15:00:00,2886.4984423676015 +2014-11-22 16:00:00,2957.302180685358 +2014-11-22 17:00:00,3101.255451713396 +2014-11-22 18:00:00,3136.4174454828662 +2014-11-22 19:00:00,3068.1464174454827 +2014-11-22 20:00:00,3002.214953271028 +2014-11-22 21:00:00,2923.9595015576324 +2014-11-22 22:00:00,2640.809968847352 +2014-11-22 23:00:00,2037.3052959501558 +2014-11-23 00:00:00,1645.423676012461 +2014-11-23 01:00:00,1376.760124610592 +2014-11-23 02:00:00,1341.3395638629283 +2014-11-23 03:00:00,1275.6978193146417 +2014-11-23 04:00:00,1218.9844236760125 +2014-11-23 05:00:00,1267.6884735202493 +2014-11-23 06:00:00,1432.4859813084113 +2014-11-23 07:00:00,1571.5389408099688 +2014-11-23 08:00:00,1648.6542056074766 +2014-11-23 09:00:00,2226.834890965732 +2014-11-23 10:00:00,2639.4080996884736 +2014-11-23 11:00:00,2752.8130841121497 +2014-11-23 12:00:00,2774.386292834891 +2014-11-23 13:00:00,2765.2305295950155 +2014-11-23 14:00:00,2740.866043613707 +2014-11-23 15:00:00,2786.551401869159 +2014-11-23 16:00:00,2817.404984423676 +2014-11-23 17:00:00,2978.6728971962616 +2014-11-23 18:00:00,2970.1682242990655 +2014-11-23 19:00:00,2919.866043613707 +2014-11-23 20:00:00,2853.0872274143303 +2014-11-23 21:00:00,2750.3333333333335 +2014-11-23 22:00:00,2432.8068535825546 +2014-11-23 23:00:00,1866.8317757009345 +2014-11-24 00:00:00,1489.4392523364486 +2014-11-24 01:00:00,1233.7507788161993 +2014-11-24 02:00:00,1220.9158878504672 +2014-11-24 03:00:00,1218.0498442367602 +2014-11-24 04:00:00,1218.9345794392523 +2014-11-24 05:00:00,1268.436137071651 +2014-11-24 06:00:00,1442.127725856698 +2014-11-24 07:00:00,1600.7383177570093 +2014-11-24 08:00:00,1697.968847352025 +2014-11-24 09:00:00,2185.227414330218 +2014-11-24 10:00:00,2516.096573208723 +2014-11-24 11:00:00,2794.07476635514 +2014-11-24 12:00:00,2744.0841121495328 +2014-11-24 13:00:00,2780.4828660436137 +2014-11-24 14:00:00,2785.626168224299 +2014-11-24 15:00:00,2800.542056074766 +2014-11-24 16:00:00,2787.133956386293 +2014-11-24 17:00:00,2890.11214953271 +2014-11-24 18:00:00,3003.9003115264795 +2014-11-24 19:00:00,2992.728971962617 +2014-11-24 20:00:00,2939.956386292835 +2014-11-24 21:00:00,2835.3052959501556 +2014-11-24 22:00:00,2547.654205607477 +2014-11-24 23:00:00,1957.760124610592 +2014-11-25 00:00:00,1565.9376947040498 +2014-11-25 01:00:00,1286.5389408099688 +2014-11-25 02:00:00,1258.9501557632398 +2014-11-25 03:00:00,1249.9221183800623 +2014-11-25 04:00:00,1269.968847352025 +2014-11-25 05:00:00,1309.0155763239875 +2014-11-25 06:00:00,1465.9252336448599 +2014-11-25 07:00:00,1625.3115264797507 +2014-11-25 08:00:00,1728.2429906542056 +2014-11-25 09:00:00,2197.467289719626 +2014-11-25 10:00:00,2650.080996884735 +2014-11-25 11:00:00,2697.105919003115 +2014-11-25 12:00:00,2671.919003115265 +2014-11-25 13:00:00,2673.9345794392525 +2014-11-25 14:00:00,2684.707165109034 +2014-11-25 15:00:00,2724.866043613707 +2014-11-25 16:00:00,2715.5607476635514 +2014-11-25 17:00:00,2832.7414330218066 +2014-11-25 18:00:00,2921.88785046729 +2014-11-25 19:00:00,2886.676012461059 +2014-11-25 20:00:00,2794.4984423676015 +2014-11-25 21:00:00,2697.6791277258567 +2014-11-25 22:00:00,2425.386292834891 +2014-11-25 23:00:00,1869.0716510903426 +2014-11-26 00:00:00,1514.7102803738317 +2014-11-26 01:00:00,1281.6261682242991 +2014-11-26 02:00:00,1259.6417445482866 +2014-11-26 03:00:00,1243.3302180685357 +2014-11-26 04:00:00,1258.657320872274 +2014-11-26 05:00:00,1271.7040498442368 +2014-11-26 06:00:00,1432.5233644859813 +2014-11-26 07:00:00,1606.0778816199377 +2014-11-26 08:00:00,1693.2118380062304 +2014-11-26 09:00:00,2178.5358255451715 +2014-11-26 10:00:00,2497.461059190031 +2014-11-26 11:00:00,2641.6230529595014 +2014-11-26 12:00:00,2613.2429906542056 +2014-11-26 13:00:00,2618.6510903426793 +2014-11-26 14:00:00,2629.632398753894 +2014-11-26 15:00:00,2694.292834890966 +2014-11-26 16:00:00,2705.713395638629 +2014-11-26 17:00:00,2797.6573208722743 +2014-11-26 18:00:00,2886.5358255451715 +2014-11-26 19:00:00,2875.1152647975077 +2014-11-26 20:00:00,2794.0841121495328 +2014-11-26 21:00:00,2700.7476635514017 +2014-11-26 22:00:00,2414.448598130841 +2014-11-26 23:00:00,1895.5856697819315 +2014-11-27 00:00:00,1485.9563862928348 +2014-11-27 01:00:00,1239.5046728971963 +2014-11-27 02:00:00,1210.7352024922118 +2014-11-27 03:00:00,1199.6666666666667 +2014-11-27 04:00:00,1211.7196261682243 +2014-11-27 05:00:00,1248.8878504672898 +2014-11-27 06:00:00,1446.1401869158879 +2014-11-27 07:00:00,1595.993769470405 +2014-11-27 08:00:00,1696.7320872274142 +2014-11-27 09:00:00,2170.644859813084 +2014-11-27 10:00:00,2562.7819314641742 +2014-11-27 11:00:00,2615.588785046729 +2014-11-27 12:00:00,2651.791277258567 +2014-11-27 13:00:00,2616.9813084112147 +2014-11-27 14:00:00,2609.2897196261683 +2014-11-27 15:00:00,2641.264797507788 +2014-11-27 16:00:00,2592.0872274143303 +2014-11-27 17:00:00,2776.423676012461 +2014-11-27 18:00:00,2884.866043613707 +2014-11-27 19:00:00,2907.7757009345796 +2014-11-27 20:00:00,2857.6417445482866 +2014-11-27 21:00:00,2745.5171339563863 +2014-11-27 22:00:00,2416.1744548286606 +2014-11-27 23:00:00,1887.380062305296 +2014-11-28 00:00:00,1525.9127725856697 +2014-11-28 01:00:00,1281.6666666666667 +2014-11-28 02:00:00,1254.5327102803737 +2014-11-28 03:00:00,1249.0529595015576 +2014-11-28 04:00:00,1280.8691588785048 +2014-11-28 05:00:00,1300.8660436137072 +2014-11-28 06:00:00,1484.2990654205607 +2014-11-28 07:00:00,1637.056074766355 +2014-11-28 08:00:00,1749.367601246106 +2014-11-28 09:00:00,2225.7507788161993 +2014-11-28 10:00:00,2558.1152647975077 +2014-11-28 11:00:00,2599.1308411214955 +2014-11-28 12:00:00,2660.2056074766356 +2014-11-28 13:00:00,2630.8753894080996 +2014-11-28 14:00:00,2643.7165109034268 +2014-11-28 15:00:00,2676.121495327103 +2014-11-28 16:00:00,2709.7102803738317 +2014-11-28 17:00:00,2811.2585669781934 +2014-11-28 18:00:00,2942.3426791277257 +2014-11-28 19:00:00,2953.3582554517134 +2014-11-28 20:00:00,2851.177570093458 +2014-11-28 21:00:00,2754.2242990654204 +2014-11-28 22:00:00,2499.1370716510905 +2014-11-28 23:00:00,2015.1900311526479 +2014-11-29 00:00:00,1600.0467289719627 +2014-11-29 01:00:00,1348.7196261682243 +2014-11-29 02:00:00,1281.2803738317757 +2014-11-29 03:00:00,1213.7227414330218 +2014-11-29 04:00:00,1209.3956386292834 +2014-11-29 05:00:00,1212.4330218068535 +2014-11-29 06:00:00,1398.4859813084113 +2014-11-29 07:00:00,1568.177570093458 +2014-11-29 08:00:00,1651.4454828660437 +2014-11-29 09:00:00,2168.4641744548285 +2014-11-29 10:00:00,2510.1028037383176 +2014-11-29 11:00:00,2637.2492211838007 +2014-11-29 12:00:00,2716.9003115264795 +2014-11-29 13:00:00,2643.766355140187 +2014-11-29 14:00:00,2652.4143302180687 +2014-11-29 15:00:00,2719.0996884735205 +2014-11-29 16:00:00,2737.847352024922 +2014-11-29 17:00:00,2822.5825545171338 +2014-11-29 18:00:00,2930.5794392523367 +2014-11-29 19:00:00,2856.1246105919004 +2014-11-29 20:00:00,2783.127725856698 +2014-11-29 21:00:00,2749.2492211838007 +2014-11-29 22:00:00,2479.0404984423676 +2014-11-29 23:00:00,1992.4485981308412 +2014-11-30 00:00:00,1590.0155763239875 +2014-11-30 01:00:00,1341.1869158878505 +2014-11-30 02:00:00,1300.595015576324 +2014-11-30 03:00:00,1243.9968847352025 +2014-11-30 04:00:00,1192.9532710280373 +2014-11-30 05:00:00,1212.651090342679 +2014-11-30 06:00:00,1409.760124610592 +2014-11-30 07:00:00,1547.4143302180685 +2014-11-30 08:00:00,1626.6448598130842 +2014-11-30 09:00:00,2121.866043613707 +2014-11-30 10:00:00,2440.632398753894 +2014-11-30 11:00:00,2683.532710280374 +2014-11-30 12:00:00,2665.4828660436137 +2014-11-30 13:00:00,2653.208722741433 +2014-11-30 14:00:00,2618.208722741433 +2014-11-30 15:00:00,2679.6168224299067 +2014-11-30 16:00:00,2660.4454828660437 +2014-11-30 17:00:00,2770.442367601246 +2014-11-30 18:00:00,2855.7320872274145 +2014-11-30 19:00:00,2862.968847352025 +2014-11-30 20:00:00,2743.4517133956388 +2014-11-30 21:00:00,2669.7414330218066 +2014-11-30 22:00:00,2351.919003115265 +2014-11-30 23:00:00,1827.4330218068535 +2014-12-01 00:00:00,1449.8629283489097 +2014-12-01 01:00:00,1218.2461059190032 +2014-12-01 02:00:00,1215.6355140186915 +2014-12-01 03:00:00,1208.0529595015576 +2014-12-01 04:00:00,1220.0996884735202 +2014-12-01 05:00:00,1239.601246105919 +2014-12-01 06:00:00,1400.607476635514 +2014-12-01 07:00:00,1575.3520249221183 +2014-12-01 08:00:00,1679.214953271028 +2014-12-01 09:00:00,2175.878504672897 +2014-12-01 10:00:00,2522.8255451713394 +2014-12-01 11:00:00,2645.4454828660437 +2014-12-01 12:00:00,2623.9657320872275 +2014-12-01 13:00:00,2644.5825545171338 +2014-12-01 14:00:00,2687.5669781931465 +2014-12-01 15:00:00,2692.436137071651 +2014-12-01 16:00:00,2696.4205607476633 +2014-12-01 17:00:00,2780.489096573209 +2014-12-01 18:00:00,2904.504672897196 +2014-12-01 19:00:00,2903.947040498442 +2014-12-01 20:00:00,2819.221183800623 +2014-12-01 21:00:00,2710.6168224299067 +2014-12-01 22:00:00,2411.03738317757 +2014-12-01 23:00:00,1923.2616822429907 +2014-12-02 00:00:00,1544.797507788162 +2014-12-02 01:00:00,1310.0654205607477 +2014-12-02 02:00:00,1267.619937694704 +2014-12-02 03:00:00,1264.8380062305296 +2014-12-02 04:00:00,1290.7071651090343 +2014-12-02 05:00:00,1304.822429906542 +2014-12-02 06:00:00,1446.398753894081 +2014-12-02 07:00:00,1622.5514018691588 +2014-12-02 08:00:00,1713.1401869158879 +2014-12-02 09:00:00,2165.361370716511 +2014-12-02 10:00:00,2516.8442367601247 +2014-12-02 11:00:00,2633.302180685358 +2014-12-02 12:00:00,2612.0404984423676 +2014-12-02 13:00:00,2598.1028037383176 +2014-12-02 14:00:00,2601.031152647975 +2014-12-02 15:00:00,2597.0404984423676 +2014-12-02 16:00:00,2581.059190031153 +2014-12-02 17:00:00,2741.8130841121497 +2014-12-02 18:00:00,2865.760124610592 +2014-12-02 19:00:00,2828.803738317757 +2014-12-02 20:00:00,2752.2242990654204 +2014-12-02 21:00:00,2675.5545171339563 +2014-12-02 22:00:00,2380.6604361370714 +2014-12-02 23:00:00,1883.651090342679 +2014-12-03 00:00:00,1484.0155763239875 +2014-12-03 01:00:00,1255.1557632398753 +2014-12-03 02:00:00,1224.7320872274142 +2014-12-03 03:00:00,1229.3302180685357 +2014-12-03 04:00:00,1250.0623052959502 +2014-12-03 05:00:00,1264.7352024922118 +2014-12-03 06:00:00,1443.1495327102805 +2014-12-03 07:00:00,1626.98753894081 +2014-12-03 08:00:00,1708.6261682242991 +2014-12-03 09:00:00,2188.02492211838 +2014-12-03 10:00:00,2433.9501557632398 +2014-12-03 11:00:00,2554.4018691588785 +2014-12-03 12:00:00,2499.728971962617 +2014-12-03 13:00:00,2632.6573208722743 +2014-12-03 14:00:00,2581.8535825545173 +2014-12-03 15:00:00,2635.7040498442366 +2014-12-03 16:00:00,2611.1246105919004 +2014-12-03 17:00:00,2727.713395638629 +2014-12-03 18:00:00,2853.5919003115264 +2014-12-03 19:00:00,2827.676012461059 +2014-12-03 20:00:00,2764.663551401869 +2014-12-03 21:00:00,2679.5732087227416 +2014-12-03 22:00:00,2368.778816199377 +2014-12-03 23:00:00,1881.177570093458 +2014-12-04 00:00:00,1486.404984423676 +2014-12-04 01:00:00,1260.7320872274142 +2014-12-04 02:00:00,1226.9158878504672 +2014-12-04 03:00:00,1221.822429906542 +2014-12-04 04:00:00,1254.0498442367602 +2014-12-04 05:00:00,1260.9750778816199 +2014-12-04 06:00:00,1455.5700934579438 +2014-12-04 07:00:00,1617.6791277258567 +2014-12-04 08:00:00,1715.0404984423676 +2014-12-04 09:00:00,2174.7881619937693 +2014-12-04 10:00:00,2460.654205607477 +2014-12-04 11:00:00,2617.7040498442366 +2014-12-04 12:00:00,2609.06230529595 +2014-12-04 13:00:00,2577.847352024922 +2014-12-04 14:00:00,2583.993769470405 +2014-12-04 15:00:00,2609.5732087227416 +2014-12-04 16:00:00,2590.190031152648 +2014-12-04 17:00:00,2729.700934579439 +2014-12-04 18:00:00,2870.88785046729 +2014-12-04 19:00:00,2866.3769470404986 +2014-12-04 20:00:00,2781.6510903426793 +2014-12-04 21:00:00,2691.3582554517134 +2014-12-04 22:00:00,2413.373831775701 +2014-12-04 23:00:00,1892.454828660436 +2014-12-05 00:00:00,1497.177570093458 +2014-12-05 01:00:00,1274.1028037383178 +2014-12-05 02:00:00,1238.9096573208724 +2014-12-05 03:00:00,1239.5576323987539 +2014-12-05 04:00:00,1264.0467289719627 +2014-12-05 05:00:00,1276.0249221183801 +2014-12-05 06:00:00,1463.638629283489 +2014-12-05 07:00:00,1639.7320872274142 +2014-12-05 08:00:00,1740.3395638629283 +2014-12-05 09:00:00,2206.7102803738317 +2014-12-05 10:00:00,2522.330218068536 +2014-12-05 11:00:00,2605.373831775701 +2014-12-05 12:00:00,2636.563862928349 +2014-12-05 13:00:00,2566.778816199377 +2014-12-05 14:00:00,2631.7165109034268 +2014-12-05 15:00:00,2638.271028037383 +2014-12-05 16:00:00,2634.361370716511 +2014-12-05 17:00:00,2772.8255451713394 +2014-12-05 18:00:00,2853.3520249221183 +2014-12-05 19:00:00,2869.8629283489095 +2014-12-05 20:00:00,2790.5451713395637 +2014-12-05 21:00:00,2677.4828660436137 +2014-12-05 22:00:00,2482.2056074766356 +2014-12-05 23:00:00,2028.5607476635514 +2014-12-06 00:00:00,1611.7570093457944 +2014-12-06 01:00:00,1390.5794392523364 +2014-12-06 02:00:00,1312.0404984423676 +2014-12-06 03:00:00,1266.177570093458 +2014-12-06 04:00:00,1247.6604361370717 +2014-12-06 05:00:00,1251.9968847352025 +2014-12-06 06:00:00,1416.993769470405 +2014-12-06 07:00:00,1593.4018691588785 +2014-12-06 08:00:00,1680.031152647975 +2014-12-06 09:00:00,2167.302180685358 +2014-12-06 10:00:00,2532.9968847352025 +2014-12-06 11:00:00,2595.8535825545173 +2014-12-06 12:00:00,2613.772585669782 +2014-12-06 13:00:00,2615.03738317757 +2014-12-06 14:00:00,2608.8193146417448 +2014-12-06 15:00:00,2628.2897196261683 +2014-12-06 16:00:00,2650.526479750779 +2014-12-06 17:00:00,2781.919003115265 +2014-12-06 18:00:00,2875.3582554517134 +2014-12-06 19:00:00,2829.595015576324 +2014-12-06 20:00:00,2756.551401869159 +2014-12-06 21:00:00,2620.8847352024923 +2014-12-06 22:00:00,2423.7476635514017 +2014-12-06 23:00:00,1958.5856697819315 +2014-12-07 00:00:00,1565.6822429906542 +2014-12-07 01:00:00,1312.8411214953271 +2014-12-07 02:00:00,1265.2118380062304 +2014-12-07 03:00:00,1201.8099688473521 +2014-12-07 04:00:00,1156.8816199376947 +2014-12-07 05:00:00,1175.8598130841121 +2014-12-07 06:00:00,1367.5576323987539 +2014-12-07 07:00:00,1505.7757009345794 +2014-12-07 08:00:00,1601.9906542056074 +2014-12-07 09:00:00,2117.520249221184 +2014-12-07 10:00:00,2413.4828660436137 +2014-12-07 11:00:00,2486.7694704049845 +2014-12-07 12:00:00,2533.4018691588785 +2014-12-07 13:00:00,2495.5794392523367 +2014-12-07 14:00:00,2458.2741433021806 +2014-12-07 15:00:00,2524.345794392523 +2014-12-07 16:00:00,2704.2959501557634 +2014-12-07 17:00:00,2737.489096573209 +2014-12-07 18:00:00,2938.3894080996884 +2014-12-07 19:00:00,2825.828660436137 +2014-12-07 20:00:00,2689.6479750778817 +2014-12-07 21:00:00,2551.841121495327 +2014-12-07 22:00:00,2309.4267912772584 +2014-12-07 23:00:00,1838.968847352025 +2014-12-08 00:00:00,1480.8068535825546 +2014-12-08 01:00:00,1208.0747663551401 +2014-12-08 02:00:00,1187.4267912772586 +2014-12-08 03:00:00,1168.4984423676012 +2014-12-08 04:00:00,1167.545171339564 +2014-12-08 05:00:00,1192.0031152647975 +2014-12-08 06:00:00,1354.3177570093458 +2014-12-08 07:00:00,1524.1993769470405 +2014-12-08 08:00:00,1606.6261682242991 +2014-12-08 09:00:00,2106.9501557632398 +2014-12-08 10:00:00,2398.2367601246106 +2014-12-08 11:00:00,2557.4704049844236 +2014-12-08 12:00:00,2569.473520249221 +2014-12-08 13:00:00,2709.9283489096574 +2014-12-08 14:00:00,2591.6043613707166 +2014-12-08 15:00:00,2630.7383177570096 +2014-12-08 16:00:00,2692.4548286604363 +2014-12-08 17:00:00,2791.613707165109 +2014-12-08 18:00:00,2872.993769470405 +2014-12-08 19:00:00,2839.834890965732 +2014-12-08 20:00:00,2729.88785046729 +2014-12-08 21:00:00,2680.0 +2014-12-08 22:00:00,2398.6417445482866 +2014-12-08 23:00:00,1892.183800623053 +2014-12-09 00:00:00,1525.613707165109 +2014-12-09 01:00:00,1272.6105919003114 +2014-12-09 02:00:00,1231.423676012461 +2014-12-09 03:00:00,1226.4922118380061 +2014-12-09 04:00:00,1252.7912772585669 +2014-12-09 05:00:00,1266.2959501557632 +2014-12-09 06:00:00,1424.9844236760125 +2014-12-09 07:00:00,1596.2866043613708 +2014-12-09 08:00:00,1745.816199376947 +2014-12-09 09:00:00,2199.031152647975 +2014-12-09 10:00:00,2436.6355140186915 +2014-12-09 11:00:00,2506.3271028037384 +2014-12-09 12:00:00,2584.355140186916 +2014-12-09 13:00:00,2530.557632398754 +2014-12-09 14:00:00,2571.2523364485983 +2014-12-09 15:00:00,2633.9501557632398 +2014-12-09 16:00:00,2558.133956386293 +2014-12-09 17:00:00,2698.227414330218 +2014-12-09 18:00:00,2819.797507788162 +2014-12-09 19:00:00,2792.5233644859813 +2014-12-09 20:00:00,2654.0093457943926 +2014-12-09 21:00:00,2561.3800623052957 +2014-12-09 22:00:00,2319.8255451713394 +2014-12-09 23:00:00,1860.8691588785048 +2014-12-10 00:00:00,1503.146417445483 +2014-12-10 01:00:00,1251.0031152647975 +2014-12-10 02:00:00,1221.2429906542056 +2014-12-10 03:00:00,1222.7196261682243 +2014-12-10 04:00:00,1239.3208722741433 +2014-12-10 05:00:00,1248.4766355140187 +2014-12-10 06:00:00,1425.6292834890967 +2014-12-10 07:00:00,1654.1401869158879 +2014-12-10 08:00:00,1747.398753894081 +2014-12-10 09:00:00,2191.7040498442366 +2014-12-10 10:00:00,2440.1806853582552 +2014-12-10 11:00:00,2583.760124610592 +2014-12-10 12:00:00,2623.9127725856697 +2014-12-10 13:00:00,2626.152647975078 +2014-12-10 14:00:00,2600.669781931464 +2014-12-10 15:00:00,2676.5233644859813 +2014-12-10 16:00:00,2688.277258566978 +2014-12-10 17:00:00,2802.834890965732 +2014-12-10 18:00:00,2897.323987538941 +2014-12-10 19:00:00,2834.495327102804 +2014-12-10 20:00:00,2740.031152647975 +2014-12-10 21:00:00,2658.691588785047 +2014-12-10 22:00:00,2410.7943925233644 +2014-12-10 23:00:00,1891.96261682243 +2014-12-11 00:00:00,1510.9844236760125 +2014-12-11 01:00:00,1282.0436137071652 +2014-12-11 02:00:00,1243.7757009345794 +2014-12-11 03:00:00,1232.993769470405 +2014-12-11 04:00:00,1238.5420560747664 +2014-12-11 05:00:00,1231.853582554517 +2014-12-11 06:00:00,1444.4610591900312 +2014-12-11 07:00:00,1670.4922118380061 +2014-12-11 08:00:00,1764.7943925233644 +2014-12-11 09:00:00,2212.847352024922 +2014-12-11 10:00:00,2530.2679127725855 +2014-12-11 11:00:00,2616.2959501557634 +2014-12-11 12:00:00,2650.5856697819313 +2014-12-11 13:00:00,2615.903426791277 +2014-12-11 14:00:00,2604.442367601246 +2014-12-11 15:00:00,2713.7196261682243 +2014-12-11 16:00:00,2685.5919003115264 +2014-12-11 17:00:00,2814.367601246106 +2014-12-11 18:00:00,2890.931464174455 +2014-12-11 19:00:00,2865.5669781931465 +2014-12-11 20:00:00,2782.903426791277 +2014-12-11 21:00:00,2674.8006230529595 +2014-12-11 22:00:00,2390.753894080997 +2014-12-11 23:00:00,1919.5389408099688 +2014-12-12 00:00:00,1554.4610591900312 +2014-12-12 01:00:00,1354.3520249221183 +2014-12-12 02:00:00,1270.0 +2014-12-12 03:00:00,1269.177570093458 +2014-12-12 04:00:00,1288.6947040498442 +2014-12-12 05:00:00,1290.2928348909657 +2014-12-12 06:00:00,1487.3052959501558 +2014-12-12 07:00:00,1690.202492211838 +2014-12-12 08:00:00,1815.6853582554518 +2014-12-12 09:00:00,2296.1308411214955 +2014-12-12 10:00:00,2537.8816199376947 +2014-12-12 11:00:00,2616.6728971962616 +2014-12-12 12:00:00,2653.8006230529595 +2014-12-12 13:00:00,2663.8691588785045 +2014-12-12 14:00:00,2702.043613707165 +2014-12-12 15:00:00,2737.713395638629 +2014-12-12 16:00:00,2780.9906542056074 +2014-12-12 17:00:00,2906.669781931464 +2014-12-12 18:00:00,2965.3769470404986 +2014-12-12 19:00:00,2945.9906542056074 +2014-12-12 20:00:00,2826.834890965732 +2014-12-12 21:00:00,2709.1931464174454 +2014-12-12 22:00:00,2489.165109034268 +2014-12-12 23:00:00,2062.0778816199377 +2014-12-13 00:00:00,1651.6697819314643 +2014-12-13 01:00:00,1397.2305295950155 +2014-12-13 02:00:00,1301.4859813084113 +2014-12-13 03:00:00,1241.8566978193146 +2014-12-13 04:00:00,1218.271028037383 +2014-12-13 05:00:00,1231.2647975077882 +2014-12-13 06:00:00,1412.1308411214952 +2014-12-13 07:00:00,1591.0716510903426 +2014-12-13 08:00:00,1683.1557632398753 +2014-12-13 09:00:00,2251.7320872274145 +2014-12-13 10:00:00,2578.4641744548285 +2014-12-13 11:00:00,2656.822429906542 +2014-12-13 12:00:00,2812.323987538941 +2014-12-13 13:00:00,2688.133956386293 +2014-12-13 14:00:00,2664.133956386293 +2014-12-13 15:00:00,2686.489096573209 +2014-12-13 16:00:00,2758.1806853582552 +2014-12-13 17:00:00,2884.8442367601247 +2014-12-13 18:00:00,2931.0186915887853 +2014-12-13 19:00:00,2908.5607476635514 +2014-12-13 20:00:00,2828.8971962616824 +2014-12-13 21:00:00,2726.791277258567 +2014-12-13 22:00:00,2501.214953271028 +2014-12-13 23:00:00,2012.9408099688474 +2014-12-14 00:00:00,1680.5295950155764 +2014-12-14 01:00:00,1407.5327102803737 +2014-12-14 02:00:00,1359.8753894080996 +2014-12-14 03:00:00,1295.7165109034268 +2014-12-14 04:00:00,1245.2647975077882 +2014-12-14 05:00:00,1236.165109034268 +2014-12-14 06:00:00,1419.0093457943926 +2014-12-14 07:00:00,1567.1682242990655 +2014-12-14 08:00:00,1658.3956386292834 +2014-12-14 09:00:00,2172.8598130841124 +2014-12-14 10:00:00,2484.8909657320874 +2014-12-14 11:00:00,2577.0778816199377 +2014-12-14 12:00:00,2611.691588785047 +2014-12-14 13:00:00,2566.551401869159 +2014-12-14 14:00:00,2530.8130841121497 +2014-12-14 15:00:00,2568.5482866043612 +2014-12-14 16:00:00,2597.308411214953 +2014-12-14 17:00:00,2690.233644859813 +2014-12-14 18:00:00,2806.947040498442 +2014-12-14 19:00:00,2762.2741433021806 +2014-12-14 20:00:00,2688.208722741433 +2014-12-14 21:00:00,2629.1464174454827 +2014-12-14 22:00:00,2378.9906542056074 +2014-12-14 23:00:00,1908.8473520249222 +2014-12-15 00:00:00,1529.7694704049845 +2014-12-15 01:00:00,1239.202492211838 +2014-12-15 02:00:00,1189.0872274143303 +2014-12-15 03:00:00,1190.4828660436137 +2014-12-15 04:00:00,1219.9968847352025 +2014-12-15 05:00:00,1228.8099688473521 +2014-12-15 06:00:00,1396.6884735202493 +2014-12-15 07:00:00,1613.8971962616822 +2014-12-15 08:00:00,1738.6822429906542 +2014-12-15 09:00:00,2200.5015576323985 +2014-12-15 10:00:00,2639.510903426791 +2014-12-15 11:00:00,2586.7102803738317 +2014-12-15 12:00:00,2605.772585669782 +2014-12-15 13:00:00,2627.4641744548285 +2014-12-15 14:00:00,2613.0841121495328 +2014-12-15 15:00:00,2632.722741433022 +2014-12-15 16:00:00,2673.052959501558 +2014-12-15 17:00:00,2764.489096573209 +2014-12-15 18:00:00,2895.0841121495328 +2014-12-15 19:00:00,2835.526479750779 +2014-12-15 20:00:00,2776.096573208723 +2014-12-15 21:00:00,2690.152647975078 +2014-12-15 22:00:00,2451.772585669782 +2014-12-15 23:00:00,1997.9034267912773 +2014-12-16 00:00:00,1636.5981308411215 +2014-12-16 01:00:00,1340.6168224299065 +2014-12-16 02:00:00,1312.8878504672898 +2014-12-16 03:00:00,1305.1713395638628 +2014-12-16 04:00:00,1285.5576323987539 +2014-12-16 05:00:00,1301.2897196261683 +2014-12-16 06:00:00,1465.9750778816199 +2014-12-16 07:00:00,1699.526479750779 +2014-12-16 08:00:00,1811.4392523364486 +2014-12-16 09:00:00,2256.4922118380064 +2014-12-16 10:00:00,2624.11214953271 +2014-12-16 11:00:00,2644.697819314642 +2014-12-16 12:00:00,2684.3115264797507 +2014-12-16 13:00:00,2663.6573208722743 +2014-12-16 14:00:00,2646.3426791277257 +2014-12-16 15:00:00,2675.576323987539 +2014-12-16 16:00:00,2688.7258566978194 +2014-12-16 17:00:00,2834.9283489096574 +2014-12-16 18:00:00,2933.0778816199377 +2014-12-16 19:00:00,2901.03738317757 +2014-12-16 20:00:00,2828.11214953271 +2014-12-16 21:00:00,2684.3489096573207 +2014-12-16 22:00:00,2428.105919003115 +2014-12-16 23:00:00,1987.9595015576324 +2014-12-17 00:00:00,1642.2461059190032 +2014-12-17 01:00:00,1312.0155763239875 +2014-12-17 02:00:00,1247.993769470405 +2014-12-17 03:00:00,1244.993769470405 +2014-12-17 04:00:00,1246.2242990654206 +2014-12-17 05:00:00,1265.3457943925234 +2014-12-17 06:00:00,1445.404984423676 +2014-12-17 07:00:00,1672.7632398753894 +2014-12-17 08:00:00,1781.2990654205607 +2014-12-17 09:00:00,2243.5732087227416 +2014-12-17 10:00:00,2549.043613707165 +2014-12-17 11:00:00,2612.0218068535823 +2014-12-17 12:00:00,2647.1370716510905 +2014-12-17 13:00:00,2651.894080996885 +2014-12-17 14:00:00,2656.0280373831774 +2014-12-17 15:00:00,2720.626168224299 +2014-12-17 16:00:00,2728.152647975078 +2014-12-17 17:00:00,2863.068535825545 +2014-12-17 18:00:00,2947.8629283489095 +2014-12-17 19:00:00,2900.4205607476633 +2014-12-17 20:00:00,2830.323987538941 +2014-12-17 21:00:00,2693.165109034268 +2014-12-17 22:00:00,2434.4454828660437 +2014-12-17 23:00:00,1990.386292834891 +2014-12-18 00:00:00,1599.7352024922118 +2014-12-18 01:00:00,1276.7881619937696 +2014-12-18 02:00:00,1238.5545171339563 +2014-12-18 03:00:00,1219.6884735202493 +2014-12-18 04:00:00,1235.7414330218069 +2014-12-18 05:00:00,1239.5794392523364 +2014-12-18 06:00:00,1439.3302180685357 +2014-12-18 07:00:00,1645.0747663551401 +2014-12-18 08:00:00,1782.6822429906542 +2014-12-18 09:00:00,2247.07476635514 +2014-12-18 10:00:00,2559.3115264797507 +2014-12-18 11:00:00,2640.4704049844236 +2014-12-18 12:00:00,2681.7570093457944 +2014-12-18 13:00:00,2659.8847352024923 +2014-12-18 14:00:00,2658.542056074766 +2014-12-18 15:00:00,2702.373831775701 +2014-12-18 16:00:00,2666.7383177570096 +2014-12-18 17:00:00,2848.822429906542 +2014-12-18 18:00:00,2993.183800623053 +2014-12-18 19:00:00,2933.822429906542 +2014-12-18 20:00:00,2868.9595015576324 +2014-12-18 21:00:00,2766.676012461059 +2014-12-18 22:00:00,2507.557632398754 +2014-12-18 23:00:00,2013.1619937694704 +2014-12-19 00:00:00,1617.271028037383 +2014-12-19 01:00:00,1282.9781931464174 +2014-12-19 02:00:00,1214.0436137071652 +2014-12-19 03:00:00,1210.4704049844236 +2014-12-19 04:00:00,1231.6947040498442 +2014-12-19 05:00:00,1252.7912772585669 +2014-12-19 06:00:00,1435.6635514018692 +2014-12-19 07:00:00,1642.657320872274 +2014-12-19 08:00:00,1797.6978193146417 +2014-12-19 09:00:00,2296.105919003115 +2014-12-19 10:00:00,2520.0093457943926 +2014-12-19 11:00:00,2643.5015576323985 +2014-12-19 12:00:00,2727.504672897196 +2014-12-19 13:00:00,2627.685358255452 +2014-12-19 14:00:00,2680.601246105919 +2014-12-19 15:00:00,2673.0031152647975 +2014-12-19 16:00:00,2719.520249221184 +2014-12-19 17:00:00,2854.9813084112147 +2014-12-19 18:00:00,2957.778816199377 +2014-12-19 19:00:00,2934.785046728972 +2014-12-19 20:00:00,2826.133956386293 +2014-12-19 21:00:00,2730.638629283489 +2014-12-19 22:00:00,2536.940809968847 +2014-12-19 23:00:00,2132.956386292835 +2014-12-20 00:00:00,1715.2928348909657 +2014-12-20 01:00:00,1405.6105919003114 +2014-12-20 02:00:00,1301.7102803738317 +2014-12-20 03:00:00,1221.8255451713396 +2014-12-20 04:00:00,1180.031152647975 +2014-12-20 05:00:00,1205.4890965732088 +2014-12-20 06:00:00,1384.8598130841121 +2014-12-20 07:00:00,1567.018691588785 +2014-12-20 08:00:00,1693.7009345794393 +2014-12-20 09:00:00,2245.753894080997 +2014-12-20 10:00:00,2570.520249221184 +2014-12-20 11:00:00,2657.1183800623053 +2014-12-20 12:00:00,2688.190031152648 +2014-12-20 13:00:00,2662.345794392523 +2014-12-20 14:00:00,2660.0841121495328 +2014-12-20 15:00:00,2702.1993769470405 +2014-12-20 16:00:00,2742.4704049844236 +2014-12-20 17:00:00,2845.9906542056074 +2014-12-20 18:00:00,2986.006230529595 +2014-12-20 19:00:00,2940.6822429906542 +2014-12-20 20:00:00,2860.6884735202493 +2014-12-20 21:00:00,2742.4454828660437 +2014-12-20 22:00:00,2517.803738317757 +2014-12-20 23:00:00,2128.3333333333335 +2014-12-21 00:00:00,1737.2118380062304 +2014-12-21 01:00:00,1407.3894080996886 +2014-12-21 02:00:00,1321.619937694704 +2014-12-21 03:00:00,1241.728971962617 +2014-12-21 04:00:00,1182.6791277258567 +2014-12-21 05:00:00,1187.2928348909657 +2014-12-21 06:00:00,1379.0841121495328 +2014-12-21 07:00:00,1541.1869158878505 +2014-12-21 08:00:00,1646.5794392523364 +2014-12-21 09:00:00,2197.3831775700933 +2014-12-21 10:00:00,2551.323987538941 +2014-12-21 11:00:00,2680.828660436137 +2014-12-21 12:00:00,2699.856697819315 +2014-12-21 13:00:00,2683.5358255451715 +2014-12-21 14:00:00,2624.6510903426793 +2014-12-21 15:00:00,2673.691588785047 +2014-12-21 16:00:00,2713.6666666666665 +2014-12-21 17:00:00,2807.809968847352 +2014-12-21 18:00:00,2936.1495327102803 +2014-12-21 19:00:00,2901.1246105919004 +2014-12-21 20:00:00,2836.9158878504672 +2014-12-21 21:00:00,2734.1370716510905 +2014-12-21 22:00:00,2521.632398753894 +2014-12-21 23:00:00,2075.0560747663553 +2014-12-22 00:00:00,1640.6448598130842 +2014-12-22 01:00:00,1280.2274143302182 +2014-12-22 02:00:00,1249.4797507788162 +2014-12-22 03:00:00,1218.4423676012461 +2014-12-22 04:00:00,1217.785046728972 +2014-12-22 05:00:00,1239.252336448598 +2014-12-22 06:00:00,1422.582554517134 +2014-12-22 07:00:00,1621.0529595015576 +2014-12-22 08:00:00,1793.127725856698 +2014-12-22 09:00:00,2259.386292834891 +2014-12-22 10:00:00,2590.239875389408 +2014-12-22 11:00:00,2648.0280373831774 +2014-12-22 12:00:00,2727.809968847352 +2014-12-22 13:00:00,2730.01246105919 +2014-12-22 14:00:00,2723.88785046729 +2014-12-22 15:00:00,2750.5794392523367 +2014-12-22 16:00:00,2792.345794392523 +2014-12-22 17:00:00,2953.1028037383176 +2014-12-22 18:00:00,3060.563862928349 +2014-12-22 19:00:00,3028.0654205607475 +2014-12-22 20:00:00,2902.654205607477 +2014-12-22 21:00:00,2851.196261682243 +2014-12-22 22:00:00,2624.02492211838 +2014-12-22 23:00:00,2150.330218068536 +2014-12-23 00:00:00,1746.0841121495328 +2014-12-23 01:00:00,1356.6355140186915 +2014-12-23 02:00:00,1290.9657320872275 +2014-12-23 03:00:00,1265.6479750778817 +2014-12-23 04:00:00,1253.5981308411215 +2014-12-23 05:00:00,1269.9750778816199 +2014-12-23 06:00:00,1475.7040498442368 +2014-12-23 07:00:00,1676.1900311526479 +2014-12-23 08:00:00,1839.3052959501558 +2014-12-23 09:00:00,2306.031152647975 +2014-12-23 10:00:00,2663.8753894080996 +2014-12-23 11:00:00,2694.264797507788 +2014-12-23 12:00:00,2773.2367601246106 +2014-12-23 13:00:00,2759.5358255451715 +2014-12-23 14:00:00,2756.355140186916 +2014-12-23 15:00:00,2804.9439252336447 +2014-12-23 16:00:00,2780.7943925233644 +2014-12-23 17:00:00,2927.5856697819313 +2014-12-23 18:00:00,3087.7943925233644 +2014-12-23 19:00:00,3023.4143302180687 +2014-12-23 20:00:00,2939.6230529595014 +2014-12-23 21:00:00,2823.0654205607475 +2014-12-23 22:00:00,2601.98753894081 +2014-12-23 23:00:00,2152.9003115264795 +2014-12-24 00:00:00,1754.728971962617 +2014-12-24 01:00:00,1348.5794392523364 +2014-12-24 02:00:00,1284.1339563862928 +2014-12-24 03:00:00,1246.9719626168223 +2014-12-24 04:00:00,1226.9065420560748 +2014-12-24 05:00:00,1274.4984423676012 +2014-12-24 06:00:00,1448.8660436137072 +2014-12-24 07:00:00,1644.7912772585669 +2014-12-24 08:00:00,1786.196261682243 +2014-12-24 09:00:00,2275.856697819315 +2014-12-24 10:00:00,2590.227414330218 +2014-12-24 11:00:00,2686.8598130841124 +2014-12-24 12:00:00,2761.2834890965732 +2014-12-24 13:00:00,2699.9283489096574 +2014-12-24 14:00:00,2722.6947040498444 +2014-12-24 15:00:00,2725.0778816199377 +2014-12-24 16:00:00,2702.822429906542 +2014-12-24 17:00:00,2767.143302180685 +2014-12-24 18:00:00,2720.9532710280373 +2014-12-24 19:00:00,2340.314641744548 +2014-12-24 20:00:00,2031.6635514018692 +2014-12-24 21:00:00,1903.1370716510903 +2014-12-24 22:00:00,1790.0716510903426 +2014-12-24 23:00:00,1518.9158878504672 +2014-12-25 00:00:00,1168.5140186915887 +2014-12-25 01:00:00,1001.7071651090342 +2014-12-25 02:00:00,979.3582554517134 +2014-12-25 03:00:00,967.1433021806854 +2014-12-25 04:00:00,978.8255451713395 +2014-12-25 05:00:00,945.436137071651 +2014-12-25 06:00:00,952.9501557632399 +2014-12-25 07:00:00,951.8535825545172 +2014-12-25 08:00:00,1003.4392523364486 +2014-12-25 09:00:00,1109.01246105919 +2014-12-25 10:00:00,1216.1214953271028 +2014-12-25 11:00:00,1296.8878504672898 +2014-12-25 12:00:00,1353.3208722741433 +2014-12-25 13:00:00,1367.056074766355 +2014-12-25 14:00:00,1360.0809968847352 +2014-12-25 15:00:00,1367.4641744548287 +2014-12-25 16:00:00,1360.4828660436137 +2014-12-25 17:00:00,1442.6697819314643 +2014-12-25 18:00:00,1551.4922118380061 +2014-12-25 19:00:00,1547.1526479750778 +2014-12-25 20:00:00,1511.8442367601247 +2014-12-25 21:00:00,1492.1059190031153 +2014-12-25 22:00:00,1436.7320872274142 +2014-12-25 23:00:00,1274.7570093457944 +2014-12-26 00:00:00,1400.411214953271 +2014-12-26 01:00:00,1232.392523364486 +2014-12-26 02:00:00,1178.2834890965732 +2014-12-26 03:00:00,1178.4018691588785 +2014-12-26 04:00:00,1204.2461059190032 +2014-12-26 05:00:00,1230.0747663551401 +2014-12-26 06:00:00,1423.5545171339563 +2014-12-26 07:00:00,1620.342679127726 +2014-12-26 08:00:00,1759.9750778816199 +2014-12-26 09:00:00,2197.3956386292834 +2014-12-26 10:00:00,2494.3115264797507 +2014-12-26 11:00:00,2718.551401869159 +2014-12-26 12:00:00,2687.538940809969 +2014-12-26 13:00:00,2622.1557632398753 +2014-12-26 14:00:00,2620.8816199376947 +2014-12-26 15:00:00,2700.2803738317757 +2014-12-26 16:00:00,2734.373831775701 +2014-12-26 17:00:00,2872.398753894081 +2014-12-26 18:00:00,2988.632398753894 +2014-12-26 19:00:00,2924.3177570093458 +2014-12-26 20:00:00,2864.221183800623 +2014-12-26 21:00:00,2749.0186915887853 +2014-12-26 22:00:00,2527.735202492212 +2014-12-26 23:00:00,2104.7507788161993 +2014-12-27 00:00:00,1713.1090342679129 +2014-12-27 01:00:00,1396.5607476635514 +2014-12-27 02:00:00,1307.5732087227414 +2014-12-27 03:00:00,1244.9595015576324 +2014-12-27 04:00:00,1208.853582554517 +2014-12-27 05:00:00,1209.981308411215 +2014-12-27 06:00:00,1390.5856697819315 +2014-12-27 07:00:00,1552.2367601246106 +2014-12-27 08:00:00,1692.853582554517 +2014-12-27 09:00:00,2231.461059190031 +2014-12-27 10:00:00,2540.7258566978194 +2014-12-27 11:00:00,2574.302180685358 +2014-12-27 12:00:00,2632.01246105919 +2014-12-27 13:00:00,2575.8598130841124 +2014-12-27 14:00:00,2592.411214953271 +2014-12-27 15:00:00,2798.457943925234 +2014-12-27 16:00:00,2749.4984423676015 +2014-12-27 17:00:00,2874.504672897196 +2014-12-27 18:00:00,2971.607476635514 +2014-12-27 19:00:00,2908.7881619937693 +2014-12-27 20:00:00,2827.8971962616824 +2014-12-27 21:00:00,2766.2118380062307 +2014-12-27 22:00:00,2494.595015576324 +2014-12-27 23:00:00,2054.5015576323985 +2014-12-28 00:00:00,1692.6230529595016 +2014-12-28 01:00:00,1397.3021806853583 +2014-12-28 02:00:00,1321.018691588785 +2014-12-28 03:00:00,1259.2897196261683 +2014-12-28 04:00:00,1202.9376947040498 +2014-12-28 05:00:00,1222.822429906542 +2014-12-28 06:00:00,1405.8006230529595 +2014-12-28 07:00:00,1560.5794392523364 +2014-12-28 08:00:00,1653.9127725856697 +2014-12-28 09:00:00,2209.3177570093458 +2014-12-28 10:00:00,2507.059190031153 +2014-12-28 11:00:00,2655.588785046729 +2014-12-28 12:00:00,2678.632398753894 +2014-12-28 13:00:00,2593.735202492212 +2014-12-28 14:00:00,2620.654205607477 +2014-12-28 15:00:00,2638.1931464174454 +2014-12-28 16:00:00,2695.006230529595 +2014-12-28 17:00:00,2811.791277258567 +2014-12-28 18:00:00,2882.822429906542 +2014-12-28 19:00:00,2874.5545171339563 +2014-12-28 20:00:00,2783.6666666666665 +2014-12-28 21:00:00,2730.8847352024923 +2014-12-28 22:00:00,2420.6604361370714 +2014-12-28 23:00:00,1945.2679127725858 +2014-12-29 00:00:00,1558.3021806853583 +2014-12-29 01:00:00,1246.3021806853583 +2014-12-29 02:00:00,1212.1900311526479 +2014-12-29 03:00:00,1191.9127725856697 +2014-12-29 04:00:00,1189.7227414330218 +2014-12-29 05:00:00,1215.1869158878505 +2014-12-29 06:00:00,1398.4018691588785 +2014-12-29 07:00:00,1621.4330218068535 +2014-12-29 08:00:00,1743.5109034267912 +2014-12-29 09:00:00,2217.2523364485983 +2014-12-29 10:00:00,2500.7943925233644 +2014-12-29 11:00:00,2623.97507788162 +2014-12-29 12:00:00,2674.9283489096574 +2014-12-29 13:00:00,2655.9906542056074 +2014-12-29 14:00:00,2660.6666666666665 +2014-12-29 15:00:00,2696.9345794392525 +2014-12-29 16:00:00,2724.872274143302 +2014-12-29 17:00:00,2877.336448598131 +2014-12-29 18:00:00,3022.158878504673 +2014-12-29 19:00:00,2950.735202492212 +2014-12-29 20:00:00,2826.1619937694704 +2014-12-29 21:00:00,2713.3800623052957 +2014-12-29 22:00:00,2452.791277258567 +2014-12-29 23:00:00,1997.7414330218069 +2014-12-30 00:00:00,1631.0155763239875 +2014-12-30 01:00:00,1289.4953271028037 +2014-12-30 02:00:00,1230.747663551402 +2014-12-30 03:00:00,1214.1246105919004 +2014-12-30 04:00:00,1216.2772585669782 +2014-12-30 05:00:00,1217.9158878504672 +2014-12-30 06:00:00,1387.6760124610591 +2014-12-30 07:00:00,1615.4080996884736 +2014-12-30 08:00:00,1816.9003115264798 +2014-12-30 09:00:00,2254.255451713396 +2014-12-30 10:00:00,2515.7102803738317 +2014-12-30 11:00:00,2579.8816199376947 +2014-12-30 12:00:00,2652.940809968847 +2014-12-30 13:00:00,2630.0342679127725 +2014-12-30 14:00:00,2621.1619937694704 +2014-12-30 15:00:00,2660.4330218068535 +2014-12-30 16:00:00,2672.367601246106 +2014-12-30 17:00:00,2806.1308411214955 +2014-12-30 18:00:00,2975.1744548286606 +2014-12-30 19:00:00,2921.3208722741433 +2014-12-30 20:00:00,2789.121495327103 +2014-12-30 21:00:00,2693.6199376947043 +2014-12-30 22:00:00,2430.5482866043612 +2014-12-30 23:00:00,1981.4610591900312 +2014-12-31 00:00:00,1616.6355140186915 +2014-12-31 01:00:00,1273.1682242990655 +2014-12-31 02:00:00,1216.2834890965732 +2014-12-31 03:00:00,1182.6822429906542 +2014-12-31 04:00:00,1172.361370716511 +2014-12-31 05:00:00,1222.778816199377 +2014-12-31 06:00:00,1410.8816199376947 +2014-12-31 07:00:00,1589.6261682242991 +2014-12-31 08:00:00,1772.8598130841121 +2014-12-31 09:00:00,2281.8442367601247 +2014-12-31 10:00:00,2527.772585669782 +2014-12-31 11:00:00,2613.2367601246106 +2014-12-31 12:00:00,2634.1993769470405 +2014-12-31 13:00:00,2620.9657320872275 +2014-12-31 14:00:00,2627.404984423676 +2014-12-31 15:00:00,2657.5295950155764 +2014-12-31 16:00:00,2619.735202492212 +2014-12-31 17:00:00,2671.5482866043612 +2014-12-31 18:00:00,2691.0560747663553 +2014-12-31 19:00:00,2305.4143302180687 +2014-12-31 20:00:00,1890.2305295950155 +2014-12-31 21:00:00,1761.613707165109 +2014-12-31 22:00:00,1636.4485981308412 +2014-12-31 23:00:00,1439.3956386292834 diff --git a/greykite/data/hourly/hourly_sf_traffic.csv b/greykite/data/hourly/hourly_sf_traffic.csv new file mode 100644 index 0000000..8c75ccb --- /dev/null +++ b/greykite/data/hourly/hourly_sf_traffic.csv @@ -0,0 +1,17545 @@ +ts,y +2015-01-01 00:00:00,0.0048 +2015-01-01 01:00:00,0.0072 +2015-01-01 02:00:00,0.004 +2015-01-01 03:00:00,0.0039 +2015-01-01 04:00:00,0.0042 +2015-01-01 05:00:00,0.004 +2015-01-01 06:00:00,0.0044 +2015-01-01 07:00:00,0.0042 +2015-01-01 08:00:00,0.0086 +2015-01-01 09:00:00,0.0223 +2015-01-01 10:00:00,0.0327 +2015-01-01 11:00:00,0.0409 +2015-01-01 12:00:00,0.0451 +2015-01-01 13:00:00,0.0462 +2015-01-01 14:00:00,0.0498 +2015-01-01 15:00:00,0.0437 +2015-01-01 16:00:00,0.0437 +2015-01-01 17:00:00,0.0407 +2015-01-01 18:00:00,0.0377 +2015-01-01 19:00:00,0.0295 +2015-01-01 20:00:00,0.0259 +2015-01-01 21:00:00,0.0136 +2015-01-01 22:00:00,0.0082 +2015-01-01 23:00:00,0.0039 +2015-01-02 00:00:00,0.0039 +2015-01-02 01:00:00,0.004 +2015-01-02 02:00:00,0.0038 +2015-01-02 03:00:00,0.0037 +2015-01-02 04:00:00,0.0041 +2015-01-02 05:00:00,0.0226 +2015-01-02 06:00:00,0.0429 +2015-01-02 07:00:00,0.0422 +2015-01-02 08:00:00,0.0453 +2015-01-02 09:00:00,0.0549 +2015-01-02 10:00:00,0.0577 +2015-01-02 11:00:00,0.0614 +2015-01-02 12:00:00,0.0658 +2015-01-02 13:00:00,0.063 +2015-01-02 14:00:00,0.0652 +2015-01-02 15:00:00,0.0649 +2015-01-02 16:00:00,0.064 +2015-01-02 17:00:00,0.0608 +2015-01-02 18:00:00,0.0473 +2015-01-02 19:00:00,0.0348 +2015-01-02 20:00:00,0.0276 +2015-01-02 21:00:00,0.0231 +2015-01-02 22:00:00,0.0107 +2015-01-02 23:00:00,0.0042 +2015-01-03 00:00:00,0.0037 +2015-01-03 01:00:00,0.004 +2015-01-03 02:00:00,0.0037 +2015-01-03 03:00:00,0.0037 +2015-01-03 04:00:00,0.0037 +2015-01-03 05:00:00,0.0037 +2015-01-03 06:00:00,0.0037 +2015-01-03 07:00:00,0.0037 +2015-01-03 08:00:00,0.0037 +2015-01-03 09:00:00,0.0037 +2015-01-03 10:00:00,0.0037 +2015-01-03 11:00:00,0.0037 +2015-01-03 12:00:00,0.0037 +2015-01-03 13:00:00,0.0037 +2015-01-03 14:00:00,0.0037 +2015-01-03 15:00:00,0.0037 +2015-01-03 16:00:00,0.0037 +2015-01-03 17:00:00,0.0037 +2015-01-03 18:00:00,0.0037 +2015-01-03 19:00:00,0.0037 +2015-01-03 20:00:00,0.0037 +2015-01-03 21:00:00,0.0037 +2015-01-03 22:00:00,0.0037 +2015-01-03 23:00:00,0.0037 +2015-01-04 00:00:00,0.003 +2015-01-04 01:00:00,0.0021 +2015-01-04 02:00:00,0.0016 +2015-01-04 03:00:00,0.001 +2015-01-04 04:00:00,0.001 +2015-01-04 05:00:00,0.0015 +2015-01-04 06:00:00,0.0032 +2015-01-04 07:00:00,0.0068 +2015-01-04 08:00:00,0.0234 +2015-01-04 09:00:00,0.0367 +2015-01-04 10:00:00,0.0477 +2015-01-04 11:00:00,0.0555 +2015-01-04 12:00:00,0.0517 +2015-01-04 13:00:00,0.0536 +2015-01-04 14:00:00,0.055 +2015-01-04 15:00:00,0.0525 +2015-01-04 16:00:00,0.0527 +2015-01-04 17:00:00,0.0505 +2015-01-04 18:00:00,0.0395 +2015-01-04 19:00:00,0.0313 +2015-01-04 20:00:00,0.0266 +2015-01-04 21:00:00,0.0198 +2015-01-04 22:00:00,0.0071 +2015-01-04 23:00:00,0.003 +2015-01-05 00:00:00,0.0018 +2015-01-05 01:00:00,0.0011 +2015-01-05 02:00:00,0.0009 +2015-01-05 03:00:00,0.0011 +2015-01-05 04:00:00,0.0075 +2015-01-05 05:00:00,0.0429 +2015-01-05 06:00:00,0.077 +2015-01-05 07:00:00,0.2499 +2015-01-05 08:00:00,0.2248 +2015-01-05 09:00:00,0.0683 +2015-01-05 10:00:00,0.0552 +2015-01-05 11:00:00,0.0576 +2015-01-05 12:00:00,0.0571 +2015-01-05 13:00:00,0.0545 +2015-01-05 14:00:00,0.056 +2015-01-05 15:00:00,0.0554 +2015-01-05 16:00:00,0.0581 +2015-01-05 17:00:00,0.059 +2015-01-05 18:00:00,0.0461 +2015-01-05 19:00:00,0.032 +2015-01-05 20:00:00,0.0201 +2015-01-05 21:00:00,0.0119 +2015-01-05 22:00:00,0.0043 +2015-01-05 23:00:00,0.0027 +2015-01-06 00:00:00,0.0037 +2015-01-06 01:00:00,0.0038 +2015-01-06 02:00:00,0.0037 +2015-01-06 03:00:00,0.0041 +2015-01-06 04:00:00,0.0058 +2015-01-06 05:00:00,0.0524 +2015-01-06 06:00:00,0.1277 +2015-01-06 07:00:00,0.3989 +2015-01-06 08:00:00,0.2704 +2015-01-06 09:00:00,0.0607 +2015-01-06 10:00:00,0.0584 +2015-01-06 11:00:00,0.0566 +2015-01-06 12:00:00,0.0545 +2015-01-06 13:00:00,0.0511 +2015-01-06 14:00:00,0.0542 +2015-01-06 15:00:00,0.0582 +2015-01-06 16:00:00,0.0552 +2015-01-06 17:00:00,0.0554 +2015-01-06 18:00:00,0.0436 +2015-01-06 19:00:00,0.0309 +2015-01-06 20:00:00,0.0212 +2015-01-06 21:00:00,0.0135 +2015-01-06 22:00:00,0.0048 +2015-01-06 23:00:00,0.0038 +2015-01-07 00:00:00,0.0038 +2015-01-07 01:00:00,0.0037 +2015-01-07 02:00:00,0.0037 +2015-01-07 03:00:00,0.0038 +2015-01-07 04:00:00,0.0114 +2015-01-07 05:00:00,0.0571 +2015-01-07 06:00:00,0.094 +2015-01-07 07:00:00,0.4122 +2015-01-07 08:00:00,0.3764 +2015-01-07 09:00:00,0.112 +2015-01-07 10:00:00,0.0536 +2015-01-07 11:00:00,0.0569 +2015-01-07 12:00:00,0.0539 +2015-01-07 13:00:00,0.0503 +2015-01-07 14:00:00,0.0506 +2015-01-07 15:00:00,0.0553 +2015-01-07 16:00:00,0.055 +2015-01-07 17:00:00,0.0577 +2015-01-07 18:00:00,0.0432 +2015-01-07 19:00:00,0.0322 +2015-01-07 20:00:00,0.0229 +2015-01-07 21:00:00,0.0088 +2015-01-07 22:00:00,0.0043 +2015-01-07 23:00:00,0.0038 +2015-01-08 00:00:00,0.0037 +2015-01-08 01:00:00,0.0038 +2015-01-08 02:00:00,0.0037 +2015-01-08 03:00:00,0.0037 +2015-01-08 04:00:00,0.0087 +2015-01-08 05:00:00,0.0529 +2015-01-08 06:00:00,0.1087 +2015-01-08 07:00:00,0.3382 +2015-01-08 08:00:00,0.0599 +2015-01-08 09:00:00,0.0613 +2015-01-08 10:00:00,0.0608 +2015-01-08 11:00:00,0.0568 +2015-01-08 12:00:00,0.0575 +2015-01-08 13:00:00,0.0562 +2015-01-08 14:00:00,0.0559 +2015-01-08 15:00:00,0.0618 +2015-01-08 16:00:00,0.0631 +2015-01-08 17:00:00,0.0502 +2015-01-08 18:00:00,0.0037 +2015-01-08 19:00:00,0.0037 +2015-01-08 20:00:00,0.0037 +2015-01-08 21:00:00,0.0037 +2015-01-08 22:00:00,0.0037 +2015-01-08 23:00:00,0.0037 +2015-01-09 00:00:00,0.0037 +2015-01-09 01:00:00,0.0037 +2015-01-09 02:00:00,0.0037 +2015-01-09 03:00:00,0.0037 +2015-01-09 04:00:00,0.0037 +2015-01-09 05:00:00,0.0335 +2015-01-09 06:00:00,0.0779 +2015-01-09 07:00:00,0.066 +2015-01-09 08:00:00,0.0602 +2015-01-09 09:00:00,0.0595 +2015-01-09 10:00:00,0.0573 +2015-01-09 11:00:00,0.0578 +2015-01-09 12:00:00,0.0566 +2015-01-09 13:00:00,0.0584 +2015-01-09 14:00:00,0.0385 +2015-01-09 15:00:00,0.0602 +2015-01-09 16:00:00,0.064 +2015-01-09 17:00:00,0.0557 +2015-01-09 18:00:00,0.0475 +2015-01-09 19:00:00,0.0372 +2015-01-09 20:00:00,0.0265 +2015-01-09 21:00:00,0.0148 +2015-01-09 22:00:00,0.0086 +2015-01-09 23:00:00,0.0038 +2015-01-10 00:00:00,0.0039 +2015-01-10 01:00:00,0.0039 +2015-01-10 02:00:00,0.004 +2015-01-10 03:00:00,0.0037 +2015-01-10 04:00:00,0.0043 +2015-01-10 05:00:00,0.0054 +2015-01-10 06:00:00,0.0132 +2015-01-10 07:00:00,0.0267 +2015-01-10 08:00:00,0.0363 +2015-01-10 09:00:00,0.0423 +2015-01-10 10:00:00,0.0478 +2015-01-10 11:00:00,0.0535 +2015-01-10 12:00:00,0.0517 +2015-01-10 13:00:00,0.0562 +2015-01-10 14:00:00,0.0519 +2015-01-10 15:00:00,0.0527 +2015-01-10 16:00:00,0.0516 +2015-01-10 17:00:00,0.0513 +2015-01-10 18:00:00,0.0411 +2015-01-10 19:00:00,0.0282 +2015-01-10 20:00:00,0.0142 +2015-01-10 21:00:00,0.0229 +2015-01-10 22:00:00,0.0152 +2015-01-10 23:00:00,0.0043 +2015-01-11 00:00:00,0.0041 +2015-01-11 01:00:00,0.0039 +2015-01-11 02:00:00,0.0037 +2015-01-11 03:00:00,0.0038 +2015-01-11 04:00:00,0.0039 +2015-01-11 05:00:00,0.0038 +2015-01-11 06:00:00,0.004 +2015-01-11 07:00:00,0.011 +2015-01-11 08:00:00,0.0253 +2015-01-11 09:00:00,0.0371 +2015-01-11 10:00:00,0.0416 +2015-01-11 11:00:00,0.0447 +2015-01-11 12:00:00,0.0468 +2015-01-11 13:00:00,0.054 +2015-01-11 14:00:00,0.0494 +2015-01-11 15:00:00,0.0519 +2015-01-11 16:00:00,0.0511 +2015-01-11 17:00:00,0.048 +2015-01-11 18:00:00,0.0378 +2015-01-11 19:00:00,0.0309 +2015-01-11 20:00:00,0.0194 +2015-01-11 21:00:00,0.0063 +2015-01-11 22:00:00,0.0037 +2015-01-11 23:00:00,0.0037 +2015-01-12 00:00:00,0.0037 +2015-01-12 01:00:00,0.0037 +2015-01-12 02:00:00,0.0037 +2015-01-12 03:00:00,0.0037 +2015-01-12 04:00:00,0.0037 +2015-01-12 05:00:00,0.0319 +2015-01-12 06:00:00,0.1186 +2015-01-12 07:00:00,0.3672 +2015-01-12 08:00:00,0.3834 +2015-01-12 09:00:00,0.0976 +2015-01-12 10:00:00,0.0569 +2015-01-12 11:00:00,0.0528 +2015-01-12 12:00:00,0.0535 +2015-01-12 13:00:00,0.0501 +2015-01-12 14:00:00,0.0574 +2015-01-12 15:00:00,0.0549 +2015-01-12 16:00:00,0.0422 +2015-01-12 17:00:00,0.0408 +2015-01-12 18:00:00,0.0304 +2015-01-12 19:00:00,0.0231 +2015-01-12 20:00:00,0.0141 +2015-01-12 21:00:00,0.0096 +2015-01-12 22:00:00,0.0039 +2015-01-12 23:00:00,0.0039 +2015-01-13 00:00:00,0.0038 +2015-01-13 01:00:00,0.0037 +2015-01-13 02:00:00,0.0037 +2015-01-13 03:00:00,0.0037 +2015-01-13 04:00:00,0.0131 +2015-01-13 05:00:00,0.0518 +2015-01-13 06:00:00,0.1241 +2015-01-13 07:00:00,0.3371 +2015-01-13 08:00:00,0.3025 +2015-01-13 09:00:00,0.0609 +2015-01-13 10:00:00,0.0585 +2015-01-13 11:00:00,0.0563 +2015-01-13 12:00:00,0.056 +2015-01-13 13:00:00,0.0557 +2015-01-13 14:00:00,0.0525 +2015-01-13 15:00:00,0.0558 +2015-01-13 16:00:00,0.0552 +2015-01-13 17:00:00,0.0583 +2015-01-13 18:00:00,0.0449 +2015-01-13 19:00:00,0.0326 +2015-01-13 20:00:00,0.0222 +2015-01-13 21:00:00,0.0051 +2015-01-13 22:00:00,0.0037 +2015-01-13 23:00:00,0.0037 +2015-01-14 00:00:00,0.0037 +2015-01-14 01:00:00,0.0037 +2015-01-14 02:00:00,0.0037 +2015-01-14 03:00:00,0.0037 +2015-01-14 04:00:00,0.0037 +2015-01-14 05:00:00,0.0421 +2015-01-14 06:00:00,0.1217 +2015-01-14 07:00:00,0.3315 +2015-01-14 08:00:00,0.3618 +2015-01-14 09:00:00,0.0662 +2015-01-14 10:00:00,0.0577 +2015-01-14 11:00:00,0.0573 +2015-01-14 12:00:00,0.0577 +2015-01-14 13:00:00,0.0583 +2015-01-14 14:00:00,0.0553 +2015-01-14 15:00:00,0.0577 +2015-01-14 16:00:00,0.0578 +2015-01-14 17:00:00,0.0595 +2015-01-14 18:00:00,0.0471 +2015-01-14 19:00:00,0.0323 +2015-01-14 20:00:00,0.0234 +2015-01-14 21:00:00,0.0113 +2015-01-14 22:00:00,0.0041 +2015-01-14 23:00:00,0.0044 +2015-01-15 00:00:00,0.0038 +2015-01-15 01:00:00,0.0037 +2015-01-15 02:00:00,0.0037 +2015-01-15 03:00:00,0.0039 +2015-01-15 04:00:00,0.0065 +2015-01-15 05:00:00,0.051 +2015-01-15 06:00:00,0.0958 +2015-01-15 07:00:00,0.2524 +2015-01-15 08:00:00,0.3282 +2015-01-15 09:00:00,0.3108 +2015-01-15 10:00:00,0.086 +2015-01-15 11:00:00,0.0469 +2015-01-15 12:00:00,0.0603 +2015-01-15 13:00:00,0.0554 +2015-01-15 14:00:00,0.0489 +2015-01-15 15:00:00,0.0037 +2015-01-15 16:00:00,0.0037 +2015-01-15 17:00:00,0.0037 +2015-01-15 18:00:00,0.0037 +2015-01-15 19:00:00,0.0037 +2015-01-15 20:00:00,0.0037 +2015-01-15 21:00:00,0.0037 +2015-01-15 22:00:00,0.0037 +2015-01-15 23:00:00,0.0038 +2015-01-16 00:00:00,0.0038 +2015-01-16 01:00:00,0.0037 +2015-01-16 02:00:00,0.0037 +2015-01-16 03:00:00,0.0038 +2015-01-16 04:00:00,0.0104 +2015-01-16 05:00:00,0.048 +2015-01-16 06:00:00,0.068 +2015-01-16 07:00:00,0.0668 +2015-01-16 08:00:00,0.0418 +2015-01-16 09:00:00,0.0507 +2015-01-16 10:00:00,0.0508 +2015-01-16 11:00:00,0.0386 +2015-01-16 12:00:00,0.0302 +2015-01-16 13:00:00,0.0454 +2015-01-16 14:00:00,0.0566 +2015-01-16 15:00:00,0.0572 +2015-01-16 16:00:00,0.036 +2015-01-16 17:00:00,0.0316 +2015-01-16 18:00:00,0.0249 +2015-01-16 19:00:00,0.0167 +2015-01-16 20:00:00,0.0124 +2015-01-16 21:00:00,0.012 +2015-01-16 22:00:00,0.0069 +2015-01-16 23:00:00,0.0039 +2015-01-17 00:00:00,0.0039 +2015-01-17 01:00:00,0.0038 +2015-01-17 02:00:00,0.0037 +2015-01-17 03:00:00,0.0037 +2015-01-17 04:00:00,0.0037 +2015-01-17 05:00:00,0.0045 +2015-01-17 06:00:00,0.0103 +2015-01-17 07:00:00,0.0156 +2015-01-17 08:00:00,0.0176 +2015-01-17 09:00:00,0.0206 +2015-01-17 10:00:00,0.0231 +2015-01-17 11:00:00,0.0228 +2015-01-17 12:00:00,0.025 +2015-01-17 13:00:00,0.0235 +2015-01-17 14:00:00,0.0242 +2015-01-17 15:00:00,0.0231 +2015-01-17 16:00:00,0.0243 +2015-01-17 17:00:00,0.0252 +2015-01-17 18:00:00,0.0196 +2015-01-17 19:00:00,0.0147 +2015-01-17 20:00:00,0.0118 +2015-01-17 21:00:00,0.0115 +2015-01-17 22:00:00,0.0101 +2015-01-17 23:00:00,0.0046 +2015-01-18 00:00:00,0.0031 +2015-01-18 01:00:00,0.0021 +2015-01-18 02:00:00,0.0016 +2015-01-18 03:00:00,0.001 +2015-01-18 04:00:00,0.0011 +2015-01-18 05:00:00,0.0014 +2015-01-18 06:00:00,0.0023 +2015-01-18 07:00:00,0.007 +2015-01-18 08:00:00,0.0228 +2015-01-18 09:00:00,0.0348 +2015-01-18 10:00:00,0.0435 +2015-01-18 11:00:00,0.053 +2015-01-18 12:00:00,0.0476 +2015-01-18 13:00:00,0.0521 +2015-01-18 14:00:00,0.0544 +2015-01-18 15:00:00,0.0524 +2015-01-18 16:00:00,0.0528 +2015-01-18 17:00:00,0.0496 +2015-01-18 18:00:00,0.0398 +2015-01-18 19:00:00,0.0316 +2015-01-18 20:00:00,0.0255 +2015-01-18 21:00:00,0.0185 +2015-01-18 22:00:00,0.0066 +2015-01-18 23:00:00,0.003 +2015-01-19 00:00:00,0.0038 +2015-01-19 01:00:00,0.0038 +2015-01-19 02:00:00,0.0037 +2015-01-19 03:00:00,0.0041 +2015-01-19 04:00:00,0.0054 +2015-01-19 05:00:00,0.0298 +2015-01-19 06:00:00,0.0524 +2015-01-19 07:00:00,0.0432 +2015-01-19 08:00:00,0.0459 +2015-01-19 09:00:00,0.053 +2015-01-19 10:00:00,0.0621 +2015-01-19 11:00:00,0.0635 +2015-01-19 12:00:00,0.0616 +2015-01-19 13:00:00,0.0617 +2015-01-19 14:00:00,0.0601 +2015-01-19 15:00:00,0.0649 +2015-01-19 16:00:00,0.0651 +2015-01-19 17:00:00,0.0574 +2015-01-19 18:00:00,0.048 +2015-01-19 19:00:00,0.0336 +2015-01-19 20:00:00,0.026 +2015-01-19 21:00:00,0.0172 +2015-01-19 22:00:00,0.004 +2015-01-19 23:00:00,0.0038 +2015-01-20 00:00:00,0.0037 +2015-01-20 01:00:00,0.0037 +2015-01-20 02:00:00,0.0037 +2015-01-20 03:00:00,0.0038 +2015-01-20 04:00:00,0.0069 +2015-01-20 05:00:00,0.0537 +2015-01-20 06:00:00,0.1211 +2015-01-20 07:00:00,0.3615 +2015-01-20 08:00:00,0.4015 +2015-01-20 09:00:00,0.3776 +2015-01-20 10:00:00,0.0698 +2015-01-20 11:00:00,0.0563 +2015-01-20 12:00:00,0.0541 +2015-01-20 13:00:00,0.0284 +2015-01-20 14:00:00,0.0509 +2015-01-20 15:00:00,0.0438 +2015-01-20 16:00:00,0.0328 +2015-01-20 17:00:00,0.0325 +2015-01-20 18:00:00,0.0221 +2015-01-20 19:00:00,0.0141 +2015-01-20 20:00:00,0.0104 +2015-01-20 21:00:00,0.0065 +2015-01-20 22:00:00,0.0037 +2015-01-20 23:00:00,0.0038 +2015-01-21 00:00:00,0.0037 +2015-01-21 01:00:00,0.0037 +2015-01-21 02:00:00,0.0037 +2015-01-21 03:00:00,0.0038 +2015-01-21 04:00:00,0.0068 +2015-01-21 05:00:00,0.0396 +2015-01-21 06:00:00,0.0904 +2015-01-21 07:00:00,0.3073 +2015-01-21 08:00:00,0.2815 +2015-01-21 09:00:00,0.0372 +2015-01-21 10:00:00,0.0483 +2015-01-21 11:00:00,0.0468 +2015-01-21 12:00:00,0.0333 +2015-01-21 13:00:00,0.0481 +2015-01-21 14:00:00,0.0534 +2015-01-21 15:00:00,0.0423 +2015-01-21 16:00:00,0.0316 +2015-01-21 17:00:00,0.0312 +2015-01-21 18:00:00,0.023 +2015-01-21 19:00:00,0.0173 +2015-01-21 20:00:00,0.0093 +2015-01-21 21:00:00,0.0047 +2015-01-21 22:00:00,0.0038 +2015-01-21 23:00:00,0.0037 +2015-01-22 00:00:00,0.0037 +2015-01-22 01:00:00,0.0037 +2015-01-22 02:00:00,0.0037 +2015-01-22 03:00:00,0.0037 +2015-01-22 04:00:00,0.0063 +2015-01-22 05:00:00,0.0396 +2015-01-22 06:00:00,0.0981 +2015-01-22 07:00:00,0.3297 +2015-01-22 08:00:00,0.1985 +2015-01-22 09:00:00,0.0592 +2015-01-22 10:00:00,0.0525 +2015-01-22 11:00:00,0.0544 +2015-01-22 12:00:00,0.0552 +2015-01-22 13:00:00,0.0536 +2015-01-22 14:00:00,0.0575 +2015-01-22 15:00:00,0.06 +2015-01-22 16:00:00,0.0566 +2015-01-22 17:00:00,0.0579 +2015-01-22 18:00:00,0.0463 +2015-01-22 19:00:00,0.0338 +2015-01-22 20:00:00,0.024 +2015-01-22 21:00:00,0.0155 +2015-01-22 22:00:00,0.0048 +2015-01-22 23:00:00,0.0037 +2015-01-23 00:00:00,0.0038 +2015-01-23 01:00:00,0.0037 +2015-01-23 02:00:00,0.0037 +2015-01-23 03:00:00,0.0039 +2015-01-23 04:00:00,0.01 +2015-01-23 05:00:00,0.0475 +2015-01-23 06:00:00,0.0734 +2015-01-23 07:00:00,0.0697 +2015-01-23 08:00:00,0.0599 +2015-01-23 09:00:00,0.0548 +2015-01-23 10:00:00,0.0609 +2015-01-23 11:00:00,0.0612 +2015-01-23 12:00:00,0.0586 +2015-01-23 13:00:00,0.0563 +2015-01-23 14:00:00,0.0601 +2015-01-23 15:00:00,0.0611 +2015-01-23 16:00:00,0.0579 +2015-01-23 17:00:00,0.0635 +2015-01-23 18:00:00,0.0506 +2015-01-23 19:00:00,0.0375 +2015-01-23 20:00:00,0.0274 +2015-01-23 21:00:00,0.0236 +2015-01-23 22:00:00,0.0138 +2015-01-23 23:00:00,0.0045 +2015-01-24 00:00:00,0.0044 +2015-01-24 01:00:00,0.004 +2015-01-24 02:00:00,0.0039 +2015-01-24 03:00:00,0.0039 +2015-01-24 04:00:00,0.004 +2015-01-24 05:00:00,0.0047 +2015-01-24 06:00:00,0.0236 +2015-01-24 07:00:00,0.0326 +2015-01-24 08:00:00,0.0457 +2015-01-24 09:00:00,0.0434 +2015-01-24 10:00:00,0.0346 +2015-01-24 11:00:00,0.0369 +2015-01-24 12:00:00,0.0389 +2015-01-24 13:00:00,0.0398 +2015-01-24 14:00:00,0.0388 +2015-01-24 15:00:00,0.0376 +2015-01-24 16:00:00,0.0388 +2015-01-24 17:00:00,0.0394 +2015-01-24 18:00:00,0.032 +2015-01-24 19:00:00,0.0225 +2015-01-24 20:00:00,0.0145 +2015-01-24 21:00:00,0.0172 +2015-01-24 22:00:00,0.0126 +2015-01-24 23:00:00,0.0048 +2015-01-25 00:00:00,0.0032 +2015-01-25 01:00:00,0.0022 +2015-01-25 02:00:00,0.0016 +2015-01-25 03:00:00,0.0011 +2015-01-25 04:00:00,0.0011 +2015-01-25 05:00:00,0.0016 +2015-01-25 06:00:00,0.003 +2015-01-25 07:00:00,0.0095 +2015-01-25 08:00:00,0.0214 +2015-01-25 09:00:00,0.0336 +2015-01-25 10:00:00,0.0416 +2015-01-25 11:00:00,0.0482 +2015-01-25 12:00:00,0.0441 +2015-01-25 13:00:00,0.0513 +2015-01-25 14:00:00,0.0512 +2015-01-25 15:00:00,0.0507 +2015-01-25 16:00:00,0.058 +2015-01-25 17:00:00,0.0583 +2015-01-25 18:00:00,0.0484 +2015-01-25 19:00:00,0.0376 +2015-01-25 20:00:00,0.0274 +2015-01-25 21:00:00,0.0206 +2015-01-25 22:00:00,0.0044 +2015-01-25 23:00:00,0.0039 +2015-01-26 00:00:00,0.0018 +2015-01-26 01:00:00,0.0011 +2015-01-26 02:00:00,0.0009 +2015-01-26 03:00:00,0.001 +2015-01-26 04:00:00,0.003 +2015-01-26 05:00:00,0.0299 +2015-01-26 06:00:00,0.0563 +2015-01-26 07:00:00,0.0541 +2015-01-26 08:00:00,0.0512 +2015-01-26 09:00:00,0.0545 +2015-01-26 10:00:00,0.0525 +2015-01-26 11:00:00,0.0551 +2015-01-26 12:00:00,0.055 +2015-01-26 13:00:00,0.0544 +2015-01-26 14:00:00,0.0555 +2015-01-26 15:00:00,0.0569 +2015-01-26 16:00:00,0.0594 +2015-01-26 17:00:00,0.056 +2015-01-26 18:00:00,0.0445 +2015-01-26 19:00:00,0.0309 +2015-01-26 20:00:00,0.0221 +2015-01-26 21:00:00,0.0137 +2015-01-26 22:00:00,0.0045 +2015-01-26 23:00:00,0.0029 +2015-01-27 00:00:00,0.0037 +2015-01-27 01:00:00,0.0037 +2015-01-27 02:00:00,0.0038 +2015-01-27 03:00:00,0.0042 +2015-01-27 04:00:00,0.0079 +2015-01-27 05:00:00,0.0524 +2015-01-27 06:00:00,0.1236 +2015-01-27 07:00:00,0.3652 +2015-01-27 08:00:00,0.2726 +2015-01-27 09:00:00,0.0577 +2015-01-27 10:00:00,0.0531 +2015-01-27 11:00:00,0.052 +2015-01-27 12:00:00,0.0542 +2015-01-27 13:00:00,0.0543 +2015-01-27 14:00:00,0.0528 +2015-01-27 15:00:00,0.0576 +2015-01-27 16:00:00,0.053 +2015-01-27 17:00:00,0.0533 +2015-01-27 18:00:00,0.0428 +2015-01-27 19:00:00,0.028 +2015-01-27 20:00:00,0.0171 +2015-01-27 21:00:00,0.0134 +2015-01-27 22:00:00,0.0047 +2015-01-27 23:00:00,0.0043 +2015-01-28 00:00:00,0.0037 +2015-01-28 01:00:00,0.0037 +2015-01-28 02:00:00,0.0037 +2015-01-28 03:00:00,0.0042 +2015-01-28 04:00:00,0.0098 +2015-01-28 05:00:00,0.054 +2015-01-28 06:00:00,0.1075 +2015-01-28 07:00:00,0.3329 +2015-01-28 08:00:00,0.2773 +2015-01-28 09:00:00,0.0582 +2015-01-28 10:00:00,0.0596 +2015-01-28 11:00:00,0.057 +2015-01-28 12:00:00,0.0559 +2015-01-28 13:00:00,0.0538 +2015-01-28 14:00:00,0.0554 +2015-01-28 15:00:00,0.0546 +2015-01-28 16:00:00,0.0545 +2015-01-28 17:00:00,0.0554 +2015-01-28 18:00:00,0.0452 +2015-01-28 19:00:00,0.031 +2015-01-28 20:00:00,0.0215 +2015-01-28 21:00:00,0.0096 +2015-01-28 22:00:00,0.0051 +2015-01-28 23:00:00,0.0031 +2015-01-29 00:00:00,0.0021 +2015-01-29 01:00:00,0.0015 +2015-01-29 02:00:00,0.0013 +2015-01-29 03:00:00,0.0014 +2015-01-29 04:00:00,0.0035 +2015-01-29 05:00:00,0.0395 +2015-01-29 06:00:00,0.1167 +2015-01-29 07:00:00,0.3846 +2015-01-29 08:00:00,0.29 +2015-01-29 09:00:00,0.0902 +2015-01-29 10:00:00,0.058 +2015-01-29 11:00:00,0.0581 +2015-01-29 12:00:00,0.0568 +2015-01-29 13:00:00,0.0415 +2015-01-29 14:00:00,0.0529 +2015-01-29 15:00:00,0.0612 +2015-01-29 16:00:00,0.0578 +2015-01-29 17:00:00,0.0565 +2015-01-29 18:00:00,0.0476 +2015-01-29 19:00:00,0.0366 +2015-01-29 20:00:00,0.0214 +2015-01-29 21:00:00,0.0145 +2015-01-29 22:00:00,0.0062 +2015-01-29 23:00:00,0.0039 +2015-01-30 00:00:00,0.0037 +2015-01-30 01:00:00,0.0038 +2015-01-30 02:00:00,0.0037 +2015-01-30 03:00:00,0.0039 +2015-01-30 04:00:00,0.0107 +2015-01-30 05:00:00,0.0449 +2015-01-30 06:00:00,0.0763 +2015-01-30 07:00:00,0.1114 +2015-01-30 08:00:00,0.0593 +2015-01-30 09:00:00,0.0588 +2015-01-30 10:00:00,0.0604 +2015-01-30 11:00:00,0.0566 +2015-01-30 12:00:00,0.0584 +2015-01-30 13:00:00,0.0566 +2015-01-30 14:00:00,0.058 +2015-01-30 15:00:00,0.0619 +2015-01-30 16:00:00,0.0582 +2015-01-30 17:00:00,0.0595 +2015-01-30 18:00:00,0.0522 +2015-01-30 19:00:00,0.0362 +2015-01-30 20:00:00,0.03 +2015-01-30 21:00:00,0.0243 +2015-01-30 22:00:00,0.0082 +2015-01-30 23:00:00,0.0038 +2015-01-31 00:00:00,0.0041 +2015-01-31 01:00:00,0.0038 +2015-01-31 02:00:00,0.0037 +2015-01-31 03:00:00,0.004 +2015-01-31 04:00:00,0.0043 +2015-01-31 05:00:00,0.0072 +2015-01-31 06:00:00,0.0253 +2015-01-31 07:00:00,0.0323 +2015-01-31 08:00:00,0.0421 +2015-01-31 09:00:00,0.0552 +2015-01-31 10:00:00,0.0582 +2015-01-31 11:00:00,0.0595 +2015-01-31 12:00:00,0.0638 +2015-01-31 13:00:00,0.0557 +2015-01-31 14:00:00,0.0606 +2015-01-31 15:00:00,0.0616 +2015-01-31 16:00:00,0.0641 +2015-01-31 17:00:00,0.065 +2015-01-31 18:00:00,0.056 +2015-01-31 19:00:00,0.0415 +2015-01-31 20:00:00,0.0299 +2015-01-31 21:00:00,0.0266 +2015-01-31 22:00:00,0.0241 +2015-01-31 23:00:00,0.0072 +2015-02-01 00:00:00,0.0044 +2015-02-01 01:00:00,0.0038 +2015-02-01 02:00:00,0.0037 +2015-02-01 03:00:00,0.0041 +2015-02-01 04:00:00,0.004 +2015-02-01 05:00:00,0.0041 +2015-02-01 06:00:00,0.0051 +2015-02-01 07:00:00,0.0104 +2015-02-01 08:00:00,0.0198 +2015-02-01 09:00:00,0.0413 +2015-02-01 10:00:00,0.0507 +2015-02-01 11:00:00,0.0566 +2015-02-01 12:00:00,0.0554 +2015-02-01 13:00:00,0.0554 +2015-02-01 14:00:00,0.0589 +2015-02-01 15:00:00,0.0497 +2015-02-01 16:00:00,0.0419 +2015-02-01 17:00:00,0.0387 +2015-02-01 18:00:00,0.0367 +2015-02-01 19:00:00,0.041 +2015-02-01 20:00:00,0.0407 +2015-02-01 21:00:00,0.0246 +2015-02-01 22:00:00,0.0066 +2015-02-01 23:00:00,0.0039 +2015-02-02 00:00:00,0.0037 +2015-02-02 01:00:00,0.0037 +2015-02-02 02:00:00,0.0038 +2015-02-02 03:00:00,0.004 +2015-02-02 04:00:00,0.0104 +2015-02-02 05:00:00,0.0515 +2015-02-02 06:00:00,0.1122 +2015-02-02 07:00:00,0.3278 +2015-02-02 08:00:00,0.1944 +2015-02-02 09:00:00,0.0563 +2015-02-02 10:00:00,0.0517 +2015-02-02 11:00:00,0.0544 +2015-02-02 12:00:00,0.0507 +2015-02-02 13:00:00,0.0544 +2015-02-02 14:00:00,0.0524 +2015-02-02 15:00:00,0.0524 +2015-02-02 16:00:00,0.0532 +2015-02-02 17:00:00,0.0542 +2015-02-02 18:00:00,0.0421 +2015-02-02 19:00:00,0.0307 +2015-02-02 20:00:00,0.0198 +2015-02-02 21:00:00,0.009 +2015-02-02 22:00:00,0.0039 +2015-02-02 23:00:00,0.0038 +2015-02-03 00:00:00,0.0037 +2015-02-03 01:00:00,0.0037 +2015-02-03 02:00:00,0.0037 +2015-02-03 03:00:00,0.004 +2015-02-03 04:00:00,0.0097 +2015-02-03 05:00:00,0.0533 +2015-02-03 06:00:00,0.1286 +2015-02-03 07:00:00,0.3452 +2015-02-03 08:00:00,0.2638 +2015-02-03 09:00:00,0.0613 +2015-02-03 10:00:00,0.06 +2015-02-03 11:00:00,0.0555 +2015-02-03 12:00:00,0.0561 +2015-02-03 13:00:00,0.0553 +2015-02-03 14:00:00,0.0519 +2015-02-03 15:00:00,0.0578 +2015-02-03 16:00:00,0.0564 +2015-02-03 17:00:00,0.0579 +2015-02-03 18:00:00,0.0435 +2015-02-03 19:00:00,0.0311 +2015-02-03 20:00:00,0.0185 +2015-02-03 21:00:00,0.0171 +2015-02-03 22:00:00,0.0042 +2015-02-03 23:00:00,0.0039 +2015-02-04 00:00:00,0.0038 +2015-02-04 01:00:00,0.0037 +2015-02-04 02:00:00,0.0038 +2015-02-04 03:00:00,0.0037 +2015-02-04 04:00:00,0.0131 +2015-02-04 05:00:00,0.0537 +2015-02-04 06:00:00,0.125 +2015-02-04 07:00:00,0.3689 +2015-02-04 08:00:00,0.3243 +2015-02-04 09:00:00,0.0615 +2015-02-04 10:00:00,0.0576 +2015-02-04 11:00:00,0.0568 +2015-02-04 12:00:00,0.059 +2015-02-04 13:00:00,0.0572 +2015-02-04 14:00:00,0.0561 +2015-02-04 15:00:00,0.0536 +2015-02-04 16:00:00,0.0562 +2015-02-04 17:00:00,0.0573 +2015-02-04 18:00:00,0.0491 +2015-02-04 19:00:00,0.0326 +2015-02-04 20:00:00,0.0207 +2015-02-04 21:00:00,0.0122 +2015-02-04 22:00:00,0.0041 +2015-02-04 23:00:00,0.0039 +2015-02-05 00:00:00,0.0037 +2015-02-05 01:00:00,0.0037 +2015-02-05 02:00:00,0.0037 +2015-02-05 03:00:00,0.0039 +2015-02-05 04:00:00,0.01 +2015-02-05 05:00:00,0.0482 +2015-02-05 06:00:00,0.1227 +2015-02-05 07:00:00,0.3531 +2015-02-05 08:00:00,0.1763 +2015-02-05 09:00:00,0.0606 +2015-02-05 10:00:00,0.0601 +2015-02-05 11:00:00,0.0562 +2015-02-05 12:00:00,0.0613 +2015-02-05 13:00:00,0.059 +2015-02-05 14:00:00,0.0554 +2015-02-05 15:00:00,0.0585 +2015-02-05 16:00:00,0.0576 +2015-02-05 17:00:00,0.0606 +2015-02-05 18:00:00,0.0496 +2015-02-05 19:00:00,0.0347 +2015-02-05 20:00:00,0.0209 +2015-02-05 21:00:00,0.0111 +2015-02-05 22:00:00,0.0045 +2015-02-05 23:00:00,0.0038 +2015-02-06 00:00:00,0.0039 +2015-02-06 01:00:00,0.0037 +2015-02-06 02:00:00,0.0037 +2015-02-06 03:00:00,0.0039 +2015-02-06 04:00:00,0.0048 +2015-02-06 05:00:00,0.0473 +2015-02-06 06:00:00,0.073 +2015-02-06 07:00:00,0.0628 +2015-02-06 08:00:00,0.0555 +2015-02-06 09:00:00,0.056 +2015-02-06 10:00:00,0.0552 +2015-02-06 11:00:00,0.0546 +2015-02-06 12:00:00,0.0546 +2015-02-06 13:00:00,0.0536 +2015-02-06 14:00:00,0.0535 +2015-02-06 15:00:00,0.0572 +2015-02-06 16:00:00,0.0531 +2015-02-06 17:00:00,0.0514 +2015-02-06 18:00:00,0.0461 +2015-02-06 19:00:00,0.0344 +2015-02-06 20:00:00,0.0197 +2015-02-06 21:00:00,0.0097 +2015-02-06 22:00:00,0.0102 +2015-02-06 23:00:00,0.0042 +2015-02-07 00:00:00,0.0037 +2015-02-07 01:00:00,0.0039 +2015-02-07 02:00:00,0.0037 +2015-02-07 03:00:00,0.0038 +2015-02-07 04:00:00,0.004 +2015-02-07 05:00:00,0.0074 +2015-02-07 06:00:00,0.0125 +2015-02-07 07:00:00,0.0314 +2015-02-07 08:00:00,0.0415 +2015-02-07 09:00:00,0.0514 +2015-02-07 10:00:00,0.0559 +2015-02-07 11:00:00,0.0605 +2015-02-07 12:00:00,0.0606 +2015-02-07 13:00:00,0.0587 +2015-02-07 14:00:00,0.0593 +2015-02-07 15:00:00,0.0603 +2015-02-07 16:00:00,0.0587 +2015-02-07 17:00:00,0.0547 +2015-02-07 18:00:00,0.0487 +2015-02-07 19:00:00,0.032 +2015-02-07 20:00:00,0.0263 +2015-02-07 21:00:00,0.0264 +2015-02-07 22:00:00,0.0225 +2015-02-07 23:00:00,0.0052 +2015-02-08 00:00:00,0.0042 +2015-02-08 01:00:00,0.004 +2015-02-08 02:00:00,0.0038 +2015-02-08 03:00:00,0.0038 +2015-02-08 04:00:00,0.0037 +2015-02-08 05:00:00,0.0038 +2015-02-08 06:00:00,0.0046 +2015-02-08 07:00:00,0.0085 +2015-02-08 08:00:00,0.0238 +2015-02-08 09:00:00,0.0375 +2015-02-08 10:00:00,0.0435 +2015-02-08 11:00:00,0.0495 +2015-02-08 12:00:00,0.0504 +2015-02-08 13:00:00,0.0498 +2015-02-08 14:00:00,0.0493 +2015-02-08 15:00:00,0.0494 +2015-02-08 16:00:00,0.0503 +2015-02-08 17:00:00,0.0446 +2015-02-08 18:00:00,0.0405 +2015-02-08 19:00:00,0.0301 +2015-02-08 20:00:00,0.0257 +2015-02-08 21:00:00,0.0105 +2015-02-08 22:00:00,0.0049 +2015-02-08 23:00:00,0.0037 +2015-02-09 00:00:00,0.0038 +2015-02-09 01:00:00,0.0037 +2015-02-09 02:00:00,0.0038 +2015-02-09 03:00:00,0.004 +2015-02-09 04:00:00,0.0093 +2015-02-09 05:00:00,0.0495 +2015-02-09 06:00:00,0.1322 +2015-02-09 07:00:00,0.2955 +2015-02-09 08:00:00,0.1863 +2015-02-09 09:00:00,0.057 +2015-02-09 10:00:00,0.0567 +2015-02-09 11:00:00,0.054 +2015-02-09 12:00:00,0.0572 +2015-02-09 13:00:00,0.0542 +2015-02-09 14:00:00,0.0528 +2015-02-09 15:00:00,0.0526 +2015-02-09 16:00:00,0.0551 +2015-02-09 17:00:00,0.0526 +2015-02-09 18:00:00,0.0433 +2015-02-09 19:00:00,0.0307 +2015-02-09 20:00:00,0.013 +2015-02-09 21:00:00,0.0066 +2015-02-09 22:00:00,0.0044 +2015-02-09 23:00:00,0.004 +2015-02-10 00:00:00,0.004 +2015-02-10 01:00:00,0.0037 +2015-02-10 02:00:00,0.0039 +2015-02-10 03:00:00,0.004 +2015-02-10 04:00:00,0.0109 +2015-02-10 05:00:00,0.052 +2015-02-10 06:00:00,0.1189 +2015-02-10 07:00:00,0.3583 +2015-02-10 08:00:00,0.2742 +2015-02-10 09:00:00,0.0591 +2015-02-10 10:00:00,0.0596 +2015-02-10 11:00:00,0.058 +2015-02-10 12:00:00,0.0542 +2015-02-10 13:00:00,0.052 +2015-02-10 14:00:00,0.05 +2015-02-10 15:00:00,0.0579 +2015-02-10 16:00:00,0.0559 +2015-02-10 17:00:00,0.0564 +2015-02-10 18:00:00,0.0484 +2015-02-10 19:00:00,0.0325 +2015-02-10 20:00:00,0.0186 +2015-02-10 21:00:00,0.0092 +2015-02-10 22:00:00,0.0051 +2015-02-10 23:00:00,0.004 +2015-02-11 00:00:00,0.0037 +2015-02-11 01:00:00,0.0037 +2015-02-11 02:00:00,0.0037 +2015-02-11 03:00:00,0.0038 +2015-02-11 04:00:00,0.0104 +2015-02-11 05:00:00,0.0512 +2015-02-11 06:00:00,0.1186 +2015-02-11 07:00:00,0.308 +2015-02-11 08:00:00,0.183 +2015-02-11 09:00:00,0.0598 +2015-02-11 10:00:00,0.0602 +2015-02-11 11:00:00,0.057 +2015-02-11 12:00:00,0.0571 +2015-02-11 13:00:00,0.0548 +2015-02-11 14:00:00,0.0575 +2015-02-11 15:00:00,0.0567 +2015-02-11 16:00:00,0.0611 +2015-02-11 17:00:00,0.0615 +2015-02-11 18:00:00,0.0485 +2015-02-11 19:00:00,0.034 +2015-02-11 20:00:00,0.0252 +2015-02-11 21:00:00,0.016 +2015-02-11 22:00:00,0.0056 +2015-02-11 23:00:00,0.0038 +2015-02-12 00:00:00,0.0039 +2015-02-12 01:00:00,0.0037 +2015-02-12 02:00:00,0.0038 +2015-02-12 03:00:00,0.0039 +2015-02-12 04:00:00,0.0122 +2015-02-12 05:00:00,0.0528 +2015-02-12 06:00:00,0.1178 +2015-02-12 07:00:00,0.3233 +2015-02-12 08:00:00,0.287 +2015-02-12 09:00:00,0.0669 +2015-02-12 10:00:00,0.0625 +2015-02-12 11:00:00,0.0623 +2015-02-12 12:00:00,0.0604 +2015-02-12 13:00:00,0.0528 +2015-02-12 14:00:00,0.0566 +2015-02-12 15:00:00,0.0605 +2015-02-12 16:00:00,0.0619 +2015-02-12 17:00:00,0.0606 +2015-02-12 18:00:00,0.0497 +2015-02-12 19:00:00,0.0365 +2015-02-12 20:00:00,0.027 +2015-02-12 21:00:00,0.0198 +2015-02-12 22:00:00,0.0075 +2015-02-12 23:00:00,0.0041 +2015-02-13 00:00:00,0.0039 +2015-02-13 01:00:00,0.0037 +2015-02-13 02:00:00,0.0038 +2015-02-13 03:00:00,0.0037 +2015-02-13 04:00:00,0.0115 +2015-02-13 05:00:00,0.0449 +2015-02-13 06:00:00,0.0775 +2015-02-13 07:00:00,0.0673 +2015-02-13 08:00:00,0.0618 +2015-02-13 09:00:00,0.0611 +2015-02-13 10:00:00,0.0509 +2015-02-13 11:00:00,0.0511 +2015-02-13 12:00:00,0.0514 +2015-02-13 13:00:00,0.0564 +2015-02-13 14:00:00,0.0621 +2015-02-13 15:00:00,0.0593 +2015-02-13 16:00:00,0.0625 +2015-02-13 17:00:00,0.058 +2015-02-13 18:00:00,0.0519 +2015-02-13 19:00:00,0.0403 +2015-02-13 20:00:00,0.0246 +2015-02-13 21:00:00,0.0177 +2015-02-13 22:00:00,0.01 +2015-02-13 23:00:00,0.0044 +2015-02-14 00:00:00,0.0029 +2015-02-14 01:00:00,0.0019 +2015-02-14 02:00:00,0.0015 +2015-02-14 03:00:00,0.0012 +2015-02-14 04:00:00,0.0014 +2015-02-14 05:00:00,0.0037 +2015-02-14 06:00:00,0.0146 +2015-02-14 07:00:00,0.0249 +2015-02-14 08:00:00,0.0355 +2015-02-14 09:00:00,0.0446 +2015-02-14 10:00:00,0.0475 +2015-02-14 11:00:00,0.0511 +2015-02-14 12:00:00,0.0543 +2015-02-14 13:00:00,0.0508 +2015-02-14 14:00:00,0.0527 +2015-02-14 15:00:00,0.054 +2015-02-14 16:00:00,0.0539 +2015-02-14 17:00:00,0.0521 +2015-02-14 18:00:00,0.0454 +2015-02-14 19:00:00,0.0303 +2015-02-14 20:00:00,0.0238 +2015-02-14 21:00:00,0.0225 +2015-02-14 22:00:00,0.0189 +2015-02-14 23:00:00,0.0057 +2015-02-15 00:00:00,0.0034 +2015-02-15 01:00:00,0.0021 +2015-02-15 02:00:00,0.0015 +2015-02-15 03:00:00,0.0012 +2015-02-15 04:00:00,0.0011 +2015-02-15 05:00:00,0.0016 +2015-02-15 06:00:00,0.0031 +2015-02-15 07:00:00,0.0075 +2015-02-15 08:00:00,0.0182 +2015-02-15 09:00:00,0.0338 +2015-02-15 10:00:00,0.042 +2015-02-15 11:00:00,0.0483 +2015-02-15 12:00:00,0.0501 +2015-02-15 13:00:00,0.0487 +2015-02-15 14:00:00,0.0505 +2015-02-15 15:00:00,0.0468 +2015-02-15 16:00:00,0.0464 +2015-02-15 17:00:00,0.0434 +2015-02-15 18:00:00,0.0388 +2015-02-15 19:00:00,0.0326 +2015-02-15 20:00:00,0.0258 +2015-02-15 21:00:00,0.0186 +2015-02-15 22:00:00,0.0052 +2015-02-15 23:00:00,0.0029 +2015-02-16 00:00:00,0.0018 +2015-02-16 01:00:00,0.0011 +2015-02-16 02:00:00,0.0009 +2015-02-16 03:00:00,0.0011 +2015-02-16 04:00:00,0.0054 +2015-02-16 05:00:00,0.04 +2015-02-16 06:00:00,0.0885 +2015-02-16 07:00:00,0.2219 +2015-02-16 08:00:00,0.141 +2015-02-16 09:00:00,0.053 +2015-02-16 10:00:00,0.0523 +2015-02-16 11:00:00,0.0524 +2015-02-16 12:00:00,0.0511 +2015-02-16 13:00:00,0.0518 +2015-02-16 14:00:00,0.0526 +2015-02-16 15:00:00,0.054 +2015-02-16 16:00:00,0.0553 +2015-02-16 17:00:00,0.0559 +2015-02-16 18:00:00,0.0451 +2015-02-16 19:00:00,0.031 +2015-02-16 20:00:00,0.0193 +2015-02-16 21:00:00,0.0102 +2015-02-16 22:00:00,0.0043 +2015-02-16 23:00:00,0.0027 +2015-02-17 00:00:00,0.0017 +2015-02-17 01:00:00,0.0011 +2015-02-17 02:00:00,0.001 +2015-02-17 03:00:00,0.0012 +2015-02-17 04:00:00,0.0056 +2015-02-17 05:00:00,0.044 +2015-02-17 06:00:00,0.1237 +2015-02-17 07:00:00,0.3313 +2015-02-17 08:00:00,0.3326 +2015-02-17 09:00:00,0.0846 +2015-02-17 10:00:00,0.0584 +2015-02-17 11:00:00,0.059 +2015-02-17 12:00:00,0.0555 +2015-02-17 13:00:00,0.0534 +2015-02-17 14:00:00,0.055 +2015-02-17 15:00:00,0.0529 +2015-02-17 16:00:00,0.0551 +2015-02-17 17:00:00,0.0522 +2015-02-17 18:00:00,0.0468 +2015-02-17 19:00:00,0.0306 +2015-02-17 20:00:00,0.0232 +2015-02-17 21:00:00,0.0123 +2015-02-17 22:00:00,0.0047 +2015-02-17 23:00:00,0.0029 +2015-02-18 00:00:00,0.0017 +2015-02-18 01:00:00,0.0011 +2015-02-18 02:00:00,0.001 +2015-02-18 03:00:00,0.0012 +2015-02-18 04:00:00,0.0068 +2015-02-18 05:00:00,0.0468 +2015-02-18 06:00:00,0.0977 +2015-02-18 07:00:00,0.0996 +2015-02-18 08:00:00,0.0542 +2015-02-18 09:00:00,0.0626 +2015-02-18 10:00:00,0.0597 +2015-02-18 11:00:00,0.0559 +2015-02-18 12:00:00,0.0552 +2015-02-18 13:00:00,0.0553 +2015-02-18 14:00:00,0.057 +2015-02-18 15:00:00,0.0582 +2015-02-18 16:00:00,0.0554 +2015-02-18 17:00:00,0.054 +2015-02-18 18:00:00,0.0476 +2015-02-18 19:00:00,0.0341 +2015-02-18 20:00:00,0.0236 +2015-02-18 21:00:00,0.0153 +2015-02-18 22:00:00,0.0042 +2015-02-18 23:00:00,0.0038 +2015-02-19 00:00:00,0.0041 +2015-02-19 01:00:00,0.0037 +2015-02-19 02:00:00,0.0038 +2015-02-19 03:00:00,0.0038 +2015-02-19 04:00:00,0.0105 +2015-02-19 05:00:00,0.0522 +2015-02-19 06:00:00,0.0774 +2015-02-19 07:00:00,0.0684 +2015-02-19 08:00:00,0.0572 +2015-02-19 09:00:00,0.0618 +2015-02-19 10:00:00,0.0591 +2015-02-19 11:00:00,0.0599 +2015-02-19 12:00:00,0.0523 +2015-02-19 13:00:00,0.046 +2015-02-19 14:00:00,0.0587 +2015-02-19 15:00:00,0.0587 +2015-02-19 16:00:00,0.0605 +2015-02-19 17:00:00,0.063 +2015-02-19 18:00:00,0.0481 +2015-02-19 19:00:00,0.034 +2015-02-19 20:00:00,0.0225 +2015-02-19 21:00:00,0.0146 +2015-02-19 22:00:00,0.0059 +2015-02-19 23:00:00,0.0032 +2015-02-20 00:00:00,0.0019 +2015-02-20 01:00:00,0.0013 +2015-02-20 02:00:00,0.0011 +2015-02-20 03:00:00,0.0012 +2015-02-20 04:00:00,0.0069 +2015-02-20 05:00:00,0.0485 +2015-02-20 06:00:00,0.0743 +2015-02-20 07:00:00,0.1264 +2015-02-20 08:00:00,0.1383 +2015-02-20 09:00:00,0.0607 +2015-02-20 10:00:00,0.058 +2015-02-20 11:00:00,0.0592 +2015-02-20 12:00:00,0.0587 +2015-02-20 13:00:00,0.0594 +2015-02-20 14:00:00,0.0611 +2015-02-20 15:00:00,0.0608 +2015-02-20 16:00:00,0.0612 +2015-02-20 17:00:00,0.0576 +2015-02-20 18:00:00,0.0523 +2015-02-20 19:00:00,0.0405 +2015-02-20 20:00:00,0.0269 +2015-02-20 21:00:00,0.0228 +2015-02-20 22:00:00,0.0075 +2015-02-20 23:00:00,0.0044 +2015-02-21 00:00:00,0.0039 +2015-02-21 01:00:00,0.004 +2015-02-21 02:00:00,0.0038 +2015-02-21 03:00:00,0.0037 +2015-02-21 04:00:00,0.0038 +2015-02-21 05:00:00,0.0081 +2015-02-21 06:00:00,0.0239 +2015-02-21 07:00:00,0.0334 +2015-02-21 08:00:00,0.0438 +2015-02-21 09:00:00,0.053 +2015-02-21 10:00:00,0.0588 +2015-02-21 11:00:00,0.0602 +2015-02-21 12:00:00,0.0623 +2015-02-21 13:00:00,0.055 +2015-02-21 14:00:00,0.0558 +2015-02-21 15:00:00,0.0568 +2015-02-21 16:00:00,0.0574 +2015-02-21 17:00:00,0.0564 +2015-02-21 18:00:00,0.0489 +2015-02-21 19:00:00,0.0341 +2015-02-21 20:00:00,0.0258 +2015-02-21 21:00:00,0.0243 +2015-02-21 22:00:00,0.0211 +2015-02-21 23:00:00,0.0065 +2015-02-22 00:00:00,0.0034 +2015-02-22 01:00:00,0.0021 +2015-02-22 02:00:00,0.0015 +2015-02-22 03:00:00,0.0012 +2015-02-22 04:00:00,0.0011 +2015-02-22 05:00:00,0.0016 +2015-02-22 06:00:00,0.0031 +2015-02-22 07:00:00,0.0075 +2015-02-22 08:00:00,0.0182 +2015-02-22 09:00:00,0.0338 +2015-02-22 10:00:00,0.042 +2015-02-22 11:00:00,0.0483 +2015-02-22 12:00:00,0.0501 +2015-02-22 13:00:00,0.0487 +2015-02-22 14:00:00,0.0505 +2015-02-22 15:00:00,0.0468 +2015-02-22 16:00:00,0.0464 +2015-02-22 17:00:00,0.0434 +2015-02-22 18:00:00,0.0388 +2015-02-22 19:00:00,0.0326 +2015-02-22 20:00:00,0.0258 +2015-02-22 21:00:00,0.0186 +2015-02-22 22:00:00,0.0052 +2015-02-22 23:00:00,0.0029 +2015-02-23 00:00:00,0.0018 +2015-02-23 01:00:00,0.0011 +2015-02-23 02:00:00,0.001 +2015-02-23 03:00:00,0.0013 +2015-02-23 04:00:00,0.0065 +2015-02-23 05:00:00,0.0426 +2015-02-23 06:00:00,0.1003 +2015-02-23 07:00:00,0.2761 +2015-02-23 08:00:00,0.1171 +2015-02-23 09:00:00,0.0588 +2015-02-23 10:00:00,0.0568 +2015-02-23 11:00:00,0.057 +2015-02-23 12:00:00,0.0569 +2015-02-23 13:00:00,0.0516 +2015-02-23 14:00:00,0.0542 +2015-02-23 15:00:00,0.056 +2015-02-23 16:00:00,0.0536 +2015-02-23 17:00:00,0.0552 +2015-02-23 18:00:00,0.0437 +2015-02-23 19:00:00,0.0319 +2015-02-23 20:00:00,0.0184 +2015-02-23 21:00:00,0.008 +2015-02-23 22:00:00,0.0038 +2015-02-23 23:00:00,0.0037 +2015-02-24 00:00:00,0.0039 +2015-02-24 01:00:00,0.0037 +2015-02-24 02:00:00,0.0037 +2015-02-24 03:00:00,0.0043 +2015-02-24 04:00:00,0.004 +2015-02-24 05:00:00,0.0549 +2015-02-24 06:00:00,0.1508 +2015-02-24 07:00:00,0.3292 +2015-02-24 08:00:00,0.186 +2015-02-24 09:00:00,0.0645 +2015-02-24 10:00:00,0.0603 +2015-02-24 11:00:00,0.0562 +2015-02-24 12:00:00,0.056 +2015-02-24 13:00:00,0.0557 +2015-02-24 14:00:00,0.0556 +2015-02-24 15:00:00,0.0592 +2015-02-24 16:00:00,0.0553 +2015-02-24 17:00:00,0.0598 +2015-02-24 18:00:00,0.047 +2015-02-24 19:00:00,0.0336 +2015-02-24 20:00:00,0.0215 +2015-02-24 21:00:00,0.0107 +2015-02-24 22:00:00,0.0043 +2015-02-24 23:00:00,0.0038 +2015-02-25 00:00:00,0.0037 +2015-02-25 01:00:00,0.0037 +2015-02-25 02:00:00,0.0038 +2015-02-25 03:00:00,0.0038 +2015-02-25 04:00:00,0.0072 +2015-02-25 05:00:00,0.0524 +2015-02-25 06:00:00,0.1157 +2015-02-25 07:00:00,0.329 +2015-02-25 08:00:00,0.184 +2015-02-25 09:00:00,0.0693 +2015-02-25 10:00:00,0.0608 +2015-02-25 11:00:00,0.0591 +2015-02-25 12:00:00,0.0584 +2015-02-25 13:00:00,0.0558 +2015-02-25 14:00:00,0.056 +2015-02-25 15:00:00,0.0589 +2015-02-25 16:00:00,0.0567 +2015-02-25 17:00:00,0.0557 +2015-02-25 18:00:00,0.0484 +2015-02-25 19:00:00,0.0335 +2015-02-25 20:00:00,0.0255 +2015-02-25 21:00:00,0.0068 +2015-02-25 22:00:00,0.0045 +2015-02-25 23:00:00,0.0039 +2015-02-26 00:00:00,0.0037 +2015-02-26 01:00:00,0.0037 +2015-02-26 02:00:00,0.0037 +2015-02-26 03:00:00,0.0039 +2015-02-26 04:00:00,0.0072 +2015-02-26 05:00:00,0.0534 +2015-02-26 06:00:00,0.1302 +2015-02-26 07:00:00,0.2721 +2015-02-26 08:00:00,0.0604 +2015-02-26 09:00:00,0.0621 +2015-02-26 10:00:00,0.0598 +2015-02-26 11:00:00,0.0563 +2015-02-26 12:00:00,0.0596 +2015-02-26 13:00:00,0.0557 +2015-02-26 14:00:00,0.0587 +2015-02-26 15:00:00,0.0601 +2015-02-26 16:00:00,0.0609 +2015-02-26 17:00:00,0.0615 +2015-02-26 18:00:00,0.0487 +2015-02-26 19:00:00,0.0374 +2015-02-26 20:00:00,0.0258 +2015-02-26 21:00:00,0.0159 +2015-02-26 22:00:00,0.0046 +2015-02-26 23:00:00,0.004 +2015-02-27 00:00:00,0.0038 +2015-02-27 01:00:00,0.0037 +2015-02-27 02:00:00,0.0037 +2015-02-27 03:00:00,0.0037 +2015-02-27 04:00:00,0.0091 +2015-02-27 05:00:00,0.0481 +2015-02-27 06:00:00,0.0747 +2015-02-27 07:00:00,0.0785 +2015-02-27 08:00:00,0.0601 +2015-02-27 09:00:00,0.0628 +2015-02-27 10:00:00,0.0563 +2015-02-27 11:00:00,0.0575 +2015-02-27 12:00:00,0.0595 +2015-02-27 13:00:00,0.0616 +2015-02-27 14:00:00,0.0597 +2015-02-27 15:00:00,0.0598 +2015-02-27 16:00:00,0.0592 +2015-02-27 17:00:00,0.0625 +2015-02-27 18:00:00,0.0498 +2015-02-27 19:00:00,0.0378 +2015-02-27 20:00:00,0.0266 +2015-02-27 21:00:00,0.0224 +2015-02-27 22:00:00,0.0089 +2015-02-27 23:00:00,0.0045 +2015-02-28 00:00:00,0.0029 +2015-02-28 01:00:00,0.0019 +2015-02-28 02:00:00,0.0015 +2015-02-28 03:00:00,0.0012 +2015-02-28 04:00:00,0.0014 +2015-02-28 05:00:00,0.0049 +2015-02-28 06:00:00,0.0165 +2015-02-28 07:00:00,0.0265 +2015-02-28 08:00:00,0.0366 +2015-02-28 09:00:00,0.0469 +2015-02-28 10:00:00,0.0517 +2015-02-28 11:00:00,0.0 +2015-02-28 12:00:00,0.0 +2015-02-28 13:00:00,0.0 +2015-02-28 14:00:00,0.0 +2015-02-28 15:00:00,0.0 +2015-02-28 16:00:00,0.0 +2015-02-28 17:00:00,0.0 +2015-02-28 18:00:00,0.0 +2015-02-28 19:00:00,0.0 +2015-02-28 20:00:00,0.0 +2015-02-28 21:00:00,0.0 +2015-02-28 22:00:00,0.0 +2015-02-28 23:00:00,0.0 +2015-03-01 00:00:00,0.0034 +2015-03-01 01:00:00,0.0021 +2015-03-01 02:00:00,0.0015 +2015-03-01 03:00:00,0.0012 +2015-03-01 04:00:00,0.0011 +2015-03-01 05:00:00,0.0016 +2015-03-01 06:00:00,0.0031 +2015-03-01 07:00:00,0.0075 +2015-03-01 08:00:00,0.0182 +2015-03-01 09:00:00,0.0338 +2015-03-01 10:00:00,0.042 +2015-03-01 11:00:00,0.0483 +2015-03-01 12:00:00,0.0501 +2015-03-01 13:00:00,0.0487 +2015-03-01 14:00:00,0.0505 +2015-03-01 15:00:00,0.0468 +2015-03-01 16:00:00,0.0443 +2015-03-01 17:00:00,0.0408 +2015-03-01 18:00:00,0.0371 +2015-03-01 19:00:00,0.0326 +2015-03-01 20:00:00,0.0296 +2015-03-01 21:00:00,0.0165 +2015-03-01 22:00:00,0.0061 +2015-03-01 23:00:00,0.003 +2015-03-02 00:00:00,0.0018 +2015-03-02 01:00:00,0.0011 +2015-03-02 02:00:00,0.001 +2015-03-02 03:00:00,0.0013 +2015-03-02 04:00:00,0.0065 +2015-03-02 05:00:00,0.0418 +2015-03-02 06:00:00,0.0909 +2015-03-02 07:00:00,0.2342 +2015-03-02 08:00:00,0.1418 +2015-03-02 09:00:00,0.0539 +2015-03-02 10:00:00,0.0511 +2015-03-02 11:00:00,0.0508 +2015-03-02 12:00:00,0.0552 +2015-03-02 13:00:00,0.0546 +2015-03-02 14:00:00,0.0522 +2015-03-02 15:00:00,0.0572 +2015-03-02 16:00:00,0.055 +2015-03-02 17:00:00,0.0528 +2015-03-02 18:00:00,0.0452 +2015-03-02 19:00:00,0.0306 +2015-03-02 20:00:00,0.0223 +2015-03-02 21:00:00,0.0111 +2015-03-02 22:00:00,0.0037 +2015-03-02 23:00:00,0.0038 +2015-03-03 00:00:00,0.0037 +2015-03-03 01:00:00,0.0037 +2015-03-03 02:00:00,0.0037 +2015-03-03 03:00:00,0.0037 +2015-03-03 04:00:00,0.0116 +2015-03-03 05:00:00,0.0528 +2015-03-03 06:00:00,0.181 +2015-03-03 07:00:00,0.3499 +2015-03-03 08:00:00,0.3561 +2015-03-03 09:00:00,0.1203 +2015-03-03 10:00:00,0.0592 +2015-03-03 11:00:00,0.056 +2015-03-03 12:00:00,0.0571 +2015-03-03 13:00:00,0.057 +2015-03-03 14:00:00,0.0564 +2015-03-03 15:00:00,0.0548 +2015-03-03 16:00:00,0.054 +2015-03-03 17:00:00,0.0533 +2015-03-03 18:00:00,0.0471 +2015-03-03 19:00:00,0.0318 +2015-03-03 20:00:00,0.0239 +2015-03-03 21:00:00,0.0143 +2015-03-03 22:00:00,0.0047 +2015-03-03 23:00:00,0.0038 +2015-03-04 00:00:00,0.0038 +2015-03-04 01:00:00,0.0037 +2015-03-04 02:00:00,0.0037 +2015-03-04 03:00:00,0.0037 +2015-03-04 04:00:00,0.008 +2015-03-04 05:00:00,0.052 +2015-03-04 06:00:00,0.1271 +2015-03-04 07:00:00,0.3246 +2015-03-04 08:00:00,0.1928 +2015-03-04 09:00:00,0.063 +2015-03-04 10:00:00,0.0599 +2015-03-04 11:00:00,0.0562 +2015-03-04 12:00:00,0.0579 +2015-03-04 13:00:00,0.0518 +2015-03-04 14:00:00,0.0538 +2015-03-04 15:00:00,0.0556 +2015-03-04 16:00:00,0.0577 +2015-03-04 17:00:00,0.0593 +2015-03-04 18:00:00,0.0499 +2015-03-04 19:00:00,0.0327 +2015-03-04 20:00:00,0.0227 +2015-03-04 21:00:00,0.0131 +2015-03-04 22:00:00,0.0052 +2015-03-04 23:00:00,0.0031 +2015-03-05 00:00:00,0.0021 +2015-03-05 01:00:00,0.0015 +2015-03-05 02:00:00,0.0013 +2015-03-05 03:00:00,0.0014 +2015-03-05 04:00:00,0.0065 +2015-03-05 05:00:00,0.047 +2015-03-05 06:00:00,0.1247 +2015-03-05 07:00:00,0.3309 +2015-03-05 08:00:00,0.2857 +2015-03-05 09:00:00,0.0649 +2015-03-05 10:00:00,0.0629 +2015-03-05 11:00:00,0.0589 +2015-03-05 12:00:00,0.0615 +2015-03-05 13:00:00,0.0555 +2015-03-05 14:00:00,0.0572 +2015-03-05 15:00:00,0.0598 +2015-03-05 16:00:00,0.0575 +2015-03-05 17:00:00,0.0563 +2015-03-05 18:00:00,0.0483 +2015-03-05 19:00:00,0.0386 +2015-03-05 20:00:00,0.027 +2015-03-05 21:00:00,0.0165 +2015-03-05 22:00:00,0.004 +2015-03-05 23:00:00,0.0041 +2015-03-06 00:00:00,0.0039 +2015-03-06 01:00:00,0.0038 +2015-03-06 02:00:00,0.0037 +2015-03-06 03:00:00,0.0038 +2015-03-06 04:00:00,0.0089 +2015-03-06 05:00:00,0.046 +2015-03-06 06:00:00,0.0803 +2015-03-06 07:00:00,0.0716 +2015-03-06 08:00:00,0.0624 +2015-03-06 09:00:00,0.063 +2015-03-06 10:00:00,0.0587 +2015-03-06 11:00:00,0.0598 +2015-03-06 12:00:00,0.0614 +2015-03-06 13:00:00,0.0605 +2015-03-06 14:00:00,0.0601 +2015-03-06 15:00:00,0.0602 +2015-03-06 16:00:00,0.0599 +2015-03-06 17:00:00,0.0621 +2015-03-06 18:00:00,0.0497 +2015-03-06 19:00:00,0.0399 +2015-03-06 20:00:00,0.0291 +2015-03-06 21:00:00,0.024 +2015-03-06 22:00:00,0.0131 +2015-03-06 23:00:00,0.0038 +2015-03-07 00:00:00,0.0038 +2015-03-07 01:00:00,0.0039 +2015-03-07 02:00:00,0.0039 +2015-03-07 03:00:00,0.0038 +2015-03-07 04:00:00,0.0039 +2015-03-07 05:00:00,0.006 +2015-03-07 06:00:00,0.0248 +2015-03-07 07:00:00,0.036 +2015-03-07 08:00:00,0.0503 +2015-03-07 09:00:00,0.0554 +2015-03-07 10:00:00,0.0601 +2015-03-07 11:00:00,0.0638 +2015-03-07 12:00:00,0.0598 +2015-03-07 13:00:00,0.0624 +2015-03-07 14:00:00,0.0596 +2015-03-07 15:00:00,0.0634 +2015-03-07 16:00:00,0.0629 +2015-03-07 17:00:00,0.0614 +2015-03-07 18:00:00,0.0508 +2015-03-07 19:00:00,0.0395 +2015-03-07 20:00:00,0.032 +2015-03-07 21:00:00,0.0319 +2015-03-07 22:00:00,0.0229 +2015-03-07 23:00:00,0.0048 +2015-03-08 00:00:00,0.0044 +2015-03-08 01:00:00,0.0041 +2015-03-08 02:00:00,0.0041 +2015-03-08 03:00:00,0.004 +2015-03-08 04:00:00,0.0045 +2015-03-08 05:00:00,0.0077 +2015-03-08 06:00:00,0.0079 +2015-03-08 07:00:00,0.029 +2015-03-08 08:00:00,0.042 +2015-03-08 09:00:00,0.0506 +2015-03-08 10:00:00,0.0589 +2015-03-08 11:00:00,0.0625 +2015-03-08 12:00:00,0.0693 +2015-03-08 13:00:00,0.0641 +2015-03-08 14:00:00,0.0637 +2015-03-08 15:00:00,0.0648 +2015-03-08 16:00:00,0.0652 +2015-03-08 17:00:00,0.0536 +2015-03-08 18:00:00,0.0414 +2015-03-08 19:00:00,0.0357 +2015-03-08 20:00:00,0.0321 +2015-03-08 21:00:00,0.0109 +2015-03-08 22:00:00,0.0039 +2015-03-08 23:00:00,0.004 +2015-03-09 00:00:00,0.0038 +2015-03-09 01:00:00,0.0037 +2015-03-09 02:00:00,0.004 +2015-03-09 03:00:00,0.0082 +2015-03-09 04:00:00,0.0534 +2015-03-09 05:00:00,0.0809 +2015-03-09 06:00:00,0.2835 +2015-03-09 07:00:00,0.0599 +2015-03-09 08:00:00,0.0572 +2015-03-09 09:00:00,0.0547 +2015-03-09 10:00:00,0.0559 +2015-03-09 11:00:00,0.0568 +2015-03-09 12:00:00,0.0553 +2015-03-09 13:00:00,0.054 +2015-03-09 14:00:00,0.0555 +2015-03-09 15:00:00,0.0564 +2015-03-09 16:00:00,0.0548 +2015-03-09 17:00:00,0.0444 +2015-03-09 18:00:00,0.0323 +2015-03-09 19:00:00,0.0283 +2015-03-09 20:00:00,0.0103 +2015-03-09 21:00:00,0.0043 +2015-03-09 22:00:00,0.0039 +2015-03-09 23:00:00,0.0037 +2015-03-10 00:00:00,0.0037 +2015-03-10 01:00:00,0.0038 +2015-03-10 02:00:00,0.0037 +2015-03-10 03:00:00,0.0139 +2015-03-10 04:00:00,0.0509 +2015-03-10 05:00:00,0.1198 +2015-03-10 06:00:00,0.3538 +2015-03-10 07:00:00,0.4167 +2015-03-10 08:00:00,0.3541 +2015-03-10 09:00:00,0.1 +2015-03-10 10:00:00,0.0548 +2015-03-10 11:00:00,0.0563 +2015-03-10 12:00:00,0.0571 +2015-03-10 13:00:00,0.0551 +2015-03-10 14:00:00,0.0566 +2015-03-10 15:00:00,0.0583 +2015-03-10 16:00:00,0.0543 +2015-03-10 17:00:00,0.0485 +2015-03-10 18:00:00,0.0333 +2015-03-10 19:00:00,0.0261 +2015-03-10 20:00:00,0.0178 +2015-03-10 21:00:00,0.0042 +2015-03-10 22:00:00,0.0041 +2015-03-10 23:00:00,0.0037 +2015-03-11 00:00:00,0.0037 +2015-03-11 01:00:00,0.0038 +2015-03-11 02:00:00,0.0038 +2015-03-11 03:00:00,0.0097 +2015-03-11 04:00:00,0.0518 +2015-03-11 05:00:00,0.0862 +2015-03-11 06:00:00,0.3055 +2015-03-11 07:00:00,0.0848 +2015-03-11 08:00:00,0.061 +2015-03-11 09:00:00,0.0616 +2015-03-11 10:00:00,0.0571 +2015-03-11 11:00:00,0.0558 +2015-03-11 12:00:00,0.0565 +2015-03-11 13:00:00,0.0553 +2015-03-11 14:00:00,0.0552 +2015-03-11 15:00:00,0.0568 +2015-03-11 16:00:00,0.0563 +2015-03-11 17:00:00,0.0489 +2015-03-11 18:00:00,0.0344 +2015-03-11 19:00:00,0.0275 +2015-03-11 20:00:00,0.0145 +2015-03-11 21:00:00,0.0044 +2015-03-11 22:00:00,0.004 +2015-03-11 23:00:00,0.0037 +2015-03-12 00:00:00,0.0038 +2015-03-12 01:00:00,0.0037 +2015-03-12 02:00:00,0.0038 +2015-03-12 03:00:00,0.0116 +2015-03-12 04:00:00,0.0525 +2015-03-12 05:00:00,0.1072 +2015-03-12 06:00:00,0.2973 +2015-03-12 07:00:00,0.1941 +2015-03-12 08:00:00,0.0636 +2015-03-12 09:00:00,0.0607 +2015-03-12 10:00:00,0.0588 +2015-03-12 11:00:00,0.0604 +2015-03-12 12:00:00,0.058 +2015-03-12 13:00:00,0.0572 +2015-03-12 14:00:00,0.0584 +2015-03-12 15:00:00,0.0581 +2015-03-12 16:00:00,0.0575 +2015-03-12 17:00:00,0.0499 +2015-03-12 18:00:00,0.0381 +2015-03-12 19:00:00,0.0293 +2015-03-12 20:00:00,0.0164 +2015-03-12 21:00:00,0.0046 +2015-03-12 22:00:00,0.004 +2015-03-12 23:00:00,0.004 +2015-03-13 00:00:00,0.0038 +2015-03-13 01:00:00,0.0037 +2015-03-13 02:00:00,0.0037 +2015-03-13 03:00:00,0.0037 +2015-03-13 04:00:00,0.0481 +2015-03-13 05:00:00,0.0783 +2015-03-13 06:00:00,0.0667 +2015-03-13 07:00:00,0.0618 +2015-03-13 08:00:00,0.0634 +2015-03-13 09:00:00,0.0606 +2015-03-13 10:00:00,0.0607 +2015-03-13 11:00:00,0.061 +2015-03-13 12:00:00,0.063 +2015-03-13 13:00:00,0.0615 +2015-03-13 14:00:00,0.0663 +2015-03-13 15:00:00,0.0601 +2015-03-13 16:00:00,0.0598 +2015-03-13 17:00:00,0.0524 +2015-03-13 18:00:00,0.0405 +2015-03-13 19:00:00,0.0312 +2015-03-13 20:00:00,0.0292 +2015-03-13 21:00:00,0.008 +2015-03-13 22:00:00,0.0048 +2015-03-13 23:00:00,0.0038 +2015-03-14 00:00:00,0.0041 +2015-03-14 01:00:00,0.0038 +2015-03-14 02:00:00,0.0039 +2015-03-14 03:00:00,0.004 +2015-03-14 04:00:00,0.0056 +2015-03-14 05:00:00,0.0251 +2015-03-14 06:00:00,0.0339 +2015-03-14 07:00:00,0.0465 +2015-03-14 08:00:00,0.0565 +2015-03-14 09:00:00,0.059 +2015-03-14 10:00:00,0.0659 +2015-03-14 11:00:00,0.0613 +2015-03-14 12:00:00,0.0605 +2015-03-14 13:00:00,0.0596 +2015-03-14 14:00:00,0.0624 +2015-03-14 15:00:00,0.0643 +2015-03-14 16:00:00,0.0638 +2015-03-14 17:00:00,0.0528 +2015-03-14 18:00:00,0.0424 +2015-03-14 19:00:00,0.0355 +2015-03-14 20:00:00,0.0318 +2015-03-14 21:00:00,0.0255 +2015-03-14 22:00:00,0.011 +2015-03-14 23:00:00,0.004 +2015-03-15 00:00:00,0.0038 +2015-03-15 01:00:00,0.0041 +2015-03-15 02:00:00,0.0037 +2015-03-15 03:00:00,0.0044 +2015-03-15 04:00:00,0.004 +2015-03-15 05:00:00,0.004 +2015-03-15 06:00:00,0.0117 +2015-03-15 07:00:00,0.0299 +2015-03-15 08:00:00,0.0446 +2015-03-15 09:00:00,0.0542 +2015-03-15 10:00:00,0.0656 +2015-03-15 11:00:00,0.0643 +2015-03-15 12:00:00,0.0622 +2015-03-15 13:00:00,0.0629 +2015-03-15 14:00:00,0.0682 +2015-03-15 15:00:00,0.0612 +2015-03-15 16:00:00,0.0592 +2015-03-15 17:00:00,0.0514 +2015-03-15 18:00:00,0.0442 +2015-03-15 19:00:00,0.0349 +2015-03-15 20:00:00,0.0275 +2015-03-15 21:00:00,0.01 +2015-03-15 22:00:00,0.0041 +2015-03-15 23:00:00,0.0037 +2015-03-16 00:00:00,0.004 +2015-03-16 01:00:00,0.0037 +2015-03-16 02:00:00,0.0039 +2015-03-16 03:00:00,0.0141 +2015-03-16 04:00:00,0.0527 +2015-03-16 05:00:00,0.0799 +2015-03-16 06:00:00,0.2923 +2015-03-16 07:00:00,0.1801 +2015-03-16 08:00:00,0.0607 +2015-03-16 09:00:00,0.0566 +2015-03-16 10:00:00,0.0584 +2015-03-16 11:00:00,0.0568 +2015-03-16 12:00:00,0.0559 +2015-03-16 13:00:00,0.0565 +2015-03-16 14:00:00,0.0584 +2015-03-16 15:00:00,0.0564 +2015-03-16 16:00:00,0.0571 +2015-03-16 17:00:00,0.0428 +2015-03-16 18:00:00,0.0326 +2015-03-16 19:00:00,0.0225 +2015-03-16 20:00:00,0.0113 +2015-03-16 21:00:00,0.0044 +2015-03-16 22:00:00,0.0037 +2015-03-16 23:00:00,0.0038 +2015-03-17 00:00:00,0.0038 +2015-03-17 01:00:00,0.0038 +2015-03-17 02:00:00,0.004 +2015-03-17 03:00:00,0.0126 +2015-03-17 04:00:00,0.0529 +2015-03-17 05:00:00,0.0827 +2015-03-17 06:00:00,0.3355 +2015-03-17 07:00:00,0.2315 +2015-03-17 08:00:00,0.061 +2015-03-17 09:00:00,0.0606 +2015-03-17 10:00:00,0.0551 +2015-03-17 11:00:00,0.0561 +2015-03-17 12:00:00,0.053 +2015-03-17 13:00:00,0.0548 +2015-03-17 14:00:00,0.0568 +2015-03-17 15:00:00,0.0543 +2015-03-17 16:00:00,0.0529 +2015-03-17 17:00:00,0.0452 +2015-03-17 18:00:00,0.0349 +2015-03-17 19:00:00,0.0279 +2015-03-17 20:00:00,0.0198 +2015-03-17 21:00:00,0.0047 +2015-03-17 22:00:00,0.0041 +2015-03-17 23:00:00,0.0037 +2015-03-18 00:00:00,0.0037 +2015-03-18 01:00:00,0.0037 +2015-03-18 02:00:00,0.0037 +2015-03-18 03:00:00,0.0079 +2015-03-18 04:00:00,0.047 +2015-03-18 05:00:00,0.1037 +2015-03-18 06:00:00,0.3095 +2015-03-18 07:00:00,0.1754 +2015-03-18 08:00:00,0.0649 +2015-03-18 09:00:00,0.0602 +2015-03-18 10:00:00,0.0605 +2015-03-18 11:00:00,0.0588 +2015-03-18 12:00:00,0.0545 +2015-03-18 13:00:00,0.0571 +2015-03-18 14:00:00,0.0555 +2015-03-18 15:00:00,0.0587 +2015-03-18 16:00:00,0.0576 +2015-03-18 17:00:00,0.0452 +2015-03-18 18:00:00,0.0355 +2015-03-18 19:00:00,0.0273 +2015-03-18 20:00:00,0.0114 +2015-03-18 21:00:00,0.0048 +2015-03-18 22:00:00,0.0041 +2015-03-18 23:00:00,0.0038 +2015-03-19 00:00:00,0.0037 +2015-03-19 01:00:00,0.0037 +2015-03-19 02:00:00,0.0038 +2015-03-19 03:00:00,0.0112 +2015-03-19 04:00:00,0.0526 +2015-03-19 05:00:00,0.0969 +2015-03-19 06:00:00,0.302 +2015-03-19 07:00:00,0.3291 +2015-03-19 08:00:00,0.0674 +2015-03-19 09:00:00,0.0636 +2015-03-19 10:00:00,0.0601 +2015-03-19 11:00:00,0.063 +2015-03-19 12:00:00,0.0566 +2015-03-19 13:00:00,0.0613 +2015-03-19 14:00:00,0.0584 +2015-03-19 15:00:00,0.058 +2015-03-19 16:00:00,0.0612 +2015-03-19 17:00:00,0.047 +2015-03-19 18:00:00,0.0389 +2015-03-19 19:00:00,0.0303 +2015-03-19 20:00:00,0.0177 +2015-03-19 21:00:00,0.0056 +2015-03-19 22:00:00,0.0039 +2015-03-19 23:00:00,0.0037 +2015-03-20 00:00:00,0.0038 +2015-03-20 01:00:00,0.0038 +2015-03-20 02:00:00,0.0037 +2015-03-20 03:00:00,0.0115 +2015-03-20 04:00:00,0.0487 +2015-03-20 05:00:00,0.0774 +2015-03-20 06:00:00,0.0706 +2015-03-20 07:00:00,0.0723 +2015-03-20 08:00:00,0.0613 +2015-03-20 09:00:00,0.0628 +2015-03-20 10:00:00,0.0595 +2015-03-20 11:00:00,0.0591 +2015-03-20 12:00:00,0.0582 +2015-03-20 13:00:00,0.062 +2015-03-20 14:00:00,0.0449 +2015-03-20 15:00:00,0.0605 +2015-03-20 16:00:00,0.0585 +2015-03-20 17:00:00,0.0503 +2015-03-20 18:00:00,0.0391 +2015-03-20 19:00:00,0.0311 +2015-03-20 20:00:00,0.0255 +2015-03-20 21:00:00,0.0097 +2015-03-20 22:00:00,0.0051 +2015-03-20 23:00:00,0.0039 +2015-03-21 00:00:00,0.0037 +2015-03-21 01:00:00,0.0038 +2015-03-21 02:00:00,0.0037 +2015-03-21 03:00:00,0.004 +2015-03-21 04:00:00,0.0101 +2015-03-21 05:00:00,0.0255 +2015-03-21 06:00:00,0.0359 +2015-03-21 07:00:00,0.047 +2015-03-21 08:00:00,0.0556 +2015-03-21 09:00:00,0.0583 +2015-03-21 10:00:00,0.0644 +2015-03-21 11:00:00,0.0629 +2015-03-21 12:00:00,0.0599 +2015-03-21 13:00:00,0.06 +2015-03-21 14:00:00,0.0593 +2015-03-21 15:00:00,0.0605 +2015-03-21 16:00:00,0.0606 +2015-03-21 17:00:00,0.0515 +2015-03-21 18:00:00,0.04 +2015-03-21 19:00:00,0.0335 +2015-03-21 20:00:00,0.0333 +2015-03-21 21:00:00,0.0257 +2015-03-21 22:00:00,0.0104 +2015-03-21 23:00:00,0.0045 +2015-03-22 00:00:00,0.004 +2015-03-22 01:00:00,0.004 +2015-03-22 02:00:00,0.0041 +2015-03-22 03:00:00,0.0039 +2015-03-22 04:00:00,0.0042 +2015-03-22 05:00:00,0.0065 +2015-03-22 06:00:00,0.0112 +2015-03-22 07:00:00,0.032 +2015-03-22 08:00:00,0.0439 +2015-03-22 09:00:00,0.057 +2015-03-22 10:00:00,0.0611 +2015-03-22 11:00:00,0.0639 +2015-03-22 12:00:00,0.0646 +2015-03-22 13:00:00,0.0651 +2015-03-22 14:00:00,0.0638 +2015-03-22 15:00:00,0.0631 +2015-03-22 16:00:00,0.0627 +2015-03-22 17:00:00,0.0543 +2015-03-22 18:00:00,0.0469 +2015-03-22 19:00:00,0.0426 +2015-03-22 20:00:00,0.0293 +2015-03-22 21:00:00,0.0121 +2015-03-22 22:00:00,0.0039 +2015-03-22 23:00:00,0.0037 +2015-03-23 00:00:00,0.0038 +2015-03-23 01:00:00,0.0038 +2015-03-23 02:00:00,0.0041 +2015-03-23 03:00:00,0.013 +2015-03-23 04:00:00,0.0556 +2015-03-23 05:00:00,0.0852 +2015-03-23 06:00:00,0.3011 +2015-03-23 07:00:00,0.0895 +2015-03-23 08:00:00,0.0604 +2015-03-23 09:00:00,0.0595 +2015-03-23 10:00:00,0.0582 +2015-03-23 11:00:00,0.0592 +2015-03-23 12:00:00,0.0577 +2015-03-23 13:00:00,0.0573 +2015-03-23 14:00:00,0.0548 +2015-03-23 15:00:00,0.0554 +2015-03-23 16:00:00,0.0567 +2015-03-23 17:00:00,0.0425 +2015-03-23 18:00:00,0.0326 +2015-03-23 19:00:00,0.0244 +2015-03-23 20:00:00,0.0107 +2015-03-23 21:00:00,0.0043 +2015-03-23 22:00:00,0.0041 +2015-03-23 23:00:00,0.0037 +2015-03-24 00:00:00,0.0037 +2015-03-24 01:00:00,0.0038 +2015-03-24 02:00:00,0.0037 +2015-03-24 03:00:00,0.0133 +2015-03-24 04:00:00,0.0519 +2015-03-24 05:00:00,0.1059 +2015-03-24 06:00:00,0.3437 +2015-03-24 07:00:00,0.3733 +2015-03-24 08:00:00,0.1674 +2015-03-24 09:00:00,0.0616 +2015-03-24 10:00:00,0.0574 +2015-03-24 11:00:00,0.0638 +2015-03-24 12:00:00,0.0563 +2015-03-24 13:00:00,0.0559 +2015-03-24 14:00:00,0.0591 +2015-03-24 15:00:00,0.0549 +2015-03-24 16:00:00,0.0554 +2015-03-24 17:00:00,0.0448 +2015-03-24 18:00:00,0.036 +2015-03-24 19:00:00,0.0258 +2015-03-24 20:00:00,0.0131 +2015-03-24 21:00:00,0.0064 +2015-03-24 22:00:00,0.0037 +2015-03-24 23:00:00,0.0037 +2015-03-25 00:00:00,0.0037 +2015-03-25 01:00:00,0.0037 +2015-03-25 02:00:00,0.0037 +2015-03-25 03:00:00,0.0037 +2015-03-25 04:00:00,0.0399 +2015-03-25 05:00:00,0.1123 +2015-03-25 06:00:00,0.3173 +2015-03-25 07:00:00,0.1659 +2015-03-25 08:00:00,0.3194 +2015-03-25 09:00:00,0.0956 +2015-03-25 10:00:00,0.0618 +2015-03-25 11:00:00,0.0605 +2015-03-25 12:00:00,0.0592 +2015-03-25 13:00:00,0.0571 +2015-03-25 14:00:00,0.059 +2015-03-25 15:00:00,0.0593 +2015-03-25 16:00:00,0.0596 +2015-03-25 17:00:00,0.049 +2015-03-25 18:00:00,0.0344 +2015-03-25 19:00:00,0.0292 +2015-03-25 20:00:00,0.0206 +2015-03-25 21:00:00,0.0074 +2015-03-25 22:00:00,0.004 +2015-03-25 23:00:00,0.0037 +2015-03-26 00:00:00,0.0037 +2015-03-26 01:00:00,0.0037 +2015-03-26 02:00:00,0.0038 +2015-03-26 03:00:00,0.0084 +2015-03-26 04:00:00,0.0508 +2015-03-26 05:00:00,0.0957 +2015-03-26 06:00:00,0.3236 +2015-03-26 07:00:00,0.1889 +2015-03-26 08:00:00,0.0639 +2015-03-26 09:00:00,0.0652 +2015-03-26 10:00:00,0.0616 +2015-03-26 11:00:00,0.0632 +2015-03-26 12:00:00,0.0589 +2015-03-26 13:00:00,0.0581 +2015-03-26 14:00:00,0.06 +2015-03-26 15:00:00,0.0614 +2015-03-26 16:00:00,0.0606 +2015-03-26 17:00:00,0.0503 +2015-03-26 18:00:00,0.0382 +2015-03-26 19:00:00,0.0331 +2015-03-26 20:00:00,0.0186 +2015-03-26 21:00:00,0.0061 +2015-03-26 22:00:00,0.0043 +2015-03-26 23:00:00,0.0038 +2015-03-27 00:00:00,0.0037 +2015-03-27 01:00:00,0.0037 +2015-03-27 02:00:00,0.0038 +2015-03-27 03:00:00,0.0043 +2015-03-27 04:00:00,0.0394 +2015-03-27 05:00:00,0.0753 +2015-03-27 06:00:00,0.0713 +2015-03-27 07:00:00,0.0574 +2015-03-27 08:00:00,0.0623 +2015-03-27 09:00:00,0.0588 +2015-03-27 10:00:00,0.0639 +2015-03-27 11:00:00,0.0601 +2015-03-27 12:00:00,0.0631 +2015-03-27 13:00:00,0.0609 +2015-03-27 14:00:00,0.0625 +2015-03-27 15:00:00,0.0584 +2015-03-27 16:00:00,0.0577 +2015-03-27 17:00:00,0.047 +2015-03-27 18:00:00,0.0389 +2015-03-27 19:00:00,0.028 +2015-03-27 20:00:00,0.0244 +2015-03-27 21:00:00,0.0203 +2015-03-27 22:00:00,0.0091 +2015-03-27 23:00:00,0.0037 +2015-03-28 00:00:00,0.0037 +2015-03-28 01:00:00,0.0039 +2015-03-28 02:00:00,0.0038 +2015-03-28 03:00:00,0.004 +2015-03-28 04:00:00,0.0064 +2015-03-28 05:00:00,0.0258 +2015-03-28 06:00:00,0.034 +2015-03-28 07:00:00,0.0491 +2015-03-28 08:00:00,0.0555 +2015-03-28 09:00:00,0.0614 +2015-03-28 10:00:00,0.0639 +2015-03-28 11:00:00,0.0616 +2015-03-28 12:00:00,0.0606 +2015-03-28 13:00:00,0.0606 +2015-03-28 14:00:00,0.0619 +2015-03-28 15:00:00,0.0621 +2015-03-28 16:00:00,0.0581 +2015-03-28 17:00:00,0.0513 +2015-03-28 18:00:00,0.0401 +2015-03-28 19:00:00,0.0353 +2015-03-28 20:00:00,0.0318 +2015-03-28 21:00:00,0.0283 +2015-03-28 22:00:00,0.01 +2015-03-28 23:00:00,0.0044 +2015-03-29 00:00:00,0.004 +2015-03-29 01:00:00,0.0038 +2015-03-29 02:00:00,0.0037 +2015-03-29 03:00:00,0.0041 +2015-03-29 04:00:00,0.0039 +2015-03-29 05:00:00,0.0089 +2015-03-29 06:00:00,0.0121 +2015-03-29 07:00:00,0.0319 +2015-03-29 08:00:00,0.0474 +2015-03-29 09:00:00,0.0598 +2015-03-29 10:00:00,0.0606 +2015-03-29 11:00:00,0.068 +2015-03-29 12:00:00,0.0675 +2015-03-29 13:00:00,0.0675 +2015-03-29 14:00:00,0.0639 +2015-03-29 15:00:00,0.0626 +2015-03-29 16:00:00,0.0606 +2015-03-29 17:00:00,0.0503 +2015-03-29 18:00:00,0.0445 +2015-03-29 19:00:00,0.0396 +2015-03-29 20:00:00,0.0288 +2015-03-29 21:00:00,0.0161 +2015-03-29 22:00:00,0.0041 +2015-03-29 23:00:00,0.0039 +2015-03-30 00:00:00,0.0037 +2015-03-30 01:00:00,0.0038 +2015-03-30 02:00:00,0.0037 +2015-03-30 03:00:00,0.0124 +2015-03-30 04:00:00,0.053 +2015-03-30 05:00:00,0.1062 +2015-03-30 06:00:00,0.3102 +2015-03-30 07:00:00,0.1771 +2015-03-30 08:00:00,0.061 +2015-03-30 09:00:00,0.0596 +2015-03-30 10:00:00,0.0582 +2015-03-30 11:00:00,0.0592 +2015-03-30 12:00:00,0.0569 +2015-03-30 13:00:00,0.0562 +2015-03-30 14:00:00,0.0565 +2015-03-30 15:00:00,0.0547 +2015-03-30 16:00:00,0.0529 +2015-03-30 17:00:00,0.0476 +2015-03-30 18:00:00,0.0341 +2015-03-30 19:00:00,0.027 +2015-03-30 20:00:00,0.0151 +2015-03-30 21:00:00,0.0052 +2015-03-30 22:00:00,0.0038 +2015-03-30 23:00:00,0.0037 +2015-03-31 00:00:00,0.0037 +2015-03-31 01:00:00,0.0037 +2015-03-31 02:00:00,0.0037 +2015-03-31 03:00:00,0.0124 +2015-03-31 04:00:00,0.0521 +2015-03-31 05:00:00,0.0924 +2015-03-31 06:00:00,0.2386 +2015-03-31 07:00:00,0.1253 +2015-03-31 08:00:00,0.0613 +2015-03-31 09:00:00,0.0602 +2015-03-31 10:00:00,0.0628 +2015-03-31 11:00:00,0.0576 +2015-03-31 12:00:00,0.0562 +2015-03-31 13:00:00,0.0583 +2015-03-31 14:00:00,0.0597 +2015-03-31 15:00:00,0.0568 +2015-03-31 16:00:00,0.0565 +2015-03-31 17:00:00,0.0468 +2015-03-31 18:00:00,0.0356 +2015-03-31 19:00:00,0.0272 +2015-03-31 20:00:00,0.0188 +2015-03-31 21:00:00,0.006 +2015-03-31 22:00:00,0.0039 +2015-03-31 23:00:00,0.0036 +2015-04-01 00:00:00,0.0035 +2015-04-01 01:00:00,0.0037 +2015-04-01 02:00:00,0.0037 +2015-04-01 03:00:00,0.0052 +2015-04-01 04:00:00,0.0528 +2015-04-01 05:00:00,0.079 +2015-04-01 06:00:00,0.2277 +2015-04-01 07:00:00,0.1314 +2015-04-01 08:00:00,0.0557 +2015-04-01 09:00:00,0.0626 +2015-04-01 10:00:00,0.0595 +2015-04-01 11:00:00,0.0571 +2015-04-01 12:00:00,0.0598 +2015-04-01 13:00:00,0.0555 +2015-04-01 14:00:00,0.0574 +2015-04-01 15:00:00,0.0555 +2015-04-01 16:00:00,0.0589 +2015-04-01 17:00:00,0.0486 +2015-04-01 18:00:00,0.0366 +2015-04-01 19:00:00,0.028 +2015-04-01 20:00:00,0.0144 +2015-04-01 21:00:00,0.0051 +2015-04-01 22:00:00,0.0039 +2015-04-01 23:00:00,0.0037 +2015-04-02 00:00:00,0.0037 +2015-04-02 01:00:00,0.0038 +2015-04-02 02:00:00,0.0042 +2015-04-02 03:00:00,0.012 +2015-04-02 04:00:00,0.0513 +2015-04-02 05:00:00,0.1175 +2015-04-02 06:00:00,0.2905 +2015-04-02 07:00:00,0.1412 +2015-04-02 08:00:00,0.0614 +2015-04-02 09:00:00,0.0655 +2015-04-02 10:00:00,0.0562 +2015-04-02 11:00:00,0.0631 +2015-04-02 12:00:00,0.0626 +2015-04-02 13:00:00,0.062 +2015-04-02 14:00:00,0.0635 +2015-04-02 15:00:00,0.0608 +2015-04-02 16:00:00,0.064 +2015-04-02 17:00:00,0.0529 +2015-04-02 18:00:00,0.0408 +2015-04-02 19:00:00,0.0291 +2015-04-02 20:00:00,0.0199 +2015-04-02 21:00:00,0.0099 +2015-04-02 22:00:00,0.004 +2015-04-02 23:00:00,0.0038 +2015-04-03 00:00:00,0.0037 +2015-04-03 01:00:00,0.0038 +2015-04-03 02:00:00,0.0038 +2015-04-03 03:00:00,0.0052 +2015-04-03 04:00:00,0.0439 +2015-04-03 05:00:00,0.0704 +2015-04-03 06:00:00,0.0628 +2015-04-03 07:00:00,0.0618 +2015-04-03 08:00:00,0.0613 +2015-04-03 09:00:00,0.0638 +2015-04-03 10:00:00,0.0663 +2015-04-03 11:00:00,0.0639 +2015-04-03 12:00:00,0.0699 +2015-04-03 13:00:00,0.0642 +2015-04-03 14:00:00,0.0643 +2015-04-03 15:00:00,0.06 +2015-04-03 16:00:00,0.0602 +2015-04-03 17:00:00,0.0491 +2015-04-03 18:00:00,0.04 +2015-04-03 19:00:00,0.0364 +2015-04-03 20:00:00,0.0259 +2015-04-03 21:00:00,0.0147 +2015-04-03 22:00:00,0.0054 +2015-04-03 23:00:00,0.0042 +2015-04-04 00:00:00,0.0037 +2015-04-04 01:00:00,0.0039 +2015-04-04 02:00:00,0.0038 +2015-04-04 03:00:00,0.0039 +2015-04-04 04:00:00,0.0045 +2015-04-04 05:00:00,0.0137 +2015-04-04 06:00:00,0.0317 +2015-04-04 07:00:00,0.0446 +2015-04-04 08:00:00,0.0561 +2015-04-04 09:00:00,0.0582 +2015-04-04 10:00:00,0.0637 +2015-04-04 11:00:00,0.065 +2015-04-04 12:00:00,0.0619 +2015-04-04 13:00:00,0.0646 +2015-04-04 14:00:00,0.0598 +2015-04-04 15:00:00,0.0618 +2015-04-04 16:00:00,0.0617 +2015-04-04 17:00:00,0.0532 +2015-04-04 18:00:00,0.0382 +2015-04-04 19:00:00,0.033 +2015-04-04 20:00:00,0.0308 +2015-04-04 21:00:00,0.0245 +2015-04-04 22:00:00,0.0057 +2015-04-04 23:00:00,0.004 +2015-04-05 00:00:00,0.004 +2015-04-05 01:00:00,0.0037 +2015-04-05 02:00:00,0.0037 +2015-04-05 03:00:00,0.0039 +2015-04-05 04:00:00,0.0041 +2015-04-05 05:00:00,0.0041 +2015-04-05 06:00:00,0.008 +2015-04-05 07:00:00,0.0234 +2015-04-05 08:00:00,0.0416 +2015-04-05 09:00:00,0.0534 +2015-04-05 10:00:00,0.0663 +2015-04-05 11:00:00,0.056 +2015-04-05 12:00:00,0.0624 +2015-04-05 13:00:00,0.0586 +2015-04-05 14:00:00,0.0585 +2015-04-05 15:00:00,0.0583 +2015-04-05 16:00:00,0.0532 +2015-04-05 17:00:00,0.0562 +2015-04-05 18:00:00,0.0531 +2015-04-05 19:00:00,0.0466 +2015-04-05 20:00:00,0.0334 +2015-04-05 21:00:00,0.0148 +2015-04-05 22:00:00,0.0039 +2015-04-05 23:00:00,0.0039 +2015-04-06 00:00:00,0.0037 +2015-04-06 01:00:00,0.0037 +2015-04-06 02:00:00,0.0037 +2015-04-06 03:00:00,0.0102 +2015-04-06 04:00:00,0.0579 +2015-04-06 05:00:00,0.0809 +2015-04-06 06:00:00,0.1876 +2015-04-06 07:00:00,0.0565 +2015-04-06 08:00:00,0.062 +2015-04-06 09:00:00,0.0616 +2015-04-06 10:00:00,0.06 +2015-04-06 11:00:00,0.0624 +2015-04-06 12:00:00,0.0572 +2015-04-06 13:00:00,0.0584 +2015-04-06 14:00:00,0.0606 +2015-04-06 15:00:00,0.0562 +2015-04-06 16:00:00,0.0553 +2015-04-06 17:00:00,0.045 +2015-04-06 18:00:00,0.0337 +2015-04-06 19:00:00,0.02 +2015-04-06 20:00:00,0.0139 +2015-04-06 21:00:00,0.0039 +2015-04-06 22:00:00,0.0041 +2015-04-06 23:00:00,0.0037 +2015-04-07 00:00:00,0.0038 +2015-04-07 01:00:00,0.0037 +2015-04-07 02:00:00,0.0039 +2015-04-07 03:00:00,0.0071 +2015-04-07 04:00:00,0.0519 +2015-04-07 05:00:00,0.0994 +2015-04-07 06:00:00,0.1984 +2015-04-07 07:00:00,0.0535 +2015-04-07 08:00:00,0.063 +2015-04-07 09:00:00,0.061 +2015-04-07 10:00:00,0.0585 +2015-04-07 11:00:00,0.0576 +2015-04-07 12:00:00,0.0575 +2015-04-07 13:00:00,0.052 +2015-04-07 14:00:00,0.0588 +2015-04-07 15:00:00,0.053 +2015-04-07 16:00:00,0.0553 +2015-04-07 17:00:00,0.0465 +2015-04-07 18:00:00,0.0351 +2015-04-07 19:00:00,0.0263 +2015-04-07 20:00:00,0.0147 +2015-04-07 21:00:00,0.0043 +2015-04-07 22:00:00,0.0041 +2015-04-07 23:00:00,0.0039 +2015-04-08 00:00:00,0.0037 +2015-04-08 01:00:00,0.0037 +2015-04-08 02:00:00,0.004 +2015-04-08 03:00:00,0.0099 +2015-04-08 04:00:00,0.0543 +2015-04-08 05:00:00,0.1377 +2015-04-08 06:00:00,0.2883 +2015-04-08 07:00:00,0.1035 +2015-04-08 08:00:00,0.0643 +2015-04-08 09:00:00,0.0636 +2015-04-08 10:00:00,0.0605 +2015-04-08 11:00:00,0.0575 +2015-04-08 12:00:00,0.0607 +2015-04-08 13:00:00,0.0484 +2015-04-08 14:00:00,0.0441 +2015-04-08 15:00:00,0.0423 +2015-04-08 16:00:00,0.0411 +2015-04-08 17:00:00,0.0367 +2015-04-08 18:00:00,0.0264 +2015-04-08 19:00:00,0.02 +2015-04-08 20:00:00,0.0141 +2015-04-08 21:00:00,0.0053 +2015-04-08 22:00:00,0.004 +2015-04-08 23:00:00,0.0037 +2015-04-09 00:00:00,0.0037 +2015-04-09 01:00:00,0.0037 +2015-04-09 02:00:00,0.0038 +2015-04-09 03:00:00,0.0099 +2015-04-09 04:00:00,0.0517 +2015-04-09 05:00:00,0.0835 +2015-04-09 06:00:00,0.1378 +2015-04-09 07:00:00,0.0627 +2015-04-09 08:00:00,0.0646 +2015-04-09 09:00:00,0.0668 +2015-04-09 10:00:00,0.0611 +2015-04-09 11:00:00,0.0623 +2015-04-09 12:00:00,0.0607 +2015-04-09 13:00:00,0.0612 +2015-04-09 14:00:00,0.0612 +2015-04-09 15:00:00,0.0632 +2015-04-09 16:00:00,0.0593 +2015-04-09 17:00:00,0.0491 +2015-04-09 18:00:00,0.0377 +2015-04-09 19:00:00,0.029 +2015-04-09 20:00:00,0.0191 +2015-04-09 21:00:00,0.0048 +2015-04-09 22:00:00,0.0043 +2015-04-09 23:00:00,0.0038 +2015-04-10 00:00:00,0.0039 +2015-04-10 01:00:00,0.004 +2015-04-10 02:00:00,0.0041 +2015-04-10 03:00:00,0.0107 +2015-04-10 04:00:00,0.0481 +2015-04-10 05:00:00,0.0709 +2015-04-10 06:00:00,0.0637 +2015-04-10 07:00:00,0.0587 +2015-04-10 08:00:00,0.0591 +2015-04-10 09:00:00,0.0585 +2015-04-10 10:00:00,0.0624 +2015-04-10 11:00:00,0.0595 +2015-04-10 12:00:00,0.058 +2015-04-10 13:00:00,0.0651 +2015-04-10 14:00:00,0.0637 +2015-04-10 15:00:00,0.0604 +2015-04-10 16:00:00,0.0577 +2015-04-10 17:00:00,0.0502 +2015-04-10 18:00:00,0.0394 +2015-04-10 19:00:00,0.0303 +2015-04-10 20:00:00,0.0275 +2015-04-10 21:00:00,0.0164 +2015-04-10 22:00:00,0.0043 +2015-04-10 23:00:00,0.0037 +2015-04-11 00:00:00,0.0038 +2015-04-11 01:00:00,0.0039 +2015-04-11 02:00:00,0.0038 +2015-04-11 03:00:00,0.0039 +2015-04-11 04:00:00,0.0054 +2015-04-11 05:00:00,0.0262 +2015-04-11 06:00:00,0.036 +2015-04-11 07:00:00,0.0457 +2015-04-11 08:00:00,0.0533 +2015-04-11 09:00:00,0.0599 +2015-04-11 10:00:00,0.0646 +2015-04-11 11:00:00,0.0623 +2015-04-11 12:00:00,0.0605 +2015-04-11 13:00:00,0.0609 +2015-04-11 14:00:00,0.0643 +2015-04-11 15:00:00,0.0663 +2015-04-11 16:00:00,0.0629 +2015-04-11 17:00:00,0.0554 +2015-04-11 18:00:00,0.0409 +2015-04-11 19:00:00,0.0351 +2015-04-11 20:00:00,0.0293 +2015-04-11 21:00:00,0.0267 +2015-04-11 22:00:00,0.0124 +2015-04-11 23:00:00,0.0041 +2015-04-12 00:00:00,0.0039 +2015-04-12 01:00:00,0.0038 +2015-04-12 02:00:00,0.0037 +2015-04-12 03:00:00,0.004 +2015-04-12 04:00:00,0.0042 +2015-04-12 05:00:00,0.0065 +2015-04-12 06:00:00,0.0155 +2015-04-12 07:00:00,0.0343 +2015-04-12 08:00:00,0.0483 +2015-04-12 09:00:00,0.0588 +2015-04-12 10:00:00,0.0622 +2015-04-12 11:00:00,0.0649 +2015-04-12 12:00:00,0.0651 +2015-04-12 13:00:00,0.0626 +2015-04-12 14:00:00,0.0633 +2015-04-12 15:00:00,0.0647 +2015-04-12 16:00:00,0.0619 +2015-04-12 17:00:00,0.0526 +2015-04-12 18:00:00,0.0421 +2015-04-12 19:00:00,0.0363 +2015-04-12 20:00:00,0.0293 +2015-04-12 21:00:00,0.0139 +2015-04-12 22:00:00,0.0036 +2015-04-12 23:00:00,0.0033 +2015-04-13 00:00:00,0.0033 +2015-04-13 01:00:00,0.0034 +2015-04-13 02:00:00,0.0037 +2015-04-13 03:00:00,0.0117 +2015-04-13 04:00:00,0.0456 +2015-04-13 05:00:00,0.0792 +2015-04-13 06:00:00,0.0848 +2015-04-13 07:00:00,0.0589 +2015-04-13 08:00:00,0.0649 +2015-04-13 09:00:00,0.0626 +2015-04-13 10:00:00,0.0565 +2015-04-13 11:00:00,0.0545 +2015-04-13 12:00:00,0.0548 +2015-04-13 13:00:00,0.0536 +2015-04-13 14:00:00,0.0526 +2015-04-13 15:00:00,0.0534 +2015-04-13 16:00:00,0.0529 +2015-04-13 17:00:00,0.0452 +2015-04-13 18:00:00,0.0327 +2015-04-13 19:00:00,0.0251 +2015-04-13 20:00:00,0.0098 +2015-04-13 21:00:00,0.004 +2015-04-13 22:00:00,0.0037 +2015-04-13 23:00:00,0.0035 +2015-04-14 00:00:00,0.0036 +2015-04-14 01:00:00,0.0037 +2015-04-14 02:00:00,0.004 +2015-04-14 03:00:00,0.0082 +2015-04-14 04:00:00,0.0525 +2015-04-14 05:00:00,0.0847 +2015-04-14 06:00:00,0.1952 +2015-04-14 07:00:00,0.0566 +2015-04-14 08:00:00,0.0649 +2015-04-14 09:00:00,0.0578 +2015-04-14 10:00:00,0.0572 +2015-04-14 11:00:00,0.0549 +2015-04-14 12:00:00,0.0571 +2015-04-14 13:00:00,0.0552 +2015-04-14 14:00:00,0.0576 +2015-04-14 15:00:00,0.0553 +2015-04-14 16:00:00,0.0588 +2015-04-14 17:00:00,0.0433 +2015-04-14 18:00:00,0.033 +2015-04-14 19:00:00,0.0252 +2015-04-14 20:00:00,0.0161 +2015-04-14 21:00:00,0.005 +2015-04-14 22:00:00,0.0038 +2015-04-14 23:00:00,0.0037 +2015-04-15 00:00:00,0.0037 +2015-04-15 01:00:00,0.0038 +2015-04-15 02:00:00,0.0037 +2015-04-15 03:00:00,0.0137 +2015-04-15 04:00:00,0.0516 +2015-04-15 05:00:00,0.1071 +2015-04-15 06:00:00,0.0839 +2015-04-15 07:00:00,0.0579 +2015-04-15 08:00:00,0.0631 +2015-04-15 09:00:00,0.0618 +2015-04-15 10:00:00,0.0587 +2015-04-15 11:00:00,0.0565 +2015-04-15 12:00:00,0.0584 +2015-04-15 13:00:00,0.0538 +2015-04-15 14:00:00,0.0572 +2015-04-15 15:00:00,0.0619 +2015-04-15 16:00:00,0.0569 +2015-04-15 17:00:00,0.0457 +2015-04-15 18:00:00,0.0288 +2015-04-15 19:00:00,0.0279 +2015-04-15 20:00:00,0.0134 +2015-04-15 21:00:00,0.0088 +2015-04-15 22:00:00,0.0039 +2015-04-15 23:00:00,0.0038 +2015-04-16 00:00:00,0.0037 +2015-04-16 01:00:00,0.0066 +2015-04-16 02:00:00,0.0037 +2015-04-16 03:00:00,0.0084 +2015-04-16 04:00:00,0.0513 +2015-04-16 05:00:00,0.079 +2015-04-16 06:00:00,0.0649 +2015-04-16 07:00:00,0.0604 +2015-04-16 08:00:00,0.0674 +2015-04-16 09:00:00,0.0643 +2015-04-16 10:00:00,0.0602 +2015-04-16 11:00:00,0.06 +2015-04-16 12:00:00,0.0569 +2015-04-16 13:00:00,0.0543 +2015-04-16 14:00:00,0.053 +2015-04-16 15:00:00,0.0604 +2015-04-16 16:00:00,0.0603 +2015-04-16 17:00:00,0.0485 +2015-04-16 18:00:00,0.0353 +2015-04-16 19:00:00,0.029 +2015-04-16 20:00:00,0.0244 +2015-04-16 21:00:00,0.0078 +2015-04-16 22:00:00,0.0041 +2015-04-16 23:00:00,0.0038 +2015-04-17 00:00:00,0.0039 +2015-04-17 01:00:00,0.0037 +2015-04-17 02:00:00,0.0039 +2015-04-17 03:00:00,0.0051 +2015-04-17 04:00:00,0.0471 +2015-04-17 05:00:00,0.0735 +2015-04-17 06:00:00,0.0623 +2015-04-17 07:00:00,0.0595 +2015-04-17 08:00:00,0.0631 +2015-04-17 09:00:00,0.0615 +2015-04-17 10:00:00,0.0653 +2015-04-17 11:00:00,0.0629 +2015-04-17 12:00:00,0.0586 +2015-04-17 13:00:00,0.0592 +2015-04-17 14:00:00,0.0638 +2015-04-17 15:00:00,0.0634 +2015-04-17 16:00:00,0.0671 +2015-04-17 17:00:00,0.0498 +2015-04-17 18:00:00,0.0388 +2015-04-17 19:00:00,0.0305 +2015-04-17 20:00:00,0.0221 +2015-04-17 21:00:00,0.0091 +2015-04-17 22:00:00,0.0057 +2015-04-17 23:00:00,0.0041 +2015-04-18 00:00:00,0.0039 +2015-04-18 01:00:00,0.0037 +2015-04-18 02:00:00,0.0038 +2015-04-18 03:00:00,0.0038 +2015-04-18 04:00:00,0.0067 +2015-04-18 05:00:00,0.0209 +2015-04-18 06:00:00,0.0342 +2015-04-18 07:00:00,0.0466 +2015-04-18 08:00:00,0.0563 +2015-04-18 09:00:00,0.0625 +2015-04-18 10:00:00,0.0623 +2015-04-18 11:00:00,0.0626 +2015-04-18 12:00:00,0.0611 +2015-04-18 13:00:00,0.0622 +2015-04-18 14:00:00,0.0604 +2015-04-18 15:00:00,0.0674 +2015-04-18 16:00:00,0.0577 +2015-04-18 17:00:00,0.0514 +2015-04-18 18:00:00,0.0442 +2015-04-18 19:00:00,0.0362 +2015-04-18 20:00:00,0.034 +2015-04-18 21:00:00,0.0295 +2015-04-18 22:00:00,0.0141 +2015-04-18 23:00:00,0.0038 +2015-04-19 00:00:00,0.0038 +2015-04-19 01:00:00,0.0039 +2015-04-19 02:00:00,0.0039 +2015-04-19 03:00:00,0.0037 +2015-04-19 04:00:00,0.0042 +2015-04-19 05:00:00,0.0072 +2015-04-19 06:00:00,0.0097 +2015-04-19 07:00:00,0.0338 +2015-04-19 08:00:00,0.0494 +2015-04-19 09:00:00,0.062 +2015-04-19 10:00:00,0.066 +2015-04-19 11:00:00,0.0677 +2015-04-19 12:00:00,0.0668 +2015-04-19 13:00:00,0.0621 +2015-04-19 14:00:00,0.0635 +2015-04-19 15:00:00,0.0673 +2015-04-19 16:00:00,0.0586 +2015-04-19 17:00:00,0.0538 +2015-04-19 18:00:00,0.0422 +2015-04-19 19:00:00,0.0369 +2015-04-19 20:00:00,0.0307 +2015-04-19 21:00:00,0.0121 +2015-04-19 22:00:00,0.004 +2015-04-19 23:00:00,0.0037 +2015-04-20 00:00:00,0.0037 +2015-04-20 01:00:00,0.0037 +2015-04-20 02:00:00,0.0037 +2015-04-20 03:00:00,0.0097 +2015-04-20 04:00:00,0.0512 +2015-04-20 05:00:00,0.1096 +2015-04-20 06:00:00,0.363 +2015-04-20 07:00:00,0.2801 +2015-04-20 08:00:00,0.0599 +2015-04-20 09:00:00,0.0565 +2015-04-20 10:00:00,0.0551 +2015-04-20 11:00:00,0.0592 +2015-04-20 12:00:00,0.0555 +2015-04-20 13:00:00,0.0571 +2015-04-20 14:00:00,0.055 +2015-04-20 15:00:00,0.0543 +2015-04-20 16:00:00,0.0556 +2015-04-20 17:00:00,0.0432 +2015-04-20 18:00:00,0.0338 +2015-04-20 19:00:00,0.0249 +2015-04-20 20:00:00,0.0144 +2015-04-20 21:00:00,0.0044 +2015-04-20 22:00:00,0.0039 +2015-04-20 23:00:00,0.0038 +2015-04-21 00:00:00,0.0039 +2015-04-21 01:00:00,0.0037 +2015-04-21 02:00:00,0.0038 +2015-04-21 03:00:00,0.0117 +2015-04-21 04:00:00,0.0535 +2015-04-21 05:00:00,0.0792 +2015-04-21 06:00:00,0.3143 +2015-04-21 07:00:00,0.1888 +2015-04-21 08:00:00,0.0619 +2015-04-21 09:00:00,0.06 +2015-04-21 10:00:00,0.057 +2015-04-21 11:00:00,0.0564 +2015-04-21 12:00:00,0.0556 +2015-04-21 13:00:00,0.056 +2015-04-21 14:00:00,0.0589 +2015-04-21 15:00:00,0.0578 +2015-04-21 16:00:00,0.0606 +2015-04-21 17:00:00,0.0474 +2015-04-21 18:00:00,0.0371 +2015-04-21 19:00:00,0.024 +2015-04-21 20:00:00,0.0061 +2015-04-21 21:00:00,0.0047 +2015-04-21 22:00:00,0.0038 +2015-04-21 23:00:00,0.0038 +2015-04-22 00:00:00,0.0038 +2015-04-22 01:00:00,0.0037 +2015-04-22 02:00:00,0.0039 +2015-04-22 03:00:00,0.0079 +2015-04-22 04:00:00,0.0521 +2015-04-22 05:00:00,0.121 +2015-04-22 06:00:00,0.3461 +2015-04-22 07:00:00,0.3328 +2015-04-22 08:00:00,0.1332 +2015-04-22 09:00:00,0.0593 +2015-04-22 10:00:00,0.0565 +2015-04-22 11:00:00,0.0571 +2015-04-22 12:00:00,0.0559 +2015-04-22 13:00:00,0.0575 +2015-04-22 14:00:00,0.0603 +2015-04-22 15:00:00,0.0609 +2015-04-22 16:00:00,0.0571 +2015-04-22 17:00:00,0.0463 +2015-04-22 18:00:00,0.035 +2015-04-22 19:00:00,0.0284 +2015-04-22 20:00:00,0.0203 +2015-04-22 21:00:00,0.0045 +2015-04-22 22:00:00,0.0041 +2015-04-22 23:00:00,0.0037 +2015-04-23 00:00:00,0.0038 +2015-04-23 01:00:00,0.0038 +2015-04-23 02:00:00,0.0039 +2015-04-23 03:00:00,0.0041 +2015-04-23 04:00:00,0.0517 +2015-04-23 05:00:00,0.0831 +2015-04-23 06:00:00,0.3516 +2015-04-23 07:00:00,0.168 +2015-04-23 08:00:00,0.0683 +2015-04-23 09:00:00,0.0679 +2015-04-23 10:00:00,0.0629 +2015-04-23 11:00:00,0.0626 +2015-04-23 12:00:00,0.0599 +2015-04-23 13:00:00,0.0572 +2015-04-23 14:00:00,0.061 +2015-04-23 15:00:00,0.0562 +2015-04-23 16:00:00,0.0577 +2015-04-23 17:00:00,0.0493 +2015-04-23 18:00:00,0.0365 +2015-04-23 19:00:00,0.0276 +2015-04-23 20:00:00,0.0168 +2015-04-23 21:00:00,0.0058 +2015-04-23 22:00:00,0.0041 +2015-04-23 23:00:00,0.0038 +2015-04-24 00:00:00,0.0037 +2015-04-24 01:00:00,0.0037 +2015-04-24 02:00:00,0.0037 +2015-04-24 03:00:00,0.008 +2015-04-24 04:00:00,0.0386 +2015-04-24 05:00:00,0.0625 +2015-04-24 06:00:00,0.0709 +2015-04-24 07:00:00,0.061 +2015-04-24 08:00:00,0.0636 +2015-04-24 09:00:00,0.0569 +2015-04-24 10:00:00,0.0585 +2015-04-24 11:00:00,0.0624 +2015-04-24 12:00:00,0.06 +2015-04-24 13:00:00,0.0587 +2015-04-24 14:00:00,0.0626 +2015-04-24 15:00:00,0.0589 +2015-04-24 16:00:00,0.0633 +2015-04-24 17:00:00,0.0519 +2015-04-24 18:00:00,0.0405 +2015-04-24 19:00:00,0.0312 +2015-04-24 20:00:00,0.0249 +2015-04-24 21:00:00,0.0106 +2015-04-24 22:00:00,0.0041 +2015-04-24 23:00:00,0.0041 +2015-04-25 00:00:00,0.004 +2015-04-25 01:00:00,0.0038 +2015-04-25 02:00:00,0.0038 +2015-04-25 03:00:00,0.0039 +2015-04-25 04:00:00,0.0048 +2015-04-25 05:00:00,0.0171 +2015-04-25 06:00:00,0.033 +2015-04-25 07:00:00,0.0475 +2015-04-25 08:00:00,0.0519 +2015-04-25 09:00:00,0.0558 +2015-04-25 10:00:00,0.0613 +2015-04-25 11:00:00,0.0619 +2015-04-25 12:00:00,0.0587 +2015-04-25 13:00:00,0.0617 +2015-04-25 14:00:00,0.061 +2015-04-25 15:00:00,0.0665 +2015-04-25 16:00:00,0.0581 +2015-04-25 17:00:00,0.0553 +2015-04-25 18:00:00,0.0403 +2015-04-25 19:00:00,0.0384 +2015-04-25 20:00:00,0.0312 +2015-04-25 21:00:00,0.0282 +2015-04-25 22:00:00,0.0133 +2015-04-25 23:00:00,0.005 +2015-04-26 00:00:00,0.0037 +2015-04-26 01:00:00,0.0039 +2015-04-26 02:00:00,0.004 +2015-04-26 03:00:00,0.004 +2015-04-26 04:00:00,0.0045 +2015-04-26 05:00:00,0.0077 +2015-04-26 06:00:00,0.0139 +2015-04-26 07:00:00,0.0327 +2015-04-26 08:00:00,0.048 +2015-04-26 09:00:00,0.0601 +2015-04-26 10:00:00,0.0594 +2015-04-26 11:00:00,0.0645 +2015-04-26 12:00:00,0.0656 +2015-04-26 13:00:00,0.0584 +2015-04-26 14:00:00,0.0665 +2015-04-26 15:00:00,0.0679 +2015-04-26 16:00:00,0.0638 +2015-04-26 17:00:00,0.0625 +2015-04-26 18:00:00,0.0496 +2015-04-26 19:00:00,0.041 +2015-04-26 20:00:00,0.0314 +2015-04-26 21:00:00,0.0089 +2015-04-26 22:00:00,0.0044 +2015-04-26 23:00:00,0.0038 +2015-04-27 00:00:00,0.0038 +2015-04-27 01:00:00,0.0037 +2015-04-27 02:00:00,0.0039 +2015-04-27 03:00:00,0.0115 +2015-04-27 04:00:00,0.0535 +2015-04-27 05:00:00,0.1119 +2015-04-27 06:00:00,0.339 +2015-04-27 07:00:00,0.3265 +2015-04-27 08:00:00,0.0889 +2015-04-27 09:00:00,0.0618 +2015-04-27 10:00:00,0.0577 +2015-04-27 11:00:00,0.0577 +2015-04-27 12:00:00,0.0542 +2015-04-27 13:00:00,0.0545 +2015-04-27 14:00:00,0.055 +2015-04-27 15:00:00,0.0506 +2015-04-27 16:00:00,0.0528 +2015-04-27 17:00:00,0.0435 +2015-04-27 18:00:00,0.0332 +2015-04-27 19:00:00,0.0256 +2015-04-27 20:00:00,0.0116 +2015-04-27 21:00:00,0.004 +2015-04-27 22:00:00,0.0042 +2015-04-27 23:00:00,0.0037 +2015-04-28 00:00:00,0.0037 +2015-04-28 01:00:00,0.0038 +2015-04-28 02:00:00,0.0038 +2015-04-28 03:00:00,0.0038 +2015-04-28 04:00:00,0.0491 +2015-04-28 05:00:00,0.1126 +2015-04-28 06:00:00,0.3574 +2015-04-28 07:00:00,0.3508 +2015-04-28 08:00:00,0.0632 +2015-04-28 09:00:00,0.0471 +2015-04-28 10:00:00,0.0489 +2015-04-28 11:00:00,0.0576 +2015-04-28 12:00:00,0.0587 +2015-04-28 13:00:00,0.0535 +2015-04-28 14:00:00,0.0544 +2015-04-28 15:00:00,0.0562 +2015-04-28 16:00:00,0.0595 +2015-04-28 17:00:00,0.0478 +2015-04-28 18:00:00,0.0355 +2015-04-28 19:00:00,0.0255 +2015-04-28 20:00:00,0.0201 +2015-04-28 21:00:00,0.0052 +2015-04-28 22:00:00,0.0039 +2015-04-28 23:00:00,0.0037 +2015-04-29 00:00:00,0.0037 +2015-04-29 01:00:00,0.0037 +2015-04-29 02:00:00,0.0039 +2015-04-29 03:00:00,0.0051 +2015-04-29 04:00:00,0.0524 +2015-04-29 05:00:00,0.1232 +2015-04-29 06:00:00,0.3659 +2015-04-29 07:00:00,0.3254 +2015-04-29 08:00:00,0.0654 +2015-04-29 09:00:00,0.0594 +2015-04-29 10:00:00,0.0555 +2015-04-29 11:00:00,0.0582 +2015-04-29 12:00:00,0.0539 +2015-04-29 13:00:00,0.0593 +2015-04-29 14:00:00,0.057 +2015-04-29 15:00:00,0.0557 +2015-04-29 16:00:00,0.0571 +2015-04-29 17:00:00,0.0491 +2015-04-29 18:00:00,0.0345 +2015-04-29 19:00:00,0.0278 +2015-04-29 20:00:00,0.0185 +2015-04-29 21:00:00,0.0046 +2015-04-29 22:00:00,0.004 +2015-04-29 23:00:00,0.0037 +2015-04-30 00:00:00,0.0037 +2015-04-30 01:00:00,0.0037 +2015-04-30 02:00:00,0.0038 +2015-04-30 03:00:00,0.0107 +2015-04-30 04:00:00,0.0548 +2015-04-30 05:00:00,0.1234 +2015-04-30 06:00:00,0.3522 +2015-04-30 07:00:00,0.3539 +2015-04-30 08:00:00,0.0932 +2015-04-30 09:00:00,0.0609 +2015-04-30 10:00:00,0.0604 +2015-04-30 11:00:00,0.0584 +2015-04-30 12:00:00,0.0587 +2015-04-30 13:00:00,0.0568 +2015-04-30 14:00:00,0.0628 +2015-04-30 15:00:00,0.0597 +2015-04-30 16:00:00,0.0596 +2015-04-30 17:00:00,0.0478 +2015-04-30 18:00:00,0.0286 +2015-04-30 19:00:00,0.022 +2015-04-30 20:00:00,0.0133 +2015-04-30 21:00:00,0.0062 +2015-04-30 22:00:00,0.004 +2015-04-30 23:00:00,0.0037 +2015-05-01 00:00:00,0.0035 +2015-05-01 01:00:00,0.0033 +2015-05-01 02:00:00,0.0034 +2015-05-01 03:00:00,0.005 +2015-05-01 04:00:00,0.0502 +2015-05-01 05:00:00,0.0774 +2015-05-01 06:00:00,0.0691 +2015-05-01 07:00:00,0.0626 +2015-05-01 08:00:00,0.0619 +2015-05-01 09:00:00,0.0641 +2015-05-01 10:00:00,0.0615 +2015-05-01 11:00:00,0.0625 +2015-05-01 12:00:00,0.0607 +2015-05-01 13:00:00,0.0611 +2015-05-01 14:00:00,0.0656 +2015-05-01 15:00:00,0.0643 +2015-05-01 16:00:00,0.0617 +2015-05-01 17:00:00,0.0475 +2015-05-01 18:00:00,0.0399 +2015-05-01 19:00:00,0.0352 +2015-05-01 20:00:00,0.0267 +2015-05-01 21:00:00,0.0193 +2015-05-01 22:00:00,0.006 +2015-05-01 23:00:00,0.0042 +2015-05-02 00:00:00,0.0039 +2015-05-02 01:00:00,0.0038 +2015-05-02 02:00:00,0.0039 +2015-05-02 03:00:00,0.0042 +2015-05-02 04:00:00,0.0051 +2015-05-02 05:00:00,0.0138 +2015-05-02 06:00:00,0.036 +2015-05-02 07:00:00,0.0469 +2015-05-02 08:00:00,0.0565 +2015-05-02 09:00:00,0.0626 +2015-05-02 10:00:00,0.0572 +2015-05-02 11:00:00,0.0577 +2015-05-02 12:00:00,0.0564 +2015-05-02 13:00:00,0.0605 +2015-05-02 14:00:00,0.0611 +2015-05-02 15:00:00,0.0591 +2015-05-02 16:00:00,0.0609 +2015-05-02 17:00:00,0.054 +2015-05-02 18:00:00,0.0443 +2015-05-02 19:00:00,0.0312 +2015-05-02 20:00:00,0.0347 +2015-05-02 21:00:00,0.0328 +2015-05-02 22:00:00,0.0177 +2015-05-02 23:00:00,0.004 +2015-05-03 00:00:00,0.0038 +2015-05-03 01:00:00,0.0037 +2015-05-03 02:00:00,0.0037 +2015-05-03 03:00:00,0.0037 +2015-05-03 04:00:00,0.0041 +2015-05-03 05:00:00,0.0086 +2015-05-03 06:00:00,0.0169 +2015-05-03 07:00:00,0.034 +2015-05-03 08:00:00,0.0468 +2015-05-03 09:00:00,0.0608 +2015-05-03 10:00:00,0.0643 +2015-05-03 11:00:00,0.0624 +2015-05-03 12:00:00,0.0641 +2015-05-03 13:00:00,0.0654 +2015-05-03 14:00:00,0.0617 +2015-05-03 15:00:00,0.0648 +2015-05-03 16:00:00,0.0683 +2015-05-03 17:00:00,0.059 +2015-05-03 18:00:00,0.0494 +2015-05-03 19:00:00,0.0351 +2015-05-03 20:00:00,0.0281 +2015-05-03 21:00:00,0.0213 +2015-05-03 22:00:00,0.0042 +2015-05-03 23:00:00,0.0041 +2015-05-04 00:00:00,0.0039 +2015-05-04 01:00:00,0.0037 +2015-05-04 02:00:00,0.0043 +2015-05-04 03:00:00,0.0144 +2015-05-04 04:00:00,0.0551 +2015-05-04 05:00:00,0.1041 +2015-05-04 06:00:00,0.298 +2015-05-04 07:00:00,0.0914 +2015-05-04 08:00:00,0.0586 +2015-05-04 09:00:00,0.0591 +2015-05-04 10:00:00,0.0558 +2015-05-04 11:00:00,0.0572 +2015-05-04 12:00:00,0.0555 +2015-05-04 13:00:00,0.058 +2015-05-04 14:00:00,0.0573 +2015-05-04 15:00:00,0.0581 +2015-05-04 16:00:00,0.0595 +2015-05-04 17:00:00,0.0439 +2015-05-04 18:00:00,0.0318 +2015-05-04 19:00:00,0.0243 +2015-05-04 20:00:00,0.0191 +2015-05-04 21:00:00,0.0037 +2015-05-04 22:00:00,0.0039 +2015-05-04 23:00:00,0.0038 +2015-05-05 00:00:00,0.0037 +2015-05-05 01:00:00,0.0037 +2015-05-05 02:00:00,0.0037 +2015-05-05 03:00:00,0.0141 +2015-05-05 04:00:00,0.0517 +2015-05-05 05:00:00,0.1269 +2015-05-05 06:00:00,0.322 +2015-05-05 07:00:00,0.3169 +2015-05-05 08:00:00,0.0637 +2015-05-05 09:00:00,0.0614 +2015-05-05 10:00:00,0.0582 +2015-05-05 11:00:00,0.0553 +2015-05-05 12:00:00,0.0547 +2015-05-05 13:00:00,0.0567 +2015-05-05 14:00:00,0.0588 +2015-05-05 15:00:00,0.0588 +2015-05-05 16:00:00,0.0587 +2015-05-05 17:00:00,0.0442 +2015-05-05 18:00:00,0.0327 +2015-05-05 19:00:00,0.0246 +2015-05-05 20:00:00,0.016 +2015-05-05 21:00:00,0.0063 +2015-05-05 22:00:00,0.0039 +2015-05-05 23:00:00,0.0037 +2015-05-06 00:00:00,0.0038 +2015-05-06 01:00:00,0.0037 +2015-05-06 02:00:00,0.0042 +2015-05-06 03:00:00,0.0077 +2015-05-06 04:00:00,0.0508 +2015-05-06 05:00:00,0.1161 +2015-05-06 06:00:00,0.3134 +2015-05-06 07:00:00,0.131 +2015-05-06 08:00:00,0.062 +2015-05-06 09:00:00,0.066 +2015-05-06 10:00:00,0.0616 +2015-05-06 11:00:00,0.0591 +2015-05-06 12:00:00,0.0544 +2015-05-06 13:00:00,0.0566 +2015-05-06 14:00:00,0.0572 +2015-05-06 15:00:00,0.0554 +2015-05-06 16:00:00,0.0572 +2015-05-06 17:00:00,0.0455 +2015-05-06 18:00:00,0.0356 +2015-05-06 19:00:00,0.0305 +2015-05-06 20:00:00,0.016 +2015-05-06 21:00:00,0.0075 +2015-05-06 22:00:00,0.0038 +2015-05-06 23:00:00,0.0037 +2015-05-07 00:00:00,0.0037 +2015-05-07 01:00:00,0.0037 +2015-05-07 02:00:00,0.004 +2015-05-07 03:00:00,0.0125 +2015-05-07 04:00:00,0.0522 +2015-05-07 05:00:00,0.128 +2015-05-07 06:00:00,0.3173 +2015-05-07 07:00:00,0.144 +2015-05-07 08:00:00,0.0633 +2015-05-07 09:00:00,0.066 +2015-05-07 10:00:00,0.0619 +2015-05-07 11:00:00,0.0611 +2015-05-07 12:00:00,0.059 +2015-05-07 13:00:00,0.0576 +2015-05-07 14:00:00,0.0599 +2015-05-07 15:00:00,0.0594 +2015-05-07 16:00:00,0.0609 +2015-05-07 17:00:00,0.0482 +2015-05-07 18:00:00,0.0363 +2015-05-07 19:00:00,0.0293 +2015-05-07 20:00:00,0.0229 +2015-05-07 21:00:00,0.0039 +2015-05-07 22:00:00,0.0038 +2015-05-07 23:00:00,0.0037 +2015-05-08 00:00:00,0.0037 +2015-05-08 01:00:00,0.0037 +2015-05-08 02:00:00,0.0039 +2015-05-08 03:00:00,0.0107 +2015-05-08 04:00:00,0.0493 +2015-05-08 05:00:00,0.078 +2015-05-08 06:00:00,0.0663 +2015-05-08 07:00:00,0.0624 +2015-05-08 08:00:00,0.0646 +2015-05-08 09:00:00,0.0616 +2015-05-08 10:00:00,0.0651 +2015-05-08 11:00:00,0.0653 +2015-05-08 12:00:00,0.0626 +2015-05-08 13:00:00,0.066 +2015-05-08 14:00:00,0.0627 +2015-05-08 15:00:00,0.0667 +2015-05-08 16:00:00,0.0579 +2015-05-08 17:00:00,0.0494 +2015-05-08 18:00:00,0.0393 +2015-05-08 19:00:00,0.0302 +2015-05-08 20:00:00,0.0247 +2015-05-08 21:00:00,0.0183 +2015-05-08 22:00:00,0.0067 +2015-05-08 23:00:00,0.0039 +2015-05-09 00:00:00,0.0038 +2015-05-09 01:00:00,0.0038 +2015-05-09 02:00:00,0.0037 +2015-05-09 03:00:00,0.0039 +2015-05-09 04:00:00,0.0062 +2015-05-09 05:00:00,0.0186 +2015-05-09 06:00:00,0.037 +2015-05-09 07:00:00,0.0461 +2015-05-09 08:00:00,0.0539 +2015-05-09 09:00:00,0.0611 +2015-05-09 10:00:00,0.0671 +2015-05-09 11:00:00,0.0629 +2015-05-09 12:00:00,0.0625 +2015-05-09 13:00:00,0.0682 +2015-05-09 14:00:00,0.0701 +2015-05-09 15:00:00,0.0626 +2015-05-09 16:00:00,0.0625 +2015-05-09 17:00:00,0.0534 +2015-05-09 18:00:00,0.0431 +2015-05-09 19:00:00,0.0358 +2015-05-09 20:00:00,0.0333 +2015-05-09 21:00:00,0.0287 +2015-05-09 22:00:00,0.0097 +2015-05-09 23:00:00,0.0043 +2015-05-10 00:00:00,0.0044 +2015-05-10 01:00:00,0.0037 +2015-05-10 02:00:00,0.0039 +2015-05-10 03:00:00,0.0038 +2015-05-10 04:00:00,0.004 +2015-05-10 05:00:00,0.0041 +2015-05-10 06:00:00,0.0136 +2015-05-10 07:00:00,0.0322 +2015-05-10 08:00:00,0.0483 +2015-05-10 09:00:00,0.0649 +2015-05-10 10:00:00,0.0676 +2015-05-10 11:00:00,0.069 +2015-05-10 12:00:00,0.0654 +2015-05-10 13:00:00,0.0656 +2015-05-10 14:00:00,0.0622 +2015-05-10 15:00:00,0.0632 +2015-05-10 16:00:00,0.061 +2015-05-10 17:00:00,0.0575 +2015-05-10 18:00:00,0.0549 +2015-05-10 19:00:00,0.0449 +2015-05-10 20:00:00,0.0341 +2015-05-10 21:00:00,0.0222 +2015-05-10 22:00:00,0.004 +2015-05-10 23:00:00,0.0039 +2015-05-11 00:00:00,0.0037 +2015-05-11 01:00:00,0.0037 +2015-05-11 02:00:00,0.0039 +2015-05-11 03:00:00,0.0109 +2015-05-11 04:00:00,0.0518 +2015-05-11 05:00:00,0.1044 +2015-05-11 06:00:00,0.29 +2015-05-11 07:00:00,0.0649 +2015-05-11 08:00:00,0.0627 +2015-05-11 09:00:00,0.0569 +2015-05-11 10:00:00,0.0545 +2015-05-11 11:00:00,0.0561 +2015-05-11 12:00:00,0.0553 +2015-05-11 13:00:00,0.0525 +2015-05-11 14:00:00,0.0545 +2015-05-11 15:00:00,0.0498 +2015-05-11 16:00:00,0.0489 +2015-05-11 17:00:00,0.0471 +2015-05-11 18:00:00,0.0323 +2015-05-11 19:00:00,0.0268 +2015-05-11 20:00:00,0.0183 +2015-05-11 21:00:00,0.007 +2015-05-11 22:00:00,0.0037 +2015-05-11 23:00:00,0.0037 +2015-05-12 00:00:00,0.0037 +2015-05-12 01:00:00,0.0037 +2015-05-12 02:00:00,0.004 +2015-05-12 03:00:00,0.0045 +2015-05-12 04:00:00,0.0508 +2015-05-12 05:00:00,0.1422 +2015-05-12 06:00:00,0.3534 +2015-05-12 07:00:00,0.4016 +2015-05-12 08:00:00,0.1876 +2015-05-12 09:00:00,0.0584 +2015-05-12 10:00:00,0.0557 +2015-05-12 11:00:00,0.0577 +2015-05-12 12:00:00,0.0553 +2015-05-12 13:00:00,0.056 +2015-05-12 14:00:00,0.0553 +2015-05-12 15:00:00,0.0545 +2015-05-12 16:00:00,0.0602 +2015-05-12 17:00:00,0.045 +2015-05-12 18:00:00,0.0329 +2015-05-12 19:00:00,0.0255 +2015-05-12 20:00:00,0.0234 +2015-05-12 21:00:00,0.0041 +2015-05-12 22:00:00,0.0042 +2015-05-12 23:00:00,0.0037 +2015-05-13 00:00:00,0.0037 +2015-05-13 01:00:00,0.0037 +2015-05-13 02:00:00,0.004 +2015-05-13 03:00:00,0.0142 +2015-05-13 04:00:00,0.0527 +2015-05-13 05:00:00,0.1011 +2015-05-13 06:00:00,0.3131 +2015-05-13 07:00:00,0.1324 +2015-05-13 08:00:00,0.0659 +2015-05-13 09:00:00,0.0553 +2015-05-13 10:00:00,0.0654 +2015-05-13 11:00:00,0.0541 +2015-05-13 12:00:00,0.0564 +2015-05-13 13:00:00,0.0578 +2015-05-13 14:00:00,0.0596 +2015-05-13 15:00:00,0.0595 +2015-05-13 16:00:00,0.0578 +2015-05-13 17:00:00,0.048 +2015-05-13 18:00:00,0.0331 +2015-05-13 19:00:00,0.0293 +2015-05-13 20:00:00,0.023 +2015-05-13 21:00:00,0.0065 +2015-05-13 22:00:00,0.0039 +2015-05-13 23:00:00,0.0037 +2015-05-14 00:00:00,0.0037 +2015-05-14 01:00:00,0.0038 +2015-05-14 02:00:00,0.0039 +2015-05-14 03:00:00,0.0113 +2015-05-14 04:00:00,0.0504 +2015-05-14 05:00:00,0.0778 +2015-05-14 06:00:00,0.2472 +2015-05-14 07:00:00,0.124 +2015-05-14 08:00:00,0.0646 +2015-05-14 09:00:00,0.0612 +2015-05-14 10:00:00,0.0624 +2015-05-14 11:00:00,0.054 +2015-05-14 12:00:00,0.057 +2015-05-14 13:00:00,0.0541 +2015-05-14 14:00:00,0.0592 +2015-05-14 15:00:00,0.0547 +2015-05-14 16:00:00,0.0554 +2015-05-14 17:00:00,0.0463 +2015-05-14 18:00:00,0.0342 +2015-05-14 19:00:00,0.0281 +2015-05-14 20:00:00,0.0182 +2015-05-14 21:00:00,0.0047 +2015-05-14 22:00:00,0.004 +2015-05-14 23:00:00,0.0037 +2015-05-15 00:00:00,0.0038 +2015-05-15 01:00:00,0.0037 +2015-05-15 02:00:00,0.0039 +2015-05-15 03:00:00,0.0127 +2015-05-15 04:00:00,0.0474 +2015-05-15 05:00:00,0.0718 +2015-05-15 06:00:00,0.0691 +2015-05-15 07:00:00,0.0591 +2015-05-15 08:00:00,0.0635 +2015-05-15 09:00:00,0.0591 +2015-05-15 10:00:00,0.0577 +2015-05-15 11:00:00,0.0613 +2015-05-15 12:00:00,0.0615 +2015-05-15 13:00:00,0.0604 +2015-05-15 14:00:00,0.0611 +2015-05-15 15:00:00,0.0644 +2015-05-15 16:00:00,0.0591 +2015-05-15 17:00:00,0.0488 +2015-05-15 18:00:00,0.039 +2015-05-15 19:00:00,0.0323 +2015-05-15 20:00:00,0.0274 +2015-05-15 21:00:00,0.0219 +2015-05-15 22:00:00,0.0056 +2015-05-15 23:00:00,0.0042 +2015-05-16 00:00:00,0.004 +2015-05-16 01:00:00,0.0038 +2015-05-16 02:00:00,0.0039 +2015-05-16 03:00:00,0.004 +2015-05-16 04:00:00,0.0066 +2015-05-16 05:00:00,0.0242 +2015-05-16 06:00:00,0.0422 +2015-05-16 07:00:00,0.0457 +2015-05-16 08:00:00,0.0575 +2015-05-16 09:00:00,0.0599 +2015-05-16 10:00:00,0.0585 +2015-05-16 11:00:00,0.0632 +2015-05-16 12:00:00,0.0597 +2015-05-16 13:00:00,0.0638 +2015-05-16 14:00:00,0.0646 +2015-05-16 15:00:00,0.063 +2015-05-16 16:00:00,0.0634 +2015-05-16 17:00:00,0.0602 +2015-05-16 18:00:00,0.0458 +2015-05-16 19:00:00,0.0381 +2015-05-16 20:00:00,0.0376 +2015-05-16 21:00:00,0.0322 +2015-05-16 22:00:00,0.0138 +2015-05-16 23:00:00,0.0056 +2015-05-17 00:00:00,0.0039 +2015-05-17 01:00:00,0.004 +2015-05-17 02:00:00,0.0038 +2015-05-17 03:00:00,0.004 +2015-05-17 04:00:00,0.0044 +2015-05-17 05:00:00,0.017 +2015-05-17 06:00:00,0.0221 +2015-05-17 07:00:00,0.0353 +2015-05-17 08:00:00,0.0461 +2015-05-17 09:00:00,0.0565 +2015-05-17 10:00:00,0.0649 +2015-05-17 11:00:00,0.0474 +2015-05-17 12:00:00,0.0569 +2015-05-17 13:00:00,0.067 +2015-05-17 14:00:00,0.0675 +2015-05-17 15:00:00,0.0661 +2015-05-17 16:00:00,0.0619 +2015-05-17 17:00:00,0.0603 +2015-05-17 18:00:00,0.0435 +2015-05-17 19:00:00,0.0363 +2015-05-17 20:00:00,0.0315 +2015-05-17 21:00:00,0.0198 +2015-05-17 22:00:00,0.0049 +2015-05-17 23:00:00,0.004 +2015-05-18 00:00:00,0.0037 +2015-05-18 01:00:00,0.0038 +2015-05-18 02:00:00,0.0039 +2015-05-18 03:00:00,0.0115 +2015-05-18 04:00:00,0.0505 +2015-05-18 05:00:00,0.1148 +2015-05-18 06:00:00,0.3298 +2015-05-18 07:00:00,0.1633 +2015-05-18 08:00:00,0.0609 +2015-05-18 09:00:00,0.0589 +2015-05-18 10:00:00,0.0582 +2015-05-18 11:00:00,0.0586 +2015-05-18 12:00:00,0.057 +2015-05-18 13:00:00,0.0574 +2015-05-18 14:00:00,0.0574 +2015-05-18 15:00:00,0.0527 +2015-05-18 16:00:00,0.056 +2015-05-18 17:00:00,0.046 +2015-05-18 18:00:00,0.0357 +2015-05-18 19:00:00,0.0259 +2015-05-18 20:00:00,0.0211 +2015-05-18 21:00:00,0.006 +2015-05-18 22:00:00,0.0038 +2015-05-18 23:00:00,0.0038 +2015-05-19 00:00:00,0.0037 +2015-05-19 01:00:00,0.0037 +2015-05-19 02:00:00,0.0039 +2015-05-19 03:00:00,0.0102 +2015-05-19 04:00:00,0.0541 +2015-05-19 05:00:00,0.1212 +2015-05-19 06:00:00,0.2968 +2015-05-19 07:00:00,0.3933 +2015-05-19 08:00:00,0.1141 +2015-05-19 09:00:00,0.0607 +2015-05-19 10:00:00,0.0599 +2015-05-19 11:00:00,0.0588 +2015-05-19 12:00:00,0.0619 +2015-05-19 13:00:00,0.0568 +2015-05-19 14:00:00,0.0558 +2015-05-19 15:00:00,0.0565 +2015-05-19 16:00:00,0.06 +2015-05-19 17:00:00,0.0484 +2015-05-19 18:00:00,0.0339 +2015-05-19 19:00:00,0.0276 +2015-05-19 20:00:00,0.0216 +2015-05-19 21:00:00,0.0048 +2015-05-19 22:00:00,0.0039 +2015-05-19 23:00:00,0.0039 +2015-05-20 00:00:00,0.0037 +2015-05-20 01:00:00,0.0037 +2015-05-20 02:00:00,0.0044 +2015-05-20 03:00:00,0.011 +2015-05-20 04:00:00,0.0516 +2015-05-20 05:00:00,0.1174 +2015-05-20 06:00:00,0.3727 +2015-05-20 07:00:00,0.1311 +2015-05-20 08:00:00,0.0628 +2015-05-20 09:00:00,0.0654 +2015-05-20 10:00:00,0.0645 +2015-05-20 11:00:00,0.0593 +2015-05-20 12:00:00,0.0565 +2015-05-20 13:00:00,0.0612 +2015-05-20 14:00:00,0.0647 +2015-05-20 15:00:00,0.061 +2015-05-20 16:00:00,0.0588 +2015-05-20 17:00:00,0.0461 +2015-05-20 18:00:00,0.0348 +2015-05-20 19:00:00,0.0284 +2015-05-20 20:00:00,0.0196 +2015-05-20 21:00:00,0.0048 +2015-05-20 22:00:00,0.0037 +2015-05-20 23:00:00,0.0038 +2015-05-21 00:00:00,0.0037 +2015-05-21 01:00:00,0.0037 +2015-05-21 02:00:00,0.0037 +2015-05-21 03:00:00,0.0159 +2015-05-21 04:00:00,0.0495 +2015-05-21 05:00:00,0.0671 +2015-05-21 06:00:00,0.2963 +2015-05-21 07:00:00,0.338 +2015-05-21 08:00:00,0.0659 +2015-05-21 09:00:00,0.0637 +2015-05-21 10:00:00,0.0595 +2015-05-21 11:00:00,0.0603 +2015-05-21 12:00:00,0.0617 +2015-05-21 13:00:00,0.0581 +2015-05-21 14:00:00,0.0604 +2015-05-21 15:00:00,0.0612 +2015-05-21 16:00:00,0.057 +2015-05-21 17:00:00,0.0462 +2015-05-21 18:00:00,0.037 +2015-05-21 19:00:00,0.028 +2015-05-21 20:00:00,0.0221 +2015-05-21 21:00:00,0.0077 +2015-05-21 22:00:00,0.0042 +2015-05-21 23:00:00,0.0067 +2015-05-22 00:00:00,0.0039 +2015-05-22 01:00:00,0.0039 +2015-05-22 02:00:00,0.0039 +2015-05-22 03:00:00,0.0081 +2015-05-22 04:00:00,0.0429 +2015-05-22 05:00:00,0.0726 +2015-05-22 06:00:00,0.0638 +2015-05-22 07:00:00,0.0562 +2015-05-22 08:00:00,0.062 +2015-05-22 09:00:00,0.0647 +2015-05-22 10:00:00,0.0616 +2015-05-22 11:00:00,0.0655 +2015-05-22 12:00:00,0.0601 +2015-05-22 13:00:00,0.0609 +2015-05-22 14:00:00,0.0569 +2015-05-22 15:00:00,0.0584 +2015-05-22 16:00:00,0.0547 +2015-05-22 17:00:00,0.0449 +2015-05-22 18:00:00,0.0376 +2015-05-22 19:00:00,0.0315 +2015-05-22 20:00:00,0.0257 +2015-05-22 21:00:00,0.0127 +2015-05-22 22:00:00,0.007 +2015-05-22 23:00:00,0.0042 +2015-05-23 00:00:00,0.0039 +2015-05-23 01:00:00,0.0038 +2015-05-23 02:00:00,0.0041 +2015-05-23 03:00:00,0.0043 +2015-05-23 04:00:00,0.0046 +2015-05-23 05:00:00,0.0198 +2015-05-23 06:00:00,0.0328 +2015-05-23 07:00:00,0.0403 +2015-05-23 08:00:00,0.0537 +2015-05-23 09:00:00,0.056 +2015-05-23 10:00:00,0.0626 +2015-05-23 11:00:00,0.0595 +2015-05-23 12:00:00,0.0611 +2015-05-23 13:00:00,0.058 +2015-05-23 14:00:00,0.0592 +2015-05-23 15:00:00,0.0604 +2015-05-23 16:00:00,0.0552 +2015-05-23 17:00:00,0.0464 +2015-05-23 18:00:00,0.0393 +2015-05-23 19:00:00,0.0374 +2015-05-23 20:00:00,0.036 +2015-05-23 21:00:00,0.0286 +2015-05-23 22:00:00,0.013 +2015-05-23 23:00:00,0.0041 +2015-05-24 00:00:00,0.004 +2015-05-24 01:00:00,0.0044 +2015-05-24 02:00:00,0.0041 +2015-05-24 03:00:00,0.0037 +2015-05-24 04:00:00,0.0043 +2015-05-24 05:00:00,0.006 +2015-05-24 06:00:00,0.0068 +2015-05-24 07:00:00,0.0334 +2015-05-24 08:00:00,0.0415 +2015-05-24 09:00:00,0.0537 +2015-05-24 10:00:00,0.0592 +2015-05-24 11:00:00,0.0577 +2015-05-24 12:00:00,0.0588 +2015-05-24 13:00:00,0.059 +2015-05-24 14:00:00,0.0603 +2015-05-24 15:00:00,0.0568 +2015-05-24 16:00:00,0.0598 +2015-05-24 17:00:00,0.0579 +2015-05-24 18:00:00,0.0443 +2015-05-24 19:00:00,0.0389 +2015-05-24 20:00:00,0.0379 +2015-05-24 21:00:00,0.0286 +2015-05-24 22:00:00,0.0128 +2015-05-24 23:00:00,0.0042 +2015-05-25 00:00:00,0.0042 +2015-05-25 01:00:00,0.0037 +2015-05-25 02:00:00,0.0037 +2015-05-25 03:00:00,0.0041 +2015-05-25 04:00:00,0.0046 +2015-05-25 05:00:00,0.0154 +2015-05-25 06:00:00,0.0173 +2015-05-25 07:00:00,0.0309 +2015-05-25 08:00:00,0.0414 +2015-05-25 09:00:00,0.0539 +2015-05-25 10:00:00,0.0587 +2015-05-25 11:00:00,0.0623 +2015-05-25 12:00:00,0.0627 +2015-05-25 13:00:00,0.0636 +2015-05-25 14:00:00,0.0606 +2015-05-25 15:00:00,0.0578 +2015-05-25 16:00:00,0.0588 +2015-05-25 17:00:00,0.0526 +2015-05-25 18:00:00,0.0451 +2015-05-25 19:00:00,0.0355 +2015-05-25 20:00:00,0.0354 +2015-05-25 21:00:00,0.0145 +2015-05-25 22:00:00,0.0043 +2015-05-25 23:00:00,0.0039 +2015-05-26 00:00:00,0.0038 +2015-05-26 01:00:00,0.0037 +2015-05-26 02:00:00,0.0041 +2015-05-26 03:00:00,0.0132 +2015-05-26 04:00:00,0.053 +2015-05-26 05:00:00,0.1188 +2015-05-26 06:00:00,0.3818 +2015-05-26 07:00:00,0.4057 +2015-05-26 08:00:00,0.2718 +2015-05-26 09:00:00,0.0626 +2015-05-26 10:00:00,0.0656 +2015-05-26 11:00:00,0.0599 +2015-05-26 12:00:00,0.0643 +2015-05-26 13:00:00,0.0576 +2015-05-26 14:00:00,0.0594 +2015-05-26 15:00:00,0.058 +2015-05-26 16:00:00,0.0575 +2015-05-26 17:00:00,0.0465 +2015-05-26 18:00:00,0.0354 +2015-05-26 19:00:00,0.0258 +2015-05-26 20:00:00,0.0146 +2015-05-26 21:00:00,0.006 +2015-05-26 22:00:00,0.0038 +2015-05-26 23:00:00,0.0036 +2015-05-27 00:00:00,0.0037 +2015-05-27 01:00:00,0.0037 +2015-05-27 02:00:00,0.0039 +2015-05-27 03:00:00,0.0122 +2015-05-27 04:00:00,0.0546 +2015-05-27 05:00:00,0.1431 +2015-05-27 06:00:00,0.3628 +2015-05-27 07:00:00,0.2941 +2015-05-27 08:00:00,0.0619 +2015-05-27 09:00:00,0.0651 +2015-05-27 10:00:00,0.0604 +2015-05-27 11:00:00,0.0599 +2015-05-27 12:00:00,0.0587 +2015-05-27 13:00:00,0.055 +2015-05-27 14:00:00,0.0611 +2015-05-27 15:00:00,0.0569 +2015-05-27 16:00:00,0.0585 +2015-05-27 17:00:00,0.045 +2015-05-27 18:00:00,0.0336 +2015-05-27 19:00:00,0.0254 +2015-05-27 20:00:00,0.0192 +2015-05-27 21:00:00,0.0053 +2015-05-27 22:00:00,0.0043 +2015-05-27 23:00:00,0.0037 +2015-05-28 00:00:00,0.0037 +2015-05-28 01:00:00,0.0037 +2015-05-28 02:00:00,0.004 +2015-05-28 03:00:00,0.0126 +2015-05-28 04:00:00,0.0529 +2015-05-28 05:00:00,0.1026 +2015-05-28 06:00:00,0.2868 +2015-05-28 07:00:00,0.0566 +2015-05-28 08:00:00,0.0638 +2015-05-28 09:00:00,0.0646 +2015-05-28 10:00:00,0.062 +2015-05-28 11:00:00,0.0625 +2015-05-28 12:00:00,0.0622 +2015-05-28 13:00:00,0.0588 +2015-05-28 14:00:00,0.0593 +2015-05-28 15:00:00,0.0615 +2015-05-28 16:00:00,0.0609 +2015-05-28 17:00:00,0.0483 +2015-05-28 18:00:00,0.0364 +2015-05-28 19:00:00,0.026 +2015-05-28 20:00:00,0.0211 +2015-05-28 21:00:00,0.0058 +2015-05-28 22:00:00,0.0041 +2015-05-28 23:00:00,0.0037 +2015-05-29 00:00:00,0.0037 +2015-05-29 01:00:00,0.0035 +2015-05-29 02:00:00,0.004 +2015-05-29 03:00:00,0.0115 +2015-05-29 04:00:00,0.0475 +2015-05-29 05:00:00,0.0746 +2015-05-29 06:00:00,0.0635 +2015-05-29 07:00:00,0.0606 +2015-05-29 08:00:00,0.0629 +2015-05-29 09:00:00,0.0616 +2015-05-29 10:00:00,0.062 +2015-05-29 11:00:00,0.0597 +2015-05-29 12:00:00,0.0642 +2015-05-29 13:00:00,0.0673 +2015-05-29 14:00:00,0.0605 +2015-05-29 15:00:00,0.0606 +2015-05-29 16:00:00,0.0577 +2015-05-29 17:00:00,0.0479 +2015-05-29 18:00:00,0.0369 +2015-05-29 19:00:00,0.0315 +2015-05-29 20:00:00,0.0276 +2015-05-29 21:00:00,0.0174 +2015-05-29 22:00:00,0.0048 +2015-05-29 23:00:00,0.0039 +2015-05-30 00:00:00,0.0038 +2015-05-30 01:00:00,0.0037 +2015-05-30 02:00:00,0.0038 +2015-05-30 03:00:00,0.0042 +2015-05-30 04:00:00,0.0064 +2015-05-30 05:00:00,0.0172 +2015-05-30 06:00:00,0.0329 +2015-05-30 07:00:00,0.0432 +2015-05-30 08:00:00,0.0509 +2015-05-30 09:00:00,0.0568 +2015-05-30 10:00:00,0.0611 +2015-05-30 11:00:00,0.0603 +2015-05-30 12:00:00,0.0586 +2015-05-30 13:00:00,0.0595 +2015-05-30 14:00:00,0.062 +2015-05-30 15:00:00,0.0651 +2015-05-30 16:00:00,0.0635 +2015-05-30 17:00:00,0.0526 +2015-05-30 18:00:00,0.042 +2015-05-30 19:00:00,0.0356 +2015-05-30 20:00:00,0.0317 +2015-05-30 21:00:00,0.0288 +2015-05-30 22:00:00,0.0093 +2015-05-30 23:00:00,0.0042 +2015-05-31 00:00:00,0.0037 +2015-05-31 01:00:00,0.0037 +2015-05-31 02:00:00,0.0039 +2015-05-31 03:00:00,0.0039 +2015-05-31 04:00:00,0.0047 +2015-05-31 05:00:00,0.0101 +2015-05-31 06:00:00,0.0199 +2015-05-31 07:00:00,0.0313 +2015-05-31 08:00:00,0.0469 +2015-05-31 09:00:00,0.0621 +2015-05-31 10:00:00,0.0678 +2015-05-31 11:00:00,0.0663 +2015-05-31 12:00:00,0.0659 +2015-05-31 13:00:00,0.0649 +2015-05-31 14:00:00,0.0641 +2015-05-31 15:00:00,0.0651 +2015-05-31 16:00:00,0.0623 +2015-05-31 17:00:00,0.0497 +2015-05-31 18:00:00,0.0393 +2015-05-31 19:00:00,0.0331 +2015-05-31 20:00:00,0.0298 +2015-05-31 21:00:00,0.0181 +2015-05-31 22:00:00,0.0047 +2015-05-31 23:00:00,0.0036 +2015-06-01 00:00:00,0.0031 +2015-06-01 01:00:00,0.0028 +2015-06-01 02:00:00,0.0036 +2015-06-01 03:00:00,0.011 +2015-06-01 04:00:00,0.0512 +2015-06-01 05:00:00,0.0748 +2015-06-01 06:00:00,0.233 +2015-06-01 07:00:00,0.1439 +2015-06-01 08:00:00,0.0585 +2015-06-01 09:00:00,0.0588 +2015-06-01 10:00:00,0.0597 +2015-06-01 11:00:00,0.0596 +2015-06-01 12:00:00,0.056 +2015-06-01 13:00:00,0.056 +2015-06-01 14:00:00,0.0562 +2015-06-01 15:00:00,0.0562 +2015-06-01 16:00:00,0.0548 +2015-06-01 17:00:00,0.0455 +2015-06-01 18:00:00,0.0348 +2015-06-01 19:00:00,0.0299 +2015-06-01 20:00:00,0.0186 +2015-06-01 21:00:00,0.0051 +2015-06-01 22:00:00,0.0037 +2015-06-01 23:00:00,0.0038 +2015-06-02 00:00:00,0.0038 +2015-06-02 01:00:00,0.0037 +2015-06-02 02:00:00,0.0042 +2015-06-02 03:00:00,0.0078 +2015-06-02 04:00:00,0.054 +2015-06-02 05:00:00,0.1345 +2015-06-02 06:00:00,0.3029 +2015-06-02 07:00:00,0.1532 +2015-06-02 08:00:00,0.0646 +2015-06-02 09:00:00,0.0638 +2015-06-02 10:00:00,0.0598 +2015-06-02 11:00:00,0.0569 +2015-06-02 12:00:00,0.057 +2015-06-02 13:00:00,0.0549 +2015-06-02 14:00:00,0.0587 +2015-06-02 15:00:00,0.0545 +2015-06-02 16:00:00,0.0566 +2015-06-02 17:00:00,0.0457 +2015-06-02 18:00:00,0.0351 +2015-06-02 19:00:00,0.026 +2015-06-02 20:00:00,0.0214 +2015-06-02 21:00:00,0.0042 +2015-06-02 22:00:00,0.0038 +2015-06-02 23:00:00,0.0038 +2015-06-03 00:00:00,0.0037 +2015-06-03 01:00:00,0.0038 +2015-06-03 02:00:00,0.0038 +2015-06-03 03:00:00,0.0123 +2015-06-03 04:00:00,0.0458 +2015-06-03 05:00:00,0.1271 +2015-06-03 06:00:00,0.3114 +2015-06-03 07:00:00,0.1455 +2015-06-03 08:00:00,0.0645 +2015-06-03 09:00:00,0.0665 +2015-06-03 10:00:00,0.0609 +2015-06-03 11:00:00,0.0566 +2015-06-03 12:00:00,0.0574 +2015-06-03 13:00:00,0.0599 +2015-06-03 14:00:00,0.0552 +2015-06-03 15:00:00,0.0552 +2015-06-03 16:00:00,0.0569 +2015-06-03 17:00:00,0.0449 +2015-06-03 18:00:00,0.0345 +2015-06-03 19:00:00,0.0277 +2015-06-03 20:00:00,0.0223 +2015-06-03 21:00:00,0.0047 +2015-06-03 22:00:00,0.0038 +2015-06-03 23:00:00,0.0037 +2015-06-04 00:00:00,0.0037 +2015-06-04 01:00:00,0.0037 +2015-06-04 02:00:00,0.0039 +2015-06-04 03:00:00,0.0107 +2015-06-04 04:00:00,0.0517 +2015-06-04 05:00:00,0.108 +2015-06-04 06:00:00,0.3006 +2015-06-04 07:00:00,0.0786 +2015-06-04 08:00:00,0.0653 +2015-06-04 09:00:00,0.0645 +2015-06-04 10:00:00,0.0606 +2015-06-04 11:00:00,0.0605 +2015-06-04 12:00:00,0.0579 +2015-06-04 13:00:00,0.0559 +2015-06-04 14:00:00,0.0641 +2015-06-04 15:00:00,0.0595 +2015-06-04 16:00:00,0.0568 +2015-06-04 17:00:00,0.046 +2015-06-04 18:00:00,0.033 +2015-06-04 19:00:00,0.0235 +2015-06-04 20:00:00,0.0253 +2015-06-04 21:00:00,0.0091 +2015-06-04 22:00:00,0.0041 +2015-06-04 23:00:00,0.0038 +2015-06-05 00:00:00,0.0037 +2015-06-05 01:00:00,0.0037 +2015-06-05 02:00:00,0.0042 +2015-06-05 03:00:00,0.0126 +2015-06-05 04:00:00,0.0504 +2015-06-05 05:00:00,0.0713 +2015-06-05 06:00:00,0.0666 +2015-06-05 07:00:00,0.0601 +2015-06-05 08:00:00,0.0609 +2015-06-05 09:00:00,0.0614 +2015-06-05 10:00:00,0.0599 +2015-06-05 11:00:00,0.0625 +2015-06-05 12:00:00,0.0621 +2015-06-05 13:00:00,0.0625 +2015-06-05 14:00:00,0.0609 +2015-06-05 15:00:00,0.0584 +2015-06-05 16:00:00,0.052 +2015-06-05 17:00:00,0.0467 +2015-06-05 18:00:00,0.0382 +2015-06-05 19:00:00,0.0338 +2015-06-05 20:00:00,0.0296 +2015-06-05 21:00:00,0.0246 +2015-06-05 22:00:00,0.0081 +2015-06-05 23:00:00,0.0037 +2015-06-06 00:00:00,0.0037 +2015-06-06 01:00:00,0.0039 +2015-06-06 02:00:00,0.0037 +2015-06-06 03:00:00,0.004 +2015-06-06 04:00:00,0.0062 +2015-06-06 05:00:00,0.0303 +2015-06-06 06:00:00,0.0356 +2015-06-06 07:00:00,0.0439 +2015-06-06 08:00:00,0.0528 +2015-06-06 09:00:00,0.0582 +2015-06-06 10:00:00,0.0638 +2015-06-06 11:00:00,0.0641 +2015-06-06 12:00:00,0.0615 +2015-06-06 13:00:00,0.0598 +2015-06-06 14:00:00,0.0622 +2015-06-06 15:00:00,0.0625 +2015-06-06 16:00:00,0.0588 +2015-06-06 17:00:00,0.0522 +2015-06-06 18:00:00,0.0416 +2015-06-06 19:00:00,0.0378 +2015-06-06 20:00:00,0.0351 +2015-06-06 21:00:00,0.0329 +2015-06-06 22:00:00,0.0165 +2015-06-06 23:00:00,0.0043 +2015-06-07 00:00:00,0.0042 +2015-06-07 01:00:00,0.0037 +2015-06-07 02:00:00,0.0038 +2015-06-07 03:00:00,0.0038 +2015-06-07 04:00:00,0.0043 +2015-06-07 05:00:00,0.0071 +2015-06-07 06:00:00,0.019 +2015-06-07 07:00:00,0.0355 +2015-06-07 08:00:00,0.0494 +2015-06-07 09:00:00,0.0633 +2015-06-07 10:00:00,0.067 +2015-06-07 11:00:00,0.072 +2015-06-07 12:00:00,0.0693 +2015-06-07 13:00:00,0.0651 +2015-06-07 14:00:00,0.0642 +2015-06-07 15:00:00,0.0697 +2015-06-07 16:00:00,0.0567 +2015-06-07 17:00:00,0.0531 +2015-06-07 18:00:00,0.0392 +2015-06-07 19:00:00,0.0391 +2015-06-07 20:00:00,0.0365 +2015-06-07 21:00:00,0.0194 +2015-06-07 22:00:00,0.0044 +2015-06-07 23:00:00,0.0038 +2015-06-08 00:00:00,0.0038 +2015-06-08 01:00:00,0.0037 +2015-06-08 02:00:00,0.004 +2015-06-08 03:00:00,0.0107 +2015-06-08 04:00:00,0.0541 +2015-06-08 05:00:00,0.0948 +2015-06-08 06:00:00,0.2627 +2015-06-08 07:00:00,0.0721 +2015-06-08 08:00:00,0.0541 +2015-06-08 09:00:00,0.0531 +2015-06-08 10:00:00,0.053 +2015-06-08 11:00:00,0.0563 +2015-06-08 12:00:00,0.0562 +2015-06-08 13:00:00,0.0446 +2015-06-08 14:00:00,0.0562 +2015-06-08 15:00:00,0.127 +2015-06-08 16:00:00,0.0795 +2015-06-08 17:00:00,0.0449 +2015-06-08 18:00:00,0.0361 +2015-06-08 19:00:00,0.0283 +2015-06-08 20:00:00,0.0185 +2015-06-08 21:00:00,0.0058 +2015-06-08 22:00:00,0.0042 +2015-06-08 23:00:00,0.0068 +2015-06-09 00:00:00,0.0037 +2015-06-09 01:00:00,0.0037 +2015-06-09 02:00:00,0.0037 +2015-06-09 03:00:00,0.0133 +2015-06-09 04:00:00,0.0536 +2015-06-09 05:00:00,0.1172 +2015-06-09 06:00:00,0.2846 +2015-06-09 07:00:00,0.1798 +2015-06-09 08:00:00,0.0703 +2015-06-09 09:00:00,0.063 +2015-06-09 10:00:00,0.0607 +2015-06-09 11:00:00,0.0622 +2015-06-09 12:00:00,0.0572 +2015-06-09 13:00:00,0.0575 +2015-06-09 14:00:00,0.0601 +2015-06-09 15:00:00,0.0584 +2015-06-09 16:00:00,0.0555 +2015-06-09 17:00:00,0.0419 +2015-06-09 18:00:00,0.0318 +2015-06-09 19:00:00,0.0209 +2015-06-09 20:00:00,0.0228 +2015-06-09 21:00:00,0.0054 +2015-06-09 22:00:00,0.0043 +2015-06-09 23:00:00,0.0038 +2015-06-10 00:00:00,0.0038 +2015-06-10 01:00:00,0.0041 +2015-06-10 02:00:00,0.0039 +2015-06-10 03:00:00,0.0103 +2015-06-10 04:00:00,0.052 +2015-06-10 05:00:00,0.1148 +2015-06-10 06:00:00,0.3332 +2015-06-10 07:00:00,0.4032 +2015-06-10 08:00:00,0.3942 +2015-06-10 09:00:00,0.3498 +2015-06-10 10:00:00,0.371 +2015-06-10 11:00:00,0.1324 +2015-06-10 12:00:00,0.0571 +2015-06-10 13:00:00,0.0558 +2015-06-10 14:00:00,0.0555 +2015-06-10 15:00:00,0.0579 +2015-06-10 16:00:00,0.057 +2015-06-10 17:00:00,0.0458 +2015-06-10 18:00:00,0.035 +2015-06-10 19:00:00,0.0306 +2015-06-10 20:00:00,0.0209 +2015-06-10 21:00:00,0.0083 +2015-06-10 22:00:00,0.004 +2015-06-10 23:00:00,0.0038 +2015-06-11 00:00:00,0.0037 +2015-06-11 01:00:00,0.0037 +2015-06-11 02:00:00,0.0037 +2015-06-11 03:00:00,0.0144 +2015-06-11 04:00:00,0.0511 +2015-06-11 05:00:00,0.1139 +2015-06-11 06:00:00,0.19 +2015-06-11 07:00:00,0.0612 +2015-06-11 08:00:00,0.0659 +2015-06-11 09:00:00,0.0665 +2015-06-11 10:00:00,0.0664 +2015-06-11 11:00:00,0.0675 +2015-06-11 12:00:00,0.0618 +2015-06-11 13:00:00,0.0608 +2015-06-11 14:00:00,0.0599 +2015-06-11 15:00:00,0.06 +2015-06-11 16:00:00,0.0536 +2015-06-11 17:00:00,0.044 +2015-06-11 18:00:00,0.0343 +2015-06-11 19:00:00,0.0276 +2015-06-11 20:00:00,0.0271 +2015-06-11 21:00:00,0.011 +2015-06-11 22:00:00,0.0041 +2015-06-11 23:00:00,0.0038 +2015-06-12 00:00:00,0.0037 +2015-06-12 01:00:00,0.0038 +2015-06-12 02:00:00,0.0039 +2015-06-12 03:00:00,0.0107 +2015-06-12 04:00:00,0.0462 +2015-06-12 05:00:00,0.0754 +2015-06-12 06:00:00,0.0647 +2015-06-12 07:00:00,0.0613 +2015-06-12 08:00:00,0.0671 +2015-06-12 09:00:00,0.0667 +2015-06-12 10:00:00,0.0682 +2015-06-12 11:00:00,0.0634 +2015-06-12 12:00:00,0.0629 +2015-06-12 13:00:00,0.0627 +2015-06-12 14:00:00,0.0583 +2015-06-12 15:00:00,0.0603 +2015-06-12 16:00:00,0.0585 +2015-06-12 17:00:00,0.0505 +2015-06-12 18:00:00,0.044 +2015-06-12 19:00:00,0.0343 +2015-06-12 20:00:00,0.0304 +2015-06-12 21:00:00,0.0171 +2015-06-12 22:00:00,0.005 +2015-06-12 23:00:00,0.0038 +2015-06-13 00:00:00,0.0037 +2015-06-13 01:00:00,0.0038 +2015-06-13 02:00:00,0.004 +2015-06-13 03:00:00,0.0039 +2015-06-13 04:00:00,0.0095 +2015-06-13 05:00:00,0.0258 +2015-06-13 06:00:00,0.0355 +2015-06-13 07:00:00,0.0428 +2015-06-13 08:00:00,0.0514 +2015-06-13 09:00:00,0.0624 +2015-06-13 10:00:00,0.0649 +2015-06-13 11:00:00,0.0623 +2015-06-13 12:00:00,0.0623 +2015-06-13 13:00:00,0.0638 +2015-06-13 14:00:00,0.0585 +2015-06-13 15:00:00,0.0598 +2015-06-13 16:00:00,0.0603 +2015-06-13 17:00:00,0.0549 +2015-06-13 18:00:00,0.046 +2015-06-13 19:00:00,0.0384 +2015-06-13 20:00:00,0.0346 +2015-06-13 21:00:00,0.0274 +2015-06-13 22:00:00,0.0152 +2015-06-13 23:00:00,0.0052 +2015-06-14 00:00:00,0.0039 +2015-06-14 01:00:00,0.0037 +2015-06-14 02:00:00,0.004 +2015-06-14 03:00:00,0.0041 +2015-06-14 04:00:00,0.0041 +2015-06-14 05:00:00,0.0092 +2015-06-14 06:00:00,0.0197 +2015-06-14 07:00:00,0.0333 +2015-06-14 08:00:00,0.0491 +2015-06-14 09:00:00,0.0641 +2015-06-14 10:00:00,0.0675 +2015-06-14 11:00:00,0.0691 +2015-06-14 12:00:00,0.0683 +2015-06-14 13:00:00,0.0656 +2015-06-14 14:00:00,0.0638 +2015-06-14 15:00:00,0.0645 +2015-06-14 16:00:00,0.0616 +2015-06-14 17:00:00,0.052 +2015-06-14 18:00:00,0.0387 +2015-06-14 19:00:00,0.0418 +2015-06-14 20:00:00,0.0347 +2015-06-14 21:00:00,0.0168 +2015-06-14 22:00:00,0.0043 +2015-06-14 23:00:00,0.0041 +2015-06-15 00:00:00,0.004 +2015-06-15 01:00:00,0.0037 +2015-06-15 02:00:00,0.0037 +2015-06-15 03:00:00,0.0128 +2015-06-15 04:00:00,0.0514 +2015-06-15 05:00:00,0.0738 +2015-06-15 06:00:00,0.0635 +2015-06-15 07:00:00,0.06 +2015-06-15 08:00:00,0.0671 +2015-06-15 09:00:00,0.0622 +2015-06-15 10:00:00,0.0604 +2015-06-15 11:00:00,0.0653 +2015-06-15 12:00:00,0.059 +2015-06-15 13:00:00,0.0607 +2015-06-15 14:00:00,0.0583 +2015-06-15 15:00:00,0.0583 +2015-06-15 16:00:00,0.0587 +2015-06-15 17:00:00,0.0432 +2015-06-15 18:00:00,0.0351 +2015-06-15 19:00:00,0.0273 +2015-06-15 20:00:00,0.0173 +2015-06-15 21:00:00,0.0056 +2015-06-15 22:00:00,0.0039 +2015-06-15 23:00:00,0.0037 +2015-06-16 00:00:00,0.0037 +2015-06-16 01:00:00,0.0038 +2015-06-16 02:00:00,0.004 +2015-06-16 03:00:00,0.0099 +2015-06-16 04:00:00,0.0548 +2015-06-16 05:00:00,0.0799 +2015-06-16 06:00:00,0.2136 +2015-06-16 07:00:00,0.0633 +2015-06-16 08:00:00,0.0678 +2015-06-16 09:00:00,0.0682 +2015-06-16 10:00:00,0.0636 +2015-06-16 11:00:00,0.0623 +2015-06-16 12:00:00,0.0591 +2015-06-16 13:00:00,0.0613 +2015-06-16 14:00:00,0.0489 +2015-06-16 15:00:00,0.0605 +2015-06-16 16:00:00,0.0598 +2015-06-16 17:00:00,0.0436 +2015-06-16 18:00:00,0.0292 +2015-06-16 19:00:00,0.0231 +2015-06-16 20:00:00,0.0228 +2015-06-16 21:00:00,0.0096 +2015-06-16 22:00:00,0.0042 +2015-06-16 23:00:00,0.0037 +2015-06-17 00:00:00,0.0038 +2015-06-17 01:00:00,0.0038 +2015-06-17 02:00:00,0.0039 +2015-06-17 03:00:00,0.0146 +2015-06-17 04:00:00,0.0507 +2015-06-17 05:00:00,0.0835 +2015-06-17 06:00:00,0.1265 +2015-06-17 07:00:00,0.0617 +2015-06-17 08:00:00,0.0679 +2015-06-17 09:00:00,0.0649 +2015-06-17 10:00:00,0.0612 +2015-06-17 11:00:00,0.0592 +2015-06-17 12:00:00,0.0592 +2015-06-17 13:00:00,0.0608 +2015-06-17 14:00:00,0.062 +2015-06-17 15:00:00,0.0605 +2015-06-17 16:00:00,0.0624 +2015-06-17 17:00:00,0.0472 +2015-06-17 18:00:00,0.0393 +2015-06-17 19:00:00,0.0291 +2015-06-17 20:00:00,0.023 +2015-06-17 21:00:00,0.0106 +2015-06-17 22:00:00,0.0039 +2015-06-17 23:00:00,0.0038 +2015-06-18 00:00:00,0.0038 +2015-06-18 01:00:00,0.0038 +2015-06-18 02:00:00,0.004 +2015-06-18 03:00:00,0.016 +2015-06-18 04:00:00,0.0515 +2015-06-18 05:00:00,0.0796 +2015-06-18 06:00:00,0.1518 +2015-06-18 07:00:00,0.063 +2015-06-18 08:00:00,0.0656 +2015-06-18 09:00:00,0.0666 +2015-06-18 10:00:00,0.0652 +2015-06-18 11:00:00,0.0658 +2015-06-18 12:00:00,0.0629 +2015-06-18 13:00:00,0.0641 +2015-06-18 14:00:00,0.0626 +2015-06-18 15:00:00,0.0587 +2015-06-18 16:00:00,0.0576 +2015-06-18 17:00:00,0.0492 +2015-06-18 18:00:00,0.0386 +2015-06-18 19:00:00,0.0307 +2015-06-18 20:00:00,0.0275 +2015-06-18 21:00:00,0.0113 +2015-06-18 22:00:00,0.0039 +2015-06-18 23:00:00,0.0039 +2015-06-19 00:00:00,0.0037 +2015-06-19 01:00:00,0.0038 +2015-06-19 02:00:00,0.0039 +2015-06-19 03:00:00,0.0042 +2015-06-19 04:00:00,0.0431 +2015-06-19 05:00:00,0.0683 +2015-06-19 06:00:00,0.0659 +2015-06-19 07:00:00,0.0629 +2015-06-19 08:00:00,0.0622 +2015-06-19 09:00:00,0.0666 +2015-06-19 10:00:00,0.0624 +2015-06-19 11:00:00,0.0654 +2015-06-19 12:00:00,0.0659 +2015-06-19 13:00:00,0.0646 +2015-06-19 14:00:00,0.0563 +2015-06-19 15:00:00,0.0555 +2015-06-19 16:00:00,0.0598 +2015-06-19 17:00:00,0.0496 +2015-06-19 18:00:00,0.0389 +2015-06-19 19:00:00,0.0314 +2015-06-19 20:00:00,0.027 +2015-06-19 21:00:00,0.0195 +2015-06-19 22:00:00,0.0059 +2015-06-19 23:00:00,0.004 +2015-06-20 00:00:00,0.004 +2015-06-20 01:00:00,0.0038 +2015-06-20 02:00:00,0.0037 +2015-06-20 03:00:00,0.0042 +2015-06-20 04:00:00,0.0087 +2015-06-20 05:00:00,0.0246 +2015-06-20 06:00:00,0.0337 +2015-06-20 07:00:00,0.0457 +2015-06-20 08:00:00,0.0555 +2015-06-20 09:00:00,0.0611 +2015-06-20 10:00:00,0.0648 +2015-06-20 11:00:00,0.0675 +2015-06-20 12:00:00,0.064 +2015-06-20 13:00:00,0.0631 +2015-06-20 14:00:00,0.063 +2015-06-20 15:00:00,0.0638 +2015-06-20 16:00:00,0.0633 +2015-06-20 17:00:00,0.057 +2015-06-20 18:00:00,0.0485 +2015-06-20 19:00:00,0.0411 +2015-06-20 20:00:00,0.0407 +2015-06-20 21:00:00,0.033 +2015-06-20 22:00:00,0.0201 +2015-06-20 23:00:00,0.0038 +2015-06-21 00:00:00,0.0043 +2015-06-21 01:00:00,0.0039 +2015-06-21 02:00:00,0.0039 +2015-06-21 03:00:00,0.004 +2015-06-21 04:00:00,0.0048 +2015-06-21 05:00:00,0.0058 +2015-06-21 06:00:00,0.0154 +2015-06-21 07:00:00,0.0329 +2015-06-21 08:00:00,0.0477 +2015-06-21 09:00:00,0.0606 +2015-06-21 10:00:00,0.065 +2015-06-21 11:00:00,0.065 +2015-06-21 12:00:00,0.066 +2015-06-21 13:00:00,0.0635 +2015-06-21 14:00:00,0.0659 +2015-06-21 15:00:00,0.0638 +2015-06-21 16:00:00,0.0611 +2015-06-21 17:00:00,0.0584 +2015-06-21 18:00:00,0.0544 +2015-06-21 19:00:00,0.0529 +2015-06-21 20:00:00,0.0423 +2015-06-21 21:00:00,0.0302 +2015-06-21 22:00:00,0.0041 +2015-06-21 23:00:00,0.0038 +2015-06-22 00:00:00,0.0039 +2015-06-22 01:00:00,0.0037 +2015-06-22 02:00:00,0.0038 +2015-06-22 03:00:00,0.0127 +2015-06-22 04:00:00,0.0527 +2015-06-22 05:00:00,0.0787 +2015-06-22 06:00:00,0.0707 +2015-06-22 07:00:00,0.0586 +2015-06-22 08:00:00,0.0601 +2015-06-22 09:00:00,0.0645 +2015-06-22 10:00:00,0.0617 +2015-06-22 11:00:00,0.0766 +2015-06-22 12:00:00,0.0592 +2015-06-22 13:00:00,0.0619 +2015-06-22 14:00:00,0.0556 +2015-06-22 15:00:00,0.0528 +2015-06-22 16:00:00,0.0566 +2015-06-22 17:00:00,0.0437 +2015-06-22 18:00:00,0.0363 +2015-06-22 19:00:00,0.0271 +2015-06-22 20:00:00,0.0186 +2015-06-22 21:00:00,0.0088 +2015-06-22 22:00:00,0.004 +2015-06-22 23:00:00,0.0037 +2015-06-23 00:00:00,0.0037 +2015-06-23 01:00:00,0.0038 +2015-06-23 02:00:00,0.0038 +2015-06-23 03:00:00,0.0066 +2015-06-23 04:00:00,0.0532 +2015-06-23 05:00:00,0.1076 +2015-06-23 06:00:00,0.2901 +2015-06-23 07:00:00,0.1144 +2015-06-23 08:00:00,0.0694 +2015-06-23 09:00:00,0.0702 +2015-06-23 10:00:00,0.0606 +2015-06-23 11:00:00,0.0632 +2015-06-23 12:00:00,0.0588 +2015-06-23 13:00:00,0.0628 +2015-06-23 14:00:00,0.058 +2015-06-23 15:00:00,0.0616 +2015-06-23 16:00:00,0.057 +2015-06-23 17:00:00,0.046 +2015-06-23 18:00:00,0.0352 +2015-06-23 19:00:00,0.0276 +2015-06-23 20:00:00,0.0237 +2015-06-23 21:00:00,0.0066 +2015-06-23 22:00:00,0.0038 +2015-06-23 23:00:00,0.0038 +2015-06-24 00:00:00,0.0038 +2015-06-24 01:00:00,0.0037 +2015-06-24 02:00:00,0.0039 +2015-06-24 03:00:00,0.0083 +2015-06-24 04:00:00,0.0491 +2015-06-24 05:00:00,0.0894 +2015-06-24 06:00:00,0.2315 +2015-06-24 07:00:00,0.1708 +2015-06-24 08:00:00,0.0658 +2015-06-24 09:00:00,0.0692 +2015-06-24 10:00:00,0.0744 +2015-06-24 11:00:00,0.06 +2015-06-24 12:00:00,0.0635 +2015-06-24 13:00:00,0.0608 +2015-06-24 14:00:00,0.0639 +2015-06-24 15:00:00,0.0625 +2015-06-24 16:00:00,0.0615 +2015-06-24 17:00:00,0.0484 +2015-06-24 18:00:00,0.0372 +2015-06-24 19:00:00,0.0295 +2015-06-24 20:00:00,0.0261 +2015-06-24 21:00:00,0.015 +2015-06-24 22:00:00,0.0044 +2015-06-24 23:00:00,0.0039 +2015-06-25 00:00:00,0.0037 +2015-06-25 01:00:00,0.0037 +2015-06-25 02:00:00,0.0037 +2015-06-25 03:00:00,0.0141 +2015-06-25 04:00:00,0.052 +2015-06-25 05:00:00,0.0861 +2015-06-25 06:00:00,0.1845 +2015-06-25 07:00:00,0.0641 +2015-06-25 08:00:00,0.0758 +2015-06-25 09:00:00,0.0695 +2015-06-25 10:00:00,0.0701 +2015-06-25 11:00:00,0.0688 +2015-06-25 12:00:00,0.0644 +2015-06-25 13:00:00,0.0632 +2015-06-25 14:00:00,0.0578 +2015-06-25 15:00:00,0.0578 +2015-06-25 16:00:00,0.0584 +2015-06-25 17:00:00,0.0467 +2015-06-25 18:00:00,0.0357 +2015-06-25 19:00:00,0.0337 +2015-06-25 20:00:00,0.0272 +2015-06-25 21:00:00,0.0203 +2015-06-25 22:00:00,0.0053 +2015-06-25 23:00:00,0.0037 +2015-06-26 00:00:00,0.0037 +2015-06-26 01:00:00,0.004 +2015-06-26 02:00:00,0.004 +2015-06-26 03:00:00,0.0121 +2015-06-26 04:00:00,0.0479 +2015-06-26 05:00:00,0.0719 +2015-06-26 06:00:00,0.0673 +2015-06-26 07:00:00,0.0658 +2015-06-26 08:00:00,0.066 +2015-06-26 09:00:00,0.0693 +2015-06-26 10:00:00,0.0443 +2015-06-26 11:00:00,0.0683 +2015-06-26 12:00:00,0.067 +2015-06-26 13:00:00,0.07 +2015-06-26 14:00:00,0.0677 +2015-06-26 15:00:00,0.0668 +2015-06-26 16:00:00,0.0584 +2015-06-26 17:00:00,0.0479 +2015-06-26 18:00:00,0.0391 +2015-06-26 19:00:00,0.0338 +2015-06-26 20:00:00,0.0283 +2015-06-26 21:00:00,0.0235 +2015-06-26 22:00:00,0.0054 +2015-06-26 23:00:00,0.0041 +2015-06-27 00:00:00,0.0041 +2015-06-27 01:00:00,0.0038 +2015-06-27 02:00:00,0.0037 +2015-06-27 03:00:00,0.0039 +2015-06-27 04:00:00,0.0041 +2015-06-27 05:00:00,0.0246 +2015-06-27 06:00:00,0.0332 +2015-06-27 07:00:00,0.0472 +2015-06-27 08:00:00,0.0604 +2015-06-27 09:00:00,0.0985 +2015-06-27 10:00:00,0.0674 +2015-06-27 11:00:00,0.0684 +2015-06-27 12:00:00,0.0729 +2015-06-27 13:00:00,0.0622 +2015-06-27 14:00:00,0.0678 +2015-06-27 15:00:00,0.0649 +2015-06-27 16:00:00,0.0616 +2015-06-27 17:00:00,0.0541 +2015-06-27 18:00:00,0.0405 +2015-06-27 19:00:00,0.0366 +2015-06-27 20:00:00,0.0341 +2015-06-27 21:00:00,0.032 +2015-06-27 22:00:00,0.0183 +2015-06-27 23:00:00,0.0038 +2015-06-28 00:00:00,0.0037 +2015-06-28 01:00:00,0.0038 +2015-06-28 02:00:00,0.0041 +2015-06-28 03:00:00,0.0039 +2015-06-28 04:00:00,0.0043 +2015-06-28 05:00:00,0.0115 +2015-06-28 06:00:00,0.027 +2015-06-28 07:00:00,0.0407 +2015-06-28 08:00:00,0.0547 +2015-06-28 09:00:00,0.067 +2015-06-28 10:00:00,0.0665 +2015-06-28 11:00:00,0.0643 +2015-06-28 12:00:00,0.0644 +2015-06-28 13:00:00,0.0655 +2015-06-28 14:00:00,0.0614 +2015-06-28 15:00:00,0.2108 +2015-06-28 16:00:00,0.1573 +2015-06-28 17:00:00,0.0539 +2015-06-28 18:00:00,0.0423 +2015-06-28 19:00:00,0.04 +2015-06-28 20:00:00,0.0342 +2015-06-28 21:00:00,0.0221 +2015-06-28 22:00:00,0.004 +2015-06-28 23:00:00,0.0039 +2015-06-29 00:00:00,0.0037 +2015-06-29 01:00:00,0.0037 +2015-06-29 02:00:00,0.0039 +2015-06-29 03:00:00,0.0118 +2015-06-29 04:00:00,0.0558 +2015-06-29 05:00:00,0.0744 +2015-06-29 06:00:00,0.0695 +2015-06-29 07:00:00,0.0618 +2015-06-29 08:00:00,0.0678 +2015-06-29 09:00:00,0.056 +2015-06-29 10:00:00,0.0541 +2015-06-29 11:00:00,0.0522 +2015-06-29 12:00:00,0.0502 +2015-06-29 13:00:00,0.0481 +2015-06-29 14:00:00,0.0472 +2015-06-29 15:00:00,0.0516 +2015-06-29 16:00:00,0.0576 +2015-06-29 17:00:00,0.0439 +2015-06-29 18:00:00,0.037 +2015-06-29 19:00:00,0.0291 +2015-06-29 20:00:00,0.026 +2015-06-29 21:00:00,0.0044 +2015-06-29 22:00:00,0.0046 +2015-06-29 23:00:00,0.0041 +2015-06-30 00:00:00,0.0038 +2015-06-30 01:00:00,0.0037 +2015-06-30 02:00:00,0.0038 +2015-06-30 03:00:00,0.0127 +2015-06-30 04:00:00,0.0509 +2015-06-30 05:00:00,0.0899 +2015-06-30 06:00:00,0.0824 +2015-06-30 07:00:00,0.0652 +2015-06-30 08:00:00,0.0702 +2015-06-30 09:00:00,0.0664 +2015-06-30 10:00:00,0.0676 +2015-06-30 11:00:00,0.0637 +2015-06-30 12:00:00,0.0641 +2015-06-30 13:00:00,0.0593 +2015-06-30 14:00:00,0.0565 +2015-06-30 15:00:00,0.0563 +2015-06-30 16:00:00,0.0555 +2015-06-30 17:00:00,0.0453 +2015-06-30 18:00:00,0.037 +2015-06-30 19:00:00,0.0285 +2015-06-30 20:00:00,0.0245 +2015-06-30 21:00:00,0.0102 +2015-06-30 22:00:00,0.0039 +2015-06-30 23:00:00,0.0037 +2015-07-01 00:00:00,0.0037 +2015-07-01 01:00:00,0.0038 +2015-07-01 02:00:00,0.0037 +2015-07-01 03:00:00,0.0109 +2015-07-01 04:00:00,0.0501 +2015-07-01 05:00:00,0.0859 +2015-07-01 06:00:00,0.1771 +2015-07-01 07:00:00,0.0626 +2015-07-01 08:00:00,0.0693 +2015-07-01 09:00:00,0.0629 +2015-07-01 10:00:00,0.0668 +2015-07-01 11:00:00,0.0708 +2015-07-01 12:00:00,0.0646 +2015-07-01 13:00:00,0.0594 +2015-07-01 14:00:00,0.0582 +2015-07-01 15:00:00,0.061 +2015-07-01 16:00:00,0.0586 +2015-07-01 17:00:00,0.0477 +2015-07-01 18:00:00,0.036 +2015-07-01 19:00:00,0.0287 +2015-07-01 20:00:00,0.0241 +2015-07-01 21:00:00,0.0115 +2015-07-01 22:00:00,0.0041 +2015-07-01 23:00:00,0.0061 +2015-07-02 00:00:00,0.0037 +2015-07-02 01:00:00,0.0039 +2015-07-02 02:00:00,0.0037 +2015-07-02 03:00:00,0.0057 +2015-07-02 04:00:00,0.0487 +2015-07-02 05:00:00,0.0734 +2015-07-02 06:00:00,0.0632 +2015-07-02 07:00:00,0.0618 +2015-07-02 08:00:00,0.066 +2015-07-02 09:00:00,0.0692 +2015-07-02 10:00:00,0.061 +2015-07-02 11:00:00,0.0594 +2015-07-02 12:00:00,0.0687 +2015-07-02 13:00:00,0.0638 +2015-07-02 14:00:00,0.0601 +2015-07-02 15:00:00,0.0578 +2015-07-02 16:00:00,0.0564 +2015-07-02 17:00:00,0.0462 +2015-07-02 18:00:00,0.0386 +2015-07-02 19:00:00,0.0314 +2015-07-02 20:00:00,0.0255 +2015-07-02 21:00:00,0.0121 +2015-07-02 22:00:00,0.0038 +2015-07-02 23:00:00,0.0037 +2015-07-03 00:00:00,0.0038 +2015-07-03 01:00:00,0.0037 +2015-07-03 02:00:00,0.0068 +2015-07-03 03:00:00,0.0048 +2015-07-03 04:00:00,0.0166 +2015-07-03 05:00:00,0.034 +2015-07-03 06:00:00,0.0375 +2015-07-03 07:00:00,0.0411 +2015-07-03 08:00:00,0.0497 +2015-07-03 09:00:00,0.0604 +2015-07-03 10:00:00,0.0619 +2015-07-03 11:00:00,0.0539 +2015-07-03 12:00:00,0.0626 +2015-07-03 13:00:00,0.0572 +2015-07-03 14:00:00,0.0559 +2015-07-03 15:00:00,0.0549 +2015-07-03 16:00:00,0.0525 +2015-07-03 17:00:00,0.0458 +2015-07-03 18:00:00,0.0393 +2015-07-03 19:00:00,0.0376 +2015-07-03 20:00:00,0.0309 +2015-07-03 21:00:00,0.0262 +2015-07-03 22:00:00,0.0135 +2015-07-03 23:00:00,0.0073 +2015-07-04 00:00:00,0.0039 +2015-07-04 01:00:00,0.0039 +2015-07-04 02:00:00,0.0039 +2015-07-04 03:00:00,0.0037 +2015-07-04 04:00:00,0.004 +2015-07-04 05:00:00,0.0051 +2015-07-04 06:00:00,0.0173 +2015-07-04 07:00:00,0.0254 +2015-07-04 08:00:00,0.0349 +2015-07-04 09:00:00,0.0409 +2015-07-04 10:00:00,0.0471 +2015-07-04 11:00:00,0.0502 +2015-07-04 12:00:00,0.0469 +2015-07-04 13:00:00,0.0454 +2015-07-04 14:00:00,0.0441 +2015-07-04 15:00:00,0.0429 +2015-07-04 16:00:00,0.042 +2015-07-04 17:00:00,0.0427 +2015-07-04 18:00:00,0.0436 +2015-07-04 19:00:00,0.0391 +2015-07-04 20:00:00,0.0352 +2015-07-04 21:00:00,0.0326 +2015-07-04 22:00:00,0.028 +2015-07-04 23:00:00,0.0061 +2015-07-05 00:00:00,0.0039 +2015-07-05 01:00:00,0.0039 +2015-07-05 02:00:00,0.0039 +2015-07-05 03:00:00,0.0046 +2015-07-05 04:00:00,0.004 +2015-07-05 05:00:00,0.0044 +2015-07-05 06:00:00,0.011 +2015-07-05 07:00:00,0.0298 +2015-07-05 08:00:00,0.0455 +2015-07-05 09:00:00,0.0622 +2015-07-05 10:00:00,0.0659 +2015-07-05 11:00:00,0.0633 +2015-07-05 12:00:00,0.0537 +2015-07-05 13:00:00,0.0654 +2015-07-05 14:00:00,0.0647 +2015-07-05 15:00:00,0.0641 +2015-07-05 16:00:00,0.0626 +2015-07-05 17:00:00,0.0565 +2015-07-05 18:00:00,0.0505 +2015-07-05 19:00:00,0.0434 +2015-07-05 20:00:00,0.0372 +2015-07-05 21:00:00,0.0243 +2015-07-05 22:00:00,0.005 +2015-07-05 23:00:00,0.004 +2015-07-06 00:00:00,0.0039 +2015-07-06 01:00:00,0.0039 +2015-07-06 02:00:00,0.004 +2015-07-06 03:00:00,0.0109 +2015-07-06 04:00:00,0.0493 +2015-07-06 05:00:00,0.0715 +2015-07-06 06:00:00,0.0649 +2015-07-06 07:00:00,0.0596 +2015-07-06 08:00:00,0.0627 +2015-07-06 09:00:00,0.0669 +2015-07-06 10:00:00,0.065 +2015-07-06 11:00:00,0.0646 +2015-07-06 12:00:00,0.0624 +2015-07-06 13:00:00,0.0611 +2015-07-06 14:00:00,0.0606 +2015-07-06 15:00:00,0.0592 +2015-07-06 16:00:00,0.0579 +2015-07-06 17:00:00,0.0449 +2015-07-06 18:00:00,0.037 +2015-07-06 19:00:00,0.0288 +2015-07-06 20:00:00,0.0254 +2015-07-06 21:00:00,0.0061 +2015-07-06 22:00:00,0.004 +2015-07-06 23:00:00,0.0037 +2015-07-07 00:00:00,0.0037 +2015-07-07 01:00:00,0.0037 +2015-07-07 02:00:00,0.0041 +2015-07-07 03:00:00,0.0094 +2015-07-07 04:00:00,0.0526 +2015-07-07 05:00:00,0.0961 +2015-07-07 06:00:00,0.0985 +2015-07-07 07:00:00,0.063 +2015-07-07 08:00:00,0.0657 +2015-07-07 09:00:00,0.0643 +2015-07-07 10:00:00,0.0624 +2015-07-07 11:00:00,0.0596 +2015-07-07 12:00:00,0.059 +2015-07-07 13:00:00,0.0656 +2015-07-07 14:00:00,0.057 +2015-07-07 15:00:00,0.0618 +2015-07-07 16:00:00,0.0565 +2015-07-07 17:00:00,0.0452 +2015-07-07 18:00:00,0.0342 +2015-07-07 19:00:00,0.0285 +2015-07-07 20:00:00,0.0223 +2015-07-07 21:00:00,0.0072 +2015-07-07 22:00:00,0.0039 +2015-07-07 23:00:00,0.0039 +2015-07-08 00:00:00,0.0037 +2015-07-08 01:00:00,0.0037 +2015-07-08 02:00:00,0.004 +2015-07-08 03:00:00,0.0135 +2015-07-08 04:00:00,0.0504 +2015-07-08 05:00:00,0.0865 +2015-07-08 06:00:00,0.245 +2015-07-08 07:00:00,0.0645 +2015-07-08 08:00:00,0.0646 +2015-07-08 09:00:00,0.0701 +2015-07-08 10:00:00,0.0648 +2015-07-08 11:00:00,0.0588 +2015-07-08 12:00:00,0.0554 +2015-07-08 13:00:00,0.0575 +2015-07-08 14:00:00,0.0587 +2015-07-08 15:00:00,0.0587 +2015-07-08 16:00:00,0.0597 +2015-07-08 17:00:00,0.0459 +2015-07-08 18:00:00,0.0369 +2015-07-08 19:00:00,0.0279 +2015-07-08 20:00:00,0.0225 +2015-07-08 21:00:00,0.011 +2015-07-08 22:00:00,0.0037 +2015-07-08 23:00:00,0.0037 +2015-07-09 00:00:00,0.0039 +2015-07-09 01:00:00,0.0037 +2015-07-09 02:00:00,0.0037 +2015-07-09 03:00:00,0.0116 +2015-07-09 04:00:00,0.0443 +2015-07-09 05:00:00,0.0717 +2015-07-09 06:00:00,0.0664 +2015-07-09 07:00:00,0.0625 +2015-07-09 08:00:00,0.0594 +2015-07-09 09:00:00,0.0524 +2015-07-09 10:00:00,0.0535 +2015-07-09 11:00:00,0.0526 +2015-07-09 12:00:00,0.0472 +2015-07-09 13:00:00,0.0606 +2015-07-09 14:00:00,0.0601 +2015-07-09 15:00:00,0.0615 +2015-07-09 16:00:00,0.0595 +2015-07-09 17:00:00,0.0508 +2015-07-09 18:00:00,0.0388 +2015-07-09 19:00:00,0.0297 +2015-07-09 20:00:00,0.0222 +2015-07-09 21:00:00,0.0076 +2015-07-09 22:00:00,0.0039 +2015-07-09 23:00:00,0.0037 +2015-07-10 00:00:00,0.0037 +2015-07-10 01:00:00,0.0037 +2015-07-10 02:00:00,0.004 +2015-07-10 03:00:00,0.0057 +2015-07-10 04:00:00,0.0434 +2015-07-10 05:00:00,0.064 +2015-07-10 06:00:00,0.0617 +2015-07-10 07:00:00,0.0578 +2015-07-10 08:00:00,0.06 +2015-07-10 09:00:00,0.0591 +2015-07-10 10:00:00,0.0634 +2015-07-10 11:00:00,0.063 +2015-07-10 12:00:00,0.0609 +2015-07-10 13:00:00,0.0637 +2015-07-10 14:00:00,0.0602 +2015-07-10 15:00:00,0.057 +2015-07-10 16:00:00,0.0572 +2015-07-10 17:00:00,0.0452 +2015-07-10 18:00:00,0.0368 +2015-07-10 19:00:00,0.0304 +2015-07-10 20:00:00,0.0271 +2015-07-10 21:00:00,0.0196 +2015-07-10 22:00:00,0.0064 +2015-07-10 23:00:00,0.0041 +2015-07-11 00:00:00,0.0038 +2015-07-11 01:00:00,0.0039 +2015-07-11 02:00:00,0.0037 +2015-07-11 03:00:00,0.0044 +2015-07-11 04:00:00,0.0071 +2015-07-11 05:00:00,0.0261 +2015-07-11 06:00:00,0.0353 +2015-07-11 07:00:00,0.0444 +2015-07-11 08:00:00,0.0498 +2015-07-11 09:00:00,0.0561 +2015-07-11 10:00:00,0.0569 +2015-07-11 11:00:00,0.0601 +2015-07-11 12:00:00,0.0593 +2015-07-11 13:00:00,0.0587 +2015-07-11 14:00:00,0.059 +2015-07-11 15:00:00,0.0595 +2015-07-11 16:00:00,0.0541 +2015-07-11 17:00:00,0.0489 +2015-07-11 18:00:00,0.0411 +2015-07-11 19:00:00,0.0347 +2015-07-11 20:00:00,0.0338 +2015-07-11 21:00:00,0.0285 +2015-07-11 22:00:00,0.0154 +2015-07-11 23:00:00,0.0042 +2015-07-12 00:00:00,0.0039 +2015-07-12 01:00:00,0.0037 +2015-07-12 02:00:00,0.0037 +2015-07-12 03:00:00,0.0038 +2015-07-12 04:00:00,0.0041 +2015-07-12 05:00:00,0.0068 +2015-07-12 06:00:00,0.0233 +2015-07-12 07:00:00,0.0337 +2015-07-12 08:00:00,0.0478 +2015-07-12 09:00:00,0.0579 +2015-07-12 10:00:00,0.0598 +2015-07-12 11:00:00,0.0622 +2015-07-12 12:00:00,0.056 +2015-07-12 13:00:00,0.0637 +2015-07-12 14:00:00,0.0625 +2015-07-12 15:00:00,0.0592 +2015-07-12 16:00:00,0.0568 +2015-07-12 17:00:00,0.0531 +2015-07-12 18:00:00,0.0454 +2015-07-12 19:00:00,0.0406 +2015-07-12 20:00:00,0.0339 +2015-07-12 21:00:00,0.023 +2015-07-12 22:00:00,0.0038 +2015-07-12 23:00:00,0.0042 +2015-07-13 00:00:00,0.0037 +2015-07-13 01:00:00,0.0038 +2015-07-13 02:00:00,0.0038 +2015-07-13 03:00:00,0.0133 +2015-07-13 04:00:00,0.0507 +2015-07-13 05:00:00,0.0789 +2015-07-13 06:00:00,0.0956 +2015-07-13 07:00:00,0.059 +2015-07-13 08:00:00,0.0594 +2015-07-13 09:00:00,0.0689 +2015-07-13 10:00:00,0.0629 +2015-07-13 11:00:00,0.0625 +2015-07-13 12:00:00,0.0564 +2015-07-13 13:00:00,0.0578 +2015-07-13 14:00:00,0.0532 +2015-07-13 15:00:00,0.0539 +2015-07-13 16:00:00,0.0544 +2015-07-13 17:00:00,0.0441 +2015-07-13 18:00:00,0.0349 +2015-07-13 19:00:00,0.0285 +2015-07-13 20:00:00,0.0227 +2015-07-13 21:00:00,0.0118 +2015-07-13 22:00:00,0.0041 +2015-07-13 23:00:00,0.0038 +2015-07-14 00:00:00,0.0037 +2015-07-14 01:00:00,0.0037 +2015-07-14 02:00:00,0.004 +2015-07-14 03:00:00,0.0134 +2015-07-14 04:00:00,0.0519 +2015-07-14 05:00:00,0.0848 +2015-07-14 06:00:00,0.1793 +2015-07-14 07:00:00,0.0919 +2015-07-14 08:00:00,0.0655 +2015-07-14 09:00:00,0.0654 +2015-07-14 10:00:00,0.0635 +2015-07-14 11:00:00,0.0591 +2015-07-14 12:00:00,0.0587 +2015-07-14 13:00:00,0.053 +2015-07-14 14:00:00,0.0491 +2015-07-14 15:00:00,0.0475 +2015-07-14 16:00:00,0.0469 +2015-07-14 17:00:00,0.0406 +2015-07-14 18:00:00,0.0354 +2015-07-14 19:00:00,0.0276 +2015-07-14 20:00:00,0.0234 +2015-07-14 21:00:00,0.0042 +2015-07-14 22:00:00,0.0041 +2015-07-14 23:00:00,0.0038 +2015-07-15 00:00:00,0.0037 +2015-07-15 01:00:00,0.0037 +2015-07-15 02:00:00,0.0038 +2015-07-15 03:00:00,0.0074 +2015-07-15 04:00:00,0.0508 +2015-07-15 05:00:00,0.0802 +2015-07-15 06:00:00,0.1741 +2015-07-15 07:00:00,0.3377 +2015-07-15 08:00:00,0.1173 +2015-07-15 09:00:00,0.0663 +2015-07-15 10:00:00,0.0679 +2015-07-15 11:00:00,0.0635 +2015-07-15 12:00:00,0.0582 +2015-07-15 13:00:00,0.0591 +2015-07-15 14:00:00,0.0576 +2015-07-15 15:00:00,0.0554 +2015-07-15 16:00:00,0.0581 +2015-07-15 17:00:00,0.0452 +2015-07-15 18:00:00,0.026 +2015-07-15 19:00:00,0.0303 +2015-07-15 20:00:00,0.0248 +2015-07-15 21:00:00,0.0106 +2015-07-15 22:00:00,0.0044 +2015-07-15 23:00:00,0.0038 +2015-07-16 00:00:00,0.0038 +2015-07-16 01:00:00,0.0038 +2015-07-16 02:00:00,0.0039 +2015-07-16 03:00:00,0.0131 +2015-07-16 04:00:00,0.0493 +2015-07-16 05:00:00,0.0756 +2015-07-16 06:00:00,0.0995 +2015-07-16 07:00:00,0.0626 +2015-07-16 08:00:00,0.0648 +2015-07-16 09:00:00,0.0671 +2015-07-16 10:00:00,0.0644 +2015-07-16 11:00:00,0.0623 +2015-07-16 12:00:00,0.0588 +2015-07-16 13:00:00,0.0608 +2015-07-16 14:00:00,0.0583 +2015-07-16 15:00:00,0.059 +2015-07-16 16:00:00,0.0572 +2015-07-16 17:00:00,0.0462 +2015-07-16 18:00:00,0.0385 +2015-07-16 19:00:00,0.0295 +2015-07-16 20:00:00,0.026 +2015-07-16 21:00:00,0.0047 +2015-07-16 22:00:00,0.004 +2015-07-16 23:00:00,0.0039 +2015-07-17 00:00:00,0.0038 +2015-07-17 01:00:00,0.0037 +2015-07-17 02:00:00,0.004 +2015-07-17 03:00:00,0.0048 +2015-07-17 04:00:00,0.0472 +2015-07-17 05:00:00,0.0716 +2015-07-17 06:00:00,0.0618 +2015-07-17 07:00:00,0.056 +2015-07-17 08:00:00,0.068 +2015-07-17 09:00:00,0.0697 +2015-07-17 10:00:00,0.0689 +2015-07-17 11:00:00,0.0684 +2015-07-17 12:00:00,0.0628 +2015-07-17 13:00:00,0.0635 +2015-07-17 14:00:00,0.0601 +2015-07-17 15:00:00,0.0598 +2015-07-17 16:00:00,0.0597 +2015-07-17 17:00:00,0.0453 +2015-07-17 18:00:00,0.0405 +2015-07-17 19:00:00,0.0322 +2015-07-17 20:00:00,0.0274 +2015-07-17 21:00:00,0.0199 +2015-07-17 22:00:00,0.0056 +2015-07-17 23:00:00,0.0038 +2015-07-18 00:00:00,0.0038 +2015-07-18 01:00:00,0.0042 +2015-07-18 02:00:00,0.0038 +2015-07-18 03:00:00,0.004 +2015-07-18 04:00:00,0.0078 +2015-07-18 05:00:00,0.0208 +2015-07-18 06:00:00,0.0389 +2015-07-18 07:00:00,0.043 +2015-07-18 08:00:00,0.0563 +2015-07-18 09:00:00,0.0624 +2015-07-18 10:00:00,0.0662 +2015-07-18 11:00:00,0.0647 +2015-07-18 12:00:00,0.0625 +2015-07-18 13:00:00,0.0653 +2015-07-18 14:00:00,0.0642 +2015-07-18 15:00:00,0.0601 +2015-07-18 16:00:00,0.056 +2015-07-18 17:00:00,0.0533 +2015-07-18 18:00:00,0.0421 +2015-07-18 19:00:00,0.0356 +2015-07-18 20:00:00,0.0359 +2015-07-18 21:00:00,0.0327 +2015-07-18 22:00:00,0.0275 +2015-07-18 23:00:00,0.0046 +2015-07-19 00:00:00,0.0042 +2015-07-19 01:00:00,0.004 +2015-07-19 02:00:00,0.0037 +2015-07-19 03:00:00,0.0041 +2015-07-19 04:00:00,0.004 +2015-07-19 05:00:00,0.0037 +2015-07-19 06:00:00,0.0218 +2015-07-19 07:00:00,0.0352 +2015-07-19 08:00:00,0.0472 +2015-07-19 09:00:00,0.0576 +2015-07-19 10:00:00,0.0662 +2015-07-19 11:00:00,0.0678 +2015-07-19 12:00:00,0.0681 +2015-07-19 13:00:00,0.0635 +2015-07-19 14:00:00,0.0655 +2015-07-19 15:00:00,0.0634 +2015-07-19 16:00:00,0.0591 +2015-07-19 17:00:00,0.0598 +2015-07-19 18:00:00,0.0466 +2015-07-19 19:00:00,0.0375 +2015-07-19 20:00:00,0.031 +2015-07-19 21:00:00,0.0198 +2015-07-19 22:00:00,0.003 +2015-07-19 23:00:00,0.0018 +2015-07-20 00:00:00,0.0011 +2015-07-20 01:00:00,0.0009 +2015-07-20 02:00:00,0.001 +2015-07-20 03:00:00,0.0083 +2015-07-20 04:00:00,0.0463 +2015-07-20 05:00:00,0.0781 +2015-07-20 06:00:00,0.2224 +2015-07-20 07:00:00,0.0644 +2015-07-20 08:00:00,0.0622 +2015-07-20 09:00:00,0.0674 +2015-07-20 10:00:00,0.0608 +2015-07-20 11:00:00,0.0583 +2015-07-20 12:00:00,0.057 +2015-07-20 13:00:00,0.0572 +2015-07-20 14:00:00,0.0559 +2015-07-20 15:00:00,0.0554 +2015-07-20 16:00:00,0.0543 +2015-07-20 17:00:00,0.0453 +2015-07-20 18:00:00,0.0346 +2015-07-20 19:00:00,0.0279 +2015-07-20 20:00:00,0.0216 +2015-07-20 21:00:00,0.0089 +2015-07-20 22:00:00,0.0039 +2015-07-20 23:00:00,0.0039 +2015-07-21 00:00:00,0.0038 +2015-07-21 01:00:00,0.0037 +2015-07-21 02:00:00,0.0039 +2015-07-21 03:00:00,0.0128 +2015-07-21 04:00:00,0.0537 +2015-07-21 05:00:00,0.0802 +2015-07-21 06:00:00,0.1827 +2015-07-21 07:00:00,0.071 +2015-07-21 08:00:00,0.0706 +2015-07-21 09:00:00,0.0649 +2015-07-21 10:00:00,0.0603 +2015-07-21 11:00:00,0.0629 +2015-07-21 12:00:00,0.0583 +2015-07-21 13:00:00,0.0532 +2015-07-21 14:00:00,0.0596 +2015-07-21 15:00:00,0.062 +2015-07-21 16:00:00,0.0581 +2015-07-21 17:00:00,0.0466 +2015-07-21 18:00:00,0.0333 +2015-07-21 19:00:00,0.0291 +2015-07-21 20:00:00,0.0275 +2015-07-21 21:00:00,0.0078 +2015-07-21 22:00:00,0.0041 +2015-07-21 23:00:00,0.0037 +2015-07-22 00:00:00,0.0037 +2015-07-22 01:00:00,0.0038 +2015-07-22 02:00:00,0.0039 +2015-07-22 03:00:00,0.0117 +2015-07-22 04:00:00,0.0514 +2015-07-22 05:00:00,0.0808 +2015-07-22 06:00:00,0.1713 +2015-07-22 07:00:00,0.0624 +2015-07-22 08:00:00,0.0689 +2015-07-22 09:00:00,0.0651 +2015-07-22 10:00:00,0.0623 +2015-07-22 11:00:00,0.061 +2015-07-22 12:00:00,0.0577 +2015-07-22 13:00:00,0.0588 +2015-07-22 14:00:00,0.0584 +2015-07-22 15:00:00,0.057 +2015-07-22 16:00:00,0.056 +2015-07-22 17:00:00,0.0479 +2015-07-22 18:00:00,0.0361 +2015-07-22 19:00:00,0.0286 +2015-07-22 20:00:00,0.0197 +2015-07-22 21:00:00,0.0059 +2015-07-22 22:00:00,0.004 +2015-07-22 23:00:00,0.0037 +2015-07-23 00:00:00,0.0038 +2015-07-23 01:00:00,0.0037 +2015-07-23 02:00:00,0.0041 +2015-07-23 03:00:00,0.0098 +2015-07-23 04:00:00,0.0515 +2015-07-23 05:00:00,0.0858 +2015-07-23 06:00:00,0.1058 +2015-07-23 07:00:00,0.0654 +2015-07-23 08:00:00,0.0616 +2015-07-23 09:00:00,0.0627 +2015-07-23 10:00:00,0.0726 +2015-07-23 11:00:00,0.0633 +2015-07-23 12:00:00,0.0537 +2015-07-23 13:00:00,0.0576 +2015-07-23 14:00:00,0.056 +2015-07-23 15:00:00,0.0565 +2015-07-23 16:00:00,0.0574 +2015-07-23 17:00:00,0.0464 +2015-07-23 18:00:00,0.0354 +2015-07-23 19:00:00,0.0276 +2015-07-23 20:00:00,0.0223 +2015-07-23 21:00:00,0.0095 +2015-07-23 22:00:00,0.0032 +2015-07-23 23:00:00,0.0019 +2015-07-24 00:00:00,0.0013 +2015-07-24 01:00:00,0.0011 +2015-07-24 02:00:00,0.0013 +2015-07-24 03:00:00,0.0033 +2015-07-24 04:00:00,0.0355 +2015-07-24 05:00:00,0.0567 +2015-07-24 06:00:00,0.0551 +2015-07-24 07:00:00,0.0541 +2015-07-24 08:00:00,0.061 +2015-07-24 09:00:00,0.0657 +2015-07-24 10:00:00,0.0623 +2015-07-24 11:00:00,0.0683 +2015-07-24 12:00:00,0.0656 +2015-07-24 13:00:00,0.0629 +2015-07-24 14:00:00,0.061 +2015-07-24 15:00:00,0.0613 +2015-07-24 16:00:00,0.0596 +2015-07-24 17:00:00,0.0502 +2015-07-24 18:00:00,0.0404 +2015-07-24 19:00:00,0.0318 +2015-07-24 20:00:00,0.0264 +2015-07-24 21:00:00,0.0218 +2015-07-24 22:00:00,0.0044 +2015-07-24 23:00:00,0.0038 +2015-07-25 00:00:00,0.004 +2015-07-25 01:00:00,0.0039 +2015-07-25 02:00:00,0.0039 +2015-07-25 03:00:00,0.0044 +2015-07-25 04:00:00,0.0051 +2015-07-25 05:00:00,0.0252 +2015-07-25 06:00:00,0.0378 +2015-07-25 07:00:00,0.0456 +2015-07-25 08:00:00,0.0571 +2015-07-25 09:00:00,0.0689 +2015-07-25 10:00:00,0.0693 +2015-07-25 11:00:00,0.0596 +2015-07-25 12:00:00,0.061 +2015-07-25 13:00:00,0.0551 +2015-07-25 14:00:00,0.0545 +2015-07-25 15:00:00,0.0603 +2015-07-25 16:00:00,0.0576 +2015-07-25 17:00:00,0.0528 +2015-07-25 18:00:00,0.0432 +2015-07-25 19:00:00,0.0385 +2015-07-25 20:00:00,0.0384 +2015-07-25 21:00:00,0.0309 +2015-07-25 22:00:00,0.017 +2015-07-25 23:00:00,0.0043 +2015-07-26 00:00:00,0.004 +2015-07-26 01:00:00,0.0039 +2015-07-26 02:00:00,0.0038 +2015-07-26 03:00:00,0.0038 +2015-07-26 04:00:00,0.004 +2015-07-26 05:00:00,0.01 +2015-07-26 06:00:00,0.0228 +2015-07-26 07:00:00,0.0362 +2015-07-26 08:00:00,0.0506 +2015-07-26 09:00:00,0.0602 +2015-07-26 10:00:00,0.067 +2015-07-26 11:00:00,0.0659 +2015-07-26 12:00:00,0.0677 +2015-07-26 13:00:00,0.0613 +2015-07-26 14:00:00,0.0621 +2015-07-26 15:00:00,0.0617 +2015-07-26 16:00:00,0.0587 +2015-07-26 17:00:00,0.0547 +2015-07-26 18:00:00,0.052 +2015-07-26 19:00:00,0.0427 +2015-07-26 20:00:00,0.0371 +2015-07-26 21:00:00,0.0248 +2015-07-26 22:00:00,0.004 +2015-07-26 23:00:00,0.0037 +2015-07-27 00:00:00,0.0037 +2015-07-27 01:00:00,0.0037 +2015-07-27 02:00:00,0.0037 +2015-07-27 03:00:00,0.01 +2015-07-27 04:00:00,0.0533 +2015-07-27 05:00:00,0.0783 +2015-07-27 06:00:00,0.1247 +2015-07-27 07:00:00,0.0579 +2015-07-27 08:00:00,0.0668 +2015-07-27 09:00:00,0.0664 +2015-07-27 10:00:00,0.059 +2015-07-27 11:00:00,0.0645 +2015-07-27 12:00:00,0.0614 +2015-07-27 13:00:00,0.0574 +2015-07-27 14:00:00,0.0571 +2015-07-27 15:00:00,0.0572 +2015-07-27 16:00:00,0.0539 +2015-07-27 17:00:00,0.0463 +2015-07-27 18:00:00,0.035 +2015-07-27 19:00:00,0.0278 +2015-07-27 20:00:00,0.0237 +2015-07-27 21:00:00,0.0094 +2015-07-27 22:00:00,0.0041 +2015-07-27 23:00:00,0.0039 +2015-07-28 00:00:00,0.0037 +2015-07-28 01:00:00,0.0037 +2015-07-28 02:00:00,0.0039 +2015-07-28 03:00:00,0.0109 +2015-07-28 04:00:00,0.0533 +2015-07-28 05:00:00,0.0773 +2015-07-28 06:00:00,0.2105 +2015-07-28 07:00:00,0.0631 +2015-07-28 08:00:00,0.0652 +2015-07-28 09:00:00,0.064 +2015-07-28 10:00:00,0.0622 +2015-07-28 11:00:00,0.0597 +2015-07-28 12:00:00,0.058 +2015-07-28 13:00:00,0.057 +2015-07-28 14:00:00,0.0624 +2015-07-28 15:00:00,0.0899 +2015-07-28 16:00:00,0.054 +2015-07-28 17:00:00,0.0484 +2015-07-28 18:00:00,0.0331 +2015-07-28 19:00:00,0.0267 +2015-07-28 20:00:00,0.021 +2015-07-28 21:00:00,0.0071 +2015-07-28 22:00:00,0.0039 +2015-07-28 23:00:00,0.0038 +2015-07-29 00:00:00,0.0037 +2015-07-29 01:00:00,0.0039 +2015-07-29 02:00:00,0.0042 +2015-07-29 03:00:00,0.0115 +2015-07-29 04:00:00,0.0516 +2015-07-29 05:00:00,0.1037 +2015-07-29 06:00:00,0.1746 +2015-07-29 07:00:00,0.0616 +2015-07-29 08:00:00,0.0667 +2015-07-29 09:00:00,0.0695 +2015-07-29 10:00:00,0.0657 +2015-07-29 11:00:00,0.062 +2015-07-29 12:00:00,0.0571 +2015-07-29 13:00:00,0.0581 +2015-07-29 14:00:00,0.0578 +2015-07-29 15:00:00,0.0569 +2015-07-29 16:00:00,0.0563 +2015-07-29 17:00:00,0.0475 +2015-07-29 18:00:00,0.0364 +2015-07-29 19:00:00,0.0317 +2015-07-29 20:00:00,0.0263 +2015-07-29 21:00:00,0.007 +2015-07-29 22:00:00,0.0041 +2015-07-29 23:00:00,0.0038 +2015-07-30 00:00:00,0.0038 +2015-07-30 01:00:00,0.0037 +2015-07-30 02:00:00,0.0039 +2015-07-30 03:00:00,0.0125 +2015-07-30 04:00:00,0.0503 +2015-07-30 05:00:00,0.1256 +2015-07-30 06:00:00,0.1307 +2015-07-30 07:00:00,0.1425 +2015-07-30 08:00:00,0.0675 +2015-07-30 09:00:00,0.0716 +2015-07-30 10:00:00,0.0648 +2015-07-30 11:00:00,0.0632 +2015-07-30 12:00:00,0.0606 +2015-07-30 13:00:00,0.062 +2015-07-30 14:00:00,0.0611 +2015-07-30 15:00:00,0.0598 +2015-07-30 16:00:00,0.0565 +2015-07-30 17:00:00,0.0512 +2015-07-30 18:00:00,0.0376 +2015-07-30 19:00:00,0.0313 +2015-07-30 20:00:00,0.027 +2015-07-30 21:00:00,0.014 +2015-07-30 22:00:00,0.0044 +2015-07-30 23:00:00,0.004 +2015-07-31 00:00:00,0.0037 +2015-07-31 01:00:00,0.0037 +2015-07-31 02:00:00,0.0037 +2015-07-31 03:00:00,0.0053 +2015-07-31 04:00:00,0.0464 +2015-07-31 05:00:00,0.0705 +2015-07-31 06:00:00,0.0618 +2015-07-31 07:00:00,0.0631 +2015-07-31 08:00:00,0.0609 +2015-07-31 09:00:00,0.0642 +2015-07-31 10:00:00,0.0628 +2015-07-31 11:00:00,0.0636 +2015-07-31 12:00:00,0.0622 +2015-07-31 13:00:00,0.0606 +2015-07-31 14:00:00,0.0601 +2015-07-31 15:00:00,0.0567 +2015-07-31 16:00:00,0.0566 +2015-07-31 17:00:00,0.0492 +2015-07-31 18:00:00,0.0422 +2015-07-31 19:00:00,0.0329 +2015-07-31 20:00:00,0.0264 +2015-07-31 21:00:00,0.022 +2015-07-31 22:00:00,0.0053 +2015-07-31 23:00:00,0.0038 +2015-08-01 00:00:00,0.0035 +2015-08-01 01:00:00,0.003 +2015-08-01 02:00:00,0.0039 +2015-08-01 03:00:00,0.004 +2015-08-01 04:00:00,0.0067 +2015-08-01 05:00:00,0.0261 +2015-08-01 06:00:00,0.0327 +2015-08-01 07:00:00,0.0414 +2015-08-01 08:00:00,0.0501 +2015-08-01 09:00:00,0.0605 +2015-08-01 10:00:00,0.0617 +2015-08-01 11:00:00,0.0612 +2015-08-01 12:00:00,0.0639 +2015-08-01 13:00:00,0.0603 +2015-08-01 14:00:00,0.0584 +2015-08-01 15:00:00,0.0583 +2015-08-01 16:00:00,0.0602 +2015-08-01 17:00:00,0.0523 +2015-08-01 18:00:00,0.0459 +2015-08-01 19:00:00,0.0395 +2015-08-01 20:00:00,0.0389 +2015-08-01 21:00:00,0.0345 +2015-08-01 22:00:00,0.0191 +2015-08-01 23:00:00,0.0048 +2015-08-02 00:00:00,0.0039 +2015-08-02 01:00:00,0.0042 +2015-08-02 02:00:00,0.0037 +2015-08-02 03:00:00,0.0042 +2015-08-02 04:00:00,0.0049 +2015-08-02 05:00:00,0.0062 +2015-08-02 06:00:00,0.0213 +2015-08-02 07:00:00,0.0353 +2015-08-02 08:00:00,0.0445 +2015-08-02 09:00:00,0.0594 +2015-08-02 10:00:00,0.0688 +2015-08-02 11:00:00,0.0687 +2015-08-02 12:00:00,0.0648 +2015-08-02 13:00:00,0.0674 +2015-08-02 14:00:00,0.0573 +2015-08-02 15:00:00,0.063 +2015-08-02 16:00:00,0.0599 +2015-08-02 17:00:00,0.0551 +2015-08-02 18:00:00,0.056 +2015-08-02 19:00:00,0.0511 +2015-08-02 20:00:00,0.037 +2015-08-02 21:00:00,0.0279 +2015-08-02 22:00:00,0.0055 +2015-08-02 23:00:00,0.0043 +2015-08-03 00:00:00,0.0038 +2015-08-03 01:00:00,0.0038 +2015-08-03 02:00:00,0.0041 +2015-08-03 03:00:00,0.0073 +2015-08-03 04:00:00,0.0538 +2015-08-03 05:00:00,0.0743 +2015-08-03 06:00:00,0.1152 +2015-08-03 07:00:00,0.0591 +2015-08-03 08:00:00,0.0682 +2015-08-03 09:00:00,0.0677 +2015-08-03 10:00:00,0.0584 +2015-08-03 11:00:00,0.0634 +2015-08-03 12:00:00,0.0598 +2015-08-03 13:00:00,0.0591 +2015-08-03 14:00:00,0.0561 +2015-08-03 15:00:00,0.0559 +2015-08-03 16:00:00,0.0552 +2015-08-03 17:00:00,0.0473 +2015-08-03 18:00:00,0.0375 +2015-08-03 19:00:00,0.0294 +2015-08-03 20:00:00,0.0249 +2015-08-03 21:00:00,0.0149 +2015-08-03 22:00:00,0.0042 +2015-08-03 23:00:00,0.0038 +2015-08-04 00:00:00,0.0037 +2015-08-04 01:00:00,0.0037 +2015-08-04 02:00:00,0.004 +2015-08-04 03:00:00,0.0068 +2015-08-04 04:00:00,0.0455 +2015-08-04 05:00:00,0.0834 +2015-08-04 06:00:00,0.1622 +2015-08-04 07:00:00,0.0582 +2015-08-04 08:00:00,0.0638 +2015-08-04 09:00:00,0.061 +2015-08-04 10:00:00,0.0601 +2015-08-04 11:00:00,0.059 +2015-08-04 12:00:00,0.0555 +2015-08-04 13:00:00,0.052 +2015-08-04 14:00:00,0.0561 +2015-08-04 15:00:00,0.0551 +2015-08-04 16:00:00,0.0557 +2015-08-04 17:00:00,0.0453 +2015-08-04 18:00:00,0.0367 +2015-08-04 19:00:00,0.0283 +2015-08-04 20:00:00,0.023 +2015-08-04 21:00:00,0.0087 +2015-08-04 22:00:00,0.0039 +2015-08-04 23:00:00,0.0038 +2015-08-05 00:00:00,0.0038 +2015-08-05 01:00:00,0.0037 +2015-08-05 02:00:00,0.004 +2015-08-05 03:00:00,0.0187 +2015-08-05 04:00:00,0.0511 +2015-08-05 05:00:00,0.0785 +2015-08-05 06:00:00,0.0715 +2015-08-05 07:00:00,0.0576 +2015-08-05 08:00:00,0.0673 +2015-08-05 09:00:00,0.0657 +2015-08-05 10:00:00,0.0625 +2015-08-05 11:00:00,0.064 +2015-08-05 12:00:00,0.057 +2015-08-05 13:00:00,0.0611 +2015-08-05 14:00:00,0.0606 +2015-08-05 15:00:00,0.0595 +2015-08-05 16:00:00,0.058 +2015-08-05 17:00:00,0.0476 +2015-08-05 18:00:00,0.036 +2015-08-05 19:00:00,0.0305 +2015-08-05 20:00:00,0.0266 +2015-08-05 21:00:00,0.0141 +2015-08-05 22:00:00,0.0042 +2015-08-05 23:00:00,0.0037 +2015-08-06 00:00:00,0.0037 +2015-08-06 01:00:00,0.0037 +2015-08-06 02:00:00,0.0038 +2015-08-06 03:00:00,0.0154 +2015-08-06 04:00:00,0.0506 +2015-08-06 05:00:00,0.0797 +2015-08-06 06:00:00,0.0668 +2015-08-06 07:00:00,0.0572 +2015-08-06 08:00:00,0.0644 +2015-08-06 09:00:00,0.0669 +2015-08-06 10:00:00,0.0618 +2015-08-06 11:00:00,0.0263 +2015-08-06 12:00:00,0.0513 +2015-08-06 13:00:00,0.0601 +2015-08-06 14:00:00,0.0597 +2015-08-06 15:00:00,0.0579 +2015-08-06 16:00:00,0.0599 +2015-08-06 17:00:00,0.0505 +2015-08-06 18:00:00,0.0439 +2015-08-06 19:00:00,0.0339 +2015-08-06 20:00:00,0.0277 +2015-08-06 21:00:00,0.0163 +2015-08-06 22:00:00,0.0039 +2015-08-06 23:00:00,0.0037 +2015-08-07 00:00:00,0.0037 +2015-08-07 01:00:00,0.0037 +2015-08-07 02:00:00,0.004 +2015-08-07 03:00:00,0.0119 +2015-08-07 04:00:00,0.0489 +2015-08-07 05:00:00,0.0695 +2015-08-07 06:00:00,0.0636 +2015-08-07 07:00:00,0.0633 +2015-08-07 08:00:00,0.065 +2015-08-07 09:00:00,0.0696 +2015-08-07 10:00:00,0.067 +2015-08-07 11:00:00,0.067 +2015-08-07 12:00:00,0.0648 +2015-08-07 13:00:00,0.0642 +2015-08-07 14:00:00,0.0554 +2015-08-07 15:00:00,0.056 +2015-08-07 16:00:00,0.055 +2015-08-07 17:00:00,0.0445 +2015-08-07 18:00:00,0.0373 +2015-08-07 19:00:00,0.033 +2015-08-07 20:00:00,0.029 +2015-08-07 21:00:00,0.0217 +2015-08-07 22:00:00,0.0053 +2015-08-07 23:00:00,0.0037 +2015-08-08 00:00:00,0.0038 +2015-08-08 01:00:00,0.0038 +2015-08-08 02:00:00,0.0037 +2015-08-08 03:00:00,0.0039 +2015-08-08 04:00:00,0.0145 +2015-08-08 05:00:00,0.024 +2015-08-08 06:00:00,0.032 +2015-08-08 07:00:00,0.044 +2015-08-08 08:00:00,0.0531 +2015-08-08 09:00:00,0.0575 +2015-08-08 10:00:00,0.0618 +2015-08-08 11:00:00,0.062 +2015-08-08 12:00:00,0.062 +2015-08-08 13:00:00,0.0619 +2015-08-08 14:00:00,0.0604 +2015-08-08 15:00:00,0.0627 +2015-08-08 16:00:00,0.0598 +2015-08-08 17:00:00,0.0547 +2015-08-08 18:00:00,0.0437 +2015-08-08 19:00:00,0.0396 +2015-08-08 20:00:00,0.0386 +2015-08-08 21:00:00,0.0313 +2015-08-08 22:00:00,0.0181 +2015-08-08 23:00:00,0.0063 +2015-08-09 00:00:00,0.0045 +2015-08-09 01:00:00,0.0038 +2015-08-09 02:00:00,0.0038 +2015-08-09 03:00:00,0.0038 +2015-08-09 04:00:00,0.0045 +2015-08-09 05:00:00,0.0117 +2015-08-09 06:00:00,0.0237 +2015-08-09 07:00:00,0.0357 +2015-08-09 08:00:00,0.0473 +2015-08-09 09:00:00,0.0598 +2015-08-09 10:00:00,0.0672 +2015-08-09 11:00:00,0.0727 +2015-08-09 12:00:00,0.0662 +2015-08-09 13:00:00,0.0631 +2015-08-09 14:00:00,0.0645 +2015-08-09 15:00:00,0.0609 +2015-08-09 16:00:00,0.0605 +2015-08-09 17:00:00,0.323 +2015-08-09 18:00:00,0.0534 +2015-08-09 19:00:00,0.0421 +2015-08-09 20:00:00,0.0379 +2015-08-09 21:00:00,0.0258 +2015-08-09 22:00:00,0.0056 +2015-08-09 23:00:00,0.0039 +2015-08-10 00:00:00,0.0037 +2015-08-10 01:00:00,0.0037 +2015-08-10 02:00:00,0.0039 +2015-08-10 03:00:00,0.0146 +2015-08-10 04:00:00,0.0527 +2015-08-10 05:00:00,0.0791 +2015-08-10 06:00:00,0.0693 +2015-08-10 07:00:00,0.0621 +2015-08-10 08:00:00,0.0649 +2015-08-10 09:00:00,0.067 +2015-08-10 10:00:00,0.0619 +2015-08-10 11:00:00,0.0615 +2015-08-10 12:00:00,0.0584 +2015-08-10 13:00:00,0.0564 +2015-08-10 14:00:00,0.0559 +2015-08-10 15:00:00,0.0548 +2015-08-10 16:00:00,0.0567 +2015-08-10 17:00:00,0.0475 +2015-08-10 18:00:00,0.0357 +2015-08-10 19:00:00,0.0289 +2015-08-10 20:00:00,0.0223 +2015-08-10 21:00:00,0.0126 +2015-08-10 22:00:00,0.0041 +2015-08-10 23:00:00,0.0026 +2015-08-11 00:00:00,0.0018 +2015-08-11 01:00:00,0.0037 +2015-08-11 02:00:00,0.0039 +2015-08-11 03:00:00,0.0105 +2015-08-11 04:00:00,0.0535 +2015-08-11 05:00:00,0.0954 +2015-08-11 06:00:00,0.212 +2015-08-11 07:00:00,0.1566 +2015-08-11 08:00:00,0.0658 +2015-08-11 09:00:00,0.0684 +2015-08-11 10:00:00,0.0563 +2015-08-11 11:00:00,0.0612 +2015-08-11 12:00:00,0.0591 +2015-08-11 13:00:00,0.0579 +2015-08-11 14:00:00,0.06 +2015-08-11 15:00:00,0.0565 +2015-08-11 16:00:00,0.0605 +2015-08-11 17:00:00,0.0481 +2015-08-11 18:00:00,0.0359 +2015-08-11 19:00:00,0.0287 +2015-08-11 20:00:00,0.0195 +2015-08-11 21:00:00,0.0073 +2015-08-11 22:00:00,0.0039 +2015-08-11 23:00:00,0.0041 +2015-08-12 00:00:00,0.0037 +2015-08-12 01:00:00,0.0037 +2015-08-12 02:00:00,0.0041 +2015-08-12 03:00:00,0.014 +2015-08-12 04:00:00,0.0482 +2015-08-12 05:00:00,0.1063 +2015-08-12 06:00:00,0.2614 +2015-08-12 07:00:00,0.1444 +2015-08-12 08:00:00,0.064 +2015-08-12 09:00:00,0.065 +2015-08-12 10:00:00,0.0622 +2015-08-12 11:00:00,0.0595 +2015-08-12 12:00:00,0.0576 +2015-08-12 13:00:00,0.066 +2015-08-12 14:00:00,0.0587 +2015-08-12 15:00:00,0.0569 +2015-08-12 16:00:00,0.0582 +2015-08-12 17:00:00,0.0469 +2015-08-12 18:00:00,0.0376 +2015-08-12 19:00:00,0.0311 +2015-08-12 20:00:00,0.0273 +2015-08-12 21:00:00,0.0137 +2015-08-12 22:00:00,0.0045 +2015-08-12 23:00:00,0.004 +2015-08-13 00:00:00,0.0037 +2015-08-13 01:00:00,0.0037 +2015-08-13 02:00:00,0.0041 +2015-08-13 03:00:00,0.0169 +2015-08-13 04:00:00,0.049 +2015-08-13 05:00:00,0.0771 +2015-08-13 06:00:00,0.0759 +2015-08-13 07:00:00,0.0729 +2015-08-13 08:00:00,0.0686 +2015-08-13 09:00:00,0.0693 +2015-08-13 10:00:00,0.0626 +2015-08-13 11:00:00,0.0627 +2015-08-13 12:00:00,0.0612 +2015-08-13 13:00:00,0.0565 +2015-08-13 14:00:00,0.0648 +2015-08-13 15:00:00,0.0603 +2015-08-13 16:00:00,0.0581 +2015-08-13 17:00:00,0.0501 +2015-08-13 18:00:00,0.0363 +2015-08-13 19:00:00,0.0319 +2015-08-13 20:00:00,0.0243 +2015-08-13 21:00:00,0.0117 +2015-08-13 22:00:00,0.0042 +2015-08-13 23:00:00,0.0042 +2015-08-14 00:00:00,0.0038 +2015-08-14 01:00:00,0.0039 +2015-08-14 02:00:00,0.004 +2015-08-14 03:00:00,0.0105 +2015-08-14 04:00:00,0.049 +2015-08-14 05:00:00,0.0728 +2015-08-14 06:00:00,0.07 +2015-08-14 07:00:00,0.0579 +2015-08-14 08:00:00,0.0636 +2015-08-14 09:00:00,0.0642 +2015-08-14 10:00:00,0.0605 +2015-08-14 11:00:00,0.0422 +2015-08-14 12:00:00,0.0474 +2015-08-14 13:00:00,0.0616 +2015-08-14 14:00:00,0.0631 +2015-08-14 15:00:00,0.0571 +2015-08-14 16:00:00,0.0598 +2015-08-14 17:00:00,0.0447 +2015-08-14 18:00:00,0.038 +2015-08-14 19:00:00,0.0306 +2015-08-14 20:00:00,0.0247 +2015-08-14 21:00:00,0.019 +2015-08-14 22:00:00,0.005 +2015-08-14 23:00:00,0.0028 +2015-08-15 00:00:00,0.0019 +2015-08-15 01:00:00,0.0016 +2015-08-15 02:00:00,0.0012 +2015-08-15 03:00:00,0.0014 +2015-08-15 04:00:00,0.005 +2015-08-15 05:00:00,0.0191 +2015-08-15 06:00:00,0.0287 +2015-08-15 07:00:00,0.0377 +2015-08-15 08:00:00,0.0472 +2015-08-15 09:00:00,0.0549 +2015-08-15 10:00:00,0.0579 +2015-08-15 11:00:00,0.0569 +2015-08-15 12:00:00,0.0577 +2015-08-15 13:00:00,0.0557 +2015-08-15 14:00:00,0.0553 +2015-08-15 15:00:00,0.0566 +2015-08-15 16:00:00,0.0552 +2015-08-15 17:00:00,0.0497 +2015-08-15 18:00:00,0.0398 +2015-08-15 19:00:00,0.0338 +2015-08-15 20:00:00,0.0329 +2015-08-15 21:00:00,0.0278 +2015-08-15 22:00:00,0.0162 +2015-08-15 23:00:00,0.0034 +2015-08-16 00:00:00,0.0021 +2015-08-16 01:00:00,0.0016 +2015-08-16 02:00:00,0.001 +2015-08-16 03:00:00,0.0011 +2015-08-16 04:00:00,0.0017 +2015-08-16 05:00:00,0.0041 +2015-08-16 06:00:00,0.0171 +2015-08-16 07:00:00,0.0278 +2015-08-16 08:00:00,0.0397 +2015-08-16 09:00:00,0.0522 +2015-08-16 10:00:00,0.0594 +2015-08-16 11:00:00,0.0643 +2015-08-16 12:00:00,0.0603 +2015-08-16 13:00:00,0.0582 +2015-08-16 14:00:00,0.0587 +2015-08-16 15:00:00,0.0574 +2015-08-16 16:00:00,0.0557 +2015-08-16 17:00:00,0.0538 +2015-08-16 18:00:00,0.047 +2015-08-16 19:00:00,0.0383 +2015-08-16 20:00:00,0.0315 +2015-08-16 21:00:00,0.0219 +2015-08-16 22:00:00,0.0038 +2015-08-16 23:00:00,0.0018 +2015-08-17 00:00:00,0.0011 +2015-08-17 01:00:00,0.0009 +2015-08-17 02:00:00,0.0011 +2015-08-17 03:00:00,0.0076 +2015-08-17 04:00:00,0.0434 +2015-08-17 05:00:00,0.067 +2015-08-17 06:00:00,0.0952 +2015-08-17 07:00:00,0.0579 +2015-08-17 08:00:00,0.0602 +2015-08-17 09:00:00,0.0604 +2015-08-17 10:00:00,0.055 +2015-08-17 11:00:00,0.0566 +2015-08-17 12:00:00,0.0545 +2015-08-17 13:00:00,0.0549 +2015-08-17 14:00:00,0.0553 +2015-08-17 15:00:00,0.0562 +2015-08-17 16:00:00,0.057 +2015-08-17 17:00:00,0.047 +2015-08-17 18:00:00,0.034 +2015-08-17 19:00:00,0.0256 +2015-08-17 20:00:00,0.0205 +2015-08-17 21:00:00,0.0105 +2015-08-17 22:00:00,0.0028 +2015-08-17 23:00:00,0.0017 +2015-08-18 00:00:00,0.0011 +2015-08-18 01:00:00,0.001 +2015-08-18 02:00:00,0.0012 +2015-08-18 03:00:00,0.0067 +2015-08-18 04:00:00,0.0432 +2015-08-18 05:00:00,0.0725 +2015-08-18 06:00:00,0.1549 +2015-08-18 07:00:00,0.0654 +2015-08-18 08:00:00,0.0628 +2015-08-18 09:00:00,0.0585 +2015-08-18 10:00:00,0.0547 +2015-08-18 11:00:00,0.0553 +2015-08-18 12:00:00,0.0537 +2015-08-18 13:00:00,0.0522 +2015-08-18 14:00:00,0.0558 +2015-08-18 15:00:00,0.0588 +2015-08-18 16:00:00,0.0593 +2015-08-18 17:00:00,0.0483 +2015-08-18 18:00:00,0.0338 +2015-08-18 19:00:00,0.0254 +2015-08-18 20:00:00,0.0203 +2015-08-18 21:00:00,0.0071 +2015-08-18 22:00:00,0.003 +2015-08-18 23:00:00,0.0037 +2015-08-19 00:00:00,0.0037 +2015-08-19 01:00:00,0.0037 +2015-08-19 02:00:00,0.0037 +2015-08-19 03:00:00,0.0129 +2015-08-19 04:00:00,0.0511 +2015-08-19 05:00:00,0.1027 +2015-08-19 06:00:00,0.1592 +2015-08-19 07:00:00,0.0611 +2015-08-19 08:00:00,0.0635 +2015-08-19 09:00:00,0.067 +2015-08-19 10:00:00,0.0604 +2015-08-19 11:00:00,0.0594 +2015-08-19 12:00:00,0.0563 +2015-08-19 13:00:00,0.0545 +2015-08-19 14:00:00,0.0572 +2015-08-19 15:00:00,0.0562 +2015-08-19 16:00:00,0.0623 +2015-08-19 17:00:00,0.0498 +2015-08-19 18:00:00,0.038 +2015-08-19 19:00:00,0.0321 +2015-08-19 20:00:00,0.0239 +2015-08-19 21:00:00,0.0085 +2015-08-19 22:00:00,0.004 +2015-08-19 23:00:00,0.0038 +2015-08-20 00:00:00,0.0037 +2015-08-20 01:00:00,0.0037 +2015-08-20 02:00:00,0.004 +2015-08-20 03:00:00,0.0116 +2015-08-20 04:00:00,0.0504 +2015-08-20 05:00:00,0.1045 +2015-08-20 06:00:00,0.2981 +2015-08-20 07:00:00,0.3158 +2015-08-20 08:00:00,0.078 +2015-08-20 09:00:00,0.0395 +2015-08-20 10:00:00,0.0594 +2015-08-20 11:00:00,0.0612 +2015-08-20 12:00:00,0.0577 +2015-08-20 13:00:00,0.062 +2015-08-20 14:00:00,0.0625 +2015-08-20 15:00:00,0.0636 +2015-08-20 16:00:00,0.06 +2015-08-20 17:00:00,0.0508 +2015-08-20 18:00:00,0.042 +2015-08-20 19:00:00,0.029 +2015-08-20 20:00:00,0.028 +2015-08-20 21:00:00,0.013 +2015-08-20 22:00:00,0.0041 +2015-08-20 23:00:00,0.002 +2015-08-21 00:00:00,0.0031 +2015-08-21 01:00:00,0.0037 +2015-08-21 02:00:00,0.0039 +2015-08-21 03:00:00,0.0127 +2015-08-21 04:00:00,0.0483 +2015-08-21 05:00:00,0.0754 +2015-08-21 06:00:00,0.0737 +2015-08-21 07:00:00,0.064 +2015-08-21 08:00:00,0.0638 +2015-08-21 09:00:00,0.0621 +2015-08-21 10:00:00,0.0623 +2015-08-21 11:00:00,0.0609 +2015-08-21 12:00:00,0.0628 +2015-08-21 13:00:00,0.0627 +2015-08-21 14:00:00,0.0648 +2015-08-21 15:00:00,0.0589 +2015-08-21 16:00:00,0.0555 +2015-08-21 17:00:00,0.0502 +2015-08-21 18:00:00,0.0408 +2015-08-21 19:00:00,0.0332 +2015-08-21 20:00:00,0.0263 +2015-08-21 21:00:00,0.0201 +2015-08-21 22:00:00,0.008 +2015-08-21 23:00:00,0.004 +2015-08-22 00:00:00,0.004 +2015-08-22 01:00:00,0.0037 +2015-08-22 02:00:00,0.0037 +2015-08-22 03:00:00,0.0039 +2015-08-22 04:00:00,0.0099 +2015-08-22 05:00:00,0.0252 +2015-08-22 06:00:00,0.0368 +2015-08-22 07:00:00,0.0421 +2015-08-22 08:00:00,0.0524 +2015-08-22 09:00:00,0.0584 +2015-08-22 10:00:00,0.0611 +2015-08-22 11:00:00,0.0614 +2015-08-22 12:00:00,0.0648 +2015-08-22 13:00:00,0.0677 +2015-08-22 14:00:00,0.0662 +2015-08-22 15:00:00,0.0692 +2015-08-22 16:00:00,0.0597 +2015-08-22 17:00:00,0.0596 +2015-08-22 18:00:00,0.0494 +2015-08-22 19:00:00,0.0439 +2015-08-22 20:00:00,0.0393 +2015-08-22 21:00:00,0.0308 +2015-08-22 22:00:00,0.0207 +2015-08-22 23:00:00,0.0075 +2015-08-23 00:00:00,0.0039 +2015-08-23 01:00:00,0.0039 +2015-08-23 02:00:00,0.0039 +2015-08-23 03:00:00,0.0039 +2015-08-23 04:00:00,0.0048 +2015-08-23 05:00:00,0.0088 +2015-08-23 06:00:00,0.0184 +2015-08-23 07:00:00,0.0347 +2015-08-23 08:00:00,0.0458 +2015-08-23 09:00:00,0.0609 +2015-08-23 10:00:00,0.0691 +2015-08-23 11:00:00,0.0688 +2015-08-23 12:00:00,0.0679 +2015-08-23 13:00:00,0.0688 +2015-08-23 14:00:00,0.0644 +2015-08-23 15:00:00,0.0672 +2015-08-23 16:00:00,0.0599 +2015-08-23 17:00:00,0.0611 +2015-08-23 18:00:00,0.0518 +2015-08-23 19:00:00,0.0447 +2015-08-23 20:00:00,0.0353 +2015-08-23 21:00:00,0.0203 +2015-08-23 22:00:00,0.0042 +2015-08-23 23:00:00,0.0039 +2015-08-24 00:00:00,0.0067 +2015-08-24 01:00:00,0.0037 +2015-08-24 02:00:00,0.0043 +2015-08-24 03:00:00,0.0175 +2015-08-24 04:00:00,0.0529 +2015-08-24 05:00:00,0.1251 +2015-08-24 06:00:00,0.3542 +2015-08-24 07:00:00,0.3841 +2015-08-24 08:00:00,0.1919 +2015-08-24 09:00:00,0.0603 +2015-08-24 10:00:00,0.0601 +2015-08-24 11:00:00,0.0573 +2015-08-24 12:00:00,0.0528 +2015-08-24 13:00:00,0.0602 +2015-08-24 14:00:00,0.0579 +2015-08-24 15:00:00,0.0525 +2015-08-24 16:00:00,0.0551 +2015-08-24 17:00:00,0.0468 +2015-08-24 18:00:00,0.0351 +2015-08-24 19:00:00,0.029 +2015-08-24 20:00:00,0.017 +2015-08-24 21:00:00,0.011 +2015-08-24 22:00:00,0.0038 +2015-08-24 23:00:00,0.0037 +2015-08-25 00:00:00,0.0039 +2015-08-25 01:00:00,0.0038 +2015-08-25 02:00:00,0.0039 +2015-08-25 03:00:00,0.0173 +2015-08-25 04:00:00,0.054 +2015-08-25 05:00:00,0.142 +2015-08-25 06:00:00,0.3429 +2015-08-25 07:00:00,0.3647 +2015-08-25 08:00:00,0.1597 +2015-08-25 09:00:00,0.0638 +2015-08-25 10:00:00,0.0602 +2015-08-25 11:00:00,0.0589 +2015-08-25 12:00:00,0.0595 +2015-08-25 13:00:00,0.0587 +2015-08-25 14:00:00,0.0594 +2015-08-25 15:00:00,0.0563 +2015-08-25 16:00:00,0.063 +2015-08-25 17:00:00,0.0458 +2015-08-25 18:00:00,0.0351 +2015-08-25 19:00:00,0.0279 +2015-08-25 20:00:00,0.02 +2015-08-25 21:00:00,0.008 +2015-08-25 22:00:00,0.0038 +2015-08-25 23:00:00,0.0038 +2015-08-26 00:00:00,0.0038 +2015-08-26 01:00:00,0.0037 +2015-08-26 02:00:00,0.0039 +2015-08-26 03:00:00,0.011 +2015-08-26 04:00:00,0.0502 +2015-08-26 05:00:00,0.1207 +2015-08-26 06:00:00,0.3408 +2015-08-26 07:00:00,0.4068 +2015-08-26 08:00:00,0.1871 +2015-08-26 09:00:00,0.0662 +2015-08-26 10:00:00,0.0646 +2015-08-26 11:00:00,0.0584 +2015-08-26 12:00:00,0.0579 +2015-08-26 13:00:00,0.0599 +2015-08-26 14:00:00,0.0578 +2015-08-26 15:00:00,0.0602 +2015-08-26 16:00:00,0.0593 +2015-08-26 17:00:00,0.0457 +2015-08-26 18:00:00,0.0367 +2015-08-26 19:00:00,0.0295 +2015-08-26 20:00:00,0.026 +2015-08-26 21:00:00,0.0057 +2015-08-26 22:00:00,0.0039 +2015-08-26 23:00:00,0.0037 +2015-08-27 00:00:00,0.0038 +2015-08-27 01:00:00,0.0037 +2015-08-27 02:00:00,0.0039 +2015-08-27 03:00:00,0.0142 +2015-08-27 04:00:00,0.0463 +2015-08-27 05:00:00,0.1331 +2015-08-27 06:00:00,0.3686 +2015-08-27 07:00:00,0.4078 +2015-08-27 08:00:00,0.3042 +2015-08-27 09:00:00,0.3425 +2015-08-27 10:00:00,0.1401 +2015-08-27 11:00:00,0.0592 +2015-08-27 12:00:00,0.0571 +2015-08-27 13:00:00,0.058 +2015-08-27 14:00:00,0.0553 +2015-08-27 15:00:00,0.0584 +2015-08-27 16:00:00,0.0571 +2015-08-27 17:00:00,0.0463 +2015-08-27 18:00:00,0.036 +2015-08-27 19:00:00,0.0309 +2015-08-27 20:00:00,0.0247 +2015-08-27 21:00:00,0.0091 +2015-08-27 22:00:00,0.0037 +2015-08-27 23:00:00,0.0037 +2015-08-28 00:00:00,0.0037 +2015-08-28 01:00:00,0.0037 +2015-08-28 02:00:00,0.0037 +2015-08-28 03:00:00,0.0168 +2015-08-28 04:00:00,0.0483 +2015-08-28 05:00:00,0.0751 +2015-08-28 06:00:00,0.0692 +2015-08-28 07:00:00,0.0617 +2015-08-28 08:00:00,0.0635 +2015-08-28 09:00:00,0.0599 +2015-08-28 10:00:00,0.0617 +2015-08-28 11:00:00,0.0601 +2015-08-28 12:00:00,0.0643 +2015-08-28 13:00:00,0.0627 +2015-08-28 14:00:00,0.0622 +2015-08-28 15:00:00,0.056 +2015-08-28 16:00:00,0.0544 +2015-08-28 17:00:00,0.0458 +2015-08-28 18:00:00,0.0404 +2015-08-28 19:00:00,0.0324 +2015-08-28 20:00:00,0.0255 +2015-08-28 21:00:00,0.0184 +2015-08-28 22:00:00,0.0054 +2015-08-28 23:00:00,0.0042 +2015-08-29 00:00:00,0.0037 +2015-08-29 01:00:00,0.0038 +2015-08-29 02:00:00,0.0041 +2015-08-29 03:00:00,0.0042 +2015-08-29 04:00:00,0.0142 +2015-08-29 05:00:00,0.0261 +2015-08-29 06:00:00,0.0333 +2015-08-29 07:00:00,0.0445 +2015-08-29 08:00:00,0.0555 +2015-08-29 09:00:00,0.0696 +2015-08-29 10:00:00,0.07 +2015-08-29 11:00:00,0.0639 +2015-08-29 12:00:00,0.0657 +2015-08-29 13:00:00,0.0605 +2015-08-29 14:00:00,0.0628 +2015-08-29 15:00:00,0.0616 +2015-08-29 16:00:00,0.0592 +2015-08-29 17:00:00,0.0493 +2015-08-29 18:00:00,0.0402 +2015-08-29 19:00:00,0.038 +2015-08-29 20:00:00,0.0335 +2015-08-29 21:00:00,0.0288 +2015-08-29 22:00:00,0.0194 +2015-08-29 23:00:00,0.0049 +2015-08-30 00:00:00,0.0038 +2015-08-30 01:00:00,0.0041 +2015-08-30 02:00:00,0.0037 +2015-08-30 03:00:00,0.0039 +2015-08-30 04:00:00,0.0045 +2015-08-30 05:00:00,0.0074 +2015-08-30 06:00:00,0.0186 +2015-08-30 07:00:00,0.0355 +2015-08-30 08:00:00,0.0536 +2015-08-30 09:00:00,0.0653 +2015-08-30 10:00:00,0.0735 +2015-08-30 11:00:00,0.0666 +2015-08-30 12:00:00,0.0695 +2015-08-30 13:00:00,0.0659 +2015-08-30 14:00:00,0.066 +2015-08-30 15:00:00,0.0617 +2015-08-30 16:00:00,0.0589 +2015-08-30 17:00:00,0.0569 +2015-08-30 18:00:00,0.0462 +2015-08-30 19:00:00,0.0436 +2015-08-30 20:00:00,0.0325 +2015-08-30 21:00:00,0.0206 +2015-08-30 22:00:00,0.0052 +2015-08-30 23:00:00,0.0037 +2015-08-31 00:00:00,0.0037 +2015-08-31 01:00:00,0.0038 +2015-08-31 02:00:00,0.0038 +2015-08-31 03:00:00,0.0166 +2015-08-31 04:00:00,0.0512 +2015-08-31 05:00:00,0.1125 +2015-08-31 06:00:00,0.3679 +2015-08-31 07:00:00,0.3999 +2015-08-31 08:00:00,0.2336 +2015-08-31 09:00:00,0.0609 +2015-08-31 10:00:00,0.0627 +2015-08-31 11:00:00,0.0564 +2015-08-31 12:00:00,0.055 +2015-08-31 13:00:00,0.0569 +2015-08-31 14:00:00,0.0587 +2015-08-31 15:00:00,0.0535 +2015-08-31 16:00:00,0.0534 +2015-08-31 17:00:00,0.042 +2015-08-31 18:00:00,0.0368 +2015-08-31 19:00:00,0.0285 +2015-08-31 20:00:00,0.0185 +2015-08-31 21:00:00,0.0071 +2015-08-31 22:00:00,0.0037 +2015-08-31 23:00:00,0.0037 +2015-09-01 00:00:00,0.0037 +2015-09-01 01:00:00,0.0037 +2015-09-01 02:00:00,0.003 +2015-09-01 03:00:00,0.014 +2015-09-01 04:00:00,0.0518 +2015-09-01 05:00:00,0.103 +2015-09-01 06:00:00,0.3476 +2015-09-01 07:00:00,0.1302 +2015-09-01 08:00:00,0.0647 +2015-09-01 09:00:00,0.0587 +2015-09-01 10:00:00,0.054 +2015-09-01 11:00:00,0.0543 +2015-09-01 12:00:00,0.056 +2015-09-01 13:00:00,0.0568 +2015-09-01 14:00:00,0.0585 +2015-09-01 15:00:00,0.0534 +2015-09-01 16:00:00,0.0554 +2015-09-01 17:00:00,0.0451 +2015-09-01 18:00:00,0.034 +2015-09-01 19:00:00,0.0281 +2015-09-01 20:00:00,0.0149 +2015-09-01 21:00:00,0.0056 +2015-09-01 22:00:00,0.0039 +2015-09-01 23:00:00,0.0038 +2015-09-02 00:00:00,0.0037 +2015-09-02 01:00:00,0.0038 +2015-09-02 02:00:00,0.0038 +2015-09-02 03:00:00,0.0185 +2015-09-02 04:00:00,0.0511 +2015-09-02 05:00:00,0.1225 +2015-09-02 06:00:00,0.3527 +2015-09-02 07:00:00,0.3984 +2015-09-02 08:00:00,0.2096 +2015-09-02 09:00:00,0.0618 +2015-09-02 10:00:00,0.0615 +2015-09-02 11:00:00,0.0527 +2015-09-02 12:00:00,0.0511 +2015-09-02 13:00:00,0.0577 +2015-09-02 14:00:00,0.0539 +2015-09-02 15:00:00,0.0549 +2015-09-02 16:00:00,0.0585 +2015-09-02 17:00:00,0.0472 +2015-09-02 18:00:00,0.0346 +2015-09-02 19:00:00,0.029 +2015-09-02 20:00:00,0.0209 +2015-09-02 21:00:00,0.0045 +2015-09-02 22:00:00,0.0038 +2015-09-02 23:00:00,0.0038 +2015-09-03 00:00:00,0.0037 +2015-09-03 01:00:00,0.0037 +2015-09-03 02:00:00,0.0037 +2015-09-03 03:00:00,0.0154 +2015-09-03 04:00:00,0.0514 +2015-09-03 05:00:00,0.1353 +2015-09-03 06:00:00,0.3395 +2015-09-03 07:00:00,0.3984 +2015-09-03 08:00:00,0.1709 +2015-09-03 09:00:00,0.063 +2015-09-03 10:00:00,0.0618 +2015-09-03 11:00:00,0.0613 +2015-09-03 12:00:00,0.0626 +2015-09-03 13:00:00,0.0621 +2015-09-03 14:00:00,0.0571 +2015-09-03 15:00:00,0.0563 +2015-09-03 16:00:00,0.0608 +2015-09-03 17:00:00,0.0466 +2015-09-03 18:00:00,0.0354 +2015-09-03 19:00:00,0.0355 +2015-09-03 20:00:00,0.0199 +2015-09-03 21:00:00,0.0092 +2015-09-03 22:00:00,0.004 +2015-09-03 23:00:00,0.004 +2015-09-04 00:00:00,0.0037 +2015-09-04 01:00:00,0.0037 +2015-09-04 02:00:00,0.0039 +2015-09-04 03:00:00,0.0092 +2015-09-04 04:00:00,0.041 +2015-09-04 05:00:00,0.0718 +2015-09-04 06:00:00,0.0694 +2015-09-04 07:00:00,0.0538 +2015-09-04 08:00:00,0.0566 +2015-09-04 09:00:00,0.0598 +2015-09-04 10:00:00,0.0634 +2015-09-04 11:00:00,0.0604 +2015-09-04 12:00:00,0.0623 +2015-09-04 13:00:00,0.0622 +2015-09-04 14:00:00,0.0588 +2015-09-04 15:00:00,0.0572 +2015-09-04 16:00:00,0.0528 +2015-09-04 17:00:00,0.0454 +2015-09-04 18:00:00,0.0394 +2015-09-04 19:00:00,0.0313 +2015-09-04 20:00:00,0.0247 +2015-09-04 21:00:00,0.0192 +2015-09-04 22:00:00,0.0046 +2015-09-04 23:00:00,0.0039 +2015-09-05 00:00:00,0.0039 +2015-09-05 01:00:00,0.0038 +2015-09-05 02:00:00,0.0038 +2015-09-05 03:00:00,0.0041 +2015-09-05 04:00:00,0.0068 +2015-09-05 05:00:00,0.0205 +2015-09-05 06:00:00,0.0314 +2015-09-05 07:00:00,0.0416 +2015-09-05 08:00:00,0.051 +2015-09-05 09:00:00,0.0571 +2015-09-05 10:00:00,0.0654 +2015-09-05 11:00:00,0.0618 +2015-09-05 12:00:00,0.0563 +2015-09-05 13:00:00,0.0577 +2015-09-05 14:00:00,0.0552 +2015-09-05 15:00:00,0.0575 +2015-09-05 16:00:00,0.0544 +2015-09-05 17:00:00,0.0468 +2015-09-05 18:00:00,0.0403 +2015-09-05 19:00:00,0.0377 +2015-09-05 20:00:00,0.034 +2015-09-05 21:00:00,0.0265 +2015-09-05 22:00:00,0.0124 +2015-09-05 23:00:00,0.0039 +2015-09-06 00:00:00,0.0038 +2015-09-06 01:00:00,0.0037 +2015-09-06 02:00:00,0.0039 +2015-09-06 03:00:00,0.0038 +2015-09-06 04:00:00,0.0046 +2015-09-06 05:00:00,0.0081 +2015-09-06 06:00:00,0.0179 +2015-09-06 07:00:00,0.0308 +2015-09-06 08:00:00,0.044 +2015-09-06 09:00:00,0.0565 +2015-09-06 10:00:00,0.062 +2015-09-06 11:00:00,0.0608 +2015-09-06 12:00:00,0.0579 +2015-09-06 13:00:00,0.0571 +2015-09-06 14:00:00,0.0617 +2015-09-06 15:00:00,0.0543 +2015-09-06 16:00:00,0.0558 +2015-09-06 17:00:00,0.0492 +2015-09-06 18:00:00,0.0481 +2015-09-06 19:00:00,0.0427 +2015-09-06 20:00:00,0.0378 +2015-09-06 21:00:00,0.0264 +2015-09-06 22:00:00,0.0082 +2015-09-06 23:00:00,0.0038 +2015-09-07 00:00:00,0.0029 +2015-09-07 01:00:00,0.0038 +2015-09-07 02:00:00,0.004 +2015-09-07 03:00:00,0.0039 +2015-09-07 04:00:00,0.0071 +2015-09-07 05:00:00,0.0121 +2015-09-07 06:00:00,0.0227 +2015-09-07 07:00:00,0.0301 +2015-09-07 08:00:00,0.045 +2015-09-07 09:00:00,0.0576 +2015-09-07 10:00:00,0.0663 +2015-09-07 11:00:00,0.0641 +2015-09-07 12:00:00,0.0645 +2015-09-07 13:00:00,0.0665 +2015-09-07 14:00:00,0.0629 +2015-09-07 15:00:00,0.0578 +2015-09-07 16:00:00,0.0571 +2015-09-07 17:00:00,0.0485 +2015-09-07 18:00:00,0.0464 +2015-09-07 19:00:00,0.036 +2015-09-07 20:00:00,0.0273 +2015-09-07 21:00:00,0.0163 +2015-09-07 22:00:00,0.0043 +2015-09-07 23:00:00,0.0041 +2015-09-08 00:00:00,0.0037 +2015-09-08 01:00:00,0.0037 +2015-09-08 02:00:00,0.0039 +2015-09-08 03:00:00,0.0152 +2015-09-08 04:00:00,0.056 +2015-09-08 05:00:00,0.1395 +2015-09-08 06:00:00,0.3855 +2015-09-08 07:00:00,0.3965 +2015-09-08 08:00:00,0.3277 +2015-09-08 09:00:00,0.0981 +2015-09-08 10:00:00,0.0588 +2015-09-08 11:00:00,0.0659 +2015-09-08 12:00:00,0.0592 +2015-09-08 13:00:00,0.0583 +2015-09-08 14:00:00,0.0594 +2015-09-08 15:00:00,0.083 +2015-09-08 16:00:00,0.0775 +2015-09-08 17:00:00,0.0466 +2015-09-08 18:00:00,0.0364 +2015-09-08 19:00:00,0.0281 +2015-09-08 20:00:00,0.0193 +2015-09-08 21:00:00,0.0085 +2015-09-08 22:00:00,0.0037 +2015-09-08 23:00:00,0.0037 +2015-09-09 00:00:00,0.0037 +2015-09-09 01:00:00,0.0039 +2015-09-09 02:00:00,0.0037 +2015-09-09 03:00:00,0.0125 +2015-09-09 04:00:00,0.0528 +2015-09-09 05:00:00,0.1408 +2015-09-09 06:00:00,0.3921 +2015-09-09 07:00:00,0.4274 +2015-09-09 08:00:00,0.3255 +2015-09-09 09:00:00,0.063 +2015-09-09 10:00:00,0.0617 +2015-09-09 11:00:00,0.0593 +2015-09-09 12:00:00,0.0623 +2015-09-09 13:00:00,0.0562 +2015-09-09 14:00:00,0.0561 +2015-09-09 15:00:00,0.0577 +2015-09-09 16:00:00,0.0604 +2015-09-09 17:00:00,0.0488 +2015-09-09 18:00:00,0.0354 +2015-09-09 19:00:00,0.0273 +2015-09-09 20:00:00,0.0212 +2015-09-09 21:00:00,0.007 +2015-09-09 22:00:00,0.0032 +2015-09-09 23:00:00,0.0021 +2015-09-10 00:00:00,0.0015 +2015-09-10 01:00:00,0.0013 +2015-09-10 02:00:00,0.0014 +2015-09-10 03:00:00,0.0103 +2015-09-10 04:00:00,0.0134 +2015-09-10 05:00:00,0.0109 +2015-09-10 06:00:00,0.376 +2015-09-10 07:00:00,0.3957 +2015-09-10 08:00:00,0.241 +2015-09-10 09:00:00,0.0625 +2015-09-10 10:00:00,0.0631 +2015-09-10 11:00:00,0.0606 +2015-09-10 12:00:00,0.0605 +2015-09-10 13:00:00,0.0574 +2015-09-10 14:00:00,0.0636 +2015-09-10 15:00:00,0.0548 +2015-09-10 16:00:00,0.0599 +2015-09-10 17:00:00,0.0462 +2015-09-10 18:00:00,0.0357 +2015-09-10 19:00:00,0.0309 +2015-09-10 20:00:00,0.0242 +2015-09-10 21:00:00,0.0098 +2015-09-10 22:00:00,0.0039 +2015-09-10 23:00:00,0.0039 +2015-09-11 00:00:00,0.0038 +2015-09-11 01:00:00,0.0037 +2015-09-11 02:00:00,0.0041 +2015-09-11 03:00:00,0.0113 +2015-09-11 04:00:00,0.0501 +2015-09-11 05:00:00,0.0834 +2015-09-11 06:00:00,0.1644 +2015-09-11 07:00:00,0.0567 +2015-09-11 08:00:00,0.0571 +2015-09-11 09:00:00,0.0635 +2015-09-11 10:00:00,0.0647 +2015-09-11 11:00:00,0.0615 +2015-09-11 12:00:00,0.0646 +2015-09-11 13:00:00,0.0634 +2015-09-11 14:00:00,0.0614 +2015-09-11 15:00:00,0.3304 +2015-09-11 16:00:00,0.4361 +2015-09-11 17:00:00,0.0907 +2015-09-11 18:00:00,0.0403 +2015-09-11 19:00:00,0.0329 +2015-09-11 20:00:00,0.0244 +2015-09-11 21:00:00,0.0197 +2015-09-11 22:00:00,0.0065 +2015-09-11 23:00:00,0.0037 +2015-09-12 00:00:00,0.0037 +2015-09-12 01:00:00,0.0038 +2015-09-12 02:00:00,0.0038 +2015-09-12 03:00:00,0.0038 +2015-09-12 04:00:00,0.0077 +2015-09-12 05:00:00,0.0268 +2015-09-12 06:00:00,0.0372 +2015-09-12 07:00:00,0.0482 +2015-09-12 08:00:00,0.0552 +2015-09-12 09:00:00,0.0618 +2015-09-12 10:00:00,0.0654 +2015-09-12 11:00:00,0.0677 +2015-09-12 12:00:00,0.0623 +2015-09-12 13:00:00,0.0664 +2015-09-12 14:00:00,0.0666 +2015-09-12 15:00:00,0.0671 +2015-09-12 16:00:00,0.0699 +2015-09-12 17:00:00,0.0506 +2015-09-12 18:00:00,0.0426 +2015-09-12 19:00:00,0.0393 +2015-09-12 20:00:00,0.0343 +2015-09-12 21:00:00,0.0269 +2015-09-12 22:00:00,0.0153 +2015-09-12 23:00:00,0.0065 +2015-09-13 00:00:00,0.0039 +2015-09-13 01:00:00,0.0037 +2015-09-13 02:00:00,0.0037 +2015-09-13 03:00:00,0.0039 +2015-09-13 04:00:00,0.0041 +2015-09-13 05:00:00,0.0104 +2015-09-13 06:00:00,0.0252 +2015-09-13 07:00:00,0.0358 +2015-09-13 08:00:00,0.0498 +2015-09-13 09:00:00,0.0652 +2015-09-13 10:00:00,0.0742 +2015-09-13 11:00:00,0.0682 +2015-09-13 12:00:00,0.0692 +2015-09-13 13:00:00,0.0658 +2015-09-13 14:00:00,0.0634 +2015-09-13 15:00:00,0.0639 +2015-09-13 16:00:00,0.0626 +2015-09-13 17:00:00,0.0477 +2015-09-13 18:00:00,0.0446 +2015-09-13 19:00:00,0.0376 +2015-09-13 20:00:00,0.0294 +2015-09-13 21:00:00,0.0128 +2015-09-13 22:00:00,0.0041 +2015-09-13 23:00:00,0.0042 +2015-09-14 00:00:00,0.0037 +2015-09-14 01:00:00,0.0037 +2015-09-14 02:00:00,0.0039 +2015-09-14 03:00:00,0.0145 +2015-09-14 04:00:00,0.0514 +2015-09-14 05:00:00,0.1369 +2015-09-14 06:00:00,0.3729 +2015-09-14 07:00:00,0.3924 +2015-09-14 08:00:00,0.1916 +2015-09-14 09:00:00,0.0607 +2015-09-14 10:00:00,0.063 +2015-09-14 11:00:00,0.0596 +2015-09-14 12:00:00,0.0575 +2015-09-14 13:00:00,0.0588 +2015-09-14 14:00:00,0.0599 +2015-09-14 15:00:00,0.0557 +2015-09-14 16:00:00,0.0554 +2015-09-14 17:00:00,0.0446 +2015-09-14 18:00:00,0.0318 +2015-09-14 19:00:00,0.0257 +2015-09-14 20:00:00,0.0178 +2015-09-14 21:00:00,0.0041 +2015-09-14 22:00:00,0.004 +2015-09-14 23:00:00,0.0037 +2015-09-15 00:00:00,0.0037 +2015-09-15 01:00:00,0.0037 +2015-09-15 02:00:00,0.004 +2015-09-15 03:00:00,0.0151 +2015-09-15 04:00:00,0.0547 +2015-09-15 05:00:00,0.1379 +2015-09-15 06:00:00,0.3496 +2015-09-15 07:00:00,0.3993 +2015-09-15 08:00:00,0.1829 +2015-09-15 09:00:00,0.0609 +2015-09-15 10:00:00,0.0571 +2015-09-15 11:00:00,0.0584 +2015-09-15 12:00:00,0.053 +2015-09-15 13:00:00,0.0566 +2015-09-15 14:00:00,0.06 +2015-09-15 15:00:00,0.0584 +2015-09-15 16:00:00,0.0582 +2015-09-15 17:00:00,0.0461 +2015-09-15 18:00:00,0.0319 +2015-09-15 19:00:00,0.0265 +2015-09-15 20:00:00,0.0182 +2015-09-15 21:00:00,0.0052 +2015-09-15 22:00:00,0.004 +2015-09-15 23:00:00,0.0037 +2015-09-16 00:00:00,0.0037 +2015-09-16 01:00:00,0.0037 +2015-09-16 02:00:00,0.0037 +2015-09-16 03:00:00,0.0207 +2015-09-16 04:00:00,0.0511 +2015-09-16 05:00:00,0.1394 +2015-09-16 06:00:00,0.4077 +2015-09-16 07:00:00,0.402 +2015-09-16 08:00:00,0.158 +2015-09-16 09:00:00,0.0617 +2015-09-16 10:00:00,0.0567 +2015-09-16 11:00:00,0.0593 +2015-09-16 12:00:00,0.0627 +2015-09-16 13:00:00,0.0542 +2015-09-16 14:00:00,0.0574 +2015-09-16 15:00:00,0.0609 +2015-09-16 16:00:00,0.057 +2015-09-16 17:00:00,0.0485 +2015-09-16 18:00:00,0.0324 +2015-09-16 19:00:00,0.0262 +2015-09-16 20:00:00,0.0172 +2015-09-16 21:00:00,0.0046 +2015-09-16 22:00:00,0.0038 +2015-09-16 23:00:00,0.0037 +2015-09-17 00:00:00,0.0038 +2015-09-17 01:00:00,0.0038 +2015-09-17 02:00:00,0.0039 +2015-09-17 03:00:00,0.0162 +2015-09-17 04:00:00,0.0537 +2015-09-17 05:00:00,0.1424 +2015-09-17 06:00:00,0.3945 +2015-09-17 07:00:00,0.412 +2015-09-17 08:00:00,0.2292 +2015-09-17 09:00:00,0.0606 +2015-09-17 10:00:00,0.0591 +2015-09-17 11:00:00,0.0612 +2015-09-17 12:00:00,0.055 +2015-09-17 13:00:00,0.0584 +2015-09-17 14:00:00,0.0616 +2015-09-17 15:00:00,0.0594 +2015-09-17 16:00:00,0.0576 +2015-09-17 17:00:00,0.0478 +2015-09-17 18:00:00,0.0355 +2015-09-17 19:00:00,0.0306 +2015-09-17 20:00:00,0.0237 +2015-09-17 21:00:00,0.0115 +2015-09-17 22:00:00,0.0035 +2015-09-17 23:00:00,0.0035 +2015-09-18 00:00:00,0.0038 +2015-09-18 01:00:00,0.0037 +2015-09-18 02:00:00,0.0044 +2015-09-18 03:00:00,0.0072 +2015-09-18 04:00:00,0.0473 +2015-09-18 05:00:00,0.0805 +2015-09-18 06:00:00,0.178 +2015-09-18 07:00:00,0.0638 +2015-09-18 08:00:00,0.0612 +2015-09-18 09:00:00,0.061 +2015-09-18 10:00:00,0.0624 +2015-09-18 11:00:00,0.0643 +2015-09-18 12:00:00,0.0626 +2015-09-18 13:00:00,0.0681 +2015-09-18 14:00:00,0.0627 +2015-09-18 15:00:00,0.0639 +2015-09-18 16:00:00,0.0595 +2015-09-18 17:00:00,0.0498 +2015-09-18 18:00:00,0.0395 +2015-09-18 19:00:00,0.0324 +2015-09-18 20:00:00,0.0251 +2015-09-18 21:00:00,0.017 +2015-09-18 22:00:00,0.004 +2015-09-18 23:00:00,0.0037 +2015-09-19 00:00:00,0.0041 +2015-09-19 01:00:00,0.0038 +2015-09-19 02:00:00,0.004 +2015-09-19 03:00:00,0.004 +2015-09-19 04:00:00,0.014 +2015-09-19 05:00:00,0.027 +2015-09-19 06:00:00,0.0348 +2015-09-19 07:00:00,0.0479 +2015-09-19 08:00:00,0.0553 +2015-09-19 09:00:00,0.0654 +2015-09-19 10:00:00,0.0676 +2015-09-19 11:00:00,0.065 +2015-09-19 12:00:00,0.0647 +2015-09-19 13:00:00,0.0598 +2015-09-19 14:00:00,0.0603 +2015-09-19 15:00:00,0.062 +2015-09-19 16:00:00,0.0536 +2015-09-19 17:00:00,0.0316 +2015-09-19 18:00:00,0.0391 +2015-09-19 19:00:00,0.0376 +2015-09-19 20:00:00,0.0324 +2015-09-19 21:00:00,0.0274 +2015-09-19 22:00:00,0.0189 +2015-09-19 23:00:00,0.005 +2015-09-20 00:00:00,0.004 +2015-09-20 01:00:00,0.0039 +2015-09-20 02:00:00,0.0037 +2015-09-20 03:00:00,0.0045 +2015-09-20 04:00:00,0.0048 +2015-09-20 05:00:00,0.0166 +2015-09-20 06:00:00,0.0245 +2015-09-20 07:00:00,0.0372 +2015-09-20 08:00:00,0.0532 +2015-09-20 09:00:00,0.0617 +2015-09-20 10:00:00,0.0676 +2015-09-20 11:00:00,0.068 +2015-09-20 12:00:00,0.0672 +2015-09-20 13:00:00,0.0674 +2015-09-20 14:00:00,0.0636 +2015-09-20 15:00:00,0.0633 +2015-09-20 16:00:00,0.0598 +2015-09-20 17:00:00,0.0501 +2015-09-20 18:00:00,0.043 +2015-09-20 19:00:00,0.0394 +2015-09-20 20:00:00,0.0291 +2015-09-20 21:00:00,0.0175 +2015-09-20 22:00:00,0.0043 +2015-09-20 23:00:00,0.0038 +2015-09-21 00:00:00,0.0038 +2015-09-21 01:00:00,0.0037 +2015-09-21 02:00:00,0.0038 +2015-09-21 03:00:00,0.0177 +2015-09-21 04:00:00,0.0548 +2015-09-21 05:00:00,0.1383 +2015-09-21 06:00:00,0.4459 +2015-09-21 07:00:00,0.4043 +2015-09-21 08:00:00,0.3311 +2015-09-21 09:00:00,0.0613 +2015-09-21 10:00:00,0.0572 +2015-09-21 11:00:00,0.061 +2015-09-21 12:00:00,0.0556 +2015-09-21 13:00:00,0.0534 +2015-09-21 14:00:00,0.0563 +2015-09-21 15:00:00,0.0925 +2015-09-21 16:00:00,0.0511 +2015-09-21 17:00:00,0.0443 +2015-09-21 18:00:00,0.0336 +2015-09-21 19:00:00,0.0272 +2015-09-21 20:00:00,0.0196 +2015-09-21 21:00:00,0.0049 +2015-09-21 22:00:00,0.0039 +2015-09-21 23:00:00,0.0039 +2015-09-22 00:00:00,0.0038 +2015-09-22 01:00:00,0.0038 +2015-09-22 02:00:00,0.0039 +2015-09-22 03:00:00,0.0123 +2015-09-22 04:00:00,0.0535 +2015-09-22 05:00:00,0.1691 +2015-09-22 06:00:00,0.3711 +2015-09-22 07:00:00,0.4215 +2015-09-22 08:00:00,0.2151 +2015-09-22 09:00:00,0.0597 +2015-09-22 10:00:00,0.0593 +2015-09-22 11:00:00,0.0565 +2015-09-22 12:00:00,0.0538 +2015-09-22 13:00:00,0.0586 +2015-09-22 14:00:00,0.0572 +2015-09-22 15:00:00,0.0558 +2015-09-22 16:00:00,0.0547 +2015-09-22 17:00:00,0.0462 +2015-09-22 18:00:00,0.0368 +2015-09-22 19:00:00,0.0252 +2015-09-22 20:00:00,0.0142 +2015-09-22 21:00:00,0.0087 +2015-09-22 22:00:00,0.0039 +2015-09-22 23:00:00,0.0037 +2015-09-23 00:00:00,0.0037 +2015-09-23 01:00:00,0.0037 +2015-09-23 02:00:00,0.0038 +2015-09-23 03:00:00,0.012 +2015-09-23 04:00:00,0.0517 +2015-09-23 05:00:00,0.1389 +2015-09-23 06:00:00,0.3488 +2015-09-23 07:00:00,0.3786 +2015-09-23 08:00:00,0.0752 +2015-09-23 09:00:00,0.0549 +2015-09-23 10:00:00,0.0546 +2015-09-23 11:00:00,0.0575 +2015-09-23 12:00:00,0.0576 +2015-09-23 13:00:00,0.0178 +2015-09-23 14:00:00,0.0043 +2015-09-23 15:00:00,0.0056 +2015-09-23 16:00:00,0.0041 +2015-09-23 17:00:00,0.0045 +2015-09-23 18:00:00,0.0041 +2015-09-23 19:00:00,0.0052 +2015-09-23 20:00:00,0.0051 +2015-09-23 21:00:00,0.0037 +2015-09-23 22:00:00,0.0037 +2015-09-23 23:00:00,0.0037 +2015-09-24 00:00:00,0.0037 +2015-09-24 01:00:00,0.0037 +2015-09-24 02:00:00,0.0037 +2015-09-24 03:00:00,0.0042 +2015-09-24 04:00:00,0.004 +2015-09-24 05:00:00,0.0094 +2015-09-24 06:00:00,0.0037 +2015-09-24 07:00:00,0.011 +2015-09-24 08:00:00,0.0042 +2015-09-24 09:00:00,0.0302 +2015-09-24 10:00:00,0.0585 +2015-09-24 11:00:00,0.0621 +2015-09-24 12:00:00,0.0584 +2015-09-24 13:00:00,0.0609 +2015-09-24 14:00:00,0.061 +2015-09-24 15:00:00,0.0609 +2015-09-24 16:00:00,0.0599 +2015-09-24 17:00:00,0.0459 +2015-09-24 18:00:00,0.0334 +2015-09-24 19:00:00,0.0278 +2015-09-24 20:00:00,0.021 +2015-09-24 21:00:00,0.0093 +2015-09-24 22:00:00,0.0031 +2015-09-24 23:00:00,0.0019 +2015-09-25 00:00:00,0.0013 +2015-09-25 01:00:00,0.0011 +2015-09-25 02:00:00,0.0012 +2015-09-25 03:00:00,0.0068 +2015-09-25 04:00:00,0.0383 +2015-09-25 05:00:00,0.0648 +2015-09-25 06:00:00,0.0887 +2015-09-25 07:00:00,0.0563 +2015-09-25 08:00:00,0.056 +2015-09-25 09:00:00,0.0561 +2015-09-25 10:00:00,0.0582 +2015-09-25 11:00:00,0.0576 +2015-09-25 12:00:00,0.0594 +2015-09-25 13:00:00,0.0609 +2015-09-25 14:00:00,0.06 +2015-09-25 15:00:00,0.0608 +2015-09-25 16:00:00,0.0597 +2015-09-25 17:00:00,0.0484 +2015-09-25 18:00:00,0.0388 +2015-09-25 19:00:00,0.0296 +2015-09-25 20:00:00,0.0229 +2015-09-25 21:00:00,0.0175 +2015-09-25 22:00:00,0.0047 +2015-09-25 23:00:00,0.0028 +2015-09-26 00:00:00,0.0019 +2015-09-26 01:00:00,0.0015 +2015-09-26 02:00:00,0.0012 +2015-09-26 03:00:00,0.0014 +2015-09-26 04:00:00,0.008 +2015-09-26 05:00:00,0.0201 +2015-09-26 06:00:00,0.028 +2015-09-26 07:00:00,0.0391 +2015-09-26 08:00:00,0.048 +2015-09-26 09:00:00,0.056 +2015-09-26 10:00:00,0.0604 +2015-09-26 11:00:00,0.0589 +2015-09-26 12:00:00,0.0577 +2015-09-26 13:00:00,0.057 +2015-09-26 14:00:00,0.0568 +2015-09-26 15:00:00,0.0584 +2015-09-26 16:00:00,0.0549 +2015-09-26 17:00:00,0.0453 +2015-09-26 18:00:00,0.0372 +2015-09-26 19:00:00,0.0334 +2015-09-26 20:00:00,0.0294 +2015-09-26 21:00:00,0.0241 +2015-09-26 22:00:00,0.0148 +2015-09-26 23:00:00,0.0033 +2015-09-27 00:00:00,0.002 +2015-09-27 01:00:00,0.0015 +2015-09-27 02:00:00,0.001 +2015-09-27 03:00:00,0.001 +2015-09-27 04:00:00,0.0015 +2015-09-27 05:00:00,0.0062 +2015-09-27 06:00:00,0.0164 +2015-09-27 07:00:00,0.028 +2015-09-27 08:00:00,0.0419 +2015-09-27 09:00:00,0.0549 +2015-09-27 10:00:00,0.061 +2015-09-27 11:00:00,0.0599 +2015-09-27 12:00:00,0.0596 +2015-09-27 13:00:00,0.0588 +2015-09-27 14:00:00,0.0588 +2015-09-27 15:00:00,0.0563 +2015-09-27 16:00:00,0.0547 +2015-09-27 17:00:00,0.0467 +2015-09-27 18:00:00,0.0401 +2015-09-27 19:00:00,0.0355 +2015-09-27 20:00:00,0.0271 +2015-09-27 21:00:00,0.0162 +2015-09-27 22:00:00,0.0035 +2015-09-27 23:00:00,0.0018 +2015-09-28 00:00:00,0.0011 +2015-09-28 01:00:00,0.0009 +2015-09-28 02:00:00,0.0011 +2015-09-28 03:00:00,0.0102 +2015-09-28 04:00:00,0.0414 +2015-09-28 05:00:00,0.0972 +2015-09-28 06:00:00,0.2888 +2015-09-28 07:00:00,0.3022 +2015-09-28 08:00:00,0.1701 +2015-09-28 09:00:00,0.0547 +2015-09-28 10:00:00,0.0554 +2015-09-28 11:00:00,0.0542 +2015-09-28 12:00:00,0.0534 +2015-09-28 13:00:00,0.0555 +2015-09-28 14:00:00,0.0564 +2015-09-28 15:00:00,0.0563 +2015-09-28 16:00:00,0.0578 +2015-09-28 17:00:00,0.0476 +2015-09-28 18:00:00,0.0347 +2015-09-28 19:00:00,0.026 +2015-09-28 20:00:00,0.019 +2015-09-28 21:00:00,0.0051 +2015-09-28 22:00:00,0.0041 +2015-09-28 23:00:00,0.0037 +2015-09-29 00:00:00,0.0037 +2015-09-29 01:00:00,0.0038 +2015-09-29 02:00:00,0.004 +2015-09-29 03:00:00,0.0163 +2015-09-29 04:00:00,0.0542 +2015-09-29 05:00:00,0.162 +2015-09-29 06:00:00,0.3731 +2015-09-29 07:00:00,0.2253 +2015-09-29 08:00:00,0.0581 +2015-09-29 09:00:00,0.0608 +2015-09-29 10:00:00,0.061 +2015-09-29 11:00:00,0.0574 +2015-09-29 12:00:00,0.0579 +2015-09-29 13:00:00,0.0559 +2015-09-29 14:00:00,0.0606 +2015-09-29 15:00:00,0.0592 +2015-09-29 16:00:00,0.059 +2015-09-29 17:00:00,0.0488 +2015-09-29 18:00:00,0.0354 +2015-09-29 19:00:00,0.0262 +2015-09-29 20:00:00,0.0189 +2015-09-29 21:00:00,0.0057 +2015-09-29 22:00:00,0.0038 +2015-09-29 23:00:00,0.0038 +2015-09-30 00:00:00,0.0037 +2015-09-30 01:00:00,0.0037 +2015-09-30 02:00:00,0.0037 +2015-09-30 03:00:00,0.0156 +2015-09-30 04:00:00,0.0538 +2015-09-30 05:00:00,0.1577 +2015-09-30 06:00:00,0.3697 +2015-09-30 07:00:00,0.2735 +2015-09-30 08:00:00,0.0629 +2015-09-30 09:00:00,0.0606 +2015-09-30 10:00:00,0.0611 +2015-09-30 11:00:00,0.0602 +2015-09-30 12:00:00,0.0561 +2015-09-30 13:00:00,0.0618 +2015-09-30 14:00:00,0.0576 +2015-09-30 15:00:00,0.0645 +2015-09-30 16:00:00,0.06 +2015-09-30 17:00:00,0.0509 +2015-09-30 18:00:00,0.0362 +2015-09-30 19:00:00,0.026 +2015-09-30 20:00:00,0.0215 +2015-09-30 21:00:00,0.006 +2015-09-30 22:00:00,0.0037 +2015-09-30 23:00:00,0.0038 +2015-10-01 00:00:00,0.0037 +2015-10-01 01:00:00,0.0035 +2015-10-01 02:00:00,0.0036 +2015-10-01 03:00:00,0.0151 +2015-10-01 04:00:00,0.0486 +2015-10-01 05:00:00,0.1259 +2015-10-01 06:00:00,0.3584 +2015-10-01 07:00:00,0.1728 +2015-10-01 08:00:00,0.0634 +2015-10-01 09:00:00,0.0706 +2015-10-01 10:00:00,0.0655 +2015-10-01 11:00:00,0.0595 +2015-10-01 12:00:00,0.0558 +2015-10-01 13:00:00,0.0608 +2015-10-01 14:00:00,0.0623 +2015-10-01 15:00:00,0.0552 +2015-10-01 16:00:00,0.0601 +2015-10-01 17:00:00,0.0502 +2015-10-01 18:00:00,0.0395 +2015-10-01 19:00:00,0.0294 +2015-10-01 20:00:00,0.0206 +2015-10-01 21:00:00,0.0087 +2015-10-01 22:00:00,0.0038 +2015-10-01 23:00:00,0.0037 +2015-10-02 00:00:00,0.0037 +2015-10-02 01:00:00,0.0038 +2015-10-02 02:00:00,0.0037 +2015-10-02 03:00:00,0.0135 +2015-10-02 04:00:00,0.0512 +2015-10-02 05:00:00,0.0815 +2015-10-02 06:00:00,0.0699 +2015-10-02 07:00:00,0.0459 +2015-10-02 08:00:00,0.0622 +2015-10-02 09:00:00,0.0632 +2015-10-02 10:00:00,0.0612 +2015-10-02 11:00:00,0.059 +2015-10-02 12:00:00,0.0637 +2015-10-02 13:00:00,0.0663 +2015-10-02 14:00:00,0.0625 +2015-10-02 15:00:00,0.064 +2015-10-02 16:00:00,0.0589 +2015-10-02 17:00:00,0.05 +2015-10-02 18:00:00,0.043 +2015-10-02 19:00:00,0.0335 +2015-10-02 20:00:00,0.0248 +2015-10-02 21:00:00,0.0204 +2015-10-02 22:00:00,0.0041 +2015-10-02 23:00:00,0.0039 +2015-10-03 00:00:00,0.004 +2015-10-03 01:00:00,0.0039 +2015-10-03 02:00:00,0.0039 +2015-10-03 03:00:00,0.0038 +2015-10-03 04:00:00,0.0079 +2015-10-03 05:00:00,0.0288 +2015-10-03 06:00:00,0.0342 +2015-10-03 07:00:00,0.0492 +2015-10-03 08:00:00,0.0576 +2015-10-03 09:00:00,0.0671 +2015-10-03 10:00:00,0.0697 +2015-10-03 11:00:00,0.0633 +2015-10-03 12:00:00,0.062 +2015-10-03 13:00:00,0.0644 +2015-10-03 14:00:00,0.066 +2015-10-03 15:00:00,0.0668 +2015-10-03 16:00:00,0.0639 +2015-10-03 17:00:00,0.0565 +2015-10-03 18:00:00,0.042 +2015-10-03 19:00:00,0.0341 +2015-10-03 20:00:00,0.032 +2015-10-03 21:00:00,0.0269 +2015-10-03 22:00:00,0.0117 +2015-10-03 23:00:00,0.0044 +2015-10-04 00:00:00,0.0041 +2015-10-04 01:00:00,0.0039 +2015-10-04 02:00:00,0.0038 +2015-10-04 03:00:00,0.0042 +2015-10-04 04:00:00,0.0055 +2015-10-04 05:00:00,0.0184 +2015-10-04 06:00:00,0.0249 +2015-10-04 07:00:00,0.0405 +2015-10-04 08:00:00,0.0556 +2015-10-04 09:00:00,0.0651 +2015-10-04 10:00:00,0.0652 +2015-10-04 11:00:00,0.0652 +2015-10-04 12:00:00,0.0634 +2015-10-04 13:00:00,0.0627 +2015-10-04 14:00:00,0.0635 +2015-10-04 15:00:00,0.0644 +2015-10-04 16:00:00,0.0611 +2015-10-04 17:00:00,0.049 +2015-10-04 18:00:00,0.0442 +2015-10-04 19:00:00,0.0379 +2015-10-04 20:00:00,0.0268 +2015-10-04 21:00:00,0.0133 +2015-10-04 22:00:00,0.005 +2015-10-04 23:00:00,0.0039 +2015-10-05 00:00:00,0.0037 +2015-10-05 01:00:00,0.0037 +2015-10-05 02:00:00,0.0039 +2015-10-05 03:00:00,0.0152 +2015-10-05 04:00:00,0.0556 +2015-10-05 05:00:00,0.147 +2015-10-05 06:00:00,0.3808 +2015-10-05 07:00:00,0.3628 +2015-10-05 08:00:00,0.1242 +2015-10-05 09:00:00,0.061 +2015-10-05 10:00:00,0.0585 +2015-10-05 11:00:00,0.0568 +2015-10-05 12:00:00,0.0529 +2015-10-05 13:00:00,0.0564 +2015-10-05 14:00:00,0.057 +2015-10-05 15:00:00,0.0544 +2015-10-05 16:00:00,0.0546 +2015-10-05 17:00:00,0.0445 +2015-10-05 18:00:00,0.0339 +2015-10-05 19:00:00,0.0235 +2015-10-05 20:00:00,0.0192 +2015-10-05 21:00:00,0.0055 +2015-10-05 22:00:00,0.0038 +2015-10-05 23:00:00,0.0037 +2015-10-06 00:00:00,0.0037 +2015-10-06 01:00:00,0.0037 +2015-10-06 02:00:00,0.0039 +2015-10-06 03:00:00,0.014 +2015-10-06 04:00:00,0.0528 +2015-10-06 05:00:00,0.1591 +2015-10-06 06:00:00,0.3873 +2015-10-06 07:00:00,0.4431 +2015-10-06 08:00:00,0.2658 +2015-10-06 09:00:00,0.0598 +2015-10-06 10:00:00,0.0568 +2015-10-06 11:00:00,0.0561 +2015-10-06 12:00:00,0.0598 +2015-10-06 13:00:00,0.0568 +2015-10-06 14:00:00,0.057 +2015-10-06 15:00:00,0.0558 +2015-10-06 16:00:00,0.0529 +2015-10-06 17:00:00,0.0474 +2015-10-06 18:00:00,0.036 +2015-10-06 19:00:00,0.0252 +2015-10-06 20:00:00,0.0192 +2015-10-06 21:00:00,0.0054 +2015-10-06 22:00:00,0.0038 +2015-10-06 23:00:00,0.0037 +2015-10-07 00:00:00,0.0038 +2015-10-07 01:00:00,0.0039 +2015-10-07 02:00:00,0.0039 +2015-10-07 03:00:00,0.009 +2015-10-07 04:00:00,0.0527 +2015-10-07 05:00:00,0.1445 +2015-10-07 06:00:00,0.3972 +2015-10-07 07:00:00,0.3563 +2015-10-07 08:00:00,0.0591 +2015-10-07 09:00:00,0.0623 +2015-10-07 10:00:00,0.0599 +2015-10-07 11:00:00,0.0593 +2015-10-07 12:00:00,0.0583 +2015-10-07 13:00:00,0.0607 +2015-10-07 14:00:00,0.0596 +2015-10-07 15:00:00,0.0572 +2015-10-07 16:00:00,0.0559 +2015-10-07 17:00:00,0.0496 +2015-10-07 18:00:00,0.0355 +2015-10-07 19:00:00,0.0271 +2015-10-07 20:00:00,0.0151 +2015-10-07 21:00:00,0.0091 +2015-10-07 22:00:00,0.0042 +2015-10-07 23:00:00,0.0039 +2015-10-08 00:00:00,0.0037 +2015-10-08 01:00:00,0.0037 +2015-10-08 02:00:00,0.004 +2015-10-08 03:00:00,0.0164 +2015-10-08 04:00:00,0.052 +2015-10-08 05:00:00,0.1421 +2015-10-08 06:00:00,0.323 +2015-10-08 07:00:00,0.3482 +2015-10-08 08:00:00,0.0677 +2015-10-08 09:00:00,0.0655 +2015-10-08 10:00:00,0.0603 +2015-10-08 11:00:00,0.06 +2015-10-08 12:00:00,0.0538 +2015-10-08 13:00:00,0.0554 +2015-10-08 14:00:00,0.0584 +2015-10-08 15:00:00,0.0552 +2015-10-08 16:00:00,0.0585 +2015-10-08 17:00:00,0.0463 +2015-10-08 18:00:00,0.0342 +2015-10-08 19:00:00,0.0277 +2015-10-08 20:00:00,0.0204 +2015-10-08 21:00:00,0.0092 +2015-10-08 22:00:00,0.0032 +2015-10-08 23:00:00,0.002 +2015-10-09 00:00:00,0.0013 +2015-10-09 01:00:00,0.0011 +2015-10-09 02:00:00,0.0012 +2015-10-09 03:00:00,0.0075 +2015-10-09 04:00:00,0.0449 +2015-10-09 05:00:00,0.0778 +2015-10-09 06:00:00,0.1687 +2015-10-09 07:00:00,0.0592 +2015-10-09 08:00:00,0.0645 +2015-10-09 09:00:00,0.0653 +2015-10-09 10:00:00,0.0676 +2015-10-09 11:00:00,0.0621 +2015-10-09 12:00:00,0.0605 +2015-10-09 13:00:00,0.0604 +2015-10-09 14:00:00,0.0641 +2015-10-09 15:00:00,0.0625 +2015-10-09 16:00:00,0.0582 +2015-10-09 17:00:00,0.0509 +2015-10-09 18:00:00,0.0398 +2015-10-09 19:00:00,0.0313 +2015-10-09 20:00:00,0.0255 +2015-10-09 21:00:00,0.0171 +2015-10-09 22:00:00,0.006 +2015-10-09 23:00:00,0.0038 +2015-10-10 00:00:00,0.0039 +2015-10-10 01:00:00,0.0037 +2015-10-10 02:00:00,0.0038 +2015-10-10 03:00:00,0.0046 +2015-10-10 04:00:00,0.0143 +2015-10-10 05:00:00,0.0245 +2015-10-10 06:00:00,0.0359 +2015-10-10 07:00:00,0.0504 +2015-10-10 08:00:00,0.06 +2015-10-10 09:00:00,0.0636 +2015-10-10 10:00:00,0.0648 +2015-10-10 11:00:00,0.0632 +2015-10-10 12:00:00,0.0599 +2015-10-10 13:00:00,0.0603 +2015-10-10 14:00:00,0.0571 +2015-10-10 15:00:00,0.0646 +2015-10-10 16:00:00,0.0654 +2015-10-10 17:00:00,0.0541 +2015-10-10 18:00:00,0.0411 +2015-10-10 19:00:00,0.0338 +2015-10-10 20:00:00,0.032 +2015-10-10 21:00:00,0.027 +2015-10-10 22:00:00,0.0163 +2015-10-10 23:00:00,0.0041 +2015-10-11 00:00:00,0.0041 +2015-10-11 01:00:00,0.0042 +2015-10-11 02:00:00,0.0037 +2015-10-11 03:00:00,0.0038 +2015-10-11 04:00:00,0.0044 +2015-10-11 05:00:00,0.0064 +2015-10-11 06:00:00,0.0199 +2015-10-11 07:00:00,0.0363 +2015-10-11 08:00:00,0.0517 +2015-10-11 09:00:00,0.0674 +2015-10-11 10:00:00,0.0701 +2015-10-11 11:00:00,0.0655 +2015-10-11 12:00:00,0.0637 +2015-10-11 13:00:00,0.0672 +2015-10-11 14:00:00,0.0667 +2015-10-11 15:00:00,0.063 +2015-10-11 16:00:00,0.0611 +2015-10-11 17:00:00,0.0523 +2015-10-11 18:00:00,0.0467 +2015-10-11 19:00:00,0.0345 +2015-10-11 20:00:00,0.0276 +2015-10-11 21:00:00,0.008 +2015-10-11 22:00:00,0.0039 +2015-10-11 23:00:00,0.0038 +2015-10-12 00:00:00,0.0037 +2015-10-12 01:00:00,0.0037 +2015-10-12 02:00:00,0.0037 +2015-10-12 03:00:00,0.0171 +2015-10-12 04:00:00,0.0532 +2015-10-12 05:00:00,0.1101 +2015-10-12 06:00:00,0.175 +2015-10-12 07:00:00,0.0528 +2015-10-12 08:00:00,0.0557 +2015-10-12 09:00:00,0.0661 +2015-10-12 10:00:00,0.0597 +2015-10-12 11:00:00,0.06 +2015-10-12 12:00:00,0.0608 +2015-10-12 13:00:00,0.061 +2015-10-12 14:00:00,0.0616 +2015-10-12 15:00:00,0.0572 +2015-10-12 16:00:00,0.056 +2015-10-12 17:00:00,0.0437 +2015-10-12 18:00:00,0.037 +2015-10-12 19:00:00,0.0269 +2015-10-12 20:00:00,0.0183 +2015-10-12 21:00:00,0.0048 +2015-10-12 22:00:00,0.0038 +2015-10-12 23:00:00,0.0037 +2015-10-13 00:00:00,0.0038 +2015-10-13 01:00:00,0.0037 +2015-10-13 02:00:00,0.0039 +2015-10-13 03:00:00,0.015 +2015-10-13 04:00:00,0.0551 +2015-10-13 05:00:00,0.1404 +2015-10-13 06:00:00,0.3868 +2015-10-13 07:00:00,0.4023 +2015-10-13 08:00:00,0.2462 +2015-10-13 09:00:00,0.0604 +2015-10-13 10:00:00,0.0602 +2015-10-13 11:00:00,0.0597 +2015-10-13 12:00:00,0.0552 +2015-10-13 13:00:00,0.0562 +2015-10-13 14:00:00,0.0565 +2015-10-13 15:00:00,0.0622 +2015-10-13 16:00:00,0.0556 +2015-10-13 17:00:00,0.047 +2015-10-13 18:00:00,0.0337 +2015-10-13 19:00:00,0.0252 +2015-10-13 20:00:00,0.0148 +2015-10-13 21:00:00,0.0063 +2015-10-13 22:00:00,0.0039 +2015-10-13 23:00:00,0.0037 +2015-10-14 00:00:00,0.0038 +2015-10-14 01:00:00,0.0038 +2015-10-14 02:00:00,0.004 +2015-10-14 03:00:00,0.0167 +2015-10-14 04:00:00,0.0542 +2015-10-14 05:00:00,0.1505 +2015-10-14 06:00:00,0.3534 +2015-10-14 07:00:00,0.3812 +2015-10-14 08:00:00,0.1188 +2015-10-14 09:00:00,0.0612 +2015-10-14 10:00:00,0.062 +2015-10-14 11:00:00,0.0574 +2015-10-14 12:00:00,0.0463 +2015-10-14 13:00:00,0.0479 +2015-10-14 14:00:00,0.0471 +2015-10-14 15:00:00,0.0451 +2015-10-14 16:00:00,0.0435 +2015-10-14 17:00:00,0.0431 +2015-10-14 18:00:00,0.0354 +2015-10-14 19:00:00,0.0046 +2015-10-14 20:00:00,0.0037 +2015-10-14 21:00:00,0.0037 +2015-10-14 22:00:00,0.0037 +2015-10-14 23:00:00,0.0038 +2015-10-15 00:00:00,0.0037 +2015-10-15 01:00:00,0.0038 +2015-10-15 02:00:00,0.0039 +2015-10-15 03:00:00,0.0058 +2015-10-15 04:00:00,0.0523 +2015-10-15 05:00:00,0.147 +2015-10-15 06:00:00,0.3797 +2015-10-15 07:00:00,0.3661 +2015-10-15 08:00:00,0.1029 +2015-10-15 09:00:00,0.0652 +2015-10-15 10:00:00,0.0613 +2015-10-15 11:00:00,0.0607 +2015-10-15 12:00:00,0.0506 +2015-10-15 13:00:00,0.0596 +2015-10-15 14:00:00,0.0629 +2015-10-15 15:00:00,0.0585 +2015-10-15 16:00:00,0.0573 +2015-10-15 17:00:00,0.0499 +2015-10-15 18:00:00,0.036 +2015-10-15 19:00:00,0.0283 +2015-10-15 20:00:00,0.0217 +2015-10-15 21:00:00,0.0099 +2015-10-15 22:00:00,0.0044 +2015-10-15 23:00:00,0.0037 +2015-10-16 00:00:00,0.0038 +2015-10-16 01:00:00,0.0037 +2015-10-16 02:00:00,0.0039 +2015-10-16 03:00:00,0.0091 +2015-10-16 04:00:00,0.0497 +2015-10-16 05:00:00,0.0737 +2015-10-16 06:00:00,0.0682 +2015-10-16 07:00:00,0.0606 +2015-10-16 08:00:00,0.0612 +2015-10-16 09:00:00,0.0615 +2015-10-16 10:00:00,0.0597 +2015-10-16 11:00:00,0.0646 +2015-10-16 12:00:00,0.063 +2015-10-16 13:00:00,0.0658 +2015-10-16 14:00:00,0.0645 +2015-10-16 15:00:00,0.0576 +2015-10-16 16:00:00,0.0555 +2015-10-16 17:00:00,0.0482 +2015-10-16 18:00:00,0.0388 +2015-10-16 19:00:00,0.0293 +2015-10-16 20:00:00,0.0253 +2015-10-16 21:00:00,0.0209 +2015-10-16 22:00:00,0.0042 +2015-10-16 23:00:00,0.0038 +2015-10-17 00:00:00,0.0039 +2015-10-17 01:00:00,0.0038 +2015-10-17 02:00:00,0.0037 +2015-10-17 03:00:00,0.0041 +2015-10-17 04:00:00,0.0134 +2015-10-17 05:00:00,0.0291 +2015-10-17 06:00:00,0.034 +2015-10-17 07:00:00,0.0478 +2015-10-17 08:00:00,0.0553 +2015-10-17 09:00:00,0.0589 +2015-10-17 10:00:00,0.0646 +2015-10-17 11:00:00,0.0644 +2015-10-17 12:00:00,0.0671 +2015-10-17 13:00:00,0.0653 +2015-10-17 14:00:00,0.0599 +2015-10-17 15:00:00,0.0573 +2015-10-17 16:00:00,0.0552 +2015-10-17 17:00:00,0.0591 +2015-10-17 18:00:00,0.0436 +2015-10-17 19:00:00,0.0332 +2015-10-17 20:00:00,0.0319 +2015-10-17 21:00:00,0.0265 +2015-10-17 22:00:00,0.0159 +2015-10-17 23:00:00,0.0061 +2015-10-18 00:00:00,0.004 +2015-10-18 01:00:00,0.0039 +2015-10-18 02:00:00,0.0038 +2015-10-18 03:00:00,0.004 +2015-10-18 04:00:00,0.0042 +2015-10-18 05:00:00,0.0075 +2015-10-18 06:00:00,0.0215 +2015-10-18 07:00:00,0.0351 +2015-10-18 08:00:00,0.0473 +2015-10-18 09:00:00,0.0574 +2015-10-18 10:00:00,0.0621 +2015-10-18 11:00:00,0.0628 +2015-10-18 12:00:00,0.0632 +2015-10-18 13:00:00,0.065 +2015-10-18 14:00:00,0.0647 +2015-10-18 15:00:00,0.0629 +2015-10-18 16:00:00,0.0602 +2015-10-18 17:00:00,0.0567 +2015-10-18 18:00:00,0.0489 +2015-10-18 19:00:00,0.0366 +2015-10-18 20:00:00,0.0273 +2015-10-18 21:00:00,0.0146 +2015-10-18 22:00:00,0.0039 +2015-10-18 23:00:00,0.0039 +2015-10-19 00:00:00,0.0037 +2015-10-19 01:00:00,0.0037 +2015-10-19 02:00:00,0.0039 +2015-10-19 03:00:00,0.0176 +2015-10-19 04:00:00,0.0545 +2015-10-19 05:00:00,0.1423 +2015-10-19 06:00:00,0.3627 +2015-10-19 07:00:00,0.1998 +2015-10-19 08:00:00,0.0556 +2015-10-19 09:00:00,0.0614 +2015-10-19 10:00:00,0.0583 +2015-10-19 11:00:00,0.054 +2015-10-19 12:00:00,0.061 +2015-10-19 13:00:00,0.056 +2015-10-19 14:00:00,0.0587 +2015-10-19 15:00:00,0.0562 +2015-10-19 16:00:00,0.0533 +2015-10-19 17:00:00,0.0443 +2015-10-19 18:00:00,0.031 +2015-10-19 19:00:00,0.0233 +2015-10-19 20:00:00,0.0128 +2015-10-19 21:00:00,0.0049 +2015-10-19 22:00:00,0.0038 +2015-10-19 23:00:00,0.0037 +2015-10-20 00:00:00,0.0037 +2015-10-20 01:00:00,0.0037 +2015-10-20 02:00:00,0.0039 +2015-10-20 03:00:00,0.0122 +2015-10-20 04:00:00,0.055 +2015-10-20 05:00:00,0.1596 +2015-10-20 06:00:00,0.4024 +2015-10-20 07:00:00,0.3934 +2015-10-20 08:00:00,0.145 +2015-10-20 09:00:00,0.06 +2015-10-20 10:00:00,0.0574 +2015-10-20 11:00:00,0.0583 +2015-10-20 12:00:00,0.0536 +2015-10-20 13:00:00,0.0564 +2015-10-20 14:00:00,0.0565 +2015-10-20 15:00:00,0.0566 +2015-10-20 16:00:00,0.0563 +2015-10-20 17:00:00,0.0468 +2015-10-20 18:00:00,0.0351 +2015-10-20 19:00:00,0.0248 +2015-10-20 20:00:00,0.0177 +2015-10-20 21:00:00,0.0053 +2015-10-20 22:00:00,0.0039 +2015-10-20 23:00:00,0.0037 +2015-10-21 00:00:00,0.0037 +2015-10-21 01:00:00,0.0037 +2015-10-21 02:00:00,0.004 +2015-10-21 03:00:00,0.0162 +2015-10-21 04:00:00,0.0558 +2015-10-21 05:00:00,0.1647 +2015-10-21 06:00:00,0.3773 +2015-10-21 07:00:00,0.4067 +2015-10-21 08:00:00,0.2016 +2015-10-21 09:00:00,0.0593 +2015-10-21 10:00:00,0.0607 +2015-10-21 11:00:00,0.0563 +2015-10-21 12:00:00,0.0583 +2015-10-21 13:00:00,0.0584 +2015-10-21 14:00:00,0.0603 +2015-10-21 15:00:00,0.0586 +2015-10-21 16:00:00,0.0597 +2015-10-21 17:00:00,0.0481 +2015-10-21 18:00:00,0.0364 +2015-10-21 19:00:00,0.0269 +2015-10-21 20:00:00,0.0208 +2015-10-21 21:00:00,0.0049 +2015-10-21 22:00:00,0.0039 +2015-10-21 23:00:00,0.0037 +2015-10-22 00:00:00,0.0037 +2015-10-22 01:00:00,0.0038 +2015-10-22 02:00:00,0.0038 +2015-10-22 03:00:00,0.0129 +2015-10-22 04:00:00,0.0531 +2015-10-22 05:00:00,0.1552 +2015-10-22 06:00:00,0.3741 +2015-10-22 07:00:00,0.3944 +2015-10-22 08:00:00,0.1503 +2015-10-22 09:00:00,0.0658 +2015-10-22 10:00:00,0.0615 +2015-10-22 11:00:00,0.0601 +2015-10-22 12:00:00,0.0613 +2015-10-22 13:00:00,0.0587 +2015-10-22 14:00:00,0.0662 +2015-10-22 15:00:00,0.0604 +2015-10-22 16:00:00,0.0562 +2015-10-22 17:00:00,0.0465 +2015-10-22 18:00:00,0.0362 +2015-10-22 19:00:00,0.0279 +2015-10-22 20:00:00,0.0209 +2015-10-22 21:00:00,0.0083 +2015-10-22 22:00:00,0.0039 +2015-10-22 23:00:00,0.0037 +2015-10-23 00:00:00,0.0038 +2015-10-23 01:00:00,0.0039 +2015-10-23 02:00:00,0.004 +2015-10-23 03:00:00,0.0142 +2015-10-23 04:00:00,0.05 +2015-10-23 05:00:00,0.0772 +2015-10-23 06:00:00,0.079 +2015-10-23 07:00:00,0.0574 +2015-10-23 08:00:00,0.0584 +2015-10-23 09:00:00,0.0609 +2015-10-23 10:00:00,0.0594 +2015-10-23 11:00:00,0.0594 +2015-10-23 12:00:00,0.0643 +2015-10-23 13:00:00,0.0591 +2015-10-23 14:00:00,0.0622 +2015-10-23 15:00:00,0.0628 +2015-10-23 16:00:00,0.0598 +2015-10-23 17:00:00,0.0516 +2015-10-23 18:00:00,0.0411 +2015-10-23 19:00:00,0.0306 +2015-10-23 20:00:00,0.0237 +2015-10-23 21:00:00,0.0082 +2015-10-23 22:00:00,0.0059 +2015-10-23 23:00:00,0.004 +2015-10-24 00:00:00,0.0037 +2015-10-24 01:00:00,0.0037 +2015-10-24 02:00:00,0.0038 +2015-10-24 03:00:00,0.0048 +2015-10-24 04:00:00,0.0125 +2015-10-24 05:00:00,0.0272 +2015-10-24 06:00:00,0.0358 +2015-10-24 07:00:00,0.0482 +2015-10-24 08:00:00,0.0528 +2015-10-24 09:00:00,0.0582 +2015-10-24 10:00:00,0.0613 +2015-10-24 11:00:00,0.064 +2015-10-24 12:00:00,0.0627 +2015-10-24 13:00:00,0.0623 +2015-10-24 14:00:00,0.0665 +2015-10-24 15:00:00,0.0669 +2015-10-24 16:00:00,0.064 +2015-10-24 17:00:00,0.0549 +2015-10-24 18:00:00,0.0423 +2015-10-24 19:00:00,0.0327 +2015-10-24 20:00:00,0.0286 +2015-10-24 21:00:00,0.0233 +2015-10-24 22:00:00,0.0126 +2015-10-24 23:00:00,0.0043 +2015-10-25 00:00:00,0.0037 +2015-10-25 01:00:00,0.0038 +2015-10-25 02:00:00,0.0037 +2015-10-25 03:00:00,0.0038 +2015-10-25 04:00:00,0.0042 +2015-10-25 05:00:00,0.0092 +2015-10-25 06:00:00,0.0232 +2015-10-25 07:00:00,0.0336 +2015-10-25 08:00:00,0.0491 +2015-10-25 09:00:00,0.0574 +2015-10-25 10:00:00,0.0634 +2015-10-25 11:00:00,0.0638 +2015-10-25 12:00:00,0.0638 +2015-10-25 13:00:00,0.0655 +2015-10-25 14:00:00,0.063 +2015-10-25 15:00:00,0.0629 +2015-10-25 16:00:00,0.0585 +2015-10-25 17:00:00,0.0537 +2015-10-25 18:00:00,0.0494 +2015-10-25 19:00:00,0.0367 +2015-10-25 20:00:00,0.0251 +2015-10-25 21:00:00,0.0104 +2015-10-25 22:00:00,0.0034 +2015-10-25 23:00:00,0.0033 +2015-10-26 00:00:00,0.0034 +2015-10-26 01:00:00,0.0038 +2015-10-26 02:00:00,0.0045 +2015-10-26 03:00:00,0.0137 +2015-10-26 04:00:00,0.0567 +2015-10-26 05:00:00,0.1282 +2015-10-26 06:00:00,0.3587 +2015-10-26 07:00:00,0.2538 +2015-10-26 08:00:00,0.059 +2015-10-26 09:00:00,0.0594 +2015-10-26 10:00:00,0.0583 +2015-10-26 11:00:00,0.0588 +2015-10-26 12:00:00,0.0578 +2015-10-26 13:00:00,0.0557 +2015-10-26 14:00:00,0.0592 +2015-10-26 15:00:00,0.0546 +2015-10-26 16:00:00,0.055 +2015-10-26 17:00:00,0.0487 +2015-10-26 18:00:00,0.0333 +2015-10-26 19:00:00,0.0251 +2015-10-26 20:00:00,0.0139 +2015-10-26 21:00:00,0.0037 +2015-10-26 22:00:00,0.0037 +2015-10-26 23:00:00,0.0037 +2015-10-27 00:00:00,0.0037 +2015-10-27 01:00:00,0.0037 +2015-10-27 02:00:00,0.0037 +2015-10-27 03:00:00,0.0182 +2015-10-27 04:00:00,0.0553 +2015-10-27 05:00:00,0.1547 +2015-10-27 06:00:00,0.3964 +2015-10-27 07:00:00,0.3722 +2015-10-27 08:00:00,0.0588 +2015-10-27 09:00:00,0.0591 +2015-10-27 10:00:00,0.0595 +2015-10-27 11:00:00,0.0563 +2015-10-27 12:00:00,0.0537 +2015-10-27 13:00:00,0.0567 +2015-10-27 14:00:00,0.0575 +2015-10-27 15:00:00,0.0576 +2015-10-27 16:00:00,0.057 +2015-10-27 17:00:00,0.0456 +2015-10-27 18:00:00,0.0344 +2015-10-27 19:00:00,0.0253 +2015-10-27 20:00:00,0.0147 +2015-10-27 21:00:00,0.0061 +2015-10-27 22:00:00,0.0037 +2015-10-27 23:00:00,0.0037 +2015-10-28 00:00:00,0.0037 +2015-10-28 01:00:00,0.0037 +2015-10-28 02:00:00,0.0037 +2015-10-28 03:00:00,0.0146 +2015-10-28 04:00:00,0.0551 +2015-10-28 05:00:00,0.14 +2015-10-28 06:00:00,0.3895 +2015-10-28 07:00:00,0.2011 +2015-10-28 08:00:00,0.0639 +2015-10-28 09:00:00,0.0614 +2015-10-28 10:00:00,0.0586 +2015-10-28 11:00:00,0.0571 +2015-10-28 12:00:00,0.0549 +2015-10-28 13:00:00,0.057 +2015-10-28 14:00:00,0.0538 +2015-10-28 15:00:00,0.0572 +2015-10-28 16:00:00,0.0552 +2015-10-28 17:00:00,0.0477 +2015-10-28 18:00:00,0.0348 +2015-10-28 19:00:00,0.0247 +2015-10-28 20:00:00,0.0175 +2015-10-28 21:00:00,0.0048 +2015-10-28 22:00:00,0.0037 +2015-10-28 23:00:00,0.0037 +2015-10-29 00:00:00,0.0037 +2015-10-29 01:00:00,0.0037 +2015-10-29 02:00:00,0.0037 +2015-10-29 03:00:00,0.0088 +2015-10-29 04:00:00,0.0535 +2015-10-29 05:00:00,0.1538 +2015-10-29 06:00:00,0.3843 +2015-10-29 07:00:00,0.3327 +2015-10-29 08:00:00,0.2796 +2015-10-29 09:00:00,0.3025 +2015-10-29 10:00:00,0.0613 +2015-10-29 11:00:00,0.0621 +2015-10-29 12:00:00,0.0605 +2015-10-29 13:00:00,0.0598 +2015-10-29 14:00:00,0.0649 +2015-10-29 15:00:00,0.0598 +2015-10-29 16:00:00,0.0595 +2015-10-29 17:00:00,0.0504 +2015-10-29 18:00:00,0.0404 +2015-10-29 19:00:00,0.0266 +2015-10-29 20:00:00,0.0221 +2015-10-29 21:00:00,0.0069 +2015-10-29 22:00:00,0.0037 +2015-10-29 23:00:00,0.0037 +2015-10-30 00:00:00,0.0037 +2015-10-30 01:00:00,0.0037 +2015-10-30 02:00:00,0.0037 +2015-10-30 03:00:00,0.0118 +2015-10-30 04:00:00,0.0534 +2015-10-30 05:00:00,0.0805 +2015-10-30 06:00:00,0.0665 +2015-10-30 07:00:00,0.0577 +2015-10-30 08:00:00,0.0611 +2015-10-30 09:00:00,0.0623 +2015-10-30 10:00:00,0.0611 +2015-10-30 11:00:00,0.0586 +2015-10-30 12:00:00,0.0636 +2015-10-30 13:00:00,0.0623 +2015-10-30 14:00:00,0.0608 +2015-10-30 15:00:00,0.0651 +2015-10-30 16:00:00,0.0556 +2015-10-30 17:00:00,0.0512 +2015-10-30 18:00:00,0.0428 +2015-10-30 19:00:00,0.0306 +2015-10-30 20:00:00,0.0246 +2015-10-30 21:00:00,0.0204 +2015-10-30 22:00:00,0.0049 +2015-10-30 23:00:00,0.0038 +2015-10-31 00:00:00,0.0038 +2015-10-31 01:00:00,0.0039 +2015-10-31 02:00:00,0.0037 +2015-10-31 03:00:00,0.0038 +2015-10-31 04:00:00,0.0081 +2015-10-31 05:00:00,0.024 +2015-10-31 06:00:00,0.0312 +2015-10-31 07:00:00,0.0421 +2015-10-31 08:00:00,0.0484 +2015-10-31 09:00:00,0.0539 +2015-10-31 10:00:00,0.0564 +2015-10-31 11:00:00,0.0571 +2015-10-31 12:00:00,0.0569 +2015-10-31 13:00:00,0.0585 +2015-10-31 14:00:00,0.0584 +2015-10-31 15:00:00,0.06 +2015-10-31 16:00:00,0.0531 +2015-10-31 17:00:00,0.0432 +2015-10-31 18:00:00,0.0326 +2015-10-31 19:00:00,0.0289 +2015-10-31 20:00:00,0.0289 +2015-10-31 21:00:00,0.0239 +2015-10-31 22:00:00,0.0108 +2015-10-31 23:00:00,0.0047 +2015-11-01 00:00:00,0.0037 +2015-11-01 01:00:00,0.0 +2015-11-01 02:00:00,0.0038 +2015-11-01 03:00:00,0.0038 +2015-11-01 04:00:00,0.0039 +2015-11-01 05:00:00,0.004 +2015-11-01 06:00:00,0.0154 +2015-11-01 07:00:00,0.0224 +2015-11-01 08:00:00,0.0353 +2015-11-01 09:00:00,0.0486 +2015-11-01 10:00:00,0.062 +2015-11-01 11:00:00,0.061 +2015-11-01 12:00:00,0.0572 +2015-11-01 13:00:00,0.0609 +2015-11-01 14:00:00,0.0615 +2015-11-01 15:00:00,0.0603 +2015-11-01 16:00:00,0.0571 +2015-11-01 17:00:00,0.0526 +2015-11-01 18:00:00,0.0492 +2015-11-01 19:00:00,0.0366 +2015-11-01 20:00:00,0.0276 +2015-11-01 21:00:00,0.0227 +2015-11-01 22:00:00,0.0083 +2015-11-01 23:00:00,0.0043 +2015-11-02 00:00:00,0.0038 +2015-11-02 01:00:00,0.0037 +2015-11-02 02:00:00,0.0037 +2015-11-02 03:00:00,0.0043 +2015-11-02 04:00:00,0.0171 +2015-11-02 05:00:00,0.0526 +2015-11-02 06:00:00,0.2437 +2015-11-02 07:00:00,0.4497 +2015-11-02 08:00:00,0.4369 +2015-11-02 09:00:00,0.3376 +2015-11-02 10:00:00,0.1618 +2015-11-02 11:00:00,0.0545 +2015-11-02 12:00:00,0.0549 +2015-11-02 13:00:00,0.0568 +2015-11-02 14:00:00,0.0547 +2015-11-02 15:00:00,0.0598 +2015-11-02 16:00:00,0.0602 +2015-11-02 17:00:00,0.0596 +2015-11-02 18:00:00,0.0437 +2015-11-02 19:00:00,0.0292 +2015-11-02 20:00:00,0.0235 +2015-11-02 21:00:00,0.0123 +2015-11-02 22:00:00,0.0039 +2015-11-02 23:00:00,0.0037 +2015-11-03 00:00:00,0.0037 +2015-11-03 01:00:00,0.0037 +2015-11-03 02:00:00,0.0037 +2015-11-03 03:00:00,0.004 +2015-11-03 04:00:00,0.0108 +2015-11-03 05:00:00,0.0564 +2015-11-03 06:00:00,0.1905 +2015-11-03 07:00:00,0.3863 +2015-11-03 08:00:00,0.4049 +2015-11-03 09:00:00,0.1356 +2015-11-03 10:00:00,0.0439 +2015-11-03 11:00:00,0.056 +2015-11-03 12:00:00,0.0543 +2015-11-03 13:00:00,0.0585 +2015-11-03 14:00:00,0.0582 +2015-11-03 15:00:00,0.0583 +2015-11-03 16:00:00,0.0546 +2015-11-03 17:00:00,0.055 +2015-11-03 18:00:00,0.0486 +2015-11-03 19:00:00,0.0305 +2015-11-03 20:00:00,0.0265 +2015-11-03 21:00:00,0.0159 +2015-11-03 22:00:00,0.0039 +2015-11-03 23:00:00,0.0039 +2015-11-04 00:00:00,0.0037 +2015-11-04 01:00:00,0.0037 +2015-11-04 02:00:00,0.0037 +2015-11-04 03:00:00,0.004 +2015-11-04 04:00:00,0.0144 +2015-11-04 05:00:00,0.0527 +2015-11-04 06:00:00,0.1677 +2015-11-04 07:00:00,0.3813 +2015-11-04 08:00:00,0.4254 +2015-11-04 09:00:00,0.1676 +2015-11-04 10:00:00,0.0614 +2015-11-04 11:00:00,0.057 +2015-11-04 12:00:00,0.0601 +2015-11-04 13:00:00,0.0581 +2015-11-04 14:00:00,0.0577 +2015-11-04 15:00:00,0.0617 +2015-11-04 16:00:00,0.0579 +2015-11-04 17:00:00,0.06 +2015-11-04 18:00:00,0.0451 +2015-11-04 19:00:00,0.0315 +2015-11-04 20:00:00,0.0241 +2015-11-04 21:00:00,0.0167 +2015-11-04 22:00:00,0.0044 +2015-11-04 23:00:00,0.0037 +2015-11-05 00:00:00,0.0037 +2015-11-05 01:00:00,0.0037 +2015-11-05 02:00:00,0.0037 +2015-11-05 03:00:00,0.0037 +2015-11-05 04:00:00,0.0133 +2015-11-05 05:00:00,0.0541 +2015-11-05 06:00:00,0.1645 +2015-11-05 07:00:00,0.3527 +2015-11-05 08:00:00,0.3394 +2015-11-05 09:00:00,0.0567 +2015-11-05 10:00:00,0.0575 +2015-11-05 11:00:00,0.0555 +2015-11-05 12:00:00,0.0554 +2015-11-05 13:00:00,0.0651 +2015-11-05 14:00:00,0.0596 +2015-11-05 15:00:00,0.061 +2015-11-05 16:00:00,0.0609 +2015-11-05 17:00:00,0.0582 +2015-11-05 18:00:00,0.0461 +2015-11-05 19:00:00,0.0327 +2015-11-05 20:00:00,0.0256 +2015-11-05 21:00:00,0.0203 +2015-11-05 22:00:00,0.0073 +2015-11-05 23:00:00,0.0037 +2015-11-06 00:00:00,0.0037 +2015-11-06 01:00:00,0.0037 +2015-11-06 02:00:00,0.0037 +2015-11-06 03:00:00,0.0039 +2015-11-06 04:00:00,0.0126 +2015-11-06 05:00:00,0.0519 +2015-11-06 06:00:00,0.0785 +2015-11-06 07:00:00,0.1528 +2015-11-06 08:00:00,0.0586 +2015-11-06 09:00:00,0.0625 +2015-11-06 10:00:00,0.0622 +2015-11-06 11:00:00,0.0665 +2015-11-06 12:00:00,0.0605 +2015-11-06 13:00:00,0.0608 +2015-11-06 14:00:00,0.0641 +2015-11-06 15:00:00,0.0627 +2015-11-06 16:00:00,0.0603 +2015-11-06 17:00:00,0.0606 +2015-11-06 18:00:00,0.0525 +2015-11-06 19:00:00,0.0367 +2015-11-06 20:00:00,0.0286 +2015-11-06 21:00:00,0.0177 +2015-11-06 22:00:00,0.0123 +2015-11-06 23:00:00,0.0037 +2015-11-07 00:00:00,0.0037 +2015-11-07 01:00:00,0.0037 +2015-11-07 02:00:00,0.0037 +2015-11-07 03:00:00,0.0038 +2015-11-07 04:00:00,0.005 +2015-11-07 05:00:00,0.012 +2015-11-07 06:00:00,0.023 +2015-11-07 07:00:00,0.0371 +2015-11-07 08:00:00,0.0481 +2015-11-07 09:00:00,0.0559 +2015-11-07 10:00:00,0.063 +2015-11-07 11:00:00,0.0662 +2015-11-07 12:00:00,0.0632 +2015-11-07 13:00:00,0.0641 +2015-11-07 14:00:00,0.0606 +2015-11-07 15:00:00,0.0638 +2015-11-07 16:00:00,0.0642 +2015-11-07 17:00:00,0.0627 +2015-11-07 18:00:00,0.0614 +2015-11-07 19:00:00,0.0375 +2015-11-07 20:00:00,0.0315 +2015-11-07 21:00:00,0.0314 +2015-11-07 22:00:00,0.0248 +2015-11-07 23:00:00,0.0117 +2015-11-08 00:00:00,0.0039 +2015-11-08 01:00:00,0.0039 +2015-11-08 02:00:00,0.0037 +2015-11-08 03:00:00,0.0039 +2015-11-08 04:00:00,0.0039 +2015-11-08 05:00:00,0.0056 +2015-11-08 06:00:00,0.0106 +2015-11-08 07:00:00,0.0224 +2015-11-08 08:00:00,0.0339 +2015-11-08 09:00:00,0.0466 +2015-11-08 10:00:00,0.0552 +2015-11-08 11:00:00,0.061 +2015-11-08 12:00:00,0.0655 +2015-11-08 13:00:00,0.0628 +2015-11-08 14:00:00,0.0635 +2015-11-08 15:00:00,0.064 +2015-11-08 16:00:00,0.0627 +2015-11-08 17:00:00,0.0597 +2015-11-08 18:00:00,0.0526 +2015-11-08 19:00:00,0.0377 +2015-11-08 20:00:00,0.0302 +2015-11-08 21:00:00,0.0239 +2015-11-08 22:00:00,0.0048 +2015-11-08 23:00:00,0.0043 +2015-11-09 00:00:00,0.0037 +2015-11-09 01:00:00,0.0038 +2015-11-09 02:00:00,0.0037 +2015-11-09 03:00:00,0.0038 +2015-11-09 04:00:00,0.02 +2015-11-09 05:00:00,0.0521 +2015-11-09 06:00:00,0.159 +2015-11-09 07:00:00,0.3584 +2015-11-09 08:00:00,0.3711 +2015-11-09 09:00:00,0.146 +2015-11-09 10:00:00,0.0541 +2015-11-09 11:00:00,0.0518 +2015-11-09 12:00:00,0.0511 +2015-11-09 13:00:00,0.0492 +2015-11-09 14:00:00,0.0551 +2015-11-09 15:00:00,0.0553 +2015-11-09 16:00:00,0.0525 +2015-11-09 17:00:00,0.055 +2015-11-09 18:00:00,0.0436 +2015-11-09 19:00:00,0.0306 +2015-11-09 20:00:00,0.0236 +2015-11-09 21:00:00,0.008 +2015-11-09 22:00:00,0.0038 +2015-11-09 23:00:00,0.0037 +2015-11-10 00:00:00,0.0037 +2015-11-10 01:00:00,0.0037 +2015-11-10 02:00:00,0.0037 +2015-11-10 03:00:00,0.0039 +2015-11-10 04:00:00,0.0156 +2015-11-10 05:00:00,0.0539 +2015-11-10 06:00:00,0.1819 +2015-11-10 07:00:00,0.3733 +2015-11-10 08:00:00,0.4205 +2015-11-10 09:00:00,0.1877 +2015-11-10 10:00:00,0.0606 +2015-11-10 11:00:00,0.0585 +2015-11-10 12:00:00,0.0567 +2015-11-10 13:00:00,0.0578 +2015-11-10 14:00:00,0.0507 +2015-11-10 15:00:00,0.0516 +2015-11-10 16:00:00,0.05 +2015-11-10 17:00:00,0.0518 +2015-11-10 18:00:00,0.0411 +2015-11-10 19:00:00,0.0292 +2015-11-10 20:00:00,0.0219 +2015-11-10 21:00:00,0.0163 +2015-11-10 22:00:00,0.0039 +2015-11-10 23:00:00,0.0037 +2015-11-11 00:00:00,0.0037 +2015-11-11 01:00:00,0.0037 +2015-11-11 02:00:00,0.0037 +2015-11-11 03:00:00,0.0037 +2015-11-11 04:00:00,0.0146 +2015-11-11 05:00:00,0.0474 +2015-11-11 06:00:00,0.0766 +2015-11-11 07:00:00,0.0513 +2015-11-11 08:00:00,0.0546 +2015-11-11 09:00:00,0.061 +2015-11-11 10:00:00,0.0645 +2015-11-11 11:00:00,0.0624 +2015-11-11 12:00:00,0.0617 +2015-11-11 13:00:00,0.0609 +2015-11-11 14:00:00,0.0632 +2015-11-11 15:00:00,0.0655 +2015-11-11 16:00:00,0.0632 +2015-11-11 17:00:00,0.0643 +2015-11-11 18:00:00,0.0495 +2015-11-11 19:00:00,0.0342 +2015-11-11 20:00:00,0.0275 +2015-11-11 21:00:00,0.0215 +2015-11-11 22:00:00,0.0067 +2015-11-11 23:00:00,0.004 +2015-11-12 00:00:00,0.0037 +2015-11-12 01:00:00,0.0037 +2015-11-12 02:00:00,0.0037 +2015-11-12 03:00:00,0.004 +2015-11-12 04:00:00,0.0159 +2015-11-12 05:00:00,0.0552 +2015-11-12 06:00:00,0.1406 +2015-11-12 07:00:00,0.3719 +2015-11-12 08:00:00,0.3843 +2015-11-12 09:00:00,0.1868 +2015-11-12 10:00:00,0.0639 +2015-11-12 11:00:00,0.0582 +2015-11-12 12:00:00,0.061 +2015-11-12 13:00:00,0.0559 +2015-11-12 14:00:00,0.061 +2015-11-12 15:00:00,0.0624 +2015-11-12 16:00:00,0.0595 +2015-11-12 17:00:00,0.0578 +2015-11-12 18:00:00,0.0492 +2015-11-12 19:00:00,0.0345 +2015-11-12 20:00:00,0.027 +2015-11-12 21:00:00,0.0189 +2015-11-12 22:00:00,0.0073 +2015-11-12 23:00:00,0.0039 +2015-11-13 00:00:00,0.0037 +2015-11-13 01:00:00,0.0038 +2015-11-13 02:00:00,0.0037 +2015-11-13 03:00:00,0.004 +2015-11-13 04:00:00,0.0137 +2015-11-13 05:00:00,0.0536 +2015-11-13 06:00:00,0.0813 +2015-11-13 07:00:00,0.0793 +2015-11-13 08:00:00,0.0565 +2015-11-13 09:00:00,0.0582 +2015-11-13 10:00:00,0.0591 +2015-11-13 11:00:00,0.0606 +2015-11-13 12:00:00,0.0608 +2015-11-13 13:00:00,0.0645 +2015-11-13 14:00:00,0.0649 +2015-11-13 15:00:00,0.0625 +2015-11-13 16:00:00,0.0583 +2015-11-13 17:00:00,0.0541 +2015-11-13 18:00:00,0.0425 +2015-11-13 19:00:00,0.0365 +2015-11-13 20:00:00,0.0266 +2015-11-13 21:00:00,0.0237 +2015-11-13 22:00:00,0.0186 +2015-11-13 23:00:00,0.0042 +2015-11-14 00:00:00,0.0037 +2015-11-14 01:00:00,0.0039 +2015-11-14 02:00:00,0.0038 +2015-11-14 03:00:00,0.0039 +2015-11-14 04:00:00,0.004 +2015-11-14 05:00:00,0.0058 +2015-11-14 06:00:00,0.026 +2015-11-14 07:00:00,0.0348 +2015-11-14 08:00:00,0.0476 +2015-11-14 09:00:00,0.0582 +2015-11-14 10:00:00,0.0623 +2015-11-14 11:00:00,0.0672 +2015-11-14 12:00:00,0.0616 +2015-11-14 13:00:00,0.0657 +2015-11-14 14:00:00,0.0658 +2015-11-14 15:00:00,0.0695 +2015-11-14 16:00:00,0.0697 +2015-11-14 17:00:00,0.0655 +2015-11-14 18:00:00,0.0529 +2015-11-14 19:00:00,0.0365 +2015-11-14 20:00:00,0.0298 +2015-11-14 21:00:00,0.0284 +2015-11-14 22:00:00,0.026 +2015-11-14 23:00:00,0.0098 +2015-11-15 00:00:00,0.0039 +2015-11-15 01:00:00,0.0039 +2015-11-15 02:00:00,0.0037 +2015-11-15 03:00:00,0.004 +2015-11-15 04:00:00,0.0038 +2015-11-15 05:00:00,0.0043 +2015-11-15 06:00:00,0.0062 +2015-11-15 07:00:00,0.0116 +2015-11-15 08:00:00,0.0314 +2015-11-15 09:00:00,0.0453 +2015-11-15 10:00:00,0.0518 +2015-11-15 11:00:00,0.0624 +2015-11-15 12:00:00,0.0606 +2015-11-15 13:00:00,0.0592 +2015-11-15 14:00:00,0.0643 +2015-11-15 15:00:00,0.0648 +2015-11-15 16:00:00,0.0614 +2015-11-15 17:00:00,0.0599 +2015-11-15 18:00:00,0.0501 +2015-11-15 19:00:00,0.0372 +2015-11-15 20:00:00,0.0326 +2015-11-15 21:00:00,0.0198 +2015-11-15 22:00:00,0.0057 +2015-11-15 23:00:00,0.004 +2015-11-16 00:00:00,0.0037 +2015-11-16 01:00:00,0.0037 +2015-11-16 02:00:00,0.0037 +2015-11-16 03:00:00,0.0041 +2015-11-16 04:00:00,0.0151 +2015-11-16 05:00:00,0.0561 +2015-11-16 06:00:00,0.1119 +2015-11-16 07:00:00,0.3217 +2015-11-16 08:00:00,0.3742 +2015-11-16 09:00:00,0.0639 +2015-11-16 10:00:00,0.0577 +2015-11-16 11:00:00,0.0535 +2015-11-16 12:00:00,0.0542 +2015-11-16 13:00:00,0.0558 +2015-11-16 14:00:00,0.0579 +2015-11-16 15:00:00,0.0561 +2015-11-16 16:00:00,0.0537 +2015-11-16 17:00:00,0.0566 +2015-11-16 18:00:00,0.0433 +2015-11-16 19:00:00,0.0302 +2015-11-16 20:00:00,0.0218 +2015-11-16 21:00:00,0.0124 +2015-11-16 22:00:00,0.0043 +2015-11-16 23:00:00,0.0037 +2015-11-17 00:00:00,0.0037 +2015-11-17 01:00:00,0.0037 +2015-11-17 02:00:00,0.0038 +2015-11-17 03:00:00,0.0042 +2015-11-17 04:00:00,0.0172 +2015-11-17 05:00:00,0.0552 +2015-11-17 06:00:00,0.1748 +2015-11-17 07:00:00,0.3656 +2015-11-17 08:00:00,0.3772 +2015-11-17 09:00:00,0.1 +2015-11-17 10:00:00,0.0612 +2015-11-17 11:00:00,0.0578 +2015-11-17 12:00:00,0.0572 +2015-11-17 13:00:00,0.0557 +2015-11-17 14:00:00,0.0582 +2015-11-17 15:00:00,0.0544 +2015-11-17 16:00:00,0.0563 +2015-11-17 17:00:00,0.0585 +2015-11-17 18:00:00,0.0455 +2015-11-17 19:00:00,0.0313 +2015-11-17 20:00:00,0.0237 +2015-11-17 21:00:00,0.0136 +2015-11-17 22:00:00,0.0049 +2015-11-17 23:00:00,0.0039 +2015-11-18 00:00:00,0.0037 +2015-11-18 01:00:00,0.0037 +2015-11-18 02:00:00,0.0038 +2015-11-18 03:00:00,0.0037 +2015-11-18 04:00:00,0.0175 +2015-11-18 05:00:00,0.0539 +2015-11-18 06:00:00,0.1526 +2015-11-18 07:00:00,0.368 +2015-11-18 08:00:00,0.235 +2015-11-18 09:00:00,0.1379 +2015-11-18 10:00:00,0.0622 +2015-11-18 11:00:00,0.0593 +2015-11-18 12:00:00,0.0624 +2015-11-18 13:00:00,0.0593 +2015-11-18 14:00:00,0.0587 +2015-11-18 15:00:00,0.0588 +2015-11-18 16:00:00,0.0581 +2015-11-18 17:00:00,0.0615 +2015-11-18 18:00:00,0.0478 +2015-11-18 19:00:00,0.0359 +2015-11-18 20:00:00,0.0273 +2015-11-18 21:00:00,0.0212 +2015-11-18 22:00:00,0.0048 +2015-11-18 23:00:00,0.0038 +2015-11-19 00:00:00,0.0038 +2015-11-19 01:00:00,0.0037 +2015-11-19 02:00:00,0.0037 +2015-11-19 03:00:00,0.0039 +2015-11-19 04:00:00,0.0166 +2015-11-19 05:00:00,0.0558 +2015-11-19 06:00:00,0.14 +2015-11-19 07:00:00,0.3847 +2015-11-19 08:00:00,0.3855 +2015-11-19 09:00:00,0.1824 +2015-11-19 10:00:00,0.0675 +2015-11-19 11:00:00,0.0584 +2015-11-19 12:00:00,0.0614 +2015-11-19 13:00:00,0.0596 +2015-11-19 14:00:00,0.0628 +2015-11-19 15:00:00,0.0621 +2015-11-19 16:00:00,0.0641 +2015-11-19 17:00:00,0.0618 +2015-11-19 18:00:00,0.0486 +2015-11-19 19:00:00,0.0343 +2015-11-19 20:00:00,0.0262 +2015-11-19 21:00:00,0.0183 +2015-11-19 22:00:00,0.0051 +2015-11-19 23:00:00,0.0038 +2015-11-20 00:00:00,0.0038 +2015-11-20 01:00:00,0.0037 +2015-11-20 02:00:00,0.0037 +2015-11-20 03:00:00,0.0037 +2015-11-20 04:00:00,0.0141 +2015-11-20 05:00:00,0.0535 +2015-11-20 06:00:00,0.0827 +2015-11-20 07:00:00,0.0755 +2015-11-20 08:00:00,0.0607 +2015-11-20 09:00:00,0.0613 +2015-11-20 10:00:00,0.0613 +2015-11-20 11:00:00,0.0603 +2015-11-20 12:00:00,0.0609 +2015-11-20 13:00:00,0.0644 +2015-11-20 14:00:00,0.0645 +2015-11-20 15:00:00,0.0634 +2015-11-20 16:00:00,0.0626 +2015-11-20 17:00:00,0.0603 +2015-11-20 18:00:00,0.0495 +2015-11-20 19:00:00,0.0415 +2015-11-20 20:00:00,0.034 +2015-11-20 21:00:00,0.0235 +2015-11-20 22:00:00,0.0191 +2015-11-20 23:00:00,0.0045 +2015-11-21 00:00:00,0.004 +2015-11-21 01:00:00,0.004 +2015-11-21 02:00:00,0.0037 +2015-11-21 03:00:00,0.0039 +2015-11-21 04:00:00,0.004 +2015-11-21 05:00:00,0.0117 +2015-11-21 06:00:00,0.0276 +2015-11-21 07:00:00,0.0369 +2015-11-21 08:00:00,0.0496 +2015-11-21 09:00:00,0.0589 +2015-11-21 10:00:00,0.0603 +2015-11-21 11:00:00,0.0593 +2015-11-21 12:00:00,0.0572 +2015-11-21 13:00:00,0.0612 +2015-11-21 14:00:00,0.0628 +2015-11-21 15:00:00,0.0648 +2015-11-21 16:00:00,0.0631 +2015-11-21 17:00:00,0.0635 +2015-11-21 18:00:00,0.0538 +2015-11-21 19:00:00,0.0365 +2015-11-21 20:00:00,0.0351 +2015-11-21 21:00:00,0.0284 +2015-11-21 22:00:00,0.0248 +2015-11-21 23:00:00,0.0143 +2015-11-22 00:00:00,0.0049 +2015-11-22 01:00:00,0.004 +2015-11-22 02:00:00,0.0038 +2015-11-22 03:00:00,0.0039 +2015-11-22 04:00:00,0.0043 +2015-11-22 05:00:00,0.0059 +2015-11-22 06:00:00,0.0126 +2015-11-22 07:00:00,0.0141 +2015-11-22 08:00:00,0.0314 +2015-11-22 09:00:00,0.0455 +2015-11-22 10:00:00,0.0552 +2015-11-22 11:00:00,0.0625 +2015-11-22 12:00:00,0.0595 +2015-11-22 13:00:00,0.0652 +2015-11-22 14:00:00,0.0626 +2015-11-22 15:00:00,0.0622 +2015-11-22 16:00:00,0.0601 +2015-11-22 17:00:00,0.0589 +2015-11-22 18:00:00,0.0489 +2015-11-22 19:00:00,0.0361 +2015-11-22 20:00:00,0.0311 +2015-11-22 21:00:00,0.0241 +2015-11-22 22:00:00,0.0121 +2015-11-22 23:00:00,0.004 +2015-11-23 00:00:00,0.0037 +2015-11-23 01:00:00,0.0038 +2015-11-23 02:00:00,0.0038 +2015-11-23 03:00:00,0.0037 +2015-11-23 04:00:00,0.0193 +2015-11-23 05:00:00,0.0556 +2015-11-23 06:00:00,0.1456 +2015-11-23 07:00:00,0.368 +2015-11-23 08:00:00,0.2241 +2015-11-23 09:00:00,0.058 +2015-11-23 10:00:00,0.0643 +2015-11-23 11:00:00,0.0644 +2015-11-23 12:00:00,0.0653 +2015-11-23 13:00:00,0.0618 +2015-11-23 14:00:00,0.0644 +2015-11-23 15:00:00,0.0595 +2015-11-23 16:00:00,0.0583 +2015-11-23 17:00:00,0.0557 +2015-11-23 18:00:00,0.0462 +2015-11-23 19:00:00,0.0347 +2015-11-23 20:00:00,0.0268 +2015-11-23 21:00:00,0.0217 +2015-11-23 22:00:00,0.0058 +2015-11-23 23:00:00,0.0039 +2015-11-24 00:00:00,0.0038 +2015-11-24 01:00:00,0.0038 +2015-11-24 02:00:00,0.0037 +2015-11-24 03:00:00,0.0042 +2015-11-24 04:00:00,0.0174 +2015-11-24 05:00:00,0.0512 +2015-11-24 06:00:00,0.1414 +2015-11-24 07:00:00,0.3147 +2015-11-24 08:00:00,0.0554 +2015-11-24 09:00:00,0.0601 +2015-11-24 10:00:00,0.0693 +2015-11-24 11:00:00,0.0694 +2015-11-24 12:00:00,0.0615 +2015-11-24 13:00:00,0.0631 +2015-11-24 14:00:00,0.062 +2015-11-24 15:00:00,0.0599 +2015-11-24 16:00:00,0.0593 +2015-11-24 17:00:00,0.0578 +2015-11-24 18:00:00,0.0517 +2015-11-24 19:00:00,0.0378 +2015-11-24 20:00:00,0.0298 +2015-11-24 21:00:00,0.0258 +2015-11-24 22:00:00,0.0142 +2015-11-24 23:00:00,0.0039 +2015-11-25 00:00:00,0.0037 +2015-11-25 01:00:00,0.0037 +2015-11-25 02:00:00,0.0037 +2015-11-25 03:00:00,0.0037 +2015-11-25 04:00:00,0.0183 +2015-11-25 05:00:00,0.0487 +2015-11-25 06:00:00,0.0717 +2015-11-25 07:00:00,0.2761 +2015-11-25 08:00:00,0.06 +2015-11-25 09:00:00,0.0596 +2015-11-25 10:00:00,0.0654 +2015-11-25 11:00:00,0.0657 +2015-11-25 12:00:00,0.0634 +2015-11-25 13:00:00,0.0637 +2015-11-25 14:00:00,0.0604 +2015-11-25 15:00:00,0.0607 +2015-11-25 16:00:00,0.0576 +2015-11-25 17:00:00,0.0562 +2015-11-25 18:00:00,0.0431 +2015-11-25 19:00:00,0.0363 +2015-11-25 20:00:00,0.0299 +2015-11-25 21:00:00,0.0235 +2015-11-25 22:00:00,0.0135 +2015-11-25 23:00:00,0.0044 +2015-11-26 00:00:00,0.0038 +2015-11-26 01:00:00,0.0038 +2015-11-26 02:00:00,0.0039 +2015-11-26 03:00:00,0.0041 +2015-11-26 04:00:00,0.004 +2015-11-26 05:00:00,0.0044 +2015-11-26 06:00:00,0.0067 +2015-11-26 07:00:00,0.0091 +2015-11-26 08:00:00,0.0161 +2015-11-26 09:00:00,0.0306 +2015-11-26 10:00:00,0.0385 +2015-11-26 11:00:00,0.0469 +2015-11-26 12:00:00,0.0534 +2015-11-26 13:00:00,0.0559 +2015-11-26 14:00:00,0.0502 +2015-11-26 15:00:00,0.0475 +2015-11-26 16:00:00,0.0361 +2015-11-26 17:00:00,0.0369 +2015-11-26 18:00:00,0.0393 +2015-11-26 19:00:00,0.0523 +2015-11-26 20:00:00,0.0552 +2015-11-26 21:00:00,0.0484 +2015-11-26 22:00:00,0.0328 +2015-11-26 23:00:00,0.0155 +2015-11-27 00:00:00,0.005 +2015-11-27 01:00:00,0.0037 +2015-11-27 02:00:00,0.0039 +2015-11-27 03:00:00,0.0037 +2015-11-27 04:00:00,0.0038 +2015-11-27 05:00:00,0.014 +2015-11-27 06:00:00,0.0281 +2015-11-27 07:00:00,0.0296 +2015-11-27 08:00:00,0.0384 +2015-11-27 09:00:00,0.0461 +2015-11-27 10:00:00,0.0564 +2015-11-27 11:00:00,0.0638 +2015-11-27 12:00:00,0.0648 +2015-11-27 13:00:00,0.0634 +2015-11-27 14:00:00,0.0602 +2015-11-27 15:00:00,0.0621 +2015-11-27 16:00:00,0.0631 +2015-11-27 17:00:00,0.0614 +2015-11-27 18:00:00,0.0473 +2015-11-27 19:00:00,0.0356 +2015-11-27 20:00:00,0.0307 +2015-11-27 21:00:00,0.027 +2015-11-27 22:00:00,0.0213 +2015-11-27 23:00:00,0.0067 +2015-11-28 00:00:00,0.0038 +2015-11-28 01:00:00,0.004 +2015-11-28 02:00:00,0.0037 +2015-11-28 03:00:00,0.0037 +2015-11-28 04:00:00,0.0038 +2015-11-28 05:00:00,0.011 +2015-11-28 06:00:00,0.0199 +2015-11-28 07:00:00,0.0263 +2015-11-28 08:00:00,0.0365 +2015-11-28 09:00:00,0.0489 +2015-11-28 10:00:00,0.063 +2015-11-28 11:00:00,0.0671 +2015-11-28 12:00:00,0.0679 +2015-11-28 13:00:00,0.0678 +2015-11-28 14:00:00,0.0656 +2015-11-28 15:00:00,0.0685 +2015-11-28 16:00:00,0.0636 +2015-11-28 17:00:00,0.061 +2015-11-28 18:00:00,0.0592 +2015-11-28 19:00:00,0.0473 +2015-11-28 20:00:00,0.0347 +2015-11-28 21:00:00,0.0288 +2015-11-28 22:00:00,0.0206 +2015-11-28 23:00:00,0.0119 +2015-11-29 00:00:00,0.0041 +2015-11-29 01:00:00,0.0039 +2015-11-29 02:00:00,0.0038 +2015-11-29 03:00:00,0.0039 +2015-11-29 04:00:00,0.0038 +2015-11-29 05:00:00,0.0055 +2015-11-29 06:00:00,0.011 +2015-11-29 07:00:00,0.0217 +2015-11-29 08:00:00,0.0319 +2015-11-29 09:00:00,0.0462 +2015-11-29 10:00:00,0.0568 +2015-11-29 11:00:00,0.067 +2015-11-29 12:00:00,0.0644 +2015-11-29 13:00:00,0.0713 +2015-11-29 14:00:00,0.0661 +2015-11-29 15:00:00,0.0626 +2015-11-29 16:00:00,0.0644 +2015-11-29 17:00:00,0.0558 +2015-11-29 18:00:00,0.0463 +2015-11-29 19:00:00,0.0391 +2015-11-29 20:00:00,0.0298 +2015-11-29 21:00:00,0.0231 +2015-11-29 22:00:00,0.0121 +2015-11-29 23:00:00,0.0039 +2015-11-30 00:00:00,0.0037 +2015-11-30 01:00:00,0.0037 +2015-11-30 02:00:00,0.0038 +2015-11-30 03:00:00,0.004 +2015-11-30 04:00:00,0.0194 +2015-11-30 05:00:00,0.057 +2015-11-30 06:00:00,0.0685 +2015-11-30 07:00:00,0.1912 +2015-11-30 08:00:00,0.0638 +2015-11-30 09:00:00,0.0571 +2015-11-30 10:00:00,0.0605 +2015-11-30 11:00:00,0.0586 +2015-11-30 12:00:00,0.0645 +2015-11-30 13:00:00,0.0561 +2015-11-30 14:00:00,0.0572 +2015-11-30 15:00:00,0.0559 +2015-11-30 16:00:00,0.0548 +2015-11-30 17:00:00,0.0558 +2015-11-30 18:00:00,0.0447 +2015-11-30 19:00:00,0.0316 +2015-11-30 20:00:00,0.0236 +2015-11-30 21:00:00,0.0166 +2015-11-30 22:00:00,0.0039 +2015-11-30 23:00:00,0.0039 +2015-12-01 00:00:00,0.0037 +2015-12-01 01:00:00,0.0037 +2015-12-01 02:00:00,0.0037 +2015-12-01 03:00:00,0.0041 +2015-12-01 04:00:00,0.0168 +2015-12-01 05:00:00,0.0536 +2015-12-01 06:00:00,0.1432 +2015-12-01 07:00:00,0.3609 +2015-12-01 08:00:00,0.3929 +2015-12-01 09:00:00,0.1879 +2015-12-01 10:00:00,0.0646 +2015-12-01 11:00:00,0.0587 +2015-12-01 12:00:00,0.0587 +2015-12-01 13:00:00,0.0551 +2015-12-01 14:00:00,0.0589 +2015-12-01 15:00:00,0.0574 +2015-12-01 16:00:00,0.058 +2015-12-01 17:00:00,0.0595 +2015-12-01 18:00:00,0.0473 +2015-12-01 19:00:00,0.0338 +2015-12-01 20:00:00,0.0277 +2015-12-01 21:00:00,0.0197 +2015-12-01 22:00:00,0.0057 +2015-12-01 23:00:00,0.0038 +2015-12-02 00:00:00,0.0037 +2015-12-02 01:00:00,0.0038 +2015-12-02 02:00:00,0.0037 +2015-12-02 03:00:00,0.0042 +2015-12-02 04:00:00,0.0154 +2015-12-02 05:00:00,0.0541 +2015-12-02 06:00:00,0.1459 +2015-12-02 07:00:00,0.3862 +2015-12-02 08:00:00,0.2214 +2015-12-02 09:00:00,0.0632 +2015-12-02 10:00:00,0.0636 +2015-12-02 11:00:00,0.0579 +2015-12-02 12:00:00,0.0573 +2015-12-02 13:00:00,0.0593 +2015-12-02 14:00:00,0.0594 +2015-12-02 15:00:00,0.0613 +2015-12-02 16:00:00,0.0578 +2015-12-02 17:00:00,0.0548 +2015-12-02 18:00:00,0.0471 +2015-12-02 19:00:00,0.0336 +2015-12-02 20:00:00,0.0253 +2015-12-02 21:00:00,0.0151 +2015-12-02 22:00:00,0.0071 +2015-12-02 23:00:00,0.0039 +2015-12-03 00:00:00,0.0037 +2015-12-03 01:00:00,0.0037 +2015-12-03 02:00:00,0.0037 +2015-12-03 03:00:00,0.0042 +2015-12-03 04:00:00,0.0117 +2015-12-03 05:00:00,0.0557 +2015-12-03 06:00:00,0.1315 +2015-12-03 07:00:00,0.2884 +2015-12-03 08:00:00,0.0538 +2015-12-03 09:00:00,0.061 +2015-12-03 10:00:00,0.0625 +2015-12-03 11:00:00,0.0487 +2015-12-03 12:00:00,0.0515 +2015-12-03 13:00:00,0.0632 +2015-12-03 14:00:00,0.0546 +2015-12-03 15:00:00,0.0587 +2015-12-03 16:00:00,0.0564 +2015-12-03 17:00:00,0.059 +2015-12-03 18:00:00,0.0475 +2015-12-03 19:00:00,0.0226 +2015-12-03 20:00:00,0.0154 +2015-12-03 21:00:00,0.0192 +2015-12-03 22:00:00,0.0078 +2015-12-03 23:00:00,0.0033 +2015-12-04 00:00:00,0.0019 +2015-12-04 01:00:00,0.0013 +2015-12-04 02:00:00,0.0011 +2015-12-04 03:00:00,0.0012 +2015-12-04 04:00:00,0.0086 +2015-12-04 05:00:00,0.0411 +2015-12-04 06:00:00,0.0651 +2015-12-04 07:00:00,0.0691 +2015-12-04 08:00:00,0.0543 +2015-12-04 09:00:00,0.055 +2015-12-04 10:00:00,0.0552 +2015-12-04 11:00:00,0.0575 +2015-12-04 12:00:00,0.0577 +2015-12-04 13:00:00,0.0592 +2015-12-04 14:00:00,0.0606 +2015-12-04 15:00:00,0.0603 +2015-12-04 16:00:00,0.061 +2015-12-04 17:00:00,0.0607 +2015-12-04 18:00:00,0.0492 +2015-12-04 19:00:00,0.0368 +2015-12-04 20:00:00,0.0273 +2015-12-04 21:00:00,0.0222 +2015-12-04 22:00:00,0.0173 +2015-12-04 23:00:00,0.0045 +2015-12-05 00:00:00,0.0028 +2015-12-05 01:00:00,0.0019 +2015-12-05 02:00:00,0.0015 +2015-12-05 03:00:00,0.0012 +2015-12-05 04:00:00,0.0014 +2015-12-05 05:00:00,0.0072 +2015-12-05 06:00:00,0.019 +2015-12-05 07:00:00,0.0285 +2015-12-05 08:00:00,0.0399 +2015-12-05 09:00:00,0.0491 +2015-12-05 10:00:00,0.0562 +2015-12-05 11:00:00,0.0587 +2015-12-05 12:00:00,0.0575 +2015-12-05 13:00:00,0.0603 +2015-12-05 14:00:00,0.0593 +2015-12-05 15:00:00,0.0609 +2015-12-05 16:00:00,0.0601 +2015-12-05 17:00:00,0.0587 +2015-12-05 18:00:00,0.0522 +2015-12-05 19:00:00,0.0356 +2015-12-05 20:00:00,0.0286 +2015-12-05 21:00:00,0.0261 +2015-12-05 22:00:00,0.0219 +2015-12-05 23:00:00,0.0101 +2015-12-06 00:00:00,0.0031 +2015-12-06 01:00:00,0.002 +2015-12-06 02:00:00,0.0015 +2015-12-06 03:00:00,0.0011 +2015-12-06 04:00:00,0.001 +2015-12-06 05:00:00,0.0024 +2015-12-06 06:00:00,0.0066 +2015-12-06 07:00:00,0.0133 +2015-12-06 08:00:00,0.0261 +2015-12-06 09:00:00,0.0392 +2015-12-06 10:00:00,0.0486 +2015-12-06 11:00:00,0.0558 +2015-12-06 12:00:00,0.0568 +2015-12-06 13:00:00,0.0601 +2015-12-06 14:00:00,0.0585 +2015-12-06 15:00:00,0.0577 +2015-12-06 16:00:00,0.058 +2015-12-06 17:00:00,0.0542 +2015-12-06 18:00:00,0.0449 +2015-12-06 19:00:00,0.0342 +2015-12-06 20:00:00,0.0279 +2015-12-06 21:00:00,0.0208 +2015-12-06 22:00:00,0.008 +2015-12-06 23:00:00,0.003 +2015-12-07 00:00:00,0.0018 +2015-12-07 01:00:00,0.0011 +2015-12-07 02:00:00,0.0009 +2015-12-07 03:00:00,0.0011 +2015-12-07 04:00:00,0.0123 +2015-12-07 05:00:00,0.0453 +2015-12-07 06:00:00,0.0999 +2015-12-07 07:00:00,0.263 +2015-12-07 08:00:00,0.2317 +2015-12-07 09:00:00,0.0578 +2015-12-07 10:00:00,0.0545 +2015-12-07 11:00:00,0.0555 +2015-12-07 12:00:00,0.0556 +2015-12-07 13:00:00,0.0554 +2015-12-07 14:00:00,0.0572 +2015-12-07 15:00:00,0.0561 +2015-12-07 16:00:00,0.058 +2015-12-07 17:00:00,0.0557 +2015-12-07 18:00:00,0.0419 +2015-12-07 19:00:00,0.0298 +2015-12-07 20:00:00,0.0235 +2015-12-07 21:00:00,0.0201 +2015-12-07 22:00:00,0.0055 +2015-12-07 23:00:00,0.0038 +2015-12-08 00:00:00,0.0037 +2015-12-08 01:00:00,0.0037 +2015-12-08 02:00:00,0.0038 +2015-12-08 03:00:00,0.004 +2015-12-08 04:00:00,0.0167 +2015-12-08 05:00:00,0.0552 +2015-12-08 06:00:00,0.1615 +2015-12-08 07:00:00,0.3831 +2015-12-08 08:00:00,0.3758 +2015-12-08 09:00:00,0.0579 +2015-12-08 10:00:00,0.056 +2015-12-08 11:00:00,0.0588 +2015-12-08 12:00:00,0.0579 +2015-12-08 13:00:00,0.057 +2015-12-08 14:00:00,0.0585 +2015-12-08 15:00:00,0.0592 +2015-12-08 16:00:00,0.0593 +2015-12-08 17:00:00,0.0549 +2015-12-08 18:00:00,0.0467 +2015-12-08 19:00:00,0.0272 +2015-12-08 20:00:00,0.009 +2015-12-08 21:00:00,0.0161 +2015-12-08 22:00:00,0.0167 +2015-12-08 23:00:00,0.0076 +2015-12-09 00:00:00,0.0039 +2015-12-09 01:00:00,0.0037 +2015-12-09 02:00:00,0.0037 +2015-12-09 03:00:00,0.0038 +2015-12-09 04:00:00,0.0112 +2015-12-09 05:00:00,0.0545 +2015-12-09 06:00:00,0.1242 +2015-12-09 07:00:00,0.3719 +2015-12-09 08:00:00,0.3473 +2015-12-09 09:00:00,0.0603 +2015-12-09 10:00:00,0.0644 +2015-12-09 11:00:00,0.0618 +2015-12-09 12:00:00,0.0598 +2015-12-09 13:00:00,0.0588 +2015-12-09 14:00:00,0.0579 +2015-12-09 15:00:00,0.0585 +2015-12-09 16:00:00,0.0576 +2015-12-09 17:00:00,0.0578 +2015-12-09 18:00:00,0.0479 +2015-12-09 19:00:00,0.0335 +2015-12-09 20:00:00,0.0264 +2015-12-09 21:00:00,0.0178 +2015-12-09 22:00:00,0.0076 +2015-12-09 23:00:00,0.0041 +2015-12-10 00:00:00,0.0037 +2015-12-10 01:00:00,0.0037 +2015-12-10 02:00:00,0.0037 +2015-12-10 03:00:00,0.0039 +2015-12-10 04:00:00,0.0191 +2015-12-10 05:00:00,0.0529 +2015-12-10 06:00:00,0.1652 +2015-12-10 07:00:00,0.3623 +2015-12-10 08:00:00,0.1896 +2015-12-10 09:00:00,0.0619 +2015-12-10 10:00:00,0.0621 +2015-12-10 11:00:00,0.0591 +2015-12-10 12:00:00,0.0589 +2015-12-10 13:00:00,0.0609 +2015-12-10 14:00:00,0.06 +2015-12-10 15:00:00,0.0621 +2015-12-10 16:00:00,0.0629 +2015-12-10 17:00:00,0.0581 +2015-12-10 18:00:00,0.0475 +2015-12-10 19:00:00,0.0334 +2015-12-10 20:00:00,0.0274 +2015-12-10 21:00:00,0.017 +2015-12-10 22:00:00,0.0067 +2015-12-10 23:00:00,0.004 +2015-12-11 00:00:00,0.0039 +2015-12-11 01:00:00,0.0037 +2015-12-11 02:00:00,0.0037 +2015-12-11 03:00:00,0.0038 +2015-12-11 04:00:00,0.0102 +2015-12-11 05:00:00,0.0477 +2015-12-11 06:00:00,0.0776 +2015-12-11 07:00:00,0.1521 +2015-12-11 08:00:00,0.0582 +2015-12-11 09:00:00,0.0594 +2015-12-11 10:00:00,0.0621 +2015-12-11 11:00:00,0.0651 +2015-12-11 12:00:00,0.0594 +2015-12-11 13:00:00,0.0611 +2015-12-11 14:00:00,0.0603 +2015-12-11 15:00:00,0.0672 +2015-12-11 16:00:00,0.0658 +2015-12-11 17:00:00,0.0607 +2015-12-11 18:00:00,0.0515 +2015-12-11 19:00:00,0.0364 +2015-12-11 20:00:00,0.03 +2015-12-11 21:00:00,0.0241 +2015-12-11 22:00:00,0.0189 +2015-12-11 23:00:00,0.004 +2015-12-12 00:00:00,0.004 +2015-12-12 01:00:00,0.0038 +2015-12-12 02:00:00,0.004 +2015-12-12 03:00:00,0.0037 +2015-12-12 04:00:00,0.0043 +2015-12-12 05:00:00,0.0132 +2015-12-12 06:00:00,0.0191 +2015-12-12 07:00:00,0.0316 +2015-12-12 08:00:00,0.0453 +2015-12-12 09:00:00,0.0535 +2015-12-12 10:00:00,0.0629 +2015-12-12 11:00:00,0.0614 +2015-12-12 12:00:00,0.0662 +2015-12-12 13:00:00,0.0633 +2015-12-12 14:00:00,0.064 +2015-12-12 15:00:00,0.0678 +2015-12-12 16:00:00,0.067 +2015-12-12 17:00:00,0.0671 +2015-12-12 18:00:00,0.0503 +2015-12-12 19:00:00,0.0346 +2015-12-12 20:00:00,0.03 +2015-12-12 21:00:00,0.0309 +2015-12-12 22:00:00,0.0276 +2015-12-12 23:00:00,0.0134 +2015-12-13 00:00:00,0.0051 +2015-12-13 01:00:00,0.004 +2015-12-13 02:00:00,0.0039 +2015-12-13 03:00:00,0.0038 +2015-12-13 04:00:00,0.0039 +2015-12-13 05:00:00,0.0039 +2015-12-13 06:00:00,0.007 +2015-12-13 07:00:00,0.0158 +2015-12-13 08:00:00,0.0279 +2015-12-13 09:00:00,0.0398 +2015-12-13 10:00:00,0.0437 +2015-12-13 11:00:00,0.0562 +2015-12-13 12:00:00,0.0569 +2015-12-13 13:00:00,0.0585 +2015-12-13 14:00:00,0.0583 +2015-12-13 15:00:00,0.0591 +2015-12-13 16:00:00,0.0571 +2015-12-13 17:00:00,0.0541 +2015-12-13 18:00:00,0.0443 +2015-12-13 19:00:00,0.0345 +2015-12-13 20:00:00,0.0311 +2015-12-13 21:00:00,0.0258 +2015-12-13 22:00:00,0.0144 +2015-12-13 23:00:00,0.004 +2015-12-14 00:00:00,0.0037 +2015-12-14 01:00:00,0.0038 +2015-12-14 02:00:00,0.0037 +2015-12-14 03:00:00,0.0041 +2015-12-14 04:00:00,0.0149 +2015-12-14 05:00:00,0.0556 +2015-12-14 06:00:00,0.1608 +2015-12-14 07:00:00,0.3626 +2015-12-14 08:00:00,0.3993 +2015-12-14 09:00:00,0.152 +2015-12-14 10:00:00,0.0584 +2015-12-14 11:00:00,0.0559 +2015-12-14 12:00:00,0.0573 +2015-12-14 13:00:00,0.0599 +2015-12-14 14:00:00,0.0581 +2015-12-14 15:00:00,0.0596 +2015-12-14 16:00:00,0.0568 +2015-12-14 17:00:00,0.0555 +2015-12-14 18:00:00,0.0444 +2015-12-14 19:00:00,0.03 +2015-12-14 20:00:00,0.023 +2015-12-14 21:00:00,0.0157 +2015-12-14 22:00:00,0.0047 +2015-12-14 23:00:00,0.0037 +2015-12-15 00:00:00,0.0038 +2015-12-15 01:00:00,0.0037 +2015-12-15 02:00:00,0.0038 +2015-12-15 03:00:00,0.0039 +2015-12-15 04:00:00,0.0102 +2015-12-15 05:00:00,0.0558 +2015-12-15 06:00:00,0.1554 +2015-12-15 07:00:00,0.3601 +2015-12-15 08:00:00,0.3957 +2015-12-15 09:00:00,0.3598 +2015-12-15 10:00:00,0.0839 +2015-12-15 11:00:00,0.0588 +2015-12-15 12:00:00,0.0587 +2015-12-15 13:00:00,0.0618 +2015-12-15 14:00:00,0.0608 +2015-12-15 15:00:00,0.0586 +2015-12-15 16:00:00,0.0582 +2015-12-15 17:00:00,0.0604 +2015-12-15 18:00:00,0.0486 +2015-12-15 19:00:00,0.0335 +2015-12-15 20:00:00,0.0255 +2015-12-15 21:00:00,0.0189 +2015-12-15 22:00:00,0.0058 +2015-12-15 23:00:00,0.0037 +2015-12-16 00:00:00,0.0037 +2015-12-16 01:00:00,0.0037 +2015-12-16 02:00:00,0.0037 +2015-12-16 03:00:00,0.0047 +2015-12-16 04:00:00,0.015 +2015-12-16 05:00:00,0.0492 +2015-12-16 06:00:00,0.1266 +2015-12-16 07:00:00,0.3326 +2015-12-16 08:00:00,0.3318 +2015-12-16 09:00:00,0.1076 +2015-12-16 10:00:00,0.0569 +2015-12-16 11:00:00,0.0628 +2015-12-16 12:00:00,0.0633 +2015-12-16 13:00:00,0.0624 +2015-12-16 14:00:00,0.0634 +2015-12-16 15:00:00,0.0612 +2015-12-16 16:00:00,0.0626 +2015-12-16 17:00:00,0.0608 +2015-12-16 18:00:00,0.0489 +2015-12-16 19:00:00,0.0366 +2015-12-16 20:00:00,0.0321 +2015-12-16 21:00:00,0.0216 +2015-12-16 22:00:00,0.0049 +2015-12-16 23:00:00,0.0038 +2015-12-17 00:00:00,0.0038 +2015-12-17 01:00:00,0.0037 +2015-12-17 02:00:00,0.0037 +2015-12-17 03:00:00,0.0042 +2015-12-17 04:00:00,0.0151 +2015-12-17 05:00:00,0.0494 +2015-12-17 06:00:00,0.1145 +2015-12-17 07:00:00,0.2336 +2015-12-17 08:00:00,0.0543 +2015-12-17 09:00:00,0.0383 +2015-12-17 10:00:00,0.0437 +2015-12-17 11:00:00,0.0685 +2015-12-17 12:00:00,0.074 +2015-12-17 13:00:00,0.0627 +2015-12-17 14:00:00,0.0636 +2015-12-17 15:00:00,0.0646 +2015-12-17 16:00:00,0.0645 +2015-12-17 17:00:00,0.0636 +2015-12-17 18:00:00,0.0503 +2015-12-17 19:00:00,0.0386 +2015-12-17 20:00:00,0.0312 +2015-12-17 21:00:00,0.0258 +2015-12-17 22:00:00,0.0158 +2015-12-17 23:00:00,0.0048 +2015-12-18 00:00:00,0.0037 +2015-12-18 01:00:00,0.0037 +2015-12-18 02:00:00,0.0038 +2015-12-18 03:00:00,0.004 +2015-12-18 04:00:00,0.0147 +2015-12-18 05:00:00,0.05 +2015-12-18 06:00:00,0.0753 +2015-12-18 07:00:00,0.0636 +2015-12-18 08:00:00,0.0581 +2015-12-18 09:00:00,0.0606 +2015-12-18 10:00:00,0.0677 +2015-12-18 11:00:00,0.0699 +2015-12-18 12:00:00,0.0649 +2015-12-18 13:00:00,0.0645 +2015-12-18 14:00:00,0.0641 +2015-12-18 15:00:00,0.0632 +2015-12-18 16:00:00,0.0624 +2015-12-18 17:00:00,0.0623 +2015-12-18 18:00:00,0.0509 +2015-12-18 19:00:00,0.0367 +2015-12-18 20:00:00,0.0296 +2015-12-18 21:00:00,0.0248 +2015-12-18 22:00:00,0.0219 +2015-12-18 23:00:00,0.0084 +2015-12-19 00:00:00,0.0041 +2015-12-19 01:00:00,0.0037 +2015-12-19 02:00:00,0.0039 +2015-12-19 03:00:00,0.0039 +2015-12-19 04:00:00,0.0041 +2015-12-19 05:00:00,0.0127 +2015-12-19 06:00:00,0.0247 +2015-12-19 07:00:00,0.0314 +2015-12-19 08:00:00,0.0433 +2015-12-19 09:00:00,0.0536 +2015-12-19 10:00:00,0.0647 +2015-12-19 11:00:00,0.0696 +2015-12-19 12:00:00,0.0644 +2015-12-19 13:00:00,0.0658 +2015-12-19 14:00:00,0.066 +2015-12-19 15:00:00,0.0659 +2015-12-19 16:00:00,0.0648 +2015-12-19 17:00:00,0.0667 +2015-12-19 18:00:00,0.0533 +2015-12-19 19:00:00,0.0358 +2015-12-19 20:00:00,0.0292 +2015-12-19 21:00:00,0.0265 +2015-12-19 22:00:00,0.0222 +2015-12-19 23:00:00,0.0118 +2015-12-20 00:00:00,0.0035 +2015-12-20 01:00:00,0.002 +2015-12-20 02:00:00,0.0015 +2015-12-20 03:00:00,0.001 +2015-12-20 04:00:00,0.001 +2015-12-20 05:00:00,0.002 +2015-12-20 06:00:00,0.0068 +2015-12-20 07:00:00,0.0124 +2015-12-20 08:00:00,0.0249 +2015-12-20 09:00:00,0.0375 +2015-12-20 10:00:00,0.0458 +2015-12-20 11:00:00,0.0545 +2015-12-20 12:00:00,0.0553 +2015-12-20 13:00:00,0.0587 +2015-12-20 14:00:00,0.0578 +2015-12-20 15:00:00,0.0564 +2015-12-20 16:00:00,0.0569 +2015-12-20 17:00:00,0.052 +2015-12-20 18:00:00,0.0433 +2015-12-20 19:00:00,0.0334 +2015-12-20 20:00:00,0.0279 +2015-12-20 21:00:00,0.0216 +2015-12-20 22:00:00,0.0117 +2015-12-20 23:00:00,0.003 +2015-12-21 00:00:00,0.0018 +2015-12-21 01:00:00,0.0011 +2015-12-21 02:00:00,0.0009 +2015-12-21 03:00:00,0.001 +2015-12-21 04:00:00,0.0125 +2015-12-21 05:00:00,0.0458 +2015-12-21 06:00:00,0.112 +2015-12-21 07:00:00,0.2683 +2015-12-21 08:00:00,0.1805 +2015-12-21 09:00:00,0.0555 +2015-12-21 10:00:00,0.0564 +2015-12-21 11:00:00,0.0547 +2015-12-21 12:00:00,0.055 +2015-12-21 13:00:00,0.054 +2015-12-21 14:00:00,0.0555 +2015-12-21 15:00:00,0.0562 +2015-12-21 16:00:00,0.0563 +2015-12-21 17:00:00,0.0563 +2015-12-21 18:00:00,0.0454 +2015-12-21 19:00:00,0.0307 +2015-12-21 20:00:00,0.0224 +2015-12-21 21:00:00,0.0172 +2015-12-21 22:00:00,0.0051 +2015-12-21 23:00:00,0.0027 +2015-12-22 00:00:00,0.0038 +2015-12-22 01:00:00,0.0037 +2015-12-22 02:00:00,0.0039 +2015-12-22 03:00:00,0.004 +2015-12-22 04:00:00,0.0174 +2015-12-22 05:00:00,0.0516 +2015-12-22 06:00:00,0.0687 +2015-12-22 07:00:00,0.0581 +2015-12-22 08:00:00,0.0551 +2015-12-22 09:00:00,0.0659 +2015-12-22 10:00:00,0.0706 +2015-12-22 11:00:00,0.07 +2015-12-22 12:00:00,0.0661 +2015-12-22 13:00:00,0.0656 +2015-12-22 14:00:00,0.064 +2015-12-22 15:00:00,0.0633 +2015-12-22 16:00:00,0.0606 +2015-12-22 17:00:00,0.0578 +2015-12-22 18:00:00,0.0489 +2015-12-22 19:00:00,0.0389 +2015-12-22 20:00:00,0.0305 +2015-12-22 21:00:00,0.0239 +2015-12-22 22:00:00,0.008 +2015-12-22 23:00:00,0.0054 +2015-12-23 00:00:00,0.0037 +2015-12-23 01:00:00,0.0037 +2015-12-23 02:00:00,0.0038 +2015-12-23 03:00:00,0.0042 +2015-12-23 04:00:00,0.0189 +2015-12-23 05:00:00,0.0457 +2015-12-23 06:00:00,0.0662 +2015-12-23 07:00:00,0.0549 +2015-12-23 08:00:00,0.0582 +2015-12-23 09:00:00,0.0628 +2015-12-23 10:00:00,0.0678 +2015-12-23 11:00:00,0.0714 +2015-12-23 12:00:00,0.0698 +2015-12-23 13:00:00,0.0659 +2015-12-23 14:00:00,0.0618 +2015-12-23 15:00:00,0.0643 +2015-12-23 16:00:00,0.0679 +2015-12-23 17:00:00,0.0593 +2015-12-23 18:00:00,0.0546 +2015-12-23 19:00:00,0.0408 +2015-12-23 20:00:00,0.0334 +2015-12-23 21:00:00,0.0276 +2015-12-23 22:00:00,0.0176 +2015-12-23 23:00:00,0.0045 +2015-12-24 00:00:00,0.0039 +2015-12-24 01:00:00,0.0038 +2015-12-24 02:00:00,0.0038 +2015-12-24 03:00:00,0.004 +2015-12-24 04:00:00,0.0074 +2015-12-24 05:00:00,0.0275 +2015-12-24 06:00:00,0.0378 +2015-12-24 07:00:00,0.0358 +2015-12-24 08:00:00,0.0426 +2015-12-24 09:00:00,0.0463 +2015-12-24 10:00:00,0.0521 +2015-12-24 11:00:00,0.0585 +2015-12-24 12:00:00,0.061 +2015-12-24 13:00:00,0.0596 +2015-12-24 14:00:00,0.0639 +2015-12-24 15:00:00,0.0589 +2015-12-24 16:00:00,0.0561 +2015-12-24 17:00:00,0.0433 +2015-12-24 18:00:00,0.0361 +2015-12-24 19:00:00,0.0297 +2015-12-24 20:00:00,0.0295 +2015-12-24 21:00:00,0.0291 +2015-12-24 22:00:00,0.0261 +2015-12-24 23:00:00,0.013 +2015-12-25 00:00:00,0.004 +2015-12-25 01:00:00,0.0038 +2015-12-25 02:00:00,0.0038 +2015-12-25 03:00:00,0.0039 +2015-12-25 04:00:00,0.0037 +2015-12-25 05:00:00,0.0038 +2015-12-25 06:00:00,0.004 +2015-12-25 07:00:00,0.0038 +2015-12-25 08:00:00,0.0101 +2015-12-25 09:00:00,0.0275 +2015-12-25 10:00:00,0.0331 +2015-12-25 11:00:00,0.0399 +2015-12-25 12:00:00,0.0455 +2015-12-25 13:00:00,0.0499 +2015-12-25 14:00:00,0.0498 +2015-12-25 15:00:00,0.0479 +2015-12-25 16:00:00,0.0392 +2015-12-25 17:00:00,0.0368 +2015-12-25 18:00:00,0.0354 +2015-12-25 19:00:00,0.0417 +2015-12-25 20:00:00,0.0429 +2015-12-25 21:00:00,0.0405 +2015-12-25 22:00:00,0.0304 +2015-12-25 23:00:00,0.014 +2015-12-26 00:00:00,0.0037 +2015-12-26 01:00:00,0.0037 +2015-12-26 02:00:00,0.0038 +2015-12-26 03:00:00,0.0038 +2015-12-26 04:00:00,0.0037 +2015-12-26 05:00:00,0.0088 +2015-12-26 06:00:00,0.0138 +2015-12-26 07:00:00,0.0216 +2015-12-26 08:00:00,0.0299 +2015-12-26 09:00:00,0.0415 +2015-12-26 10:00:00,0.0534 +2015-12-26 11:00:00,0.0618 +2015-12-26 12:00:00,0.0651 +2015-12-26 13:00:00,0.0607 +2015-12-26 14:00:00,0.0611 +2015-12-26 15:00:00,0.0622 +2015-12-26 16:00:00,0.0599 +2015-12-26 17:00:00,0.0535 +2015-12-26 18:00:00,0.0461 +2015-12-26 19:00:00,0.0349 +2015-12-26 20:00:00,0.0314 +2015-12-26 21:00:00,0.0281 +2015-12-26 22:00:00,0.0219 +2015-12-26 23:00:00,0.0103 +2015-12-27 00:00:00,0.004 +2015-12-27 01:00:00,0.0039 +2015-12-27 02:00:00,0.0039 +2015-12-27 03:00:00,0.0039 +2015-12-27 04:00:00,0.004 +2015-12-27 05:00:00,0.0048 +2015-12-27 06:00:00,0.0119 +2015-12-27 07:00:00,0.0115 +2015-12-27 08:00:00,0.0271 +2015-12-27 09:00:00,0.0395 +2015-12-27 10:00:00,0.0522 +2015-12-27 11:00:00,0.0593 +2015-12-27 12:00:00,0.0586 +2015-12-27 13:00:00,0.0592 +2015-12-27 14:00:00,0.0677 +2015-12-27 15:00:00,0.063 +2015-12-27 16:00:00,0.0599 +2015-12-27 17:00:00,0.0525 +2015-12-27 18:00:00,0.0416 +2015-12-27 19:00:00,0.034 +2015-12-27 20:00:00,0.029 +2015-12-27 21:00:00,0.0246 +2015-12-27 22:00:00,0.0081 +2015-12-27 23:00:00,0.0045 +2015-12-28 00:00:00,0.0038 +2015-12-28 01:00:00,0.0037 +2015-12-28 02:00:00,0.0038 +2015-12-28 03:00:00,0.0041 +2015-12-28 04:00:00,0.0116 +2015-12-28 05:00:00,0.0459 +2015-12-28 06:00:00,0.0576 +2015-12-28 07:00:00,0.0455 +2015-12-28 08:00:00,0.0462 +2015-12-28 09:00:00,0.0563 +2015-12-28 10:00:00,0.0642 +2015-12-28 11:00:00,0.0677 +2015-12-28 12:00:00,0.0664 +2015-12-28 13:00:00,0.0619 +2015-12-28 14:00:00,0.0604 +2015-12-28 15:00:00,0.0601 +2015-12-28 16:00:00,0.0627 +2015-12-28 17:00:00,0.0601 +2015-12-28 18:00:00,0.0437 +2015-12-28 19:00:00,0.0309 +2015-12-28 20:00:00,0.0253 +2015-12-28 21:00:00,0.0168 +2015-12-28 22:00:00,0.0053 +2015-12-28 23:00:00,0.004 +2015-12-29 00:00:00,0.0037 +2015-12-29 01:00:00,0.0037 +2015-12-29 02:00:00,0.0037 +2015-12-29 03:00:00,0.0037 +2015-12-29 04:00:00,0.0116 +2015-12-29 05:00:00,0.0471 +2015-12-29 06:00:00,0.0619 +2015-12-29 07:00:00,0.0508 +2015-12-29 08:00:00,0.0548 +2015-12-29 09:00:00,0.0615 +2015-12-29 10:00:00,0.0658 +2015-12-29 11:00:00,0.0687 +2015-12-29 12:00:00,0.0672 +2015-12-29 13:00:00,0.0638 +2015-12-29 14:00:00,0.061 +2015-12-29 15:00:00,0.0652 +2015-12-29 16:00:00,0.0593 +2015-12-29 17:00:00,0.0571 +2015-12-29 18:00:00,0.0475 +2015-12-29 19:00:00,0.0337 +2015-12-29 20:00:00,0.0269 +2015-12-29 21:00:00,0.0219 +2015-12-29 22:00:00,0.0097 +2015-12-29 23:00:00,0.0038 +2015-12-30 00:00:00,0.0038 +2015-12-30 01:00:00,0.0038 +2015-12-30 02:00:00,0.0038 +2015-12-30 03:00:00,0.0044 +2015-12-30 04:00:00,0.0085 +2015-12-30 05:00:00,0.0457 +2015-12-30 06:00:00,0.0615 +2015-12-30 07:00:00,0.0545 +2015-12-30 08:00:00,0.0534 +2015-12-30 09:00:00,0.0599 +2015-12-30 10:00:00,0.0673 +2015-12-30 11:00:00,0.0703 +2015-12-30 12:00:00,0.0714 +2015-12-30 13:00:00,0.0722 +2015-12-30 14:00:00,0.0652 +2015-12-30 15:00:00,0.061 +2015-12-30 16:00:00,0.0588 +2015-12-30 17:00:00,0.0567 +2015-12-30 18:00:00,0.0467 +2015-12-30 19:00:00,0.0367 +2015-12-30 20:00:00,0.0284 +2015-12-30 21:00:00,0.0217 +2015-12-30 22:00:00,0.0078 +2015-12-30 23:00:00,0.0038 +2015-12-31 00:00:00,0.0037 +2015-12-31 01:00:00,0.0038 +2015-12-31 02:00:00,0.0039 +2015-12-31 03:00:00,0.0041 +2015-12-31 04:00:00,0.0079 +2015-12-31 05:00:00,0.0342 +2015-12-31 06:00:00,0.0492 +2015-12-31 07:00:00,0.0448 +2015-12-31 08:00:00,0.0455 +2015-12-31 09:00:00,0.0506 +2015-12-31 10:00:00,0.0563 +2015-12-31 11:00:00,0.0589 +2015-12-31 12:00:00,0.0651 +2015-12-31 13:00:00,0.0593 +2015-12-31 14:00:00,0.0625 +2015-12-31 15:00:00,0.0625 +2015-12-31 16:00:00,0.0578 +2015-12-31 17:00:00,0.051 +2015-12-31 18:00:00,0.0439 +2015-12-31 19:00:00,0.0346 +2015-12-31 20:00:00,0.0265 +2015-12-31 21:00:00,0.0211 +2015-12-31 22:00:00,0.0106 +2015-12-31 23:00:00,0.0049 +2016-01-01 00:00:00,0.0091 +2016-01-01 01:00:00,0.0046 +2016-01-01 02:00:00,0.0031 +2016-01-01 03:00:00,0.0035 +2016-01-01 04:00:00,0.004 +2016-01-01 05:00:00,0.0152 +2016-01-01 06:00:00,0.0048 +2016-01-01 07:00:00,0.0041 +2016-01-01 08:00:00,0.0117 +2016-01-01 09:00:00,0.0259 +2016-01-01 10:00:00,0.0347 +2016-01-01 11:00:00,0.0409 +2016-01-01 12:00:00,0.0446 +2016-01-01 13:00:00,0.0475 +2016-01-01 14:00:00,0.0495 +2016-01-01 15:00:00,0.0436 +2016-01-01 16:00:00,0.0429 +2016-01-01 17:00:00,0.039 +2016-01-01 18:00:00,0.0355 +2016-01-01 19:00:00,0.03 +2016-01-01 20:00:00,0.0268 +2016-01-01 21:00:00,0.0227 +2016-01-01 22:00:00,0.0125 +2016-01-01 23:00:00,0.004 +2016-01-02 00:00:00,0.004 +2016-01-02 01:00:00,0.0037 +2016-01-02 02:00:00,0.0068 +2016-01-02 03:00:00,0.004 +2016-01-02 04:00:00,0.0037 +2016-01-02 05:00:00,0.0048 +2016-01-02 06:00:00,0.0153 +2016-01-02 07:00:00,0.0161 +2016-01-02 08:00:00,0.0331 +2016-01-02 09:00:00,0.0427 +2016-01-02 10:00:00,0.053 +2016-01-02 11:00:00,0.0623 +2016-01-02 12:00:00,0.066 +2016-01-02 13:00:00,0.0684 +2016-01-02 14:00:00,0.0677 +2016-01-02 15:00:00,0.0664 +2016-01-02 16:00:00,0.0634 +2016-01-02 17:00:00,0.0645 +2016-01-02 18:00:00,0.0468 +2016-01-02 19:00:00,0.036 +2016-01-02 20:00:00,0.0293 +2016-01-02 21:00:00,0.0261 +2016-01-02 22:00:00,0.0189 +2016-01-02 23:00:00,0.0055 +2016-01-03 00:00:00,0.0048 +2016-01-03 01:00:00,0.0039 +2016-01-03 02:00:00,0.0039 +2016-01-03 03:00:00,0.0041 +2016-01-03 04:00:00,0.004 +2016-01-03 05:00:00,0.0054 +2016-01-03 06:00:00,0.0074 +2016-01-03 07:00:00,0.0038 +2016-01-03 08:00:00,0.0251 +2016-01-03 09:00:00,0.0399 +2016-01-03 10:00:00,0.0509 +2016-01-03 11:00:00,0.0579 +2016-01-03 12:00:00,0.0596 +2016-01-03 13:00:00,0.0622 +2016-01-03 14:00:00,0.0587 +2016-01-03 15:00:00,0.0545 +2016-01-03 16:00:00,0.0501 +2016-01-03 17:00:00,0.051 +2016-01-03 18:00:00,0.0427 +2016-01-03 19:00:00,0.0334 +2016-01-03 20:00:00,0.0254 +2016-01-03 21:00:00,0.018 +2016-01-03 22:00:00,0.0074 +2016-01-03 23:00:00,0.004 +2016-01-04 00:00:00,0.0033 +2016-01-04 01:00:00,0.0028 +2016-01-04 02:00:00,0.0037 +2016-01-04 03:00:00,0.0038 +2016-01-04 04:00:00,0.0124 +2016-01-04 05:00:00,0.0548 +2016-01-04 06:00:00,0.1316 +2016-01-04 07:00:00,0.2675 +2016-01-04 08:00:00,0.2558 +2016-01-04 09:00:00,0.0516 +2016-01-04 10:00:00,0.0552 +2016-01-04 11:00:00,0.0541 +2016-01-04 12:00:00,0.0542 +2016-01-04 13:00:00,0.0566 +2016-01-04 14:00:00,0.0548 +2016-01-04 15:00:00,0.0546 +2016-01-04 16:00:00,0.0538 +2016-01-04 17:00:00,0.054 +2016-01-04 18:00:00,0.0425 +2016-01-04 19:00:00,0.0287 +2016-01-04 20:00:00,0.0171 +2016-01-04 21:00:00,0.0088 +2016-01-04 22:00:00,0.0037 +2016-01-04 23:00:00,0.004 +2016-01-05 00:00:00,0.0037 +2016-01-05 01:00:00,0.0037 +2016-01-05 02:00:00,0.0038 +2016-01-05 03:00:00,0.0038 +2016-01-05 04:00:00,0.0173 +2016-01-05 05:00:00,0.0537 +2016-01-05 06:00:00,0.1763 +2016-01-05 07:00:00,0.3937 +2016-01-05 08:00:00,0.4188 +2016-01-05 09:00:00,0.3275 +2016-01-05 10:00:00,0.0567 +2016-01-05 11:00:00,0.0521 +2016-01-05 12:00:00,0.0564 +2016-01-05 13:00:00,0.0557 +2016-01-05 14:00:00,0.0518 +2016-01-05 15:00:00,0.0527 +2016-01-05 16:00:00,0.0524 +2016-01-05 17:00:00,0.0535 +2016-01-05 18:00:00,0.0415 +2016-01-05 19:00:00,0.0303 +2016-01-05 20:00:00,0.0181 +2016-01-05 21:00:00,0.0125 +2016-01-05 22:00:00,0.0045 +2016-01-05 23:00:00,0.0042 +2016-01-06 00:00:00,0.0037 +2016-01-06 01:00:00,0.0037 +2016-01-06 02:00:00,0.0037 +2016-01-06 03:00:00,0.0039 +2016-01-06 04:00:00,0.0084 +2016-01-06 05:00:00,0.0554 +2016-01-06 06:00:00,0.2105 +2016-01-06 07:00:00,0.3717 +2016-01-06 08:00:00,0.3844 +2016-01-06 09:00:00,0.1107 +2016-01-06 10:00:00,0.0556 +2016-01-06 11:00:00,0.0538 +2016-01-06 12:00:00,0.0559 +2016-01-06 13:00:00,0.0547 +2016-01-06 14:00:00,0.0536 +2016-01-06 15:00:00,0.0535 +2016-01-06 16:00:00,0.053 +2016-01-06 17:00:00,0.0558 +2016-01-06 18:00:00,0.0446 +2016-01-06 19:00:00,0.0314 +2016-01-06 20:00:00,0.0241 +2016-01-06 21:00:00,0.0144 +2016-01-06 22:00:00,0.0058 +2016-01-06 23:00:00,0.0038 +2016-01-07 00:00:00,0.0037 +2016-01-07 01:00:00,0.0037 +2016-01-07 02:00:00,0.0038 +2016-01-07 03:00:00,0.0039 +2016-01-07 04:00:00,0.0137 +2016-01-07 05:00:00,0.0533 +2016-01-07 06:00:00,0.0914 +2016-01-07 07:00:00,0.135 +2016-01-07 08:00:00,0.0567 +2016-01-07 09:00:00,0.0612 +2016-01-07 10:00:00,0.058 +2016-01-07 11:00:00,0.0597 +2016-01-07 12:00:00,0.0597 +2016-01-07 13:00:00,0.0495 +2016-01-07 14:00:00,0.0507 +2016-01-07 15:00:00,0.0518 +2016-01-07 16:00:00,0.0489 +2016-01-07 17:00:00,0.0543 +2016-01-07 18:00:00,0.0426 +2016-01-07 19:00:00,0.0328 +2016-01-07 20:00:00,0.0251 +2016-01-07 21:00:00,0.0152 +2016-01-07 22:00:00,0.0066 +2016-01-07 23:00:00,0.0037 +2016-01-08 00:00:00,0.0038 +2016-01-08 01:00:00,0.0038 +2016-01-08 02:00:00,0.0039 +2016-01-08 03:00:00,0.0037 +2016-01-08 04:00:00,0.0128 +2016-01-08 05:00:00,0.0489 +2016-01-08 06:00:00,0.0747 +2016-01-08 07:00:00,0.0648 +2016-01-08 08:00:00,0.0612 +2016-01-08 09:00:00,0.0617 +2016-01-08 10:00:00,0.0586 +2016-01-08 11:00:00,0.0595 +2016-01-08 12:00:00,0.0581 +2016-01-08 13:00:00,0.056 +2016-01-08 14:00:00,0.0617 +2016-01-08 15:00:00,0.06 +2016-01-08 16:00:00,0.0564 +2016-01-08 17:00:00,0.0581 +2016-01-08 18:00:00,0.0457 +2016-01-08 19:00:00,0.0347 +2016-01-08 20:00:00,0.0252 +2016-01-08 21:00:00,0.0215 +2016-01-08 22:00:00,0.0123 +2016-01-08 23:00:00,0.0046 +2016-01-09 00:00:00,0.0037 +2016-01-09 01:00:00,0.0038 +2016-01-09 02:00:00,0.0037 +2016-01-09 03:00:00,0.0037 +2016-01-09 04:00:00,0.0039 +2016-01-09 05:00:00,0.0094 +2016-01-09 06:00:00,0.0203 +2016-01-09 07:00:00,0.0299 +2016-01-09 08:00:00,0.0422 +2016-01-09 09:00:00,0.0504 +2016-01-09 10:00:00,0.0597 +2016-01-09 11:00:00,0.0631 +2016-01-09 12:00:00,0.0589 +2016-01-09 13:00:00,0.0597 +2016-01-09 14:00:00,0.0598 +2016-01-09 15:00:00,0.0601 +2016-01-09 16:00:00,0.06 +2016-01-09 17:00:00,0.0548 +2016-01-09 18:00:00,0.0479 +2016-01-09 19:00:00,0.0345 +2016-01-09 20:00:00,0.0261 +2016-01-09 21:00:00,0.0247 +2016-01-09 22:00:00,0.0217 +2016-01-09 23:00:00,0.0077 +2016-01-10 00:00:00,0.0042 +2016-01-10 01:00:00,0.0039 +2016-01-10 02:00:00,0.0037 +2016-01-10 03:00:00,0.0037 +2016-01-10 04:00:00,0.004 +2016-01-10 05:00:00,0.0042 +2016-01-10 06:00:00,0.0109 +2016-01-10 07:00:00,0.0119 +2016-01-10 08:00:00,0.0297 +2016-01-10 09:00:00,0.0409 +2016-01-10 10:00:00,0.0463 +2016-01-10 11:00:00,0.0517 +2016-01-10 12:00:00,0.0538 +2016-01-10 13:00:00,0.0528 +2016-01-10 14:00:00,0.0558 +2016-01-10 15:00:00,0.0559 +2016-01-10 16:00:00,0.0476 +2016-01-10 17:00:00,0.0509 +2016-01-10 18:00:00,0.0426 +2016-01-10 19:00:00,0.0327 +2016-01-10 20:00:00,0.0276 +2016-01-10 21:00:00,0.02 +2016-01-10 22:00:00,0.0078 +2016-01-10 23:00:00,0.0039 +2016-01-11 00:00:00,0.0037 +2016-01-11 01:00:00,0.0038 +2016-01-11 02:00:00,0.0037 +2016-01-11 03:00:00,0.004 +2016-01-11 04:00:00,0.0224 +2016-01-11 05:00:00,0.0552 +2016-01-11 06:00:00,0.1663 +2016-01-11 07:00:00,0.3617 +2016-01-11 08:00:00,0.1179 +2016-01-11 09:00:00,0.0586 +2016-01-11 10:00:00,0.0563 +2016-01-11 11:00:00,0.0537 +2016-01-11 12:00:00,0.0541 +2016-01-11 13:00:00,0.0519 +2016-01-11 14:00:00,0.053 +2016-01-11 15:00:00,0.0574 +2016-01-11 16:00:00,0.0532 +2016-01-11 17:00:00,0.0556 +2016-01-11 18:00:00,0.0412 +2016-01-11 19:00:00,0.0303 +2016-01-11 20:00:00,0.0208 +2016-01-11 21:00:00,0.0104 +2016-01-11 22:00:00,0.004 +2016-01-11 23:00:00,0.0039 +2016-01-12 00:00:00,0.0037 +2016-01-12 01:00:00,0.0037 +2016-01-12 02:00:00,0.0037 +2016-01-12 03:00:00,0.0042 +2016-01-12 04:00:00,0.0141 +2016-01-12 05:00:00,0.0541 +2016-01-12 06:00:00,0.1556 +2016-01-12 07:00:00,0.3346 +2016-01-12 08:00:00,0.2942 +2016-01-12 09:00:00,0.389 +2016-01-12 10:00:00,0.0735 +2016-01-12 11:00:00,0.0595 +2016-01-12 12:00:00,0.0558 +2016-01-12 13:00:00,0.0556 +2016-01-12 14:00:00,0.0577 +2016-01-12 15:00:00,0.0586 +2016-01-12 16:00:00,0.0557 +2016-01-12 17:00:00,0.0544 +2016-01-12 18:00:00,0.0445 +2016-01-12 19:00:00,0.0309 +2016-01-12 20:00:00,0.0242 +2016-01-12 21:00:00,0.0146 +2016-01-12 22:00:00,0.0046 +2016-01-12 23:00:00,0.0041 +2016-01-13 00:00:00,0.0037 +2016-01-13 01:00:00,0.0039 +2016-01-13 02:00:00,0.0038 +2016-01-13 03:00:00,0.0044 +2016-01-13 04:00:00,0.0074 +2016-01-13 05:00:00,0.0519 +2016-01-13 06:00:00,0.1199 +2016-01-13 07:00:00,0.3859 +2016-01-13 08:00:00,0.2884 +2016-01-13 09:00:00,0.0564 +2016-01-13 10:00:00,0.0606 +2016-01-13 11:00:00,0.0579 +2016-01-13 12:00:00,0.052 +2016-01-13 13:00:00,0.0492 +2016-01-13 14:00:00,0.0514 +2016-01-13 15:00:00,0.0539 +2016-01-13 16:00:00,0.0557 +2016-01-13 17:00:00,0.0583 +2016-01-13 18:00:00,0.0464 +2016-01-13 19:00:00,0.0318 +2016-01-13 20:00:00,0.0243 +2016-01-13 21:00:00,0.0157 +2016-01-13 22:00:00,0.0059 +2016-01-13 23:00:00,0.0039 +2016-01-14 00:00:00,0.0039 +2016-01-14 01:00:00,0.0037 +2016-01-14 02:00:00,0.0037 +2016-01-14 03:00:00,0.0039 +2016-01-14 04:00:00,0.0163 +2016-01-14 05:00:00,0.0552 +2016-01-14 06:00:00,0.1034 +2016-01-14 07:00:00,0.3291 +2016-01-14 08:00:00,0.3092 +2016-01-14 09:00:00,0.0618 +2016-01-14 10:00:00,0.0611 +2016-01-14 11:00:00,0.0604 +2016-01-14 12:00:00,0.0568 +2016-01-14 13:00:00,0.0579 +2016-01-14 14:00:00,0.0591 +2016-01-14 15:00:00,0.0593 +2016-01-14 16:00:00,0.055 +2016-01-14 17:00:00,0.0534 +2016-01-14 18:00:00,0.0461 +2016-01-14 19:00:00,0.0329 +2016-01-14 20:00:00,0.0201 +2016-01-14 21:00:00,0.0042 +2016-01-14 22:00:00,0.0039 +2016-01-14 23:00:00,0.0038 +2016-01-15 00:00:00,0.0038 +2016-01-15 01:00:00,0.0037 +2016-01-15 02:00:00,0.0037 +2016-01-15 03:00:00,0.0039 +2016-01-15 04:00:00,0.0133 +2016-01-15 05:00:00,0.0492 +2016-01-15 06:00:00,0.0731 +2016-01-15 07:00:00,0.0681 +2016-01-15 08:00:00,0.0605 +2016-01-15 09:00:00,0.0629 +2016-01-15 10:00:00,0.0609 +2016-01-15 11:00:00,0.0578 +2016-01-15 12:00:00,0.0613 +2016-01-15 13:00:00,0.0599 +2016-01-15 14:00:00,0.0618 +2016-01-15 15:00:00,0.0616 +2016-01-15 16:00:00,0.0597 +2016-01-15 17:00:00,0.0583 +2016-01-15 18:00:00,0.0491 +2016-01-15 19:00:00,0.0374 +2016-01-15 20:00:00,0.0281 +2016-01-15 21:00:00,0.0189 +2016-01-15 22:00:00,0.0119 +2016-01-15 23:00:00,0.0042 +2016-01-16 00:00:00,0.004 +2016-01-16 01:00:00,0.004 +2016-01-16 02:00:00,0.0038 +2016-01-16 03:00:00,0.0038 +2016-01-16 04:00:00,0.0039 +2016-01-16 05:00:00,0.0097 +2016-01-16 06:00:00,0.0242 +2016-01-16 07:00:00,0.0308 +2016-01-16 08:00:00,0.0388 +2016-01-16 09:00:00,0.0484 +2016-01-16 10:00:00,0.0545 +2016-01-16 11:00:00,0.058 +2016-01-16 12:00:00,0.0636 +2016-01-16 13:00:00,0.0573 +2016-01-16 14:00:00,0.0566 +2016-01-16 15:00:00,0.0584 +2016-01-16 16:00:00,0.0589 +2016-01-16 17:00:00,0.0556 +2016-01-16 18:00:00,0.045 +2016-01-16 19:00:00,0.033 +2016-01-16 20:00:00,0.0278 +2016-01-16 21:00:00,0.0255 +2016-01-16 22:00:00,0.0213 +2016-01-16 23:00:00,0.0097 +2016-01-17 00:00:00,0.0037 +2016-01-17 01:00:00,0.0042 +2016-01-17 02:00:00,0.0039 +2016-01-17 03:00:00,0.0037 +2016-01-17 04:00:00,0.0038 +2016-01-17 05:00:00,0.0039 +2016-01-17 06:00:00,0.0116 +2016-01-17 07:00:00,0.0085 +2016-01-17 08:00:00,0.0269 +2016-01-17 09:00:00,0.0402 +2016-01-17 10:00:00,0.0449 +2016-01-17 11:00:00,0.0526 +2016-01-17 12:00:00,0.0532 +2016-01-17 13:00:00,0.0583 +2016-01-17 14:00:00,0.0569 +2016-01-17 15:00:00,0.0581 +2016-01-17 16:00:00,0.0552 +2016-01-17 17:00:00,0.0535 +2016-01-17 18:00:00,0.0469 +2016-01-17 19:00:00,0.0313 +2016-01-17 20:00:00,0.0263 +2016-01-17 21:00:00,0.0248 +2016-01-17 22:00:00,0.01 +2016-01-17 23:00:00,0.0042 +2016-01-18 00:00:00,0.0037 +2016-01-18 01:00:00,0.0039 +2016-01-18 02:00:00,0.0037 +2016-01-18 03:00:00,0.0042 +2016-01-18 04:00:00,0.0089 +2016-01-18 05:00:00,0.033 +2016-01-18 06:00:00,0.0511 +2016-01-18 07:00:00,0.0424 +2016-01-18 08:00:00,0.0475 +2016-01-18 09:00:00,0.0527 +2016-01-18 10:00:00,0.0583 +2016-01-18 11:00:00,0.065 +2016-01-18 12:00:00,0.0613 +2016-01-18 13:00:00,0.0616 +2016-01-18 14:00:00,0.0616 +2016-01-18 15:00:00,0.0633 +2016-01-18 16:00:00,0.0628 +2016-01-18 17:00:00,0.0571 +2016-01-18 18:00:00,0.0452 +2016-01-18 19:00:00,0.0367 +2016-01-18 20:00:00,0.0261 +2016-01-18 21:00:00,0.0203 +2016-01-18 22:00:00,0.0083 +2016-01-18 23:00:00,0.0039 +2016-01-19 00:00:00,0.0038 +2016-01-19 01:00:00,0.0038 +2016-01-19 02:00:00,0.0037 +2016-01-19 03:00:00,0.0041 +2016-01-19 04:00:00,0.0208 +2016-01-19 05:00:00,0.0576 +2016-01-19 06:00:00,0.1507 +2016-01-19 07:00:00,0.3843 +2016-01-19 08:00:00,0.4326 +2016-01-19 09:00:00,0.3849 +2016-01-19 10:00:00,0.269 +2016-01-19 11:00:00,0.0519 +2016-01-19 12:00:00,0.0513 +2016-01-19 13:00:00,0.049 +2016-01-19 14:00:00,0.0493 +2016-01-19 15:00:00,0.0531 +2016-01-19 16:00:00,0.0532 +2016-01-19 17:00:00,0.0522 +2016-01-19 18:00:00,0.0457 +2016-01-19 19:00:00,0.0306 +2016-01-19 20:00:00,0.0239 +2016-01-19 21:00:00,0.0142 +2016-01-19 22:00:00,0.0061 +2016-01-19 23:00:00,0.0043 +2016-01-20 00:00:00,0.0037 +2016-01-20 01:00:00,0.0037 +2016-01-20 02:00:00,0.0037 +2016-01-20 03:00:00,0.0042 +2016-01-20 04:00:00,0.017 +2016-01-20 05:00:00,0.0541 +2016-01-20 06:00:00,0.163 +2016-01-20 07:00:00,0.3857 +2016-01-20 08:00:00,0.2144 +2016-01-20 09:00:00,0.0574 +2016-01-20 10:00:00,0.058 +2016-01-20 11:00:00,0.0566 +2016-01-20 12:00:00,0.0567 +2016-01-20 13:00:00,0.056 +2016-01-20 14:00:00,0.0557 +2016-01-20 15:00:00,0.0563 +2016-01-20 16:00:00,0.0584 +2016-01-20 17:00:00,0.0597 +2016-01-20 18:00:00,0.0489 +2016-01-20 19:00:00,0.0334 +2016-01-20 20:00:00,0.025 +2016-01-20 21:00:00,0.0183 +2016-01-20 22:00:00,0.0075 +2016-01-20 23:00:00,0.0031 +2016-01-21 00:00:00,0.0021 +2016-01-21 01:00:00,0.0015 +2016-01-21 02:00:00,0.0013 +2016-01-21 03:00:00,0.0015 +2016-01-21 04:00:00,0.0075 +2016-01-21 05:00:00,0.0346 +2016-01-21 06:00:00,0.0579 +2016-01-21 07:00:00,0.0774 +2016-01-21 08:00:00,0.0517 +2016-01-21 09:00:00,0.0519 +2016-01-21 10:00:00,0.0517 +2016-01-21 11:00:00,0.0535 +2016-01-21 12:00:00,0.0535 +2016-01-21 13:00:00,0.0525 +2016-01-21 14:00:00,0.0562 +2016-01-21 15:00:00,0.0558 +2016-01-21 16:00:00,0.0534 +2016-01-21 17:00:00,0.0521 +2016-01-21 18:00:00,0.0464 +2016-01-21 19:00:00,0.0328 +2016-01-21 20:00:00,0.026 +2016-01-21 21:00:00,0.0191 +2016-01-21 22:00:00,0.0074 +2016-01-21 23:00:00,0.0039 +2016-01-22 00:00:00,0.0038 +2016-01-22 01:00:00,0.0037 +2016-01-22 02:00:00,0.0037 +2016-01-22 03:00:00,0.0038 +2016-01-22 04:00:00,0.0138 +2016-01-22 05:00:00,0.0511 +2016-01-22 06:00:00,0.0784 +2016-01-22 07:00:00,0.2715 +2016-01-22 08:00:00,0.3491 +2016-01-22 09:00:00,0.0734 +2016-01-22 10:00:00,0.0551 +2016-01-22 11:00:00,0.0558 +2016-01-22 12:00:00,0.0567 +2016-01-22 13:00:00,0.0555 +2016-01-22 14:00:00,0.061 +2016-01-22 15:00:00,0.0609 +2016-01-22 16:00:00,0.0567 +2016-01-22 17:00:00,0.0539 +2016-01-22 18:00:00,0.05 +2016-01-22 19:00:00,0.0344 +2016-01-22 20:00:00,0.0262 +2016-01-22 21:00:00,0.0172 +2016-01-22 22:00:00,0.0141 +2016-01-22 23:00:00,0.0038 +2016-01-23 00:00:00,0.0039 +2016-01-23 01:00:00,0.0039 +2016-01-23 02:00:00,0.0037 +2016-01-23 03:00:00,0.004 +2016-01-23 04:00:00,0.0038 +2016-01-23 05:00:00,0.0109 +2016-01-23 06:00:00,0.0232 +2016-01-23 07:00:00,0.0306 +2016-01-23 08:00:00,0.042 +2016-01-23 09:00:00,0.0471 +2016-01-23 10:00:00,0.0561 +2016-01-23 11:00:00,0.0596 +2016-01-23 12:00:00,0.0589 +2016-01-23 13:00:00,0.0563 +2016-01-23 14:00:00,0.0549 +2016-01-23 15:00:00,0.0621 +2016-01-23 16:00:00,0.0612 +2016-01-23 17:00:00,0.0553 +2016-01-23 18:00:00,0.0477 +2016-01-23 19:00:00,0.0349 +2016-01-23 20:00:00,0.0283 +2016-01-23 21:00:00,0.0254 +2016-01-23 22:00:00,0.0223 +2016-01-23 23:00:00,0.0118 +2016-01-24 00:00:00,0.0043 +2016-01-24 01:00:00,0.0042 +2016-01-24 02:00:00,0.0038 +2016-01-24 03:00:00,0.0038 +2016-01-24 04:00:00,0.004 +2016-01-24 05:00:00,0.0053 +2016-01-24 06:00:00,0.0084 +2016-01-24 07:00:00,0.0136 +2016-01-24 08:00:00,0.0286 +2016-01-24 09:00:00,0.0409 +2016-01-24 10:00:00,0.0531 +2016-01-24 11:00:00,0.0593 +2016-01-24 12:00:00,0.0584 +2016-01-24 13:00:00,0.0586 +2016-01-24 14:00:00,0.0566 +2016-01-24 15:00:00,0.0548 +2016-01-24 16:00:00,0.0595 +2016-01-24 17:00:00,0.0519 +2016-01-24 18:00:00,0.0431 +2016-01-24 19:00:00,0.0326 +2016-01-24 20:00:00,0.0291 +2016-01-24 21:00:00,0.0212 +2016-01-24 22:00:00,0.0084 +2016-01-24 23:00:00,0.004 +2016-01-25 00:00:00,0.0039 +2016-01-25 01:00:00,0.0037 +2016-01-25 02:00:00,0.0037 +2016-01-25 03:00:00,0.004 +2016-01-25 04:00:00,0.0158 +2016-01-25 05:00:00,0.0531 +2016-01-25 06:00:00,0.1435 +2016-01-25 07:00:00,0.3725 +2016-01-25 08:00:00,0.3351 +2016-01-25 09:00:00,0.0575 +2016-01-25 10:00:00,0.0548 +2016-01-25 11:00:00,0.0554 +2016-01-25 12:00:00,0.0513 +2016-01-25 13:00:00,0.053 +2016-01-25 14:00:00,0.0549 +2016-01-25 15:00:00,0.0546 +2016-01-25 16:00:00,0.0545 +2016-01-25 17:00:00,0.0538 +2016-01-25 18:00:00,0.0436 +2016-01-25 19:00:00,0.0287 +2016-01-25 20:00:00,0.0107 +2016-01-25 21:00:00,0.0116 +2016-01-25 22:00:00,0.0038 +2016-01-25 23:00:00,0.0038 +2016-01-26 00:00:00,0.0037 +2016-01-26 01:00:00,0.0037 +2016-01-26 02:00:00,0.0037 +2016-01-26 03:00:00,0.0039 +2016-01-26 04:00:00,0.0147 +2016-01-26 05:00:00,0.0428 +2016-01-26 06:00:00,0.1406 +2016-01-26 07:00:00,0.4332 +2016-01-26 08:00:00,0.4276 +2016-01-26 09:00:00,0.2211 +2016-01-26 10:00:00,0.0555 +2016-01-26 11:00:00,0.0562 +2016-01-26 12:00:00,0.0561 +2016-01-26 13:00:00,0.0558 +2016-01-26 14:00:00,0.0548 +2016-01-26 15:00:00,0.0547 +2016-01-26 16:00:00,0.054 +2016-01-26 17:00:00,0.0495 +2016-01-26 18:00:00,0.0446 +2016-01-26 19:00:00,0.0315 +2016-01-26 20:00:00,0.0216 +2016-01-26 21:00:00,0.0173 +2016-01-26 22:00:00,0.0048 +2016-01-26 23:00:00,0.0038 +2016-01-27 00:00:00,0.0037 +2016-01-27 01:00:00,0.0037 +2016-01-27 02:00:00,0.0037 +2016-01-27 03:00:00,0.0039 +2016-01-27 04:00:00,0.0175 +2016-01-27 05:00:00,0.0557 +2016-01-27 06:00:00,0.1715 +2016-01-27 07:00:00,0.3883 +2016-01-27 08:00:00,0.2465 +2016-01-27 09:00:00,0.06 +2016-01-27 10:00:00,0.0554 +2016-01-27 11:00:00,0.0572 +2016-01-27 12:00:00,0.0531 +2016-01-27 13:00:00,0.0519 +2016-01-27 14:00:00,0.0537 +2016-01-27 15:00:00,0.0576 +2016-01-27 16:00:00,0.0554 +2016-01-27 17:00:00,0.0589 +2016-01-27 18:00:00,0.0463 +2016-01-27 19:00:00,0.0321 +2016-01-27 20:00:00,0.024 +2016-01-27 21:00:00,0.0213 +2016-01-27 22:00:00,0.0064 +2016-01-27 23:00:00,0.0038 +2016-01-28 00:00:00,0.0037 +2016-01-28 01:00:00,0.0037 +2016-01-28 02:00:00,0.0037 +2016-01-28 03:00:00,0.0039 +2016-01-28 04:00:00,0.014 +2016-01-28 05:00:00,0.0562 +2016-01-28 06:00:00,0.1781 +2016-01-28 07:00:00,0.4008 +2016-01-28 08:00:00,0.2838 +2016-01-28 09:00:00,0.061 +2016-01-28 10:00:00,0.059 +2016-01-28 11:00:00,0.0635 +2016-01-28 12:00:00,0.0614 +2016-01-28 13:00:00,0.0587 +2016-01-28 14:00:00,0.0598 +2016-01-28 15:00:00,0.0611 +2016-01-28 16:00:00,0.0564 +2016-01-28 17:00:00,0.0572 +2016-01-28 18:00:00,0.0469 +2016-01-28 19:00:00,0.0317 +2016-01-28 20:00:00,0.0238 +2016-01-28 21:00:00,0.0094 +2016-01-28 22:00:00,0.005 +2016-01-28 23:00:00,0.0041 +2016-01-29 00:00:00,0.0038 +2016-01-29 01:00:00,0.0037 +2016-01-29 02:00:00,0.0037 +2016-01-29 03:00:00,0.004 +2016-01-29 04:00:00,0.0159 +2016-01-29 05:00:00,0.0483 +2016-01-29 06:00:00,0.0759 +2016-01-29 07:00:00,0.0687 +2016-01-29 08:00:00,0.056 +2016-01-29 09:00:00,0.0602 +2016-01-29 10:00:00,0.0584 +2016-01-29 11:00:00,0.0591 +2016-01-29 12:00:00,0.0624 +2016-01-29 13:00:00,0.0576 +2016-01-29 14:00:00,0.0562 +2016-01-29 15:00:00,0.0582 +2016-01-29 16:00:00,0.0548 +2016-01-29 17:00:00,0.0551 +2016-01-29 18:00:00,0.0449 +2016-01-29 19:00:00,0.0316 +2016-01-29 20:00:00,0.0248 +2016-01-29 21:00:00,0.0205 +2016-01-29 22:00:00,0.0089 +2016-01-29 23:00:00,0.0039 +2016-01-30 00:00:00,0.0037 +2016-01-30 01:00:00,0.0038 +2016-01-30 02:00:00,0.0037 +2016-01-30 03:00:00,0.0039 +2016-01-30 04:00:00,0.0041 +2016-01-30 05:00:00,0.0122 +2016-01-30 06:00:00,0.0251 +2016-01-30 07:00:00,0.0322 +2016-01-30 08:00:00,0.0446 +2016-01-30 09:00:00,0.0518 +2016-01-30 10:00:00,0.0583 +2016-01-30 11:00:00,0.0614 +2016-01-30 12:00:00,0.0611 +2016-01-30 13:00:00,0.0563 +2016-01-30 14:00:00,0.0582 +2016-01-30 15:00:00,0.064 +2016-01-30 16:00:00,0.064 +2016-01-30 17:00:00,0.0589 +2016-01-30 18:00:00,0.048 +2016-01-30 19:00:00,0.0328 +2016-01-30 20:00:00,0.0291 +2016-01-30 21:00:00,0.028 +2016-01-30 22:00:00,0.0221 +2016-01-30 23:00:00,0.0099 +2016-01-31 00:00:00,0.0039 +2016-01-31 01:00:00,0.0039 +2016-01-31 02:00:00,0.0039 +2016-01-31 03:00:00,0.0042 +2016-01-31 04:00:00,0.0038 +2016-01-31 05:00:00,0.0041 +2016-01-31 06:00:00,0.0101 +2016-01-31 07:00:00,0.0208 +2016-01-31 08:00:00,0.0305 +2016-01-31 09:00:00,0.0427 +2016-01-31 10:00:00,0.0515 +2016-01-31 11:00:00,0.0613 +2016-01-31 12:00:00,0.0615 +2016-01-31 13:00:00,0.0574 +2016-01-31 14:00:00,0.059 +2016-01-31 15:00:00,0.0632 +2016-01-31 16:00:00,0.0574 +2016-01-31 17:00:00,0.0551 +2016-01-31 18:00:00,0.0455 +2016-01-31 19:00:00,0.034 +2016-01-31 20:00:00,0.0299 +2016-01-31 21:00:00,0.0254 +2016-01-31 22:00:00,0.0132 +2016-01-31 23:00:00,0.0041 +2016-02-01 00:00:00,0.0039 +2016-02-01 01:00:00,0.0038 +2016-02-01 02:00:00,0.0037 +2016-02-01 03:00:00,0.0039 +2016-02-01 04:00:00,0.0188 +2016-02-01 05:00:00,0.0556 +2016-02-01 06:00:00,0.1145 +2016-02-01 07:00:00,0.2879 +2016-02-01 08:00:00,0.087 +2016-02-01 09:00:00,0.0543 +2016-02-01 10:00:00,0.0546 +2016-02-01 11:00:00,0.0525 +2016-02-01 12:00:00,0.0518 +2016-02-01 13:00:00,0.0511 +2016-02-01 14:00:00,0.0537 +2016-02-01 15:00:00,0.053 +2016-02-01 16:00:00,0.0502 +2016-02-01 17:00:00,0.0528 +2016-02-01 18:00:00,0.0445 +2016-02-01 19:00:00,0.0305 +2016-02-01 20:00:00,0.0245 +2016-02-01 21:00:00,0.0164 +2016-02-01 22:00:00,0.0057 +2016-02-01 23:00:00,0.0038 +2016-02-02 00:00:00,0.0037 +2016-02-02 01:00:00,0.0037 +2016-02-02 02:00:00,0.0037 +2016-02-02 03:00:00,0.0037 +2016-02-02 04:00:00,0.0174 +2016-02-02 05:00:00,0.0557 +2016-02-02 06:00:00,0.1949 +2016-02-02 07:00:00,0.4026 +2016-02-02 08:00:00,0.4322 +2016-02-02 09:00:00,0.277 +2016-02-02 10:00:00,0.0573 +2016-02-02 11:00:00,0.0497 +2016-02-02 12:00:00,0.0533 +2016-02-02 13:00:00,0.0538 +2016-02-02 14:00:00,0.0541 +2016-02-02 15:00:00,0.0565 +2016-02-02 16:00:00,0.0506 +2016-02-02 17:00:00,0.0549 +2016-02-02 18:00:00,0.0458 +2016-02-02 19:00:00,0.0324 +2016-02-02 20:00:00,0.0226 +2016-02-02 21:00:00,0.0138 +2016-02-02 22:00:00,0.0046 +2016-02-02 23:00:00,0.0037 +2016-02-03 00:00:00,0.0037 +2016-02-03 01:00:00,0.0039 +2016-02-03 02:00:00,0.0038 +2016-02-03 03:00:00,0.004 +2016-02-03 04:00:00,0.0151 +2016-02-03 05:00:00,0.0572 +2016-02-03 06:00:00,0.1524 +2016-02-03 07:00:00,0.402 +2016-02-03 08:00:00,0.2616 +2016-02-03 09:00:00,0.0629 +2016-02-03 10:00:00,0.0588 +2016-02-03 11:00:00,0.0546 +2016-02-03 12:00:00,0.0558 +2016-02-03 13:00:00,0.0529 +2016-02-03 14:00:00,0.057 +2016-02-03 15:00:00,0.0572 +2016-02-03 16:00:00,0.0572 +2016-02-03 17:00:00,0.0559 +2016-02-03 18:00:00,0.0455 +2016-02-03 19:00:00,0.0324 +2016-02-03 20:00:00,0.0237 +2016-02-03 21:00:00,0.017 +2016-02-03 22:00:00,0.0042 +2016-02-03 23:00:00,0.004 +2016-02-04 00:00:00,0.0038 +2016-02-04 01:00:00,0.0037 +2016-02-04 02:00:00,0.0037 +2016-02-04 03:00:00,0.0039 +2016-02-04 04:00:00,0.0135 +2016-02-04 05:00:00,0.0561 +2016-02-04 06:00:00,0.1352 +2016-02-04 07:00:00,0.2955 +2016-02-04 08:00:00,0.0553 +2016-02-04 09:00:00,0.0624 +2016-02-04 10:00:00,0.0639 +2016-02-04 11:00:00,0.056 +2016-02-04 12:00:00,0.0617 +2016-02-04 13:00:00,0.0619 +2016-02-04 14:00:00,0.0567 +2016-02-04 15:00:00,0.0573 +2016-02-04 16:00:00,0.0581 +2016-02-04 17:00:00,0.0572 +2016-02-04 18:00:00,0.0483 +2016-02-04 19:00:00,0.0335 +2016-02-04 20:00:00,0.0255 +2016-02-04 21:00:00,0.0152 +2016-02-04 22:00:00,0.0058 +2016-02-04 23:00:00,0.0044 +2016-02-05 00:00:00,0.0039 +2016-02-05 01:00:00,0.0037 +2016-02-05 02:00:00,0.0038 +2016-02-05 03:00:00,0.0039 +2016-02-05 04:00:00,0.0148 +2016-02-05 05:00:00,0.0493 +2016-02-05 06:00:00,0.0731 +2016-02-05 07:00:00,0.0688 +2016-02-05 08:00:00,0.06 +2016-02-05 09:00:00,0.064 +2016-02-05 10:00:00,0.0606 +2016-02-05 11:00:00,0.0579 +2016-02-05 12:00:00,0.0613 +2016-02-05 13:00:00,0.0586 +2016-02-05 14:00:00,0.0573 +2016-02-05 15:00:00,0.063 +2016-02-05 16:00:00,0.058 +2016-02-05 17:00:00,0.0585 +2016-02-05 18:00:00,0.0541 +2016-02-05 19:00:00,0.0375 +2016-02-05 20:00:00,0.027 +2016-02-05 21:00:00,0.0197 +2016-02-05 22:00:00,0.0113 +2016-02-05 23:00:00,0.0045 +2016-02-06 00:00:00,0.0038 +2016-02-06 01:00:00,0.0043 +2016-02-06 02:00:00,0.0038 +2016-02-06 03:00:00,0.0039 +2016-02-06 04:00:00,0.0041 +2016-02-06 05:00:00,0.0088 +2016-02-06 06:00:00,0.026 +2016-02-06 07:00:00,0.0349 +2016-02-06 08:00:00,0.0458 +2016-02-06 09:00:00,0.0512 +2016-02-06 10:00:00,0.0569 +2016-02-06 11:00:00,0.059 +2016-02-06 12:00:00,0.0591 +2016-02-06 13:00:00,0.0598 +2016-02-06 14:00:00,0.0652 +2016-02-06 15:00:00,0.0669 +2016-02-06 16:00:00,0.0625 +2016-02-06 17:00:00,0.0579 +2016-02-06 18:00:00,0.048 +2016-02-06 19:00:00,0.0353 +2016-02-06 20:00:00,0.0266 +2016-02-06 21:00:00,0.0268 +2016-02-06 22:00:00,0.0214 +2016-02-06 23:00:00,0.0079 +2016-02-07 00:00:00,0.0045 +2016-02-07 01:00:00,0.004 +2016-02-07 02:00:00,0.0039 +2016-02-07 03:00:00,0.0037 +2016-02-07 04:00:00,0.0041 +2016-02-07 05:00:00,0.0048 +2016-02-07 06:00:00,0.0083 +2016-02-07 07:00:00,0.0178 +2016-02-07 08:00:00,0.0309 +2016-02-07 09:00:00,0.0428 +2016-02-07 10:00:00,0.0467 +2016-02-07 11:00:00,0.0479 +2016-02-07 12:00:00,0.05 +2016-02-07 13:00:00,0.054 +2016-02-07 14:00:00,0.055 +2016-02-07 15:00:00,0.0512 +2016-02-07 16:00:00,0.0391 +2016-02-07 17:00:00,0.038 +2016-02-07 18:00:00,0.0357 +2016-02-07 19:00:00,0.0349 +2016-02-07 20:00:00,0.0444 +2016-02-07 21:00:00,0.0272 +2016-02-07 22:00:00,0.0097 +2016-02-07 23:00:00,0.0037 +2016-02-08 00:00:00,0.0037 +2016-02-08 01:00:00,0.0039 +2016-02-08 02:00:00,0.0037 +2016-02-08 03:00:00,0.0037 +2016-02-08 04:00:00,0.0167 +2016-02-08 05:00:00,0.0545 +2016-02-08 06:00:00,0.1613 +2016-02-08 07:00:00,0.3431 +2016-02-08 08:00:00,0.148 +2016-02-08 09:00:00,0.0572 +2016-02-08 10:00:00,0.0597 +2016-02-08 11:00:00,0.0556 +2016-02-08 12:00:00,0.0532 +2016-02-08 13:00:00,0.052 +2016-02-08 14:00:00,0.055 +2016-02-08 15:00:00,0.0567 +2016-02-08 16:00:00,0.053 +2016-02-08 17:00:00,0.0568 +2016-02-08 18:00:00,0.0512 +2016-02-08 19:00:00,0.0374 +2016-02-08 20:00:00,0.0251 +2016-02-08 21:00:00,0.0197 +2016-02-08 22:00:00,0.0063 +2016-02-08 23:00:00,0.0042 +2016-02-09 00:00:00,0.0037 +2016-02-09 01:00:00,0.0037 +2016-02-09 02:00:00,0.0037 +2016-02-09 03:00:00,0.004 +2016-02-09 04:00:00,0.0154 +2016-02-09 05:00:00,0.0558 +2016-02-09 06:00:00,0.1548 +2016-02-09 07:00:00,0.3815 +2016-02-09 08:00:00,0.2817 +2016-02-09 09:00:00,0.0566 +2016-02-09 10:00:00,0.0633 +2016-02-09 11:00:00,0.0592 +2016-02-09 12:00:00,0.0538 +2016-02-09 13:00:00,0.0593 +2016-02-09 14:00:00,0.052 +2016-02-09 15:00:00,0.0553 +2016-02-09 16:00:00,0.0561 +2016-02-09 17:00:00,0.0572 +2016-02-09 18:00:00,0.0485 +2016-02-09 19:00:00,0.036 +2016-02-09 20:00:00,0.0251 +2016-02-09 21:00:00,0.0141 +2016-02-09 22:00:00,0.0043 +2016-02-09 23:00:00,0.0038 +2016-02-10 00:00:00,0.0042 +2016-02-10 01:00:00,0.0048 +2016-02-10 02:00:00,0.0045 +2016-02-10 03:00:00,0.0056 +2016-02-10 04:00:00,0.0139 +2016-02-10 05:00:00,0.0567 +2016-02-10 06:00:00,0.1851 +2016-02-10 07:00:00,0.3638 +2016-02-10 08:00:00,0.3028 +2016-02-10 09:00:00,0.061 +2016-02-10 10:00:00,0.0582 +2016-02-10 11:00:00,0.0573 +2016-02-10 12:00:00,0.0578 +2016-02-10 13:00:00,0.0563 +2016-02-10 14:00:00,0.0569 +2016-02-10 15:00:00,0.0552 +2016-02-10 16:00:00,0.0568 +2016-02-10 17:00:00,0.0585 +2016-02-10 18:00:00,0.049 +2016-02-10 19:00:00,0.0342 +2016-02-10 20:00:00,0.027 +2016-02-10 21:00:00,0.0154 +2016-02-10 22:00:00,0.0073 +2016-02-10 23:00:00,0.005 +2016-02-11 00:00:00,0.0049 +2016-02-11 01:00:00,0.0046 +2016-02-11 02:00:00,0.0048 +2016-02-11 03:00:00,0.0053 +2016-02-11 04:00:00,0.0154 +2016-02-11 05:00:00,0.0537 +2016-02-11 06:00:00,0.1599 +2016-02-11 07:00:00,0.3598 +2016-02-11 08:00:00,0.2253 +2016-02-11 09:00:00,0.0626 +2016-02-11 10:00:00,0.0618 +2016-02-11 11:00:00,0.0606 +2016-02-11 12:00:00,0.0609 +2016-02-11 13:00:00,0.0565 +2016-02-11 14:00:00,0.0588 +2016-02-11 15:00:00,0.0614 +2016-02-11 16:00:00,0.059 +2016-02-11 17:00:00,0.057 +2016-02-11 18:00:00,0.0489 +2016-02-11 19:00:00,0.0352 +2016-02-11 20:00:00,0.0263 +2016-02-11 21:00:00,0.0168 +2016-02-11 22:00:00,0.0064 +2016-02-11 23:00:00,0.0054 +2016-02-12 00:00:00,0.0051 +2016-02-12 01:00:00,0.0048 +2016-02-12 02:00:00,0.0048 +2016-02-12 03:00:00,0.0053 +2016-02-12 04:00:00,0.0129 +2016-02-12 05:00:00,0.0517 +2016-02-12 06:00:00,0.0743 +2016-02-12 07:00:00,0.3867 +2016-02-12 08:00:00,0.0875 +2016-02-12 09:00:00,0.0614 +2016-02-12 10:00:00,0.0624 +2016-02-12 11:00:00,0.0606 +2016-02-12 12:00:00,0.0628 +2016-02-12 13:00:00,0.0591 +2016-02-12 14:00:00,0.0602 +2016-02-12 15:00:00,0.059 +2016-02-12 16:00:00,0.0579 +2016-02-12 17:00:00,0.0569 +2016-02-12 18:00:00,0.047 +2016-02-12 19:00:00,0.0374 +2016-02-12 20:00:00,0.0287 +2016-02-12 21:00:00,0.0231 +2016-02-12 22:00:00,0.0179 +2016-02-12 23:00:00,0.0066 +2016-02-13 00:00:00,0.0054 +2016-02-13 01:00:00,0.0049 +2016-02-13 02:00:00,0.0046 +2016-02-13 03:00:00,0.0045 +2016-02-13 04:00:00,0.0052 +2016-02-13 05:00:00,0.0091 +2016-02-13 06:00:00,0.0231 +2016-02-13 07:00:00,0.0327 +2016-02-13 08:00:00,0.0437 +2016-02-13 09:00:00,0.0521 +2016-02-13 10:00:00,0.0579 +2016-02-13 11:00:00,0.0624 +2016-02-13 12:00:00,0.057 +2016-02-13 13:00:00,0.0565 +2016-02-13 14:00:00,0.0592 +2016-02-13 15:00:00,0.0607 +2016-02-13 16:00:00,0.0612 +2016-02-13 17:00:00,0.0599 +2016-02-13 18:00:00,0.0462 +2016-02-13 19:00:00,0.032 +2016-02-13 20:00:00,0.0257 +2016-02-13 21:00:00,0.0241 +2016-02-13 22:00:00,0.0202 +2016-02-13 23:00:00,0.009 +2016-02-14 00:00:00,0.0031 +2016-02-14 01:00:00,0.0021 +2016-02-14 02:00:00,0.0015 +2016-02-14 03:00:00,0.001 +2016-02-14 04:00:00,0.0011 +2016-02-14 05:00:00,0.0016 +2016-02-14 06:00:00,0.0059 +2016-02-14 07:00:00,0.0121 +2016-02-14 08:00:00,0.0237 +2016-02-14 09:00:00,0.0351 +2016-02-14 10:00:00,0.043 +2016-02-14 11:00:00,0.0496 +2016-02-14 12:00:00,0.0514 +2016-02-14 13:00:00,0.053 +2016-02-14 14:00:00,0.0529 +2016-02-14 15:00:00,0.0535 +2016-02-14 16:00:00,0.0516 +2016-02-14 17:00:00,0.048 +2016-02-14 18:00:00,0.0405 +2016-02-14 19:00:00,0.0308 +2016-02-14 20:00:00,0.0276 +2016-02-14 21:00:00,0.0221 +2016-02-14 22:00:00,0.0095 +2016-02-14 23:00:00,0.0029 +2016-02-15 00:00:00,0.0018 +2016-02-15 01:00:00,0.0011 +2016-02-15 02:00:00,0.0009 +2016-02-15 03:00:00,0.0011 +2016-02-15 04:00:00,0.0107 +2016-02-15 05:00:00,0.0426 +2016-02-15 06:00:00,0.1024 +2016-02-15 07:00:00,0.2392 +2016-02-15 08:00:00,0.0997 +2016-02-15 09:00:00,0.0536 +2016-02-15 10:00:00,0.0528 +2016-02-15 11:00:00,0.0516 +2016-02-15 12:00:00,0.0502 +2016-02-15 13:00:00,0.0503 +2016-02-15 14:00:00,0.0532 +2016-02-15 15:00:00,0.0555 +2016-02-15 16:00:00,0.0548 +2016-02-15 17:00:00,0.0566 +2016-02-15 18:00:00,0.0461 +2016-02-15 19:00:00,0.0314 +2016-02-15 20:00:00,0.022 +2016-02-15 21:00:00,0.0159 +2016-02-15 22:00:00,0.0055 +2016-02-15 23:00:00,0.0029 +2016-02-16 00:00:00,0.0017 +2016-02-16 01:00:00,0.0011 +2016-02-16 02:00:00,0.001 +2016-02-16 03:00:00,0.0012 +2016-02-16 04:00:00,0.0116 +2016-02-16 05:00:00,0.0452 +2016-02-16 06:00:00,0.1273 +2016-02-16 07:00:00,0.3189 +2016-02-16 08:00:00,0.3319 +2016-02-16 09:00:00,0.2011 +2016-02-16 10:00:00,0.056 +2016-02-16 11:00:00,0.05 +2016-02-16 12:00:00,0.0499 +2016-02-16 13:00:00,0.0502 +2016-02-16 14:00:00,0.051 +2016-02-16 15:00:00,0.0539 +2016-02-16 16:00:00,0.0543 +2016-02-16 17:00:00,0.0567 +2016-02-16 18:00:00,0.0477 +2016-02-16 19:00:00,0.0315 +2016-02-16 20:00:00,0.022 +2016-02-16 21:00:00,0.0145 +2016-02-16 22:00:00,0.0053 +2016-02-16 23:00:00,0.0029 +2016-02-17 00:00:00,0.0017 +2016-02-17 01:00:00,0.0011 +2016-02-17 02:00:00,0.001 +2016-02-17 03:00:00,0.0012 +2016-02-17 04:00:00,0.011 +2016-02-17 05:00:00,0.0461 +2016-02-17 06:00:00,0.1417 +2016-02-17 07:00:00,0.3107 +2016-02-17 08:00:00,0.2233 +2016-02-17 09:00:00,0.0592 +2016-02-17 10:00:00,0.054 +2016-02-17 11:00:00,0.0521 +2016-02-17 12:00:00,0.0528 +2016-02-17 13:00:00,0.0532 +2016-02-17 14:00:00,0.0545 +2016-02-17 15:00:00,0.0557 +2016-02-17 16:00:00,0.0578 +2016-02-17 17:00:00,0.0602 +2016-02-17 18:00:00,0.0486 +2016-02-17 19:00:00,0.0327 +2016-02-17 20:00:00,0.0236 +2016-02-17 21:00:00,0.0163 +2016-02-17 22:00:00,0.0062 +2016-02-17 23:00:00,0.0031 +2016-02-18 00:00:00,0.0047 +2016-02-18 01:00:00,0.0044 +2016-02-18 02:00:00,0.0047 +2016-02-18 03:00:00,0.0051 +2016-02-18 04:00:00,0.014 +2016-02-18 05:00:00,0.0534 +2016-02-18 06:00:00,0.1357 +2016-02-18 07:00:00,0.1584 +2016-02-18 08:00:00,0.0566 +2016-02-18 09:00:00,0.0608 +2016-02-18 10:00:00,0.0657 +2016-02-18 11:00:00,0.0586 +2016-02-18 12:00:00,0.0574 +2016-02-18 13:00:00,0.0555 +2016-02-18 14:00:00,0.0538 +2016-02-18 15:00:00,0.0545 +2016-02-18 16:00:00,0.0569 +2016-02-18 17:00:00,0.0522 +2016-02-18 18:00:00,0.0454 +2016-02-18 19:00:00,0.0343 +2016-02-18 20:00:00,0.026 +2016-02-18 21:00:00,0.0183 +2016-02-18 22:00:00,0.0084 +2016-02-18 23:00:00,0.0055 +2016-02-19 00:00:00,0.0048 +2016-02-19 01:00:00,0.0046 +2016-02-19 02:00:00,0.0044 +2016-02-19 03:00:00,0.0056 +2016-02-19 04:00:00,0.0144 +2016-02-19 05:00:00,0.0488 +2016-02-19 06:00:00,0.0708 +2016-02-19 07:00:00,0.0582 +2016-02-19 08:00:00,0.0601 +2016-02-19 09:00:00,0.0602 +2016-02-19 10:00:00,0.0598 +2016-02-19 11:00:00,0.0593 +2016-02-19 12:00:00,0.0563 +2016-02-19 13:00:00,0.0589 +2016-02-19 14:00:00,0.0551 +2016-02-19 15:00:00,0.0533 +2016-02-19 16:00:00,0.0543 +2016-02-19 17:00:00,0.0543 +2016-02-19 18:00:00,0.0464 +2016-02-19 19:00:00,0.0344 +2016-02-19 20:00:00,0.0256 +2016-02-19 21:00:00,0.0206 +2016-02-19 22:00:00,0.0121 +2016-02-19 23:00:00,0.0045 +2016-02-20 00:00:00,0.0028 +2016-02-20 01:00:00,0.0019 +2016-02-20 02:00:00,0.0015 +2016-02-20 03:00:00,0.0012 +2016-02-20 04:00:00,0.0013 +2016-02-20 05:00:00,0.0068 +2016-02-20 06:00:00,0.0191 +2016-02-20 07:00:00,0.027 +2016-02-20 08:00:00,0.0384 +2016-02-20 09:00:00,0.0453 +2016-02-20 10:00:00,0.052 +2016-02-20 11:00:00,0.0556 +2016-02-20 12:00:00,0.0557 +2016-02-20 13:00:00,0.0538 +2016-02-20 14:00:00,0.0553 +2016-02-20 15:00:00,0.0592 +2016-02-20 16:00:00,0.0581 +2016-02-20 17:00:00,0.0554 +2016-02-20 18:00:00,0.0457 +2016-02-20 19:00:00,0.0321 +2016-02-20 20:00:00,0.0259 +2016-02-20 21:00:00,0.0244 +2016-02-20 22:00:00,0.0201 +2016-02-20 23:00:00,0.0087 +2016-02-21 00:00:00,0.0032 +2016-02-21 01:00:00,0.002 +2016-02-21 02:00:00,0.0016 +2016-02-21 03:00:00,0.001 +2016-02-21 04:00:00,0.0011 +2016-02-21 05:00:00,0.0018 +2016-02-21 06:00:00,0.0058 +2016-02-21 07:00:00,0.0139 +2016-02-21 08:00:00,0.0241 +2016-02-21 09:00:00,0.0352 +2016-02-21 10:00:00,0.044 +2016-02-21 11:00:00,0.0504 +2016-02-21 12:00:00,0.0526 +2016-02-21 13:00:00,0.0528 +2016-02-21 14:00:00,0.0526 +2016-02-21 15:00:00,0.053 +2016-02-21 16:00:00,0.0506 +2016-02-21 17:00:00,0.0476 +2016-02-21 18:00:00,0.0391 +2016-02-21 19:00:00,0.0309 +2016-02-21 20:00:00,0.0286 +2016-02-21 21:00:00,0.0219 +2016-02-21 22:00:00,0.0096 +2016-02-21 23:00:00,0.0029 +2016-02-22 00:00:00,0.0018 +2016-02-22 01:00:00,0.0011 +2016-02-22 02:00:00,0.0009 +2016-02-22 03:00:00,0.0011 +2016-02-22 04:00:00,0.0116 +2016-02-22 05:00:00,0.0442 +2016-02-22 06:00:00,0.1123 +2016-02-22 07:00:00,0.2651 +2016-02-22 08:00:00,0.1219 +2016-02-22 09:00:00,0.0537 +2016-02-22 10:00:00,0.0525 +2016-02-22 11:00:00,0.0503 +2016-02-22 12:00:00,0.0487 +2016-02-22 13:00:00,0.0486 +2016-02-22 14:00:00,0.0519 +2016-02-22 15:00:00,0.0539 +2016-02-22 16:00:00,0.0531 +2016-02-22 17:00:00,0.056 +2016-02-22 18:00:00,0.0463 +2016-02-22 19:00:00,0.0307 +2016-02-22 20:00:00,0.0213 +2016-02-22 21:00:00,0.0149 +2016-02-22 22:00:00,0.0046 +2016-02-22 23:00:00,0.0028 +2016-02-23 00:00:00,0.0048 +2016-02-23 01:00:00,0.0044 +2016-02-23 02:00:00,0.0045 +2016-02-23 03:00:00,0.005 +2016-02-23 04:00:00,0.0145 +2016-02-23 05:00:00,0.0534 +2016-02-23 06:00:00,0.1516 +2016-02-23 07:00:00,0.3778 +2016-02-23 08:00:00,0.3831 +2016-02-23 09:00:00,0.1558 +2016-02-23 10:00:00,0.0577 +2016-02-23 11:00:00,0.059 +2016-02-23 12:00:00,0.0569 +2016-02-23 13:00:00,0.0561 +2016-02-23 14:00:00,0.0521 +2016-02-23 15:00:00,0.057 +2016-02-23 16:00:00,0.0528 +2016-02-23 17:00:00,0.054 +2016-02-23 18:00:00,0.0436 +2016-02-23 19:00:00,0.0333 +2016-02-23 20:00:00,0.0258 +2016-02-23 21:00:00,0.0151 +2016-02-23 22:00:00,0.0066 +2016-02-23 23:00:00,0.0053 +2016-02-24 00:00:00,0.0047 +2016-02-24 01:00:00,0.0043 +2016-02-24 02:00:00,0.0046 +2016-02-24 03:00:00,0.0053 +2016-02-24 04:00:00,0.017 +2016-02-24 05:00:00,0.0546 +2016-02-24 06:00:00,0.1745 +2016-02-24 07:00:00,0.3528 +2016-02-24 08:00:00,0.3309 +2016-02-24 09:00:00,0.0589 +2016-02-24 10:00:00,0.0593 +2016-02-24 11:00:00,0.0547 +2016-02-24 12:00:00,0.0557 +2016-02-24 13:00:00,0.0542 +2016-02-24 14:00:00,0.0588 +2016-02-24 15:00:00,0.0573 +2016-02-24 16:00:00,0.0579 +2016-02-24 17:00:00,0.0559 +2016-02-24 18:00:00,0.0484 +2016-02-24 19:00:00,0.0344 +2016-02-24 20:00:00,0.0248 +2016-02-24 21:00:00,0.0125 +2016-02-24 22:00:00,0.0075 +2016-02-24 23:00:00,0.0053 +2016-02-25 00:00:00,0.0047 +2016-02-25 01:00:00,0.0044 +2016-02-25 02:00:00,0.0048 +2016-02-25 03:00:00,0.0052 +2016-02-25 04:00:00,0.0123 +2016-02-25 05:00:00,0.0551 +2016-02-25 06:00:00,0.1334 +2016-02-25 07:00:00,0.3469 +2016-02-25 08:00:00,0.2208 +2016-02-25 09:00:00,0.0652 +2016-02-25 10:00:00,0.0633 +2016-02-25 11:00:00,0.0577 +2016-02-25 12:00:00,0.0547 +2016-02-25 13:00:00,0.0575 +2016-02-25 14:00:00,0.0576 +2016-02-25 15:00:00,0.0622 +2016-02-25 16:00:00,0.0571 +2016-02-25 17:00:00,0.0577 +2016-02-25 18:00:00,0.0486 +2016-02-25 19:00:00,0.0342 +2016-02-25 20:00:00,0.0263 +2016-02-25 21:00:00,0.0183 +2016-02-25 22:00:00,0.0069 +2016-02-25 23:00:00,0.0051 +2016-02-26 00:00:00,0.0048 +2016-02-26 01:00:00,0.0044 +2016-02-26 02:00:00,0.0048 +2016-02-26 03:00:00,0.0056 +2016-02-26 04:00:00,0.0129 +2016-02-26 05:00:00,0.0509 +2016-02-26 06:00:00,0.0765 +2016-02-26 07:00:00,0.0673 +2016-02-26 08:00:00,0.0621 +2016-02-26 09:00:00,0.0618 +2016-02-26 10:00:00,0.0581 +2016-02-26 11:00:00,0.0607 +2016-02-26 12:00:00,0.0624 +2016-02-26 13:00:00,0.0545 +2016-02-26 14:00:00,0.06 +2016-02-26 15:00:00,0.0608 +2016-02-26 16:00:00,0.0607 +2016-02-26 17:00:00,0.0588 +2016-02-26 18:00:00,0.0507 +2016-02-26 19:00:00,0.0364 +2016-02-26 20:00:00,0.0278 +2016-02-26 21:00:00,0.0231 +2016-02-26 22:00:00,0.0176 +2016-02-26 23:00:00,0.0062 +2016-02-27 00:00:00,0.0057 +2016-02-27 01:00:00,0.0047 +2016-02-27 02:00:00,0.0045 +2016-02-27 03:00:00,0.005 +2016-02-27 04:00:00,0.0057 +2016-02-27 05:00:00,0.0106 +2016-02-27 06:00:00,0.0234 +2016-02-27 07:00:00,0.0329 +2016-02-27 08:00:00,0.0468 +2016-02-27 09:00:00,0.053 +2016-02-27 10:00:00,0.0598 +2016-02-27 11:00:00,0.0597 +2016-02-27 12:00:00,0.0563 +2016-02-27 13:00:00,0.0541 +2016-02-27 14:00:00,0.0569 +2016-02-27 15:00:00,0.0594 +2016-02-27 16:00:00,0.0586 +2016-02-27 17:00:00,0.0564 +2016-02-27 18:00:00,0.0457 +2016-02-27 19:00:00,0.0321 +2016-02-27 20:00:00,0.0256 +2016-02-27 21:00:00,0.025 +2016-02-27 22:00:00,0.0199 +2016-02-27 23:00:00,0.0085 +2016-02-28 00:00:00,0.0034 +2016-02-28 01:00:00,0.0021 +2016-02-28 02:00:00,0.0016 +2016-02-28 03:00:00,0.0012 +2016-02-28 04:00:00,0.0011 +2016-02-28 05:00:00,0.002 +2016-02-28 06:00:00,0.0063 +2016-02-28 07:00:00,0.0147 +2016-02-28 08:00:00,0.0249 +2016-02-28 09:00:00,0.0364 +2016-02-28 10:00:00,0.0437 +2016-02-28 11:00:00,0.0496 +2016-02-28 12:00:00,0.0511 +2016-02-28 13:00:00,0.052 +2016-02-28 14:00:00,0.053 +2016-02-28 15:00:00,0.0529 +2016-02-28 16:00:00,0.045 +2016-02-28 17:00:00,0.0446 +2016-02-28 18:00:00,0.0387 +2016-02-28 19:00:00,0.0323 +2016-02-28 20:00:00,0.0328 +2016-02-28 21:00:00,0.0211 +2016-02-28 22:00:00,0.0092 +2016-02-28 23:00:00,0.0056 +2016-02-29 00:00:00,0.0048 +2016-02-29 01:00:00,0.0046 +2016-02-29 02:00:00,0.0046 +2016-02-29 03:00:00,0.0054 +2016-02-29 04:00:00,0.0166 +2016-02-29 05:00:00,0.0568 +2016-02-29 06:00:00,0.1264 +2016-02-29 07:00:00,0.3744 +2016-02-29 08:00:00,0.4063 +2016-02-29 09:00:00,0.1178 +2016-02-29 10:00:00,0.0588 +2016-02-29 11:00:00,0.0562 +2016-02-29 12:00:00,0.0467 +2016-02-29 13:00:00,0.0541 +2016-02-29 14:00:00,0.0528 +2016-02-29 15:00:00,0.0551 +2016-02-29 16:00:00,0.0521 +2016-02-29 17:00:00,0.0532 +2016-02-29 18:00:00,0.0467 +2016-02-29 19:00:00,0.0334 +2016-02-29 20:00:00,0.0228 +2016-02-29 21:00:00,0.0165 +2016-02-29 22:00:00,0.006 +2016-02-29 23:00:00,0.003 +2016-03-01 00:00:00,0.0017 +2016-03-01 01:00:00,0.0011 +2016-03-01 02:00:00,0.001 +2016-03-01 03:00:00,0.0011 +2016-03-01 04:00:00,0.0107 +2016-03-01 05:00:00,0.0504 +2016-03-01 06:00:00,0.1586 +2016-03-01 07:00:00,0.3636 +2016-03-01 08:00:00,0.194 +2016-03-01 09:00:00,0.0609 +2016-03-01 10:00:00,0.0602 +2016-03-01 11:00:00,0.0582 +2016-03-01 12:00:00,0.0573 +2016-03-01 13:00:00,0.0552 +2016-03-01 14:00:00,0.058 +2016-03-01 15:00:00,0.0539 +2016-03-01 16:00:00,0.0531 +2016-03-01 17:00:00,0.0565 +2016-03-01 18:00:00,0.0474 +2016-03-01 19:00:00,0.0349 +2016-03-01 20:00:00,0.0237 +2016-03-01 21:00:00,0.0137 +2016-03-01 22:00:00,0.0063 +2016-03-01 23:00:00,0.0047 +2016-03-02 00:00:00,0.0043 +2016-03-02 01:00:00,0.0045 +2016-03-02 02:00:00,0.0044 +2016-03-02 03:00:00,0.0054 +2016-03-02 04:00:00,0.0137 +2016-03-02 05:00:00,0.0558 +2016-03-02 06:00:00,0.1501 +2016-03-02 07:00:00,0.3547 +2016-03-02 08:00:00,0.3786 +2016-03-02 09:00:00,0.1247 +2016-03-02 10:00:00,0.0334 +2016-03-02 11:00:00,0.0147 +2016-03-02 12:00:00,0.0145 +2016-03-02 13:00:00,0.0155 +2016-03-02 14:00:00,0.0147 +2016-03-02 15:00:00,0.0132 +2016-03-02 16:00:00,0.0146 +2016-03-02 17:00:00,0.0144 +2016-03-02 18:00:00,0.0123 +2016-03-02 19:00:00,0.0102 +2016-03-02 20:00:00,0.0091 +2016-03-02 21:00:00,0.0072 +2016-03-02 22:00:00,0.0058 +2016-03-02 23:00:00,0.0052 +2016-03-03 00:00:00,0.0147 +2016-03-03 01:00:00,0.0137 +2016-03-03 02:00:00,0.0142 +2016-03-03 03:00:00,0.0151 +2016-03-03 04:00:00,0.027 +2016-03-03 05:00:00,0.046 +2016-03-03 06:00:00,0.1561 +2016-03-03 07:00:00,0.3225 +2016-03-03 08:00:00,0.3752 +2016-03-03 09:00:00,0.0642 +2016-03-03 10:00:00,0.0643 +2016-03-03 11:00:00,0.0614 +2016-03-03 12:00:00,0.0463 +2016-03-03 13:00:00,0.0365 +2016-03-03 14:00:00,0.0471 +2016-03-03 15:00:00,0.059 +2016-03-03 16:00:00,0.0569 +2016-03-03 17:00:00,0.0597 +2016-03-03 18:00:00,0.054 +2016-03-03 19:00:00,0.0432 +2016-03-03 20:00:00,0.034 +2016-03-03 21:00:00,0.0263 +2016-03-03 22:00:00,0.0215 +2016-03-03 23:00:00,0.0169 +2016-03-04 00:00:00,0.014 +2016-03-04 01:00:00,0.0136 +2016-03-04 02:00:00,0.0129 +2016-03-04 03:00:00,0.0176 +2016-03-04 04:00:00,0.0257 +2016-03-04 05:00:00,0.0456 +2016-03-04 06:00:00,0.183 +2016-03-04 07:00:00,0.3022 +2016-03-04 08:00:00,0.2404 +2016-03-04 09:00:00,0.0555 +2016-03-04 10:00:00,0.062 +2016-03-04 11:00:00,0.0672 +2016-03-04 12:00:00,0.0684 +2016-03-04 13:00:00,0.0584 +2016-03-04 14:00:00,0.0549 +2016-03-04 15:00:00,0.0613 +2016-03-04 16:00:00,0.0567 +2016-03-04 17:00:00,0.0544 +2016-03-04 18:00:00,0.0519 +2016-03-04 19:00:00,0.0436 +2016-03-04 20:00:00,0.0382 +2016-03-04 21:00:00,0.0305 +2016-03-04 22:00:00,0.0255 +2016-03-04 23:00:00,0.0189 +2016-03-05 00:00:00,0.0054 +2016-03-05 01:00:00,0.0047 +2016-03-05 02:00:00,0.0043 +2016-03-05 03:00:00,0.0045 +2016-03-05 04:00:00,0.0052 +2016-03-05 05:00:00,0.0073 +2016-03-05 06:00:00,0.0179 +2016-03-05 07:00:00,0.0282 +2016-03-05 08:00:00,0.0335 +2016-03-05 09:00:00,0.0443 +2016-03-05 10:00:00,0.0543 +2016-03-05 11:00:00,0.0579 +2016-03-05 12:00:00,0.0593 +2016-03-05 13:00:00,0.0565 +2016-03-05 14:00:00,0.0563 +2016-03-05 15:00:00,0.0579 +2016-03-05 16:00:00,0.0658 +2016-03-05 17:00:00,0.0562 +2016-03-05 18:00:00,0.0431 +2016-03-05 19:00:00,0.0347 +2016-03-05 20:00:00,0.0244 +2016-03-05 21:00:00,0.022 +2016-03-05 22:00:00,0.0089 +2016-03-05 23:00:00,0.0066 +2016-03-06 00:00:00,0.0055 +2016-03-06 01:00:00,0.0046 +2016-03-06 02:00:00,0.0044 +2016-03-06 03:00:00,0.0048 +2016-03-06 04:00:00,0.0048 +2016-03-06 05:00:00,0.0054 +2016-03-06 06:00:00,0.0064 +2016-03-06 07:00:00,0.012 +2016-03-06 08:00:00,0.0283 +2016-03-06 09:00:00,0.0422 +2016-03-06 10:00:00,0.0525 +2016-03-06 11:00:00,0.0569 +2016-03-06 12:00:00,0.0562 +2016-03-06 13:00:00,0.0598 +2016-03-06 14:00:00,0.0525 +2016-03-06 15:00:00,0.0538 +2016-03-06 16:00:00,0.0599 +2016-03-06 17:00:00,0.0505 +2016-03-06 18:00:00,0.0438 +2016-03-06 19:00:00,0.0373 +2016-03-06 20:00:00,0.0253 +2016-03-06 21:00:00,0.0179 +2016-03-06 22:00:00,0.007 +2016-03-06 23:00:00,0.005 +2016-03-07 00:00:00,0.004 +2016-03-07 01:00:00,0.0041 +2016-03-07 02:00:00,0.0044 +2016-03-07 03:00:00,0.0051 +2016-03-07 04:00:00,0.0151 +2016-03-07 05:00:00,0.0547 +2016-03-07 06:00:00,0.1312 +2016-03-07 07:00:00,0.3767 +2016-03-07 08:00:00,0.2049 +2016-03-07 09:00:00,0.0804 +2016-03-07 10:00:00,0.0511 +2016-03-07 11:00:00,0.054 +2016-03-07 12:00:00,0.0513 +2016-03-07 13:00:00,0.0503 +2016-03-07 14:00:00,0.0511 +2016-03-07 15:00:00,0.0508 +2016-03-07 16:00:00,0.0515 +2016-03-07 17:00:00,0.0505 +2016-03-07 18:00:00,0.0442 +2016-03-07 19:00:00,0.0342 +2016-03-07 20:00:00,0.0197 +2016-03-07 21:00:00,0.0104 +2016-03-07 22:00:00,0.0062 +2016-03-07 23:00:00,0.0051 +2016-03-08 00:00:00,0.005 +2016-03-08 01:00:00,0.0046 +2016-03-08 02:00:00,0.0045 +2016-03-08 03:00:00,0.0052 +2016-03-08 04:00:00,0.0114 +2016-03-08 05:00:00,0.0515 +2016-03-08 06:00:00,0.1393 +2016-03-08 07:00:00,0.3248 +2016-03-08 08:00:00,0.1145 +2016-03-08 09:00:00,0.0596 +2016-03-08 10:00:00,0.0596 +2016-03-08 11:00:00,0.0551 +2016-03-08 12:00:00,0.0534 +2016-03-08 13:00:00,0.0543 +2016-03-08 14:00:00,0.0536 +2016-03-08 15:00:00,0.0559 +2016-03-08 16:00:00,0.0498 +2016-03-08 17:00:00,0.0552 +2016-03-08 18:00:00,0.0442 +2016-03-08 19:00:00,0.0319 +2016-03-08 20:00:00,0.023 +2016-03-08 21:00:00,0.0137 +2016-03-08 22:00:00,0.0064 +2016-03-08 23:00:00,0.0053 +2016-03-09 00:00:00,0.0043 +2016-03-09 01:00:00,0.0043 +2016-03-09 02:00:00,0.0047 +2016-03-09 03:00:00,0.005 +2016-03-09 04:00:00,0.0068 +2016-03-09 05:00:00,0.0515 +2016-03-09 06:00:00,0.1601 +2016-03-09 07:00:00,0.371 +2016-03-09 08:00:00,0.4149 +2016-03-09 09:00:00,0.2521 +2016-03-09 10:00:00,0.0573 +2016-03-09 11:00:00,0.0561 +2016-03-09 12:00:00,0.0556 +2016-03-09 13:00:00,0.0559 +2016-03-09 14:00:00,0.0545 +2016-03-09 15:00:00,0.0503 +2016-03-09 16:00:00,0.0529 +2016-03-09 17:00:00,0.0518 +2016-03-09 18:00:00,0.0456 +2016-03-09 19:00:00,0.0335 +2016-03-09 20:00:00,0.0252 +2016-03-09 21:00:00,0.0129 +2016-03-09 22:00:00,0.0065 +2016-03-09 23:00:00,0.0052 +2016-03-10 00:00:00,0.0047 +2016-03-10 01:00:00,0.0043 +2016-03-10 02:00:00,0.0048 +2016-03-10 03:00:00,0.005 +2016-03-10 04:00:00,0.0134 +2016-03-10 05:00:00,0.053 +2016-03-10 06:00:00,0.1226 +2016-03-10 07:00:00,0.1177 +2016-03-10 08:00:00,0.0666 +2016-03-10 09:00:00,0.0599 +2016-03-10 10:00:00,0.06 +2016-03-10 11:00:00,0.0554 +2016-03-10 12:00:00,0.0562 +2016-03-10 13:00:00,0.0548 +2016-03-10 14:00:00,0.0553 +2016-03-10 15:00:00,0.0517 +2016-03-10 16:00:00,0.0519 +2016-03-10 17:00:00,0.0506 +2016-03-10 18:00:00,0.0409 +2016-03-10 19:00:00,0.0313 +2016-03-10 20:00:00,0.0277 +2016-03-10 21:00:00,0.0164 +2016-03-10 22:00:00,0.0059 +2016-03-10 23:00:00,0.0056 +2016-03-11 00:00:00,0.0051 +2016-03-11 01:00:00,0.0044 +2016-03-11 02:00:00,0.005 +2016-03-11 03:00:00,0.0052 +2016-03-11 04:00:00,0.0123 +2016-03-11 05:00:00,0.0453 +2016-03-11 06:00:00,0.0697 +2016-03-11 07:00:00,0.062 +2016-03-11 08:00:00,0.0553 +2016-03-11 09:00:00,0.0578 +2016-03-11 10:00:00,0.0557 +2016-03-11 11:00:00,0.0566 +2016-03-11 12:00:00,0.0583 +2016-03-11 13:00:00,0.0564 +2016-03-11 14:00:00,0.0586 +2016-03-11 15:00:00,0.0584 +2016-03-11 16:00:00,0.0559 +2016-03-11 17:00:00,0.0538 +2016-03-11 18:00:00,0.046 +2016-03-11 19:00:00,0.0347 +2016-03-11 20:00:00,0.0262 +2016-03-11 21:00:00,0.0213 +2016-03-11 22:00:00,0.0123 +2016-03-11 23:00:00,0.0067 +2016-03-12 00:00:00,0.005 +2016-03-12 01:00:00,0.0049 +2016-03-12 02:00:00,0.0048 +2016-03-12 03:00:00,0.0046 +2016-03-12 04:00:00,0.0055 +2016-03-12 05:00:00,0.0071 +2016-03-12 06:00:00,0.0145 +2016-03-12 07:00:00,0.0281 +2016-03-12 08:00:00,0.0375 +2016-03-12 09:00:00,0.0539 +2016-03-12 10:00:00,0.0554 +2016-03-12 11:00:00,0.0596 +2016-03-12 12:00:00,0.0606 +2016-03-12 13:00:00,0.0597 +2016-03-12 14:00:00,0.0586 +2016-03-12 15:00:00,0.063 +2016-03-12 16:00:00,0.0562 +2016-03-12 17:00:00,0.0562 +2016-03-12 18:00:00,0.0453 +2016-03-12 19:00:00,0.0323 +2016-03-12 20:00:00,0.0287 +2016-03-12 21:00:00,0.0251 +2016-03-12 22:00:00,0.0204 +2016-03-12 23:00:00,0.0072 +2016-03-13 00:00:00,0.0056 +2016-03-13 01:00:00,0.0052 +2016-03-13 02:00:00,0.0055 +2016-03-13 03:00:00,0.0053 +2016-03-13 04:00:00,0.0057 +2016-03-13 05:00:00,0.0066 +2016-03-13 06:00:00,0.0064 +2016-03-13 07:00:00,0.0229 +2016-03-13 08:00:00,0.0379 +2016-03-13 09:00:00,0.0447 +2016-03-13 10:00:00,0.0533 +2016-03-13 11:00:00,0.056 +2016-03-13 12:00:00,0.0606 +2016-03-13 13:00:00,0.0563 +2016-03-13 14:00:00,0.0515 +2016-03-13 15:00:00,0.0575 +2016-03-13 16:00:00,0.0486 +2016-03-13 17:00:00,0.0406 +2016-03-13 18:00:00,0.0328 +2016-03-13 19:00:00,0.0269 +2016-03-13 20:00:00,0.0209 +2016-03-13 21:00:00,0.0064 +2016-03-13 22:00:00,0.0054 +2016-03-13 23:00:00,0.0047 +2016-03-14 00:00:00,0.0048 +2016-03-14 01:00:00,0.0046 +2016-03-14 02:00:00,0.005 +2016-03-14 03:00:00,0.0107 +2016-03-14 04:00:00,0.055 +2016-03-14 05:00:00,0.1065 +2016-03-14 06:00:00,0.1223 +2016-03-14 07:00:00,0.0526 +2016-03-14 08:00:00,0.0591 +2016-03-14 09:00:00,0.0526 +2016-03-14 10:00:00,0.0509 +2016-03-14 11:00:00,0.0541 +2016-03-14 12:00:00,0.0516 +2016-03-14 13:00:00,0.0534 +2016-03-14 14:00:00,0.0557 +2016-03-14 15:00:00,0.0549 +2016-03-14 16:00:00,0.0538 +2016-03-14 17:00:00,0.0424 +2016-03-14 18:00:00,0.0333 +2016-03-14 19:00:00,0.0269 +2016-03-14 20:00:00,0.0143 +2016-03-14 21:00:00,0.0064 +2016-03-14 22:00:00,0.0054 +2016-03-14 23:00:00,0.0046 +2016-03-15 00:00:00,0.0046 +2016-03-15 01:00:00,0.0045 +2016-03-15 02:00:00,0.0054 +2016-03-15 03:00:00,0.0096 +2016-03-15 04:00:00,0.0508 +2016-03-15 05:00:00,0.1148 +2016-03-15 06:00:00,0.2458 +2016-03-15 07:00:00,0.1708 +2016-03-15 08:00:00,0.062 +2016-03-15 09:00:00,0.0647 +2016-03-15 10:00:00,0.0578 +2016-03-15 11:00:00,0.0561 +2016-03-15 12:00:00,0.0551 +2016-03-15 13:00:00,0.0541 +2016-03-15 14:00:00,0.0591 +2016-03-15 15:00:00,0.0539 +2016-03-15 16:00:00,0.0527 +2016-03-15 17:00:00,0.0464 +2016-03-15 18:00:00,0.0342 +2016-03-15 19:00:00,0.0266 +2016-03-15 20:00:00,0.0195 +2016-03-15 21:00:00,0.0062 +2016-03-15 22:00:00,0.0057 +2016-03-15 23:00:00,0.0049 +2016-03-16 00:00:00,0.0044 +2016-03-16 01:00:00,0.0047 +2016-03-16 02:00:00,0.0053 +2016-03-16 03:00:00,0.011 +2016-03-16 04:00:00,0.0517 +2016-03-16 05:00:00,0.1231 +2016-03-16 06:00:00,0.3379 +2016-03-16 07:00:00,0.1786 +2016-03-16 08:00:00,0.0614 +2016-03-16 09:00:00,0.0624 +2016-03-16 10:00:00,0.059 +2016-03-16 11:00:00,0.0553 +2016-03-16 12:00:00,0.0549 +2016-03-16 13:00:00,0.055 +2016-03-16 14:00:00,0.0574 +2016-03-16 15:00:00,0.0564 +2016-03-16 16:00:00,0.0504 +2016-03-16 17:00:00,0.0463 +2016-03-16 18:00:00,0.0364 +2016-03-16 19:00:00,0.0284 +2016-03-16 20:00:00,0.0199 +2016-03-16 21:00:00,0.0087 +2016-03-16 22:00:00,0.0056 +2016-03-16 23:00:00,0.0047 +2016-03-17 00:00:00,0.0048 +2016-03-17 01:00:00,0.0049 +2016-03-17 02:00:00,0.0057 +2016-03-17 03:00:00,0.0142 +2016-03-17 04:00:00,0.0537 +2016-03-17 05:00:00,0.1881 +2016-03-17 06:00:00,0.3427 +2016-03-17 07:00:00,0.3462 +2016-03-17 08:00:00,0.1692 +2016-03-17 09:00:00,0.0614 +2016-03-17 10:00:00,0.0589 +2016-03-17 11:00:00,0.0571 +2016-03-17 12:00:00,0.0556 +2016-03-17 13:00:00,0.0548 +2016-03-17 14:00:00,0.0608 +2016-03-17 15:00:00,0.0558 +2016-03-17 16:00:00,0.0526 +2016-03-17 17:00:00,0.0454 +2016-03-17 18:00:00,0.0358 +2016-03-17 19:00:00,0.0308 +2016-03-17 20:00:00,0.023 +2016-03-17 21:00:00,0.0114 +2016-03-17 22:00:00,0.0054 +2016-03-17 23:00:00,0.0051 +2016-03-18 00:00:00,0.0048 +2016-03-18 01:00:00,0.0049 +2016-03-18 02:00:00,0.0053 +2016-03-18 03:00:00,0.0073 +2016-03-18 04:00:00,0.0447 +2016-03-18 05:00:00,0.0714 +2016-03-18 06:00:00,0.0685 +2016-03-18 07:00:00,0.0549 +2016-03-18 08:00:00,0.0582 +2016-03-18 09:00:00,0.06 +2016-03-18 10:00:00,0.0538 +2016-03-18 11:00:00,0.0591 +2016-03-18 12:00:00,0.0585 +2016-03-18 13:00:00,0.0607 +2016-03-18 14:00:00,0.0579 +2016-03-18 15:00:00,0.0533 +2016-03-18 16:00:00,0.0525 +2016-03-18 17:00:00,0.0475 +2016-03-18 18:00:00,0.0387 +2016-03-18 19:00:00,0.0315 +2016-03-18 20:00:00,0.0252 +2016-03-18 21:00:00,0.018 +2016-03-18 22:00:00,0.0054 +2016-03-18 23:00:00,0.0042 +2016-03-19 00:00:00,0.0037 +2016-03-19 01:00:00,0.0035 +2016-03-19 02:00:00,0.0036 +2016-03-19 03:00:00,0.0039 +2016-03-19 04:00:00,0.0046 +2016-03-19 05:00:00,0.0199 +2016-03-19 06:00:00,0.0328 +2016-03-19 07:00:00,0.0434 +2016-03-19 08:00:00,0.0511 +2016-03-19 09:00:00,0.0533 +2016-03-19 10:00:00,0.0582 +2016-03-19 11:00:00,0.0539 +2016-03-19 12:00:00,0.0578 +2016-03-19 13:00:00,0.0588 +2016-03-19 14:00:00,0.0609 +2016-03-19 15:00:00,0.0606 +2016-03-19 16:00:00,0.0575 +2016-03-19 17:00:00,0.0531 +2016-03-19 18:00:00,0.0352 +2016-03-19 19:00:00,0.0251 +2016-03-19 20:00:00,0.0224 +2016-03-19 21:00:00,0.0139 +2016-03-19 22:00:00,0.0058 +2016-03-19 23:00:00,0.0032 +2016-03-20 00:00:00,0.0021 +2016-03-20 01:00:00,0.0016 +2016-03-20 02:00:00,0.0013 +2016-03-20 03:00:00,0.0012 +2016-03-20 04:00:00,0.0017 +2016-03-20 05:00:00,0.0029 +2016-03-20 06:00:00,0.0059 +2016-03-20 07:00:00,0.0215 +2016-03-20 08:00:00,0.0352 +2016-03-20 09:00:00,0.0445 +2016-03-20 10:00:00,0.0509 +2016-03-20 11:00:00,0.0522 +2016-03-20 12:00:00,0.056 +2016-03-20 13:00:00,0.053 +2016-03-20 14:00:00,0.0507 +2016-03-20 15:00:00,0.056 +2016-03-20 16:00:00,0.0491 +2016-03-20 17:00:00,0.0405 +2016-03-20 18:00:00,0.033 +2016-03-20 19:00:00,0.0244 +2016-03-20 20:00:00,0.0168 +2016-03-20 21:00:00,0.0051 +2016-03-20 22:00:00,0.003 +2016-03-20 23:00:00,0.0018 +2016-03-21 00:00:00,0.0011 +2016-03-21 01:00:00,0.0009 +2016-03-21 02:00:00,0.001 +2016-03-21 03:00:00,0.0096 +2016-03-21 04:00:00,0.045 +2016-03-21 05:00:00,0.0991 +2016-03-21 06:00:00,0.2794 +2016-03-21 07:00:00,0.1658 +2016-03-21 08:00:00,0.0578 +2016-03-21 09:00:00,0.0512 +2016-03-21 10:00:00,0.0503 +2016-03-21 11:00:00,0.0482 +2016-03-21 12:00:00,0.0496 +2016-03-21 13:00:00,0.051 +2016-03-21 14:00:00,0.0541 +2016-03-21 15:00:00,0.054 +2016-03-21 16:00:00,0.0558 +2016-03-21 17:00:00,0.0456 +2016-03-21 18:00:00,0.033 +2016-03-21 19:00:00,0.0215 +2016-03-21 20:00:00,0.0108 +2016-03-21 21:00:00,0.0048 +2016-03-21 22:00:00,0.0029 +2016-03-21 23:00:00,0.003 +2016-03-22 00:00:00,0.003 +2016-03-22 01:00:00,0.003 +2016-03-22 02:00:00,0.003 +2016-03-22 03:00:00,0.003 +2016-03-22 04:00:00,0.003 +2016-03-22 05:00:00,0.003 +2016-03-22 06:00:00,0.003 +2016-03-22 07:00:00,0.003 +2016-03-22 08:00:00,0.003 +2016-03-22 09:00:00,0.0537 +2016-03-22 10:00:00,0.0605 +2016-03-22 11:00:00,0.0569 +2016-03-22 12:00:00,0.0588 +2016-03-22 13:00:00,0.0537 +2016-03-22 14:00:00,0.057 +2016-03-22 15:00:00,0.0507 +2016-03-22 16:00:00,0.0552 +2016-03-22 17:00:00,0.0455 +2016-03-22 18:00:00,0.0333 +2016-03-22 19:00:00,0.0258 +2016-03-22 20:00:00,0.0205 +2016-03-22 21:00:00,0.0065 +2016-03-22 22:00:00,0.0056 +2016-03-22 23:00:00,0.0047 +2016-03-23 00:00:00,0.0042 +2016-03-23 01:00:00,0.0047 +2016-03-23 02:00:00,0.0051 +2016-03-23 03:00:00,0.0145 +2016-03-23 04:00:00,0.0388 +2016-03-23 05:00:00,0.0661 +2016-03-23 06:00:00,0.3457 +2016-03-23 07:00:00,0.4104 +2016-03-23 08:00:00,0.1793 +2016-03-23 09:00:00,0.0639 +2016-03-23 10:00:00,0.0614 +2016-03-23 11:00:00,0.0644 +2016-03-23 12:00:00,0.0579 +2016-03-23 13:00:00,0.0586 +2016-03-23 14:00:00,0.0561 +2016-03-23 15:00:00,0.0587 +2016-03-23 16:00:00,0.0553 +2016-03-23 17:00:00,0.0464 +2016-03-23 18:00:00,0.0349 +2016-03-23 19:00:00,0.0286 +2016-03-23 20:00:00,0.0195 +2016-03-23 21:00:00,0.0078 +2016-03-23 22:00:00,0.0054 +2016-03-23 23:00:00,0.0048 +2016-03-24 00:00:00,0.0047 +2016-03-24 01:00:00,0.0049 +2016-03-24 02:00:00,0.0051 +2016-03-24 03:00:00,0.0137 +2016-03-24 04:00:00,0.052 +2016-03-24 05:00:00,0.1158 +2016-03-24 06:00:00,0.2908 +2016-03-24 07:00:00,0.0706 +2016-03-24 08:00:00,0.0603 +2016-03-24 09:00:00,0.0658 +2016-03-24 10:00:00,0.0649 +2016-03-24 11:00:00,0.0601 +2016-03-24 12:00:00,0.0527 +2016-03-24 13:00:00,0.0555 +2016-03-24 14:00:00,0.0703 +2016-03-24 15:00:00,0.0591 +2016-03-24 16:00:00,0.0571 +2016-03-24 17:00:00,0.0496 +2016-03-24 18:00:00,0.0368 +2016-03-24 19:00:00,0.0299 +2016-03-24 20:00:00,0.0237 +2016-03-24 21:00:00,0.0103 +2016-03-24 22:00:00,0.0056 +2016-03-24 23:00:00,0.005 +2016-03-25 00:00:00,0.005 +2016-03-25 01:00:00,0.0051 +2016-03-25 02:00:00,0.0051 +2016-03-25 03:00:00,0.0108 +2016-03-25 04:00:00,0.0448 +2016-03-25 05:00:00,0.0705 +2016-03-25 06:00:00,0.0608 +2016-03-25 07:00:00,0.0599 +2016-03-25 08:00:00,0.0608 +2016-03-25 09:00:00,0.0641 +2016-03-25 10:00:00,0.064 +2016-03-25 11:00:00,0.0623 +2016-03-25 12:00:00,0.0628 +2016-03-25 13:00:00,0.0638 +2016-03-25 14:00:00,0.0612 +2016-03-25 15:00:00,0.0574 +2016-03-25 16:00:00,0.055 +2016-03-25 17:00:00,0.0489 +2016-03-25 18:00:00,0.0405 +2016-03-25 19:00:00,0.0315 +2016-03-25 20:00:00,0.0248 +2016-03-25 21:00:00,0.0211 +2016-03-25 22:00:00,0.0083 +2016-03-25 23:00:00,0.0058 +2016-03-26 00:00:00,0.0047 +2016-03-26 01:00:00,0.0048 +2016-03-26 02:00:00,0.0048 +2016-03-26 03:00:00,0.0055 +2016-03-26 04:00:00,0.0091 +2016-03-26 05:00:00,0.0116 +2016-03-26 06:00:00,0.0292 +2016-03-26 07:00:00,0.0412 +2016-03-26 08:00:00,0.0547 +2016-03-26 09:00:00,0.059 +2016-03-26 10:00:00,0.0636 +2016-03-26 11:00:00,0.0595 +2016-03-26 12:00:00,0.0602 +2016-03-26 13:00:00,0.0601 +2016-03-26 14:00:00,0.0595 +2016-03-26 15:00:00,0.0621 +2016-03-26 16:00:00,0.0602 +2016-03-26 17:00:00,0.0514 +2016-03-26 18:00:00,0.0422 +2016-03-26 19:00:00,0.0348 +2016-03-26 20:00:00,0.0307 +2016-03-26 21:00:00,0.024 +2016-03-26 22:00:00,0.0077 +2016-03-26 23:00:00,0.0058 +2016-03-27 00:00:00,0.0052 +2016-03-27 01:00:00,0.005 +2016-03-27 02:00:00,0.0046 +2016-03-27 03:00:00,0.0048 +2016-03-27 04:00:00,0.0055 +2016-03-27 05:00:00,0.006 +2016-03-27 06:00:00,0.0134 +2016-03-27 07:00:00,0.0271 +2016-03-27 08:00:00,0.0431 +2016-03-27 09:00:00,0.0575 +2016-03-27 10:00:00,0.0604 +2016-03-27 11:00:00,0.0604 +2016-03-27 12:00:00,0.0594 +2016-03-27 13:00:00,0.0538 +2016-03-27 14:00:00,0.0563 +2016-03-27 15:00:00,0.0559 +2016-03-27 16:00:00,0.0566 +2016-03-27 17:00:00,0.053 +2016-03-27 18:00:00,0.0493 +2016-03-27 19:00:00,0.0485 +2016-03-27 20:00:00,0.0359 +2016-03-27 21:00:00,0.013 +2016-03-27 22:00:00,0.0056 +2016-03-27 23:00:00,0.005 +2016-03-28 00:00:00,0.0047 +2016-03-28 01:00:00,0.0045 +2016-03-28 02:00:00,0.0056 +2016-03-28 03:00:00,0.0151 +2016-03-28 04:00:00,0.0528 +2016-03-28 05:00:00,0.1205 +2016-03-28 06:00:00,0.2376 +2016-03-28 07:00:00,0.0557 +2016-03-28 08:00:00,0.0591 +2016-03-28 09:00:00,0.0599 +2016-03-28 10:00:00,0.0609 +2016-03-28 11:00:00,0.0571 +2016-03-28 12:00:00,0.0603 +2016-03-28 13:00:00,0.0581 +2016-03-28 14:00:00,0.0542 +2016-03-28 15:00:00,0.0552 +2016-03-28 16:00:00,0.0533 +2016-03-28 17:00:00,0.0462 +2016-03-28 18:00:00,0.034 +2016-03-28 19:00:00,0.0273 +2016-03-28 20:00:00,0.0179 +2016-03-28 21:00:00,0.0064 +2016-03-28 22:00:00,0.0054 +2016-03-28 23:00:00,0.0045 +2016-03-29 00:00:00,0.0046 +2016-03-29 01:00:00,0.0045 +2016-03-29 02:00:00,0.0052 +2016-03-29 03:00:00,0.0165 +2016-03-29 04:00:00,0.0539 +2016-03-29 05:00:00,0.1178 +2016-03-29 06:00:00,0.2911 +2016-03-29 07:00:00,0.0706 +2016-03-29 08:00:00,0.063 +2016-03-29 09:00:00,0.061 +2016-03-29 10:00:00,0.061 +2016-03-29 11:00:00,0.0559 +2016-03-29 12:00:00,0.0571 +2016-03-29 13:00:00,0.0549 +2016-03-29 14:00:00,0.0584 +2016-03-29 15:00:00,0.0548 +2016-03-29 16:00:00,0.0567 +2016-03-29 17:00:00,0.0429 +2016-03-29 18:00:00,0.0344 +2016-03-29 19:00:00,0.0276 +2016-03-29 20:00:00,0.0184 +2016-03-29 21:00:00,0.0072 +2016-03-29 22:00:00,0.0057 +2016-03-29 23:00:00,0.0046 +2016-03-30 00:00:00,0.0046 +2016-03-30 01:00:00,0.0044 +2016-03-30 02:00:00,0.0052 +2016-03-30 03:00:00,0.0107 +2016-03-30 04:00:00,0.0534 +2016-03-30 05:00:00,0.1366 +2016-03-30 06:00:00,0.2519 +2016-03-30 07:00:00,0.0571 +2016-03-30 08:00:00,0.0639 +2016-03-30 09:00:00,0.0654 +2016-03-30 10:00:00,0.0607 +2016-03-30 11:00:00,0.0593 +2016-03-30 12:00:00,0.0576 +2016-03-30 13:00:00,0.0595 +2016-03-30 14:00:00,0.0517 +2016-03-30 15:00:00,0.0568 +2016-03-30 16:00:00,0.0556 +2016-03-30 17:00:00,0.0482 +2016-03-30 18:00:00,0.0347 +2016-03-30 19:00:00,0.0292 +2016-03-30 20:00:00,0.0212 +2016-03-30 21:00:00,0.0086 +2016-03-30 22:00:00,0.0053 +2016-03-30 23:00:00,0.0049 +2016-03-31 00:00:00,0.0048 +2016-03-31 01:00:00,0.0046 +2016-03-31 02:00:00,0.0051 +2016-03-31 03:00:00,0.0136 +2016-03-31 04:00:00,0.0532 +2016-03-31 05:00:00,0.0863 +2016-03-31 06:00:00,0.0603 +2016-03-31 07:00:00,0.0604 +2016-03-31 08:00:00,0.0635 +2016-03-31 09:00:00,0.0647 +2016-03-31 10:00:00,0.0676 +2016-03-31 11:00:00,0.0595 +2016-03-31 12:00:00,0.0604 +2016-03-31 13:00:00,0.0628 +2016-03-31 14:00:00,0.063 +2016-03-31 15:00:00,0.0572 +2016-03-31 16:00:00,0.0566 +2016-03-31 17:00:00,0.047 +2016-03-31 18:00:00,0.0383 +2016-03-31 19:00:00,0.0277 +2016-03-31 20:00:00,0.0195 +2016-03-31 21:00:00,0.0105 +2016-03-31 22:00:00,0.0054 +2016-03-31 23:00:00,0.0049 +2016-04-01 00:00:00,0.0044 +2016-04-01 01:00:00,0.0044 +2016-04-01 02:00:00,0.0049 +2016-04-01 03:00:00,0.0117 +2016-04-01 04:00:00,0.0483 +2016-04-01 05:00:00,0.0712 +2016-04-01 06:00:00,0.0639 +2016-04-01 07:00:00,0.0607 +2016-04-01 08:00:00,0.0619 +2016-04-01 09:00:00,0.065 +2016-04-01 10:00:00,0.0612 +2016-04-01 11:00:00,0.0633 +2016-04-01 12:00:00,0.0605 +2016-04-01 13:00:00,0.0634 +2016-04-01 14:00:00,0.063 +2016-04-01 15:00:00,0.0628 +2016-04-01 16:00:00,0.0612 +2016-04-01 17:00:00,0.048 +2016-04-01 18:00:00,0.0396 +2016-04-01 19:00:00,0.0327 +2016-04-01 20:00:00,0.0246 +2016-04-01 21:00:00,0.0213 +2016-04-01 22:00:00,0.0064 +2016-04-01 23:00:00,0.0052 +2016-04-02 00:00:00,0.0051 +2016-04-02 01:00:00,0.0045 +2016-04-02 02:00:00,0.005 +2016-04-02 03:00:00,0.0056 +2016-04-02 04:00:00,0.0064 +2016-04-02 05:00:00,0.0194 +2016-04-02 06:00:00,0.0325 +2016-04-02 07:00:00,0.046 +2016-04-02 08:00:00,0.0531 +2016-04-02 09:00:00,0.0618 +2016-04-02 10:00:00,0.0648 +2016-04-02 11:00:00,0.0586 +2016-04-02 12:00:00,0.0616 +2016-04-02 13:00:00,0.0604 +2016-04-02 14:00:00,0.0629 +2016-04-02 15:00:00,0.0651 +2016-04-02 16:00:00,0.0644 +2016-04-02 17:00:00,0.0552 +2016-04-02 18:00:00,0.045 +2016-04-02 19:00:00,0.0348 +2016-04-02 20:00:00,0.0317 +2016-04-02 21:00:00,0.0241 +2016-04-02 22:00:00,0.0072 +2016-04-02 23:00:00,0.0057 +2016-04-03 00:00:00,0.0051 +2016-04-03 01:00:00,0.005 +2016-04-03 02:00:00,0.0047 +2016-04-03 03:00:00,0.0051 +2016-04-03 04:00:00,0.006 +2016-04-03 05:00:00,0.0104 +2016-04-03 06:00:00,0.0181 +2016-04-03 07:00:00,0.0321 +2016-04-03 08:00:00,0.045 +2016-04-03 09:00:00,0.0551 +2016-04-03 10:00:00,0.0618 +2016-04-03 11:00:00,0.0622 +2016-04-03 12:00:00,0.0652 +2016-04-03 13:00:00,0.0652 +2016-04-03 14:00:00,0.0605 +2016-04-03 15:00:00,0.0627 +2016-04-03 16:00:00,0.0615 +2016-04-03 17:00:00,0.055 +2016-04-03 18:00:00,0.0474 +2016-04-03 19:00:00,0.0378 +2016-04-03 20:00:00,0.0267 +2016-04-03 21:00:00,0.0175 +2016-04-03 22:00:00,0.0058 +2016-04-03 23:00:00,0.005 +2016-04-04 00:00:00,0.0045 +2016-04-04 01:00:00,0.0046 +2016-04-04 02:00:00,0.0053 +2016-04-04 03:00:00,0.0119 +2016-04-04 04:00:00,0.0538 +2016-04-04 05:00:00,0.1378 +2016-04-04 06:00:00,0.3198 +2016-04-04 07:00:00,0.1222 +2016-04-04 08:00:00,0.0597 +2016-04-04 09:00:00,0.058 +2016-04-04 10:00:00,0.0558 +2016-04-04 11:00:00,0.0591 +2016-04-04 12:00:00,0.0567 +2016-04-04 13:00:00,0.0575 +2016-04-04 14:00:00,0.0543 +2016-04-04 15:00:00,0.0522 +2016-04-04 16:00:00,0.0524 +2016-04-04 17:00:00,0.0439 +2016-04-04 18:00:00,0.0333 +2016-04-04 19:00:00,0.0262 +2016-04-04 20:00:00,0.0195 +2016-04-04 21:00:00,0.0071 +2016-04-04 22:00:00,0.0057 +2016-04-04 23:00:00,0.0051 +2016-04-05 00:00:00,0.0046 +2016-04-05 01:00:00,0.0045 +2016-04-05 02:00:00,0.0053 +2016-04-05 03:00:00,0.014 +2016-04-05 04:00:00,0.0551 +2016-04-05 05:00:00,0.1307 +2016-04-05 06:00:00,0.3455 +2016-04-05 07:00:00,0.3652 +2016-04-05 08:00:00,0.1459 +2016-04-05 09:00:00,0.0642 +2016-04-05 10:00:00,0.0583 +2016-04-05 11:00:00,0.0556 +2016-04-05 12:00:00,0.0572 +2016-04-05 13:00:00,0.0531 +2016-04-05 14:00:00,0.0577 +2016-04-05 15:00:00,0.054 +2016-04-05 16:00:00,0.0576 +2016-04-05 17:00:00,0.0472 +2016-04-05 18:00:00,0.0329 +2016-04-05 19:00:00,0.0239 +2016-04-05 20:00:00,0.0172 +2016-04-05 21:00:00,0.0051 +2016-04-05 22:00:00,0.003 +2016-04-05 23:00:00,0.0017 +2016-04-06 00:00:00,0.0011 +2016-04-06 01:00:00,0.001 +2016-04-06 02:00:00,0.0011 +2016-04-06 03:00:00,0.0057 +2016-04-06 04:00:00,0.0428 +2016-04-06 05:00:00,0.1021 +2016-04-06 06:00:00,0.2799 +2016-04-06 07:00:00,0.2316 +2016-04-06 08:00:00,0.0791 +2016-04-06 09:00:00,0.0625 +2016-04-06 10:00:00,0.0574 +2016-04-06 11:00:00,0.059 +2016-04-06 12:00:00,0.0559 +2016-04-06 13:00:00,0.0585 +2016-04-06 14:00:00,0.0555 +2016-04-06 15:00:00,0.055 +2016-04-06 16:00:00,0.0591 +2016-04-06 17:00:00,0.0448 +2016-04-06 18:00:00,0.0349 +2016-04-06 19:00:00,0.0294 +2016-04-06 20:00:00,0.0173 +2016-04-06 21:00:00,0.0075 +2016-04-06 22:00:00,0.0055 +2016-04-06 23:00:00,0.005 +2016-04-07 00:00:00,0.0045 +2016-04-07 01:00:00,0.0048 +2016-04-07 02:00:00,0.0054 +2016-04-07 03:00:00,0.0134 +2016-04-07 04:00:00,0.0513 +2016-04-07 05:00:00,0.1484 +2016-04-07 06:00:00,0.3471 +2016-04-07 07:00:00,0.1355 +2016-04-07 08:00:00,0.0919 +2016-04-07 09:00:00,0.0625 +2016-04-07 10:00:00,0.0716 +2016-04-07 11:00:00,0.0588 +2016-04-07 12:00:00,0.0567 +2016-04-07 13:00:00,0.0565 +2016-04-07 14:00:00,0.0589 +2016-04-07 15:00:00,0.0605 +2016-04-07 16:00:00,0.0585 +2016-04-07 17:00:00,0.0483 +2016-04-07 18:00:00,0.0395 +2016-04-07 19:00:00,0.0284 +2016-04-07 20:00:00,0.0164 +2016-04-07 21:00:00,0.0083 +2016-04-07 22:00:00,0.0055 +2016-04-07 23:00:00,0.0047 +2016-04-08 00:00:00,0.0049 +2016-04-08 01:00:00,0.0047 +2016-04-08 02:00:00,0.0056 +2016-04-08 03:00:00,0.0116 +2016-04-08 04:00:00,0.0488 +2016-04-08 05:00:00,0.077 +2016-04-08 06:00:00,0.0628 +2016-04-08 07:00:00,0.063 +2016-04-08 08:00:00,0.062 +2016-04-08 09:00:00,0.0588 +2016-04-08 10:00:00,0.0597 +2016-04-08 11:00:00,0.0592 +2016-04-08 12:00:00,0.0603 +2016-04-08 13:00:00,0.0626 +2016-04-08 14:00:00,0.0637 +2016-04-08 15:00:00,0.0602 +2016-04-08 16:00:00,0.0611 +2016-04-08 17:00:00,0.0493 +2016-04-08 18:00:00,0.0369 +2016-04-08 19:00:00,0.031 +2016-04-08 20:00:00,0.0245 +2016-04-08 21:00:00,0.0138 +2016-04-08 22:00:00,0.0064 +2016-04-08 23:00:00,0.0055 +2016-04-09 00:00:00,0.0048 +2016-04-09 01:00:00,0.0046 +2016-04-09 02:00:00,0.0048 +2016-04-09 03:00:00,0.0055 +2016-04-09 04:00:00,0.0064 +2016-04-09 05:00:00,0.0184 +2016-04-09 06:00:00,0.0329 +2016-04-09 07:00:00,0.042 +2016-04-09 08:00:00,0.0497 +2016-04-09 09:00:00,0.0568 +2016-04-09 10:00:00,0.0584 +2016-04-09 11:00:00,0.064 +2016-04-09 12:00:00,0.0598 +2016-04-09 13:00:00,0.0571 +2016-04-09 14:00:00,0.0565 +2016-04-09 15:00:00,0.0594 +2016-04-09 16:00:00,0.0552 +2016-04-09 17:00:00,0.0459 +2016-04-09 18:00:00,0.0337 +2016-04-09 19:00:00,0.0308 +2016-04-09 20:00:00,0.0247 +2016-04-09 21:00:00,0.0218 +2016-04-09 22:00:00,0.0096 +2016-04-09 23:00:00,0.006 +2016-04-10 00:00:00,0.005 +2016-04-10 01:00:00,0.005 +2016-04-10 02:00:00,0.0047 +2016-04-10 03:00:00,0.005 +2016-04-10 04:00:00,0.0057 +2016-04-10 05:00:00,0.0068 +2016-04-10 06:00:00,0.0105 +2016-04-10 07:00:00,0.0296 +2016-04-10 08:00:00,0.043 +2016-04-10 09:00:00,0.0566 +2016-04-10 10:00:00,0.0621 +2016-04-10 11:00:00,0.0588 +2016-04-10 12:00:00,0.0607 +2016-04-10 13:00:00,0.0611 +2016-04-10 14:00:00,0.0612 +2016-04-10 15:00:00,0.0615 +2016-04-10 16:00:00,0.0526 +2016-04-10 17:00:00,0.0454 +2016-04-10 18:00:00,0.0388 +2016-04-10 19:00:00,0.0329 +2016-04-10 20:00:00,0.0255 +2016-04-10 21:00:00,0.0109 +2016-04-10 22:00:00,0.0053 +2016-04-10 23:00:00,0.0037 +2016-04-11 00:00:00,0.0036 +2016-04-11 01:00:00,0.0046 +2016-04-11 02:00:00,0.0053 +2016-04-11 03:00:00,0.0094 +2016-04-11 04:00:00,0.0541 +2016-04-11 05:00:00,0.1181 +2016-04-11 06:00:00,0.1106 +2016-04-11 07:00:00,0.0557 +2016-04-11 08:00:00,0.0588 +2016-04-11 09:00:00,0.058 +2016-04-11 10:00:00,0.0551 +2016-04-11 11:00:00,0.0565 +2016-04-11 12:00:00,0.0568 +2016-04-11 13:00:00,0.0524 +2016-04-11 14:00:00,0.0524 +2016-04-11 15:00:00,0.0539 +2016-04-11 16:00:00,0.0519 +2016-04-11 17:00:00,0.0404 +2016-04-11 18:00:00,0.033 +2016-04-11 19:00:00,0.0251 +2016-04-11 20:00:00,0.0175 +2016-04-11 21:00:00,0.0066 +2016-04-11 22:00:00,0.0054 +2016-04-11 23:00:00,0.0046 +2016-04-12 00:00:00,0.0043 +2016-04-12 01:00:00,0.0045 +2016-04-12 02:00:00,0.0056 +2016-04-12 03:00:00,0.0142 +2016-04-12 04:00:00,0.0531 +2016-04-12 05:00:00,0.1026 +2016-04-12 06:00:00,0.0927 +2016-04-12 07:00:00,0.0575 +2016-04-12 08:00:00,0.0617 +2016-04-12 09:00:00,0.0595 +2016-04-12 10:00:00,0.0545 +2016-04-12 11:00:00,0.0545 +2016-04-12 12:00:00,0.0539 +2016-04-12 13:00:00,0.0538 +2016-04-12 14:00:00,0.0524 +2016-04-12 15:00:00,0.0532 +2016-04-12 16:00:00,0.0507 +2016-04-12 17:00:00,0.0388 +2016-04-12 18:00:00,0.0322 +2016-04-12 19:00:00,0.0249 +2016-04-12 20:00:00,0.0162 +2016-04-12 21:00:00,0.0072 +2016-04-12 22:00:00,0.0053 +2016-04-12 23:00:00,0.0047 +2016-04-13 00:00:00,0.0043 +2016-04-13 01:00:00,0.0046 +2016-04-13 02:00:00,0.0054 +2016-04-13 03:00:00,0.0124 +2016-04-13 04:00:00,0.0531 +2016-04-13 05:00:00,0.1094 +2016-04-13 06:00:00,0.0606 +2016-04-13 07:00:00,0.0545 +2016-04-13 08:00:00,0.067 +2016-04-13 09:00:00,0.0618 +2016-04-13 10:00:00,0.0598 +2016-04-13 11:00:00,0.0543 +2016-04-13 12:00:00,0.055 +2016-04-13 13:00:00,0.0535 +2016-04-13 14:00:00,0.0552 +2016-04-13 15:00:00,0.0558 +2016-04-13 16:00:00,0.0548 +2016-04-13 17:00:00,0.0469 +2016-04-13 18:00:00,0.0324 +2016-04-13 19:00:00,0.0283 +2016-04-13 20:00:00,0.0179 +2016-04-13 21:00:00,0.0093 +2016-04-13 22:00:00,0.0055 +2016-04-13 23:00:00,0.005 +2016-04-14 00:00:00,0.0046 +2016-04-14 01:00:00,0.0048 +2016-04-14 02:00:00,0.0054 +2016-04-14 03:00:00,0.014 +2016-04-14 04:00:00,0.0523 +2016-04-14 05:00:00,0.0799 +2016-04-14 06:00:00,0.0721 +2016-04-14 07:00:00,0.0593 +2016-04-14 08:00:00,0.0655 +2016-04-14 09:00:00,0.061 +2016-04-14 10:00:00,0.0568 +2016-04-14 11:00:00,0.0537 +2016-04-14 12:00:00,0.0531 +2016-04-14 13:00:00,0.0538 +2016-04-14 14:00:00,0.0525 +2016-04-14 15:00:00,0.0545 +2016-04-14 16:00:00,0.0554 +2016-04-14 17:00:00,0.046 +2016-04-14 18:00:00,0.0347 +2016-04-14 19:00:00,0.0283 +2016-04-14 20:00:00,0.0175 +2016-04-14 21:00:00,0.0086 +2016-04-14 22:00:00,0.0053 +2016-04-14 23:00:00,0.0047 +2016-04-15 00:00:00,0.0048 +2016-04-15 01:00:00,0.0047 +2016-04-15 02:00:00,0.0056 +2016-04-15 03:00:00,0.0127 +2016-04-15 04:00:00,0.0506 +2016-04-15 05:00:00,0.0713 +2016-04-15 06:00:00,0.0583 +2016-04-15 07:00:00,0.0575 +2016-04-15 08:00:00,0.0609 +2016-04-15 09:00:00,0.0595 +2016-04-15 10:00:00,0.0556 +2016-04-15 11:00:00,0.054 +2016-04-15 12:00:00,0.0571 +2016-04-15 13:00:00,0.0588 +2016-04-15 14:00:00,0.0575 +2016-04-15 15:00:00,0.0556 +2016-04-15 16:00:00,0.0569 +2016-04-15 17:00:00,0.0466 +2016-04-15 18:00:00,0.0371 +2016-04-15 19:00:00,0.027 +2016-04-15 20:00:00,0.0288 +2016-04-15 21:00:00,0.0203 +2016-04-15 22:00:00,0.007 +2016-04-15 23:00:00,0.0055 +2016-04-16 00:00:00,0.0048 +2016-04-16 01:00:00,0.0046 +2016-04-16 02:00:00,0.0046 +2016-04-16 03:00:00,0.0054 +2016-04-16 04:00:00,0.0072 +2016-04-16 05:00:00,0.0233 +2016-04-16 06:00:00,0.035 +2016-04-16 07:00:00,0.0434 +2016-04-16 08:00:00,0.0556 +2016-04-16 09:00:00,0.0583 +2016-04-16 10:00:00,0.0603 +2016-04-16 11:00:00,0.0575 +2016-04-16 12:00:00,0.0564 +2016-04-16 13:00:00,0.0543 +2016-04-16 14:00:00,0.0569 +2016-04-16 15:00:00,0.0573 +2016-04-16 16:00:00,0.0529 +2016-04-16 17:00:00,0.0471 +2016-04-16 18:00:00,0.0361 +2016-04-16 19:00:00,0.0323 +2016-04-16 20:00:00,0.0281 +2016-04-16 21:00:00,0.0273 +2016-04-16 22:00:00,0.0109 +2016-04-16 23:00:00,0.0059 +2016-04-17 00:00:00,0.0052 +2016-04-17 01:00:00,0.0049 +2016-04-17 02:00:00,0.0046 +2016-04-17 03:00:00,0.0049 +2016-04-17 04:00:00,0.0057 +2016-04-17 05:00:00,0.0079 +2016-04-17 06:00:00,0.0208 +2016-04-17 07:00:00,0.0338 +2016-04-17 08:00:00,0.0482 +2016-04-17 09:00:00,0.0621 +2016-04-17 10:00:00,0.0647 +2016-04-17 11:00:00,0.0596 +2016-04-17 12:00:00,0.0646 +2016-04-17 13:00:00,0.062 +2016-04-17 14:00:00,0.0653 +2016-04-17 15:00:00,0.0604 +2016-04-17 16:00:00,0.0577 +2016-04-17 17:00:00,0.0556 +2016-04-17 18:00:00,0.0438 +2016-04-17 19:00:00,0.0426 +2016-04-17 20:00:00,0.0274 +2016-04-17 21:00:00,0.012 +2016-04-17 22:00:00,0.003 +2016-04-17 23:00:00,0.0018 +2016-04-18 00:00:00,0.0011 +2016-04-18 01:00:00,0.0009 +2016-04-18 02:00:00,0.001 +2016-04-18 03:00:00,0.0067 +2016-04-18 04:00:00,0.0441 +2016-04-18 05:00:00,0.0999 +2016-04-18 06:00:00,0.1841 +2016-04-18 07:00:00,0.1435 +2016-04-18 08:00:00,0.0608 +2016-04-18 09:00:00,0.0615 +2016-04-18 10:00:00,0.0561 +2016-04-18 11:00:00,0.0554 +2016-04-18 12:00:00,0.0558 +2016-04-18 13:00:00,0.0531 +2016-04-18 14:00:00,0.0569 +2016-04-18 15:00:00,0.0565 +2016-04-18 16:00:00,0.0564 +2016-04-18 17:00:00,0.0434 +2016-04-18 18:00:00,0.0326 +2016-04-18 19:00:00,0.0261 +2016-04-18 20:00:00,0.0177 +2016-04-18 21:00:00,0.0087 +2016-04-18 22:00:00,0.0056 +2016-04-18 23:00:00,0.0049 +2016-04-19 00:00:00,0.0044 +2016-04-19 01:00:00,0.0048 +2016-04-19 02:00:00,0.0054 +2016-04-19 03:00:00,0.0167 +2016-04-19 04:00:00,0.0542 +2016-04-19 05:00:00,0.1209 +2016-04-19 06:00:00,0.3332 +2016-04-19 07:00:00,0.2364 +2016-04-19 08:00:00,0.0547 +2016-04-19 09:00:00,0.0606 +2016-04-19 10:00:00,0.06 +2016-04-19 11:00:00,0.0594 +2016-04-19 12:00:00,0.0582 +2016-04-19 13:00:00,0.0563 +2016-04-19 14:00:00,0.0582 +2016-04-19 15:00:00,0.0542 +2016-04-19 16:00:00,0.057 +2016-04-19 17:00:00,0.0454 +2016-04-19 18:00:00,0.0329 +2016-04-19 19:00:00,0.0285 +2016-04-19 20:00:00,0.0204 +2016-04-19 21:00:00,0.0068 +2016-04-19 22:00:00,0.0053 +2016-04-19 23:00:00,0.0051 +2016-04-20 00:00:00,0.0047 +2016-04-20 01:00:00,0.0045 +2016-04-20 02:00:00,0.0054 +2016-04-20 03:00:00,0.0105 +2016-04-20 04:00:00,0.0527 +2016-04-20 05:00:00,0.0925 +2016-04-20 06:00:00,0.2965 +2016-04-20 07:00:00,0.276 +2016-04-20 08:00:00,0.0718 +2016-04-20 09:00:00,0.0635 +2016-04-20 10:00:00,0.0621 +2016-04-20 11:00:00,0.0586 +2016-04-20 12:00:00,0.0576 +2016-04-20 13:00:00,0.0592 +2016-04-20 14:00:00,0.0546 +2016-04-20 15:00:00,0.0573 +2016-04-20 16:00:00,0.0577 +2016-04-20 17:00:00,0.046 +2016-04-20 18:00:00,0.0341 +2016-04-20 19:00:00,0.0282 +2016-04-20 20:00:00,0.0217 +2016-04-20 21:00:00,0.0077 +2016-04-20 22:00:00,0.0058 +2016-04-20 23:00:00,0.0052 +2016-04-21 00:00:00,0.0045 +2016-04-21 01:00:00,0.0047 +2016-04-21 02:00:00,0.0056 +2016-04-21 03:00:00,0.0146 +2016-04-21 04:00:00,0.0525 +2016-04-21 05:00:00,0.1118 +2016-04-21 06:00:00,0.2916 +2016-04-21 07:00:00,0.1724 +2016-04-21 08:00:00,0.0637 +2016-04-21 09:00:00,0.0637 +2016-04-21 10:00:00,0.0657 +2016-04-21 11:00:00,0.0594 +2016-04-21 12:00:00,0.0562 +2016-04-21 13:00:00,0.0601 +2016-04-21 14:00:00,0.0584 +2016-04-21 15:00:00,0.0566 +2016-04-21 16:00:00,0.0556 +2016-04-21 17:00:00,0.0472 +2016-04-21 18:00:00,0.035 +2016-04-21 19:00:00,0.0293 +2016-04-21 20:00:00,0.021 +2016-04-21 21:00:00,0.0089 +2016-04-21 22:00:00,0.0055 +2016-04-21 23:00:00,0.0051 +2016-04-22 00:00:00,0.0049 +2016-04-22 01:00:00,0.0045 +2016-04-22 02:00:00,0.0053 +2016-04-22 03:00:00,0.0131 +2016-04-22 04:00:00,0.0498 +2016-04-22 05:00:00,0.072 +2016-04-22 06:00:00,0.0642 +2016-04-22 07:00:00,0.058 +2016-04-22 08:00:00,0.0581 +2016-04-22 09:00:00,0.0621 +2016-04-22 10:00:00,0.0577 +2016-04-22 11:00:00,0.0589 +2016-04-22 12:00:00,0.0585 +2016-04-22 13:00:00,0.0594 +2016-04-22 14:00:00,0.0644 +2016-04-22 15:00:00,0.0606 +2016-04-22 16:00:00,0.0555 +2016-04-22 17:00:00,0.0495 +2016-04-22 18:00:00,0.0361 +2016-04-22 19:00:00,0.0212 +2016-04-22 20:00:00,0.0165 +2016-04-22 21:00:00,0.0108 +2016-04-22 22:00:00,0.0065 +2016-04-22 23:00:00,0.0052 +2016-04-23 00:00:00,0.0049 +2016-04-23 01:00:00,0.0049 +2016-04-23 02:00:00,0.0049 +2016-04-23 03:00:00,0.0054 +2016-04-23 04:00:00,0.0071 +2016-04-23 05:00:00,0.0208 +2016-04-23 06:00:00,0.0323 +2016-04-23 07:00:00,0.0465 +2016-04-23 08:00:00,0.0524 +2016-04-23 09:00:00,0.056 +2016-04-23 10:00:00,0.0582 +2016-04-23 11:00:00,0.0653 +2016-04-23 12:00:00,0.0641 +2016-04-23 13:00:00,0.0612 +2016-04-23 14:00:00,0.0686 +2016-04-23 15:00:00,0.0646 +2016-04-23 16:00:00,0.0649 +2016-04-23 17:00:00,0.058 +2016-04-23 18:00:00,0.0409 +2016-04-23 19:00:00,0.0358 +2016-04-23 20:00:00,0.0333 +2016-04-23 21:00:00,0.0265 +2016-04-23 22:00:00,0.01 +2016-04-23 23:00:00,0.0057 +2016-04-24 00:00:00,0.0055 +2016-04-24 01:00:00,0.0049 +2016-04-24 02:00:00,0.0048 +2016-04-24 03:00:00,0.0048 +2016-04-24 04:00:00,0.0058 +2016-04-24 05:00:00,0.0104 +2016-04-24 06:00:00,0.019 +2016-04-24 07:00:00,0.0349 +2016-04-24 08:00:00,0.0487 +2016-04-24 09:00:00,0.0584 +2016-04-24 10:00:00,0.0619 +2016-04-24 11:00:00,0.0615 +2016-04-24 12:00:00,0.0604 +2016-04-24 13:00:00,0.0631 +2016-04-24 14:00:00,0.0648 +2016-04-24 15:00:00,0.0611 +2016-04-24 16:00:00,0.0588 +2016-04-24 17:00:00,0.0543 +2016-04-24 18:00:00,0.0417 +2016-04-24 19:00:00,0.0367 +2016-04-24 20:00:00,0.0278 +2016-04-24 21:00:00,0.0124 +2016-04-24 22:00:00,0.0071 +2016-04-24 23:00:00,0.0048 +2016-04-25 00:00:00,0.0048 +2016-04-25 01:00:00,0.0047 +2016-04-25 02:00:00,0.0056 +2016-04-25 03:00:00,0.0144 +2016-04-25 04:00:00,0.0539 +2016-04-25 05:00:00,0.0861 +2016-04-25 06:00:00,0.2678 +2016-04-25 07:00:00,0.0753 +2016-04-25 08:00:00,0.0572 +2016-04-25 09:00:00,0.0604 +2016-04-25 10:00:00,0.0631 +2016-04-25 11:00:00,0.0557 +2016-04-25 12:00:00,0.0551 +2016-04-25 13:00:00,0.0553 +2016-04-25 14:00:00,0.0575 +2016-04-25 15:00:00,0.0536 +2016-04-25 16:00:00,0.0577 +2016-04-25 17:00:00,0.044 +2016-04-25 18:00:00,0.0336 +2016-04-25 19:00:00,0.0265 +2016-04-25 20:00:00,0.0174 +2016-04-25 21:00:00,0.0072 +2016-04-25 22:00:00,0.0051 +2016-04-25 23:00:00,0.0047 +2016-04-26 00:00:00,0.0044 +2016-04-26 01:00:00,0.0049 +2016-04-26 02:00:00,0.0054 +2016-04-26 03:00:00,0.0171 +2016-04-26 04:00:00,0.0555 +2016-04-26 05:00:00,0.0889 +2016-04-26 06:00:00,0.2852 +2016-04-26 07:00:00,0.1113 +2016-04-26 08:00:00,0.0595 +2016-04-26 09:00:00,0.0654 +2016-04-26 10:00:00,0.0553 +2016-04-26 11:00:00,0.0557 +2016-04-26 12:00:00,0.0548 +2016-04-26 13:00:00,0.0544 +2016-04-26 14:00:00,0.0608 +2016-04-26 15:00:00,0.0536 +2016-04-26 16:00:00,0.0554 +2016-04-26 17:00:00,0.0467 +2016-04-26 18:00:00,0.0352 +2016-04-26 19:00:00,0.03 +2016-04-26 20:00:00,0.0174 +2016-04-26 21:00:00,0.0062 +2016-04-26 22:00:00,0.0055 +2016-04-26 23:00:00,0.005 +2016-04-27 00:00:00,0.0044 +2016-04-27 01:00:00,0.0046 +2016-04-27 02:00:00,0.0053 +2016-04-27 03:00:00,0.013 +2016-04-27 04:00:00,0.0535 +2016-04-27 05:00:00,0.1484 +2016-04-27 06:00:00,0.3463 +2016-04-27 07:00:00,0.261 +2016-04-27 08:00:00,0.0617 +2016-04-27 09:00:00,0.0659 +2016-04-27 10:00:00,0.0563 +2016-04-27 11:00:00,0.0544 +2016-04-27 12:00:00,0.0542 +2016-04-27 13:00:00,0.0544 +2016-04-27 14:00:00,0.0551 +2016-04-27 15:00:00,0.0566 +2016-04-27 16:00:00,0.0523 +2016-04-27 17:00:00,0.0443 +2016-04-27 18:00:00,0.0337 +2016-04-27 19:00:00,0.0276 +2016-04-27 20:00:00,0.0165 +2016-04-27 21:00:00,0.0085 +2016-04-27 22:00:00,0.0051 +2016-04-27 23:00:00,0.0045 +2016-04-28 00:00:00,0.0045 +2016-04-28 01:00:00,0.0046 +2016-04-28 02:00:00,0.0054 +2016-04-28 03:00:00,0.0155 +2016-04-28 04:00:00,0.0498 +2016-04-28 05:00:00,0.1285 +2016-04-28 06:00:00,0.319 +2016-04-28 07:00:00,0.3231 +2016-04-28 08:00:00,0.104 +2016-04-28 09:00:00,0.0614 +2016-04-28 10:00:00,0.051 +2016-04-28 11:00:00,0.0551 +2016-04-28 12:00:00,0.0605 +2016-04-28 13:00:00,0.058 +2016-04-28 14:00:00,0.0597 +2016-04-28 15:00:00,0.0545 +2016-04-28 16:00:00,0.0542 +2016-04-28 17:00:00,0.0474 +2016-04-28 18:00:00,0.0364 +2016-04-28 19:00:00,0.0295 +2016-04-28 20:00:00,0.0214 +2016-04-28 21:00:00,0.0105 +2016-04-28 22:00:00,0.0057 +2016-04-28 23:00:00,0.005 +2016-04-29 00:00:00,0.0044 +2016-04-29 01:00:00,0.0048 +2016-04-29 02:00:00,0.0052 +2016-04-29 03:00:00,0.0136 +2016-04-29 04:00:00,0.0497 +2016-04-29 05:00:00,0.0747 +2016-04-29 06:00:00,0.066 +2016-04-29 07:00:00,0.0618 +2016-04-29 08:00:00,0.0644 +2016-04-29 09:00:00,0.0606 +2016-04-29 10:00:00,0.059 +2016-04-29 11:00:00,0.0595 +2016-04-29 12:00:00,0.0578 +2016-04-29 13:00:00,0.0599 +2016-04-29 14:00:00,0.0634 +2016-04-29 15:00:00,0.0587 +2016-04-29 16:00:00,0.0564 +2016-04-29 17:00:00,0.0479 +2016-04-29 18:00:00,0.0385 +2016-04-29 19:00:00,0.0315 +2016-04-29 20:00:00,0.0276 +2016-04-29 21:00:00,0.0167 +2016-04-29 22:00:00,0.0061 +2016-04-29 23:00:00,0.0056 +2016-04-30 00:00:00,0.0048 +2016-04-30 01:00:00,0.0048 +2016-04-30 02:00:00,0.0047 +2016-04-30 03:00:00,0.0053 +2016-04-30 04:00:00,0.0071 +2016-04-30 05:00:00,0.0196 +2016-04-30 06:00:00,0.0345 +2016-04-30 07:00:00,0.0428 +2016-04-30 08:00:00,0.0552 +2016-04-30 09:00:00,0.0601 +2016-04-30 10:00:00,0.0616 +2016-04-30 11:00:00,0.06 +2016-04-30 12:00:00,0.0608 +2016-04-30 13:00:00,0.063 +2016-04-30 14:00:00,0.0605 +2016-04-30 15:00:00,0.0616 +2016-04-30 16:00:00,0.0613 +2016-04-30 17:00:00,0.0554 +2016-04-30 18:00:00,0.0396 +2016-04-30 19:00:00,0.037 +2016-04-30 20:00:00,0.0378 +2016-04-30 21:00:00,0.027 +2016-04-30 22:00:00,0.0132 +2016-04-30 23:00:00,0.0058 +2016-05-01 00:00:00,0.0053 +2016-05-01 01:00:00,0.0047 +2016-05-01 02:00:00,0.0049 +2016-05-01 03:00:00,0.0051 +2016-05-01 04:00:00,0.0057 +2016-05-01 05:00:00,0.0087 +2016-05-01 06:00:00,0.0195 +2016-05-01 07:00:00,0.0351 +2016-05-01 08:00:00,0.0515 +2016-05-01 09:00:00,0.0619 +2016-05-01 10:00:00,0.0706 +2016-05-01 11:00:00,0.0639 +2016-05-01 12:00:00,0.0662 +2016-05-01 13:00:00,0.0649 +2016-05-01 14:00:00,0.0651 +2016-05-01 15:00:00,0.0624 +2016-05-01 16:00:00,0.0547 +2016-05-01 17:00:00,0.0491 +2016-05-01 18:00:00,0.039 +2016-05-01 19:00:00,0.034 +2016-05-01 20:00:00,0.0248 +2016-05-01 21:00:00,0.0143 +2016-05-01 22:00:00,0.0074 +2016-05-01 23:00:00,0.0049 +2016-05-02 00:00:00,0.0045 +2016-05-02 01:00:00,0.0048 +2016-05-02 02:00:00,0.0059 +2016-05-02 03:00:00,0.0139 +2016-05-02 04:00:00,0.0538 +2016-05-02 05:00:00,0.1454 +2016-05-02 06:00:00,0.3233 +2016-05-02 07:00:00,0.275 +2016-05-02 08:00:00,0.0582 +2016-05-02 09:00:00,0.0597 +2016-05-02 10:00:00,0.0554 +2016-05-02 11:00:00,0.0563 +2016-05-02 12:00:00,0.0538 +2016-05-02 13:00:00,0.0556 +2016-05-02 14:00:00,0.0546 +2016-05-02 15:00:00,0.0534 +2016-05-02 16:00:00,0.0546 +2016-05-02 17:00:00,0.0485 +2016-05-02 18:00:00,0.0339 +2016-05-02 19:00:00,0.0266 +2016-05-02 20:00:00,0.0175 +2016-05-02 21:00:00,0.0059 +2016-05-02 22:00:00,0.0055 +2016-05-02 23:00:00,0.005 +2016-05-03 00:00:00,0.0047 +2016-05-03 01:00:00,0.0048 +2016-05-03 02:00:00,0.0053 +2016-05-03 03:00:00,0.0161 +2016-05-03 04:00:00,0.0537 +2016-05-03 05:00:00,0.1301 +2016-05-03 06:00:00,0.3553 +2016-05-03 07:00:00,0.3741 +2016-05-03 08:00:00,0.107 +2016-05-03 09:00:00,0.0607 +2016-05-03 10:00:00,0.0558 +2016-05-03 11:00:00,0.0542 +2016-05-03 12:00:00,0.0564 +2016-05-03 13:00:00,0.0561 +2016-05-03 14:00:00,0.0564 +2016-05-03 15:00:00,0.0553 +2016-05-03 16:00:00,0.054 +2016-05-03 17:00:00,0.0431 +2016-05-03 18:00:00,0.0334 +2016-05-03 19:00:00,0.0278 +2016-05-03 20:00:00,0.014 +2016-05-03 21:00:00,0.0069 +2016-05-03 22:00:00,0.0057 +2016-05-03 23:00:00,0.0045 +2016-05-04 00:00:00,0.0047 +2016-05-04 01:00:00,0.0044 +2016-05-04 02:00:00,0.0054 +2016-05-04 03:00:00,0.0128 +2016-05-04 04:00:00,0.0522 +2016-05-04 05:00:00,0.1026 +2016-05-04 06:00:00,0.3399 +2016-05-04 07:00:00,0.3564 +2016-05-04 08:00:00,0.0648 +2016-05-04 09:00:00,0.0602 +2016-05-04 10:00:00,0.0579 +2016-05-04 11:00:00,0.0557 +2016-05-04 12:00:00,0.0531 +2016-05-04 13:00:00,0.0567 +2016-05-04 14:00:00,0.0543 +2016-05-04 15:00:00,0.0557 +2016-05-04 16:00:00,0.0574 +2016-05-04 17:00:00,0.0466 +2016-05-04 18:00:00,0.0338 +2016-05-04 19:00:00,0.0292 +2016-05-04 20:00:00,0.0233 +2016-05-04 21:00:00,0.0086 +2016-05-04 22:00:00,0.0055 +2016-05-04 23:00:00,0.0047 +2016-05-05 00:00:00,0.0045 +2016-05-05 01:00:00,0.0047 +2016-05-05 02:00:00,0.006 +2016-05-05 03:00:00,0.0097 +2016-05-05 04:00:00,0.0529 +2016-05-05 05:00:00,0.2911 +2016-05-05 06:00:00,0.3793 +2016-05-05 07:00:00,0.3464 +2016-05-05 08:00:00,0.2309 +2016-05-05 09:00:00,0.0614 +2016-05-05 10:00:00,0.0616 +2016-05-05 11:00:00,0.0602 +2016-05-05 12:00:00,0.0573 +2016-05-05 13:00:00,0.0579 +2016-05-05 14:00:00,0.0599 +2016-05-05 15:00:00,0.0572 +2016-05-05 16:00:00,0.0581 +2016-05-05 17:00:00,0.0442 +2016-05-05 18:00:00,0.0359 +2016-05-05 19:00:00,0.0296 +2016-05-05 20:00:00,0.0188 +2016-05-05 21:00:00,0.009 +2016-05-05 22:00:00,0.0059 +2016-05-05 23:00:00,0.0049 +2016-05-06 00:00:00,0.0047 +2016-05-06 01:00:00,0.0048 +2016-05-06 02:00:00,0.0056 +2016-05-06 03:00:00,0.012 +2016-05-06 04:00:00,0.0464 +2016-05-06 05:00:00,0.0737 +2016-05-06 06:00:00,0.0625 +2016-05-06 07:00:00,0.0598 +2016-05-06 08:00:00,0.061 +2016-05-06 09:00:00,0.062 +2016-05-06 10:00:00,0.061 +2016-05-06 11:00:00,0.0607 +2016-05-06 12:00:00,0.0586 +2016-05-06 13:00:00,0.0647 +2016-05-06 14:00:00,0.0648 +2016-05-06 15:00:00,0.0642 +2016-05-06 16:00:00,0.0599 +2016-05-06 17:00:00,0.0473 +2016-05-06 18:00:00,0.0371 +2016-05-06 19:00:00,0.0313 +2016-05-06 20:00:00,0.0243 +2016-05-06 21:00:00,0.02 +2016-05-06 22:00:00,0.0074 +2016-05-06 23:00:00,0.0057 +2016-05-07 00:00:00,0.0049 +2016-05-07 01:00:00,0.0046 +2016-05-07 02:00:00,0.0051 +2016-05-07 03:00:00,0.0052 +2016-05-07 04:00:00,0.0116 +2016-05-07 05:00:00,0.0226 +2016-05-07 06:00:00,0.036 +2016-05-07 07:00:00,0.0456 +2016-05-07 08:00:00,0.0547 +2016-05-07 09:00:00,0.07 +2016-05-07 10:00:00,0.0683 +2016-05-07 11:00:00,0.068 +2016-05-07 12:00:00,0.0629 +2016-05-07 13:00:00,0.0629 +2016-05-07 14:00:00,0.0631 +2016-05-07 15:00:00,0.0638 +2016-05-07 16:00:00,0.0621 +2016-05-07 17:00:00,0.05 +2016-05-07 18:00:00,0.0365 +2016-05-07 19:00:00,0.0332 +2016-05-07 20:00:00,0.0327 +2016-05-07 21:00:00,0.0258 +2016-05-07 22:00:00,0.01 +2016-05-07 23:00:00,0.0065 +2016-05-08 00:00:00,0.0053 +2016-05-08 01:00:00,0.005 +2016-05-08 02:00:00,0.005 +2016-05-08 03:00:00,0.0049 +2016-05-08 04:00:00,0.0053 +2016-05-08 05:00:00,0.0073 +2016-05-08 06:00:00,0.0178 +2016-05-08 07:00:00,0.0317 +2016-05-08 08:00:00,0.0485 +2016-05-08 09:00:00,0.0651 +2016-05-08 10:00:00,0.0636 +2016-05-08 11:00:00,0.0655 +2016-05-08 12:00:00,0.0586 +2016-05-08 13:00:00,0.0646 +2016-05-08 14:00:00,0.0629 +2016-05-08 15:00:00,0.0647 +2016-05-08 16:00:00,0.0665 +2016-05-08 17:00:00,0.0591 +2016-05-08 18:00:00,0.0543 +2016-05-08 19:00:00,0.042 +2016-05-08 20:00:00,0.029 +2016-05-08 21:00:00,0.0183 +2016-05-08 22:00:00,0.0058 +2016-05-08 23:00:00,0.005 +2016-05-09 00:00:00,0.0048 +2016-05-09 01:00:00,0.0048 +2016-05-09 02:00:00,0.0039 +2016-05-09 03:00:00,0.0137 +2016-05-09 04:00:00,0.055 +2016-05-09 05:00:00,0.134 +2016-05-09 06:00:00,0.3112 +2016-05-09 07:00:00,0.1958 +2016-05-09 08:00:00,0.0586 +2016-05-09 09:00:00,0.0577 +2016-05-09 10:00:00,0.0566 +2016-05-09 11:00:00,0.0573 +2016-05-09 12:00:00,0.0581 +2016-05-09 13:00:00,0.0556 +2016-05-09 14:00:00,0.0551 +2016-05-09 15:00:00,0.0542 +2016-05-09 16:00:00,0.054 +2016-05-09 17:00:00,0.0467 +2016-05-09 18:00:00,0.0327 +2016-05-09 19:00:00,0.0247 +2016-05-09 20:00:00,0.0108 +2016-05-09 21:00:00,0.0066 +2016-05-09 22:00:00,0.0057 +2016-05-09 23:00:00,0.0047 +2016-05-10 00:00:00,0.0044 +2016-05-10 01:00:00,0.0051 +2016-05-10 02:00:00,0.0056 +2016-05-10 03:00:00,0.0158 +2016-05-10 04:00:00,0.0512 +2016-05-10 05:00:00,0.1103 +2016-05-10 06:00:00,0.3532 +2016-05-10 07:00:00,0.1984 +2016-05-10 08:00:00,0.1545 +2016-05-10 09:00:00,0.0594 +2016-05-10 10:00:00,0.059 +2016-05-10 11:00:00,0.0584 +2016-05-10 12:00:00,0.054 +2016-05-10 13:00:00,0.0596 +2016-05-10 14:00:00,0.0617 +2016-05-10 15:00:00,0.0541 +2016-05-10 16:00:00,0.0523 +2016-05-10 17:00:00,0.0427 +2016-05-10 18:00:00,0.0328 +2016-05-10 19:00:00,0.0286 +2016-05-10 20:00:00,0.0225 +2016-05-10 21:00:00,0.0084 +2016-05-10 22:00:00,0.0056 +2016-05-10 23:00:00,0.0049 +2016-05-11 00:00:00,0.0046 +2016-05-11 01:00:00,0.0045 +2016-05-11 02:00:00,0.0053 +2016-05-11 03:00:00,0.0156 +2016-05-11 04:00:00,0.0529 +2016-05-11 05:00:00,0.1151 +2016-05-11 06:00:00,0.3493 +2016-05-11 07:00:00,0.2275 +2016-05-11 08:00:00,0.0629 +2016-05-11 09:00:00,0.0654 +2016-05-11 10:00:00,0.0616 +2016-05-11 11:00:00,0.0569 +2016-05-11 12:00:00,0.0402 +2016-05-11 13:00:00,0.0562 +2016-05-11 14:00:00,0.061 +2016-05-11 15:00:00,0.0587 +2016-05-11 16:00:00,0.0564 +2016-05-11 17:00:00,0.0469 +2016-05-11 18:00:00,0.0346 +2016-05-11 19:00:00,0.0274 +2016-05-11 20:00:00,0.0213 +2016-05-11 21:00:00,0.0076 +2016-05-11 22:00:00,0.0059 +2016-05-11 23:00:00,0.0048 +2016-05-12 00:00:00,0.0047 +2016-05-12 01:00:00,0.0046 +2016-05-12 02:00:00,0.0051 +2016-05-12 03:00:00,0.0098 +2016-05-12 04:00:00,0.0534 +2016-05-12 05:00:00,0.1356 +2016-05-12 06:00:00,0.3571 +2016-05-12 07:00:00,0.272 +2016-05-12 08:00:00,0.0634 +2016-05-12 09:00:00,0.0607 +2016-05-12 10:00:00,0.0585 +2016-05-12 11:00:00,0.0601 +2016-05-12 12:00:00,0.0578 +2016-05-12 13:00:00,0.061 +2016-05-12 14:00:00,0.0619 +2016-05-12 15:00:00,0.0556 +2016-05-12 16:00:00,0.0562 +2016-05-12 17:00:00,0.049 +2016-05-12 18:00:00,0.0382 +2016-05-12 19:00:00,0.0287 +2016-05-12 20:00:00,0.017 +2016-05-12 21:00:00,0.0093 +2016-05-12 22:00:00,0.006 +2016-05-12 23:00:00,0.0049 +2016-05-13 00:00:00,0.0047 +2016-05-13 01:00:00,0.0046 +2016-05-13 02:00:00,0.0059 +2016-05-13 03:00:00,0.0132 +2016-05-13 04:00:00,0.0504 +2016-05-13 05:00:00,0.0761 +2016-05-13 06:00:00,0.0662 +2016-05-13 07:00:00,0.0604 +2016-05-13 08:00:00,0.0611 +2016-05-13 09:00:00,0.0624 +2016-05-13 10:00:00,0.0613 +2016-05-13 11:00:00,0.0581 +2016-05-13 12:00:00,0.0595 +2016-05-13 13:00:00,0.0608 +2016-05-13 14:00:00,0.0622 +2016-05-13 15:00:00,0.0585 +2016-05-13 16:00:00,0.0577 +2016-05-13 17:00:00,0.0477 +2016-05-13 18:00:00,0.0392 +2016-05-13 19:00:00,0.0313 +2016-05-13 20:00:00,0.0264 +2016-05-13 21:00:00,0.0184 +2016-05-13 22:00:00,0.0065 +2016-05-13 23:00:00,0.0057 +2016-05-14 00:00:00,0.0049 +2016-05-14 01:00:00,0.005 +2016-05-14 02:00:00,0.0049 +2016-05-14 03:00:00,0.0057 +2016-05-14 04:00:00,0.0102 +2016-05-14 05:00:00,0.0239 +2016-05-14 06:00:00,0.0378 +2016-05-14 07:00:00,0.0459 +2016-05-14 08:00:00,0.0543 +2016-05-14 09:00:00,0.0573 +2016-05-14 10:00:00,0.0517 +2016-05-14 11:00:00,0.0651 +2016-05-14 12:00:00,0.0638 +2016-05-14 13:00:00,0.064 +2016-05-14 14:00:00,0.062 +2016-05-14 15:00:00,0.0626 +2016-05-14 16:00:00,0.0617 +2016-05-14 17:00:00,0.0549 +2016-05-14 18:00:00,0.0434 +2016-05-14 19:00:00,0.0357 +2016-05-14 20:00:00,0.0334 +2016-05-14 21:00:00,0.0302 +2016-05-14 22:00:00,0.0141 +2016-05-14 23:00:00,0.0063 +2016-05-15 00:00:00,0.0059 +2016-05-15 01:00:00,0.0052 +2016-05-15 02:00:00,0.005 +2016-05-15 03:00:00,0.0051 +2016-05-15 04:00:00,0.0068 +2016-05-15 05:00:00,0.0141 +2016-05-15 06:00:00,0.0227 +2016-05-15 07:00:00,0.0335 +2016-05-15 08:00:00,0.0441 +2016-05-15 09:00:00,0.0596 +2016-05-15 10:00:00,0.0625 +2016-05-15 11:00:00,0.0654 +2016-05-15 12:00:00,0.062 +2016-05-15 13:00:00,0.0636 +2016-05-15 14:00:00,0.0647 +2016-05-15 15:00:00,0.0584 +2016-05-15 16:00:00,0.0577 +2016-05-15 17:00:00,0.0558 +2016-05-15 18:00:00,0.0481 +2016-05-15 19:00:00,0.0377 +2016-05-15 20:00:00,0.0312 +2016-05-15 21:00:00,0.0157 +2016-05-15 22:00:00,0.0057 +2016-05-15 23:00:00,0.0052 +2016-05-16 00:00:00,0.0045 +2016-05-16 01:00:00,0.0046 +2016-05-16 02:00:00,0.0057 +2016-05-16 03:00:00,0.0182 +2016-05-16 04:00:00,0.0535 +2016-05-16 05:00:00,0.1086 +2016-05-16 06:00:00,0.3404 +2016-05-16 07:00:00,0.3517 +2016-05-16 08:00:00,0.0808 +2016-05-16 09:00:00,0.0626 +2016-05-16 10:00:00,0.0577 +2016-05-16 11:00:00,0.0574 +2016-05-16 12:00:00,0.0576 +2016-05-16 13:00:00,0.0562 +2016-05-16 14:00:00,0.0586 +2016-05-16 15:00:00,0.0563 +2016-05-16 16:00:00,0.0537 +2016-05-16 17:00:00,0.0404 +2016-05-16 18:00:00,0.0309 +2016-05-16 19:00:00,0.0217 +2016-05-16 20:00:00,0.0189 +2016-05-16 21:00:00,0.0067 +2016-05-16 22:00:00,0.0057 +2016-05-16 23:00:00,0.0049 +2016-05-17 00:00:00,0.0045 +2016-05-17 01:00:00,0.0046 +2016-05-17 02:00:00,0.0056 +2016-05-17 03:00:00,0.0159 +2016-05-17 04:00:00,0.0538 +2016-05-17 05:00:00,0.1296 +2016-05-17 06:00:00,0.4195 +2016-05-17 07:00:00,0.3896 +2016-05-17 08:00:00,0.2802 +2016-05-17 09:00:00,0.0611 +2016-05-17 10:00:00,0.0581 +2016-05-17 11:00:00,0.059 +2016-05-17 12:00:00,0.0562 +2016-05-17 13:00:00,0.0548 +2016-05-17 14:00:00,0.0568 +2016-05-17 15:00:00,0.0538 +2016-05-17 16:00:00,0.0533 +2016-05-17 17:00:00,0.0446 +2016-05-17 18:00:00,0.0344 +2016-05-17 19:00:00,0.0285 +2016-05-17 20:00:00,0.0239 +2016-05-17 21:00:00,0.0097 +2016-05-17 22:00:00,0.0058 +2016-05-17 23:00:00,0.0048 +2016-05-18 00:00:00,0.0047 +2016-05-18 01:00:00,0.0046 +2016-05-18 02:00:00,0.0056 +2016-05-18 03:00:00,0.011 +2016-05-18 04:00:00,0.0527 +2016-05-18 05:00:00,0.134 +2016-05-18 06:00:00,0.3382 +2016-05-18 07:00:00,0.4116 +2016-05-18 08:00:00,0.236 +2016-05-18 09:00:00,0.064 +2016-05-18 10:00:00,0.0603 +2016-05-18 11:00:00,0.0583 +2016-05-18 12:00:00,0.0556 +2016-05-18 13:00:00,0.0583 +2016-05-18 14:00:00,0.0587 +2016-05-18 15:00:00,0.0565 +2016-05-18 16:00:00,0.0544 +2016-05-18 17:00:00,0.046 +2016-05-18 18:00:00,0.0347 +2016-05-18 19:00:00,0.0284 +2016-05-18 20:00:00,0.0245 +2016-05-18 21:00:00,0.0093 +2016-05-18 22:00:00,0.0058 +2016-05-18 23:00:00,0.0051 +2016-05-19 00:00:00,0.0048 +2016-05-19 01:00:00,0.0048 +2016-05-19 02:00:00,0.006 +2016-05-19 03:00:00,0.0157 +2016-05-19 04:00:00,0.0531 +2016-05-19 05:00:00,0.1302 +2016-05-19 06:00:00,0.346 +2016-05-19 07:00:00,0.3779 +2016-05-19 08:00:00,0.2284 +2016-05-19 09:00:00,0.0606 +2016-05-19 10:00:00,0.0608 +2016-05-19 11:00:00,0.0611 +2016-05-19 12:00:00,0.0564 +2016-05-19 13:00:00,0.0586 +2016-05-19 14:00:00,0.0645 +2016-05-19 15:00:00,0.0606 +2016-05-19 16:00:00,0.0587 +2016-05-19 17:00:00,0.0481 +2016-05-19 18:00:00,0.0379 +2016-05-19 19:00:00,0.0302 +2016-05-19 20:00:00,0.0231 +2016-05-19 21:00:00,0.0132 +2016-05-19 22:00:00,0.0057 +2016-05-19 23:00:00,0.0053 +2016-05-20 00:00:00,0.0047 +2016-05-20 01:00:00,0.0047 +2016-05-20 02:00:00,0.0057 +2016-05-20 03:00:00,0.0163 +2016-05-20 04:00:00,0.0492 +2016-05-20 05:00:00,0.0741 +2016-05-20 06:00:00,0.1021 +2016-05-20 07:00:00,0.0605 +2016-05-20 08:00:00,0.0626 +2016-05-20 09:00:00,0.064 +2016-05-20 10:00:00,0.06 +2016-05-20 11:00:00,0.0591 +2016-05-20 12:00:00,0.0581 +2016-05-20 13:00:00,0.0608 +2016-05-20 14:00:00,0.0613 +2016-05-20 15:00:00,0.0687 +2016-05-20 16:00:00,0.0594 +2016-05-20 17:00:00,0.0498 +2016-05-20 18:00:00,0.0366 +2016-05-20 19:00:00,0.0315 +2016-05-20 20:00:00,0.0214 +2016-05-20 21:00:00,0.0238 +2016-05-20 22:00:00,0.0079 +2016-05-20 23:00:00,0.0063 +2016-05-21 00:00:00,0.0051 +2016-05-21 01:00:00,0.0047 +2016-05-21 02:00:00,0.0046 +2016-05-21 03:00:00,0.0057 +2016-05-21 04:00:00,0.0071 +2016-05-21 05:00:00,0.0173 +2016-05-21 06:00:00,0.0366 +2016-05-21 07:00:00,0.0465 +2016-05-21 08:00:00,0.0533 +2016-05-21 09:00:00,0.0555 +2016-05-21 10:00:00,0.0628 +2016-05-21 11:00:00,0.062 +2016-05-21 12:00:00,0.0652 +2016-05-21 13:00:00,0.0552 +2016-05-21 14:00:00,0.0528 +2016-05-21 15:00:00,0.0565 +2016-05-21 16:00:00,0.0561 +2016-05-21 17:00:00,0.0525 +2016-05-21 18:00:00,0.0375 +2016-05-21 19:00:00,0.0334 +2016-05-21 20:00:00,0.0371 +2016-05-21 21:00:00,0.0295 +2016-05-21 22:00:00,0.0149 +2016-05-21 23:00:00,0.0058 +2016-05-22 00:00:00,0.0056 +2016-05-22 01:00:00,0.0051 +2016-05-22 02:00:00,0.0049 +2016-05-22 03:00:00,0.0051 +2016-05-22 04:00:00,0.0057 +2016-05-22 05:00:00,0.0128 +2016-05-22 06:00:00,0.0148 +2016-05-22 07:00:00,0.0355 +2016-05-22 08:00:00,0.0481 +2016-05-22 09:00:00,0.0588 +2016-05-22 10:00:00,0.0691 +2016-05-22 11:00:00,0.0646 +2016-05-22 12:00:00,0.0701 +2016-05-22 13:00:00,0.0678 +2016-05-22 14:00:00,0.0633 +2016-05-22 15:00:00,0.0641 +2016-05-22 16:00:00,0.0581 +2016-05-22 17:00:00,0.0551 +2016-05-22 18:00:00,0.0477 +2016-05-22 19:00:00,0.0377 +2016-05-22 20:00:00,0.032 +2016-05-22 21:00:00,0.0165 +2016-05-22 22:00:00,0.0068 +2016-05-22 23:00:00,0.0053 +2016-05-23 00:00:00,0.0046 +2016-05-23 01:00:00,0.0046 +2016-05-23 02:00:00,0.0057 +2016-05-23 03:00:00,0.0175 +2016-05-23 04:00:00,0.0532 +2016-05-23 05:00:00,0.1281 +2016-05-23 06:00:00,0.3212 +2016-05-23 07:00:00,0.1689 +2016-05-23 08:00:00,0.0612 +2016-05-23 09:00:00,0.0615 +2016-05-23 10:00:00,0.0556 +2016-05-23 11:00:00,0.0568 +2016-05-23 12:00:00,0.0598 +2016-05-23 13:00:00,0.0517 +2016-05-23 14:00:00,0.0481 +2016-05-23 15:00:00,0.061 +2016-05-23 16:00:00,0.0575 +2016-05-23 17:00:00,0.0443 +2016-05-23 18:00:00,0.0328 +2016-05-23 19:00:00,0.0273 +2016-05-23 20:00:00,0.0193 +2016-05-23 21:00:00,0.0076 +2016-05-23 22:00:00,0.0058 +2016-05-23 23:00:00,0.0051 +2016-05-24 00:00:00,0.0044 +2016-05-24 01:00:00,0.0046 +2016-05-24 02:00:00,0.0051 +2016-05-24 03:00:00,0.0156 +2016-05-24 04:00:00,0.0514 +2016-05-24 05:00:00,0.1364 +2016-05-24 06:00:00,0.3538 +2016-05-24 07:00:00,0.3255 +2016-05-24 08:00:00,0.0597 +2016-05-24 09:00:00,0.0641 +2016-05-24 10:00:00,0.0587 +2016-05-24 11:00:00,0.0576 +2016-05-24 12:00:00,0.0602 +2016-05-24 13:00:00,0.0578 +2016-05-24 14:00:00,0.0608 +2016-05-24 15:00:00,0.0558 +2016-05-24 16:00:00,0.0561 +2016-05-24 17:00:00,0.0456 +2016-05-24 18:00:00,0.0329 +2016-05-24 19:00:00,0.0277 +2016-05-24 20:00:00,0.0196 +2016-05-24 21:00:00,0.0085 +2016-05-24 22:00:00,0.0056 +2016-05-24 23:00:00,0.0049 +2016-05-25 00:00:00,0.0045 +2016-05-25 01:00:00,0.0049 +2016-05-25 02:00:00,0.0054 +2016-05-25 03:00:00,0.0088 +2016-05-25 04:00:00,0.0538 +2016-05-25 05:00:00,0.122 +2016-05-25 06:00:00,0.346 +2016-05-25 07:00:00,0.1837 +2016-05-25 08:00:00,0.0628 +2016-05-25 09:00:00,0.0653 +2016-05-25 10:00:00,0.0617 +2016-05-25 11:00:00,0.0572 +2016-05-25 12:00:00,0.0583 +2016-05-25 13:00:00,0.0569 +2016-05-25 14:00:00,0.056 +2016-05-25 15:00:00,0.0552 +2016-05-25 16:00:00,0.0567 +2016-05-25 17:00:00,0.0428 +2016-05-25 18:00:00,0.0355 +2016-05-25 19:00:00,0.0296 +2016-05-25 20:00:00,0.022 +2016-05-25 21:00:00,0.0073 +2016-05-25 22:00:00,0.0067 +2016-05-25 23:00:00,0.0052 +2016-05-26 00:00:00,0.0046 +2016-05-26 01:00:00,0.0048 +2016-05-26 02:00:00,0.0053 +2016-05-26 03:00:00,0.0113 +2016-05-26 04:00:00,0.0484 +2016-05-26 05:00:00,0.1556 +2016-05-26 06:00:00,0.3045 +2016-05-26 07:00:00,0.1383 +2016-05-26 08:00:00,0.0596 +2016-05-26 09:00:00,0.0665 +2016-05-26 10:00:00,0.0624 +2016-05-26 11:00:00,0.0619 +2016-05-26 12:00:00,0.0608 +2016-05-26 13:00:00,0.0604 +2016-05-26 14:00:00,0.0642 +2016-05-26 15:00:00,0.0577 +2016-05-26 16:00:00,0.0567 +2016-05-26 17:00:00,0.0444 +2016-05-26 18:00:00,0.0343 +2016-05-26 19:00:00,0.0267 +2016-05-26 20:00:00,0.0231 +2016-05-26 21:00:00,0.0085 +2016-05-26 22:00:00,0.0061 +2016-05-26 23:00:00,0.005 +2016-05-27 00:00:00,0.0049 +2016-05-27 01:00:00,0.0046 +2016-05-27 02:00:00,0.0054 +2016-05-27 03:00:00,0.0108 +2016-05-27 04:00:00,0.0437 +2016-05-27 05:00:00,0.0693 +2016-05-27 06:00:00,0.0624 +2016-05-27 07:00:00,0.057 +2016-05-27 08:00:00,0.0592 +2016-05-27 09:00:00,0.0638 +2016-05-27 10:00:00,0.0634 +2016-05-27 11:00:00,0.0618 +2016-05-27 12:00:00,0.061 +2016-05-27 13:00:00,0.0598 +2016-05-27 14:00:00,0.0584 +2016-05-27 15:00:00,0.0536 +2016-05-27 16:00:00,0.0476 +2016-05-27 17:00:00,0.0446 +2016-05-27 18:00:00,0.0359 +2016-05-27 19:00:00,0.0313 +2016-05-27 20:00:00,0.027 +2016-05-27 21:00:00,0.018 +2016-05-27 22:00:00,0.009 +2016-05-27 23:00:00,0.006 +2016-05-28 00:00:00,0.0052 +2016-05-28 01:00:00,0.0047 +2016-05-28 02:00:00,0.0049 +2016-05-28 03:00:00,0.0054 +2016-05-28 04:00:00,0.0063 +2016-05-28 05:00:00,0.0251 +2016-05-28 06:00:00,0.033 +2016-05-28 07:00:00,0.0421 +2016-05-28 08:00:00,0.0511 +2016-05-28 09:00:00,0.0564 +2016-05-28 10:00:00,0.0594 +2016-05-28 11:00:00,0.0572 +2016-05-28 12:00:00,0.0537 +2016-05-28 13:00:00,0.0551 +2016-05-28 14:00:00,0.0558 +2016-05-28 15:00:00,0.0563 +2016-05-28 16:00:00,0.0556 +2016-05-28 17:00:00,0.0447 +2016-05-28 18:00:00,0.0347 +2016-05-28 19:00:00,0.0318 +2016-05-28 20:00:00,0.0358 +2016-05-28 21:00:00,0.0288 +2016-05-28 22:00:00,0.0155 +2016-05-28 23:00:00,0.0058 +2016-05-29 00:00:00,0.0055 +2016-05-29 01:00:00,0.0047 +2016-05-29 02:00:00,0.0049 +2016-05-29 03:00:00,0.0053 +2016-05-29 04:00:00,0.0061 +2016-05-29 05:00:00,0.0094 +2016-05-29 06:00:00,0.0174 +2016-05-29 07:00:00,0.031 +2016-05-29 08:00:00,0.0416 +2016-05-29 09:00:00,0.0484 +2016-05-29 10:00:00,0.0539 +2016-05-29 11:00:00,0.0563 +2016-05-29 12:00:00,0.0589 +2016-05-29 13:00:00,0.0531 +2016-05-29 14:00:00,0.0594 +2016-05-29 15:00:00,0.0552 +2016-05-29 16:00:00,0.0549 +2016-05-29 17:00:00,0.0525 +2016-05-29 18:00:00,0.0492 +2016-05-29 19:00:00,0.043 +2016-05-29 20:00:00,0.0387 +2016-05-29 21:00:00,0.0304 +2016-05-29 22:00:00,0.0111 +2016-05-29 23:00:00,0.0063 +2016-05-30 00:00:00,0.0059 +2016-05-30 01:00:00,0.0048 +2016-05-30 02:00:00,0.0052 +2016-05-30 03:00:00,0.0055 +2016-05-30 04:00:00,0.0079 +2016-05-30 05:00:00,0.0151 +2016-05-30 06:00:00,0.0235 +2016-05-30 07:00:00,0.0329 +2016-05-30 08:00:00,0.0475 +2016-05-30 09:00:00,0.0597 +2016-05-30 10:00:00,0.062 +2016-05-30 11:00:00,0.0642 +2016-05-30 12:00:00,0.0609 +2016-05-30 13:00:00,0.0647 +2016-05-30 14:00:00,0.0632 +2016-05-30 15:00:00,0.0599 +2016-05-30 16:00:00,0.0569 +2016-05-30 17:00:00,0.0509 +2016-05-30 18:00:00,0.0369 +2016-05-30 19:00:00,0.0347 +2016-05-30 20:00:00,0.0403 +2016-05-30 21:00:00,0.0246 +2016-05-30 22:00:00,0.0061 +2016-05-30 23:00:00,0.0052 +2016-05-31 00:00:00,0.0046 +2016-05-31 01:00:00,0.0047 +2016-05-31 02:00:00,0.0057 +2016-05-31 03:00:00,0.0145 +2016-05-31 04:00:00,0.0552 +2016-05-31 05:00:00,0.1292 +2016-05-31 06:00:00,0.3329 +2016-05-31 07:00:00,0.4345 +2016-05-31 08:00:00,0.2386 +2016-05-31 09:00:00,0.0655 +2016-05-31 10:00:00,0.0649 +2016-05-31 11:00:00,0.0603 +2016-05-31 12:00:00,0.0617 +2016-05-31 13:00:00,0.0615 +2016-05-31 14:00:00,0.0588 +2016-05-31 15:00:00,0.0544 +2016-05-31 16:00:00,0.0557 +2016-05-31 17:00:00,0.0434 +2016-05-31 18:00:00,0.035 +2016-05-31 19:00:00,0.03 +2016-05-31 20:00:00,0.0196 +2016-05-31 21:00:00,0.0088 +2016-05-31 22:00:00,0.0055 +2016-05-31 23:00:00,0.0053 +2016-06-01 00:00:00,0.0045 +2016-06-01 01:00:00,0.0047 +2016-06-01 02:00:00,0.0046 +2016-06-01 03:00:00,0.0114 +2016-06-01 04:00:00,0.055 +2016-06-01 05:00:00,0.1442 +2016-06-01 06:00:00,0.3561 +2016-06-01 07:00:00,0.3512 +2016-06-01 08:00:00,0.1363 +2016-06-01 09:00:00,0.0639 +2016-06-01 10:00:00,0.0654 +2016-06-01 11:00:00,0.0596 +2016-06-01 12:00:00,0.057 +2016-06-01 13:00:00,0.0602 +2016-06-01 14:00:00,0.0579 +2016-06-01 15:00:00,0.0555 +2016-06-01 16:00:00,0.0543 +2016-06-01 17:00:00,0.0446 +2016-06-01 18:00:00,0.0339 +2016-06-01 19:00:00,0.0311 +2016-06-01 20:00:00,0.0242 +2016-06-01 21:00:00,0.0104 +2016-06-01 22:00:00,0.006 +2016-06-01 23:00:00,0.0049 +2016-06-02 00:00:00,0.005 +2016-06-02 01:00:00,0.0049 +2016-06-02 02:00:00,0.0054 +2016-06-02 03:00:00,0.0134 +2016-06-02 04:00:00,0.0538 +2016-06-02 05:00:00,0.1394 +2016-06-02 06:00:00,0.3371 +2016-06-02 07:00:00,0.2159 +2016-06-02 08:00:00,0.0644 +2016-06-02 09:00:00,0.0601 +2016-06-02 10:00:00,0.0628 +2016-06-02 11:00:00,0.0608 +2016-06-02 12:00:00,0.0626 +2016-06-02 13:00:00,0.0611 +2016-06-02 14:00:00,0.0622 +2016-06-02 15:00:00,0.0528 +2016-06-02 16:00:00,0.0621 +2016-06-02 17:00:00,0.0478 +2016-06-02 18:00:00,0.0319 +2016-06-02 19:00:00,0.0296 +2016-06-02 20:00:00,0.0257 +2016-06-02 21:00:00,0.0122 +2016-06-02 22:00:00,0.0057 +2016-06-02 23:00:00,0.0049 +2016-06-03 00:00:00,0.0048 +2016-06-03 01:00:00,0.0049 +2016-06-03 02:00:00,0.0057 +2016-06-03 03:00:00,0.0112 +2016-06-03 04:00:00,0.0496 +2016-06-03 05:00:00,0.0732 +2016-06-03 06:00:00,0.0812 +2016-06-03 07:00:00,0.0567 +2016-06-03 08:00:00,0.0617 +2016-06-03 09:00:00,0.0654 +2016-06-03 10:00:00,0.0665 +2016-06-03 11:00:00,0.0614 +2016-06-03 12:00:00,0.0659 +2016-06-03 13:00:00,0.063 +2016-06-03 14:00:00,0.0624 +2016-06-03 15:00:00,0.0617 +2016-06-03 16:00:00,0.0525 +2016-06-03 17:00:00,0.0416 +2016-06-03 18:00:00,0.0378 +2016-06-03 19:00:00,0.0329 +2016-06-03 20:00:00,0.0305 +2016-06-03 21:00:00,0.0257 +2016-06-03 22:00:00,0.0096 +2016-06-03 23:00:00,0.0058 +2016-06-04 00:00:00,0.005 +2016-06-04 01:00:00,0.0046 +2016-06-04 02:00:00,0.005 +2016-06-04 03:00:00,0.0057 +2016-06-04 04:00:00,0.0094 +2016-06-04 05:00:00,0.0227 +2016-06-04 06:00:00,0.0371 +2016-06-04 07:00:00,0.0455 +2016-06-04 08:00:00,0.0519 +2016-06-04 09:00:00,0.0574 +2016-06-04 10:00:00,0.0615 +2016-06-04 11:00:00,0.0565 +2016-06-04 12:00:00,0.0596 +2016-06-04 13:00:00,0.0613 +2016-06-04 14:00:00,0.0613 +2016-06-04 15:00:00,0.0621 +2016-06-04 16:00:00,0.0586 +2016-06-04 17:00:00,0.0512 +2016-06-04 18:00:00,0.0407 +2016-06-04 19:00:00,0.0386 +2016-06-04 20:00:00,0.0369 +2016-06-04 21:00:00,0.0304 +2016-06-04 22:00:00,0.0146 +2016-06-04 23:00:00,0.006 +2016-06-05 00:00:00,0.0057 +2016-06-05 01:00:00,0.0049 +2016-06-05 02:00:00,0.0049 +2016-06-05 03:00:00,0.0054 +2016-06-05 04:00:00,0.0056 +2016-06-05 05:00:00,0.0116 +2016-06-05 06:00:00,0.0173 +2016-06-05 07:00:00,0.0333 +2016-06-05 08:00:00,0.0481 +2016-06-05 09:00:00,0.0616 +2016-06-05 10:00:00,0.0638 +2016-06-05 11:00:00,0.0663 +2016-06-05 12:00:00,0.0798 +2016-06-05 13:00:00,0.0676 +2016-06-05 14:00:00,0.0632 +2016-06-05 15:00:00,0.0668 +2016-06-05 16:00:00,0.0544 +2016-06-05 17:00:00,0.0447 +2016-06-05 18:00:00,0.0429 +2016-06-05 19:00:00,0.0452 +2016-06-05 20:00:00,0.0335 +2016-06-05 21:00:00,0.0198 +2016-06-05 22:00:00,0.0061 +2016-06-05 23:00:00,0.0049 +2016-06-06 00:00:00,0.005 +2016-06-06 01:00:00,0.0049 +2016-06-06 02:00:00,0.0055 +2016-06-06 03:00:00,0.0163 +2016-06-06 04:00:00,0.0529 +2016-06-06 05:00:00,0.1281 +2016-06-06 06:00:00,0.3254 +2016-06-06 07:00:00,0.2299 +2016-06-06 08:00:00,0.0598 +2016-06-06 09:00:00,0.0653 +2016-06-06 10:00:00,0.065 +2016-06-06 11:00:00,0.0638 +2016-06-06 12:00:00,0.0632 +2016-06-06 13:00:00,0.0581 +2016-06-06 14:00:00,0.061 +2016-06-06 15:00:00,0.0538 +2016-06-06 16:00:00,0.0518 +2016-06-06 17:00:00,0.0428 +2016-06-06 18:00:00,0.0351 +2016-06-06 19:00:00,0.0298 +2016-06-06 20:00:00,0.0175 +2016-06-06 21:00:00,0.007 +2016-06-06 22:00:00,0.006 +2016-06-06 23:00:00,0.0052 +2016-06-07 00:00:00,0.0046 +2016-06-07 01:00:00,0.0047 +2016-06-07 02:00:00,0.0059 +2016-06-07 03:00:00,0.0158 +2016-06-07 04:00:00,0.0537 +2016-06-07 05:00:00,0.084 +2016-06-07 06:00:00,0.2666 +2016-06-07 07:00:00,0.2739 +2016-06-07 08:00:00,0.0599 +2016-06-07 09:00:00,0.0643 +2016-06-07 10:00:00,0.0614 +2016-06-07 11:00:00,0.065 +2016-06-07 12:00:00,0.0603 +2016-06-07 13:00:00,0.0605 +2016-06-07 14:00:00,0.0583 +2016-06-07 15:00:00,0.0565 +2016-06-07 16:00:00,0.0577 +2016-06-07 17:00:00,0.0451 +2016-06-07 18:00:00,0.0352 +2016-06-07 19:00:00,0.0299 +2016-06-07 20:00:00,0.0205 +2016-06-07 21:00:00,0.0077 +2016-06-07 22:00:00,0.0064 +2016-06-07 23:00:00,0.0047 +2016-06-08 00:00:00,0.0046 +2016-06-08 01:00:00,0.0045 +2016-06-08 02:00:00,0.0055 +2016-06-08 03:00:00,0.0173 +2016-06-08 04:00:00,0.0551 +2016-06-08 05:00:00,0.1301 +2016-06-08 06:00:00,0.349 +2016-06-08 07:00:00,0.3287 +2016-06-08 08:00:00,0.0815 +2016-06-08 09:00:00,0.0637 +2016-06-08 10:00:00,0.0628 +2016-06-08 11:00:00,0.0632 +2016-06-08 12:00:00,0.0599 +2016-06-08 13:00:00,0.0577 +2016-06-08 14:00:00,0.0579 +2016-06-08 15:00:00,0.0578 +2016-06-08 16:00:00,0.062 +2016-06-08 17:00:00,0.042 +2016-06-08 18:00:00,0.0313 +2016-06-08 19:00:00,0.0263 +2016-06-08 20:00:00,0.024 +2016-06-08 21:00:00,0.0119 +2016-06-08 22:00:00,0.0062 +2016-06-08 23:00:00,0.0048 +2016-06-09 00:00:00,0.0046 +2016-06-09 01:00:00,0.0046 +2016-06-09 02:00:00,0.0056 +2016-06-09 03:00:00,0.0144 +2016-06-09 04:00:00,0.0515 +2016-06-09 05:00:00,0.0806 +2016-06-09 06:00:00,0.1122 +2016-06-09 07:00:00,0.0554 +2016-06-09 08:00:00,0.0461 +2016-06-09 09:00:00,0.0609 +2016-06-09 10:00:00,0.0664 +2016-06-09 11:00:00,0.0712 +2016-06-09 12:00:00,0.0603 +2016-06-09 13:00:00,0.0632 +2016-06-09 14:00:00,0.0617 +2016-06-09 15:00:00,0.0589 +2016-06-09 16:00:00,0.0553 +2016-06-09 17:00:00,0.0476 +2016-06-09 18:00:00,0.036 +2016-06-09 19:00:00,0.0314 +2016-06-09 20:00:00,0.0272 +2016-06-09 21:00:00,0.0173 +2016-06-09 22:00:00,0.0058 +2016-06-09 23:00:00,0.0052 +2016-06-10 00:00:00,0.0048 +2016-06-10 01:00:00,0.0046 +2016-06-10 02:00:00,0.0055 +2016-06-10 03:00:00,0.0137 +2016-06-10 04:00:00,0.0506 +2016-06-10 05:00:00,0.0704 +2016-06-10 06:00:00,0.0652 +2016-06-10 07:00:00,0.0606 +2016-06-10 08:00:00,0.0603 +2016-06-10 09:00:00,0.0647 +2016-06-10 10:00:00,0.0626 +2016-06-10 11:00:00,0.0626 +2016-06-10 12:00:00,0.0615 +2016-06-10 13:00:00,0.0621 +2016-06-10 14:00:00,0.0581 +2016-06-10 15:00:00,0.0587 +2016-06-10 16:00:00,0.0551 +2016-06-10 17:00:00,0.0447 +2016-06-10 18:00:00,0.0394 +2016-06-10 19:00:00,0.0294 +2016-06-10 20:00:00,0.0309 +2016-06-10 21:00:00,0.0225 +2016-06-10 22:00:00,0.0089 +2016-06-10 23:00:00,0.0055 +2016-06-11 00:00:00,0.0047 +2016-06-11 01:00:00,0.0046 +2016-06-11 02:00:00,0.005 +2016-06-11 03:00:00,0.0057 +2016-06-11 04:00:00,0.0086 +2016-06-11 05:00:00,0.0258 +2016-06-11 06:00:00,0.0331 +2016-06-11 07:00:00,0.0405 +2016-06-11 08:00:00,0.0523 +2016-06-11 09:00:00,0.0558 +2016-06-11 10:00:00,0.0593 +2016-06-11 11:00:00,0.0595 +2016-06-11 12:00:00,0.0635 +2016-06-11 13:00:00,0.0625 +2016-06-11 14:00:00,0.0572 +2016-06-11 15:00:00,0.0622 +2016-06-11 16:00:00,0.0591 +2016-06-11 17:00:00,0.0514 +2016-06-11 18:00:00,0.0421 +2016-06-11 19:00:00,0.0403 +2016-06-11 20:00:00,0.0359 +2016-06-11 21:00:00,0.0307 +2016-06-11 22:00:00,0.0157 +2016-06-11 23:00:00,0.0062 +2016-06-12 00:00:00,0.0056 +2016-06-12 01:00:00,0.0056 +2016-06-12 02:00:00,0.0047 +2016-06-12 03:00:00,0.0056 +2016-06-12 04:00:00,0.0074 +2016-06-12 05:00:00,0.0158 +2016-06-12 06:00:00,0.0205 +2016-06-12 07:00:00,0.0335 +2016-06-12 08:00:00,0.0498 +2016-06-12 09:00:00,0.06 +2016-06-12 10:00:00,0.0628 +2016-06-12 11:00:00,0.0621 +2016-06-12 12:00:00,0.0619 +2016-06-12 13:00:00,0.0626 +2016-06-12 14:00:00,0.0666 +2016-06-12 15:00:00,0.0649 +2016-06-12 16:00:00,0.0621 +2016-06-12 17:00:00,0.0581 +2016-06-12 18:00:00,0.0481 +2016-06-12 19:00:00,0.0414 +2016-06-12 20:00:00,0.0322 +2016-06-12 21:00:00,0.0175 +2016-06-12 22:00:00,0.0058 +2016-06-12 23:00:00,0.0049 +2016-06-13 00:00:00,0.0047 +2016-06-13 01:00:00,0.005 +2016-06-13 02:00:00,0.0053 +2016-06-13 03:00:00,0.0175 +2016-06-13 04:00:00,0.0492 +2016-06-13 05:00:00,0.0933 +2016-06-13 06:00:00,0.1611 +2016-06-13 07:00:00,0.0664 +2016-06-13 08:00:00,0.0619 +2016-06-13 09:00:00,0.0647 +2016-06-13 10:00:00,0.0599 +2016-06-13 11:00:00,0.0598 +2016-06-13 12:00:00,0.0603 +2016-06-13 13:00:00,0.0585 +2016-06-13 14:00:00,0.0587 +2016-06-13 15:00:00,0.0572 +2016-06-13 16:00:00,0.0559 +2016-06-13 17:00:00,0.0426 +2016-06-13 18:00:00,0.03 +2016-06-13 19:00:00,0.0247 +2016-06-13 20:00:00,0.0249 +2016-06-13 21:00:00,0.0091 +2016-06-13 22:00:00,0.0059 +2016-06-13 23:00:00,0.005 +2016-06-14 00:00:00,0.0045 +2016-06-14 01:00:00,0.0048 +2016-06-14 02:00:00,0.0056 +2016-06-14 03:00:00,0.0135 +2016-06-14 04:00:00,0.0454 +2016-06-14 05:00:00,0.1454 +2016-06-14 06:00:00,0.2966 +2016-06-14 07:00:00,0.2641 +2016-06-14 08:00:00,0.0646 +2016-06-14 09:00:00,0.062 +2016-06-14 10:00:00,0.0597 +2016-06-14 11:00:00,0.0579 +2016-06-14 12:00:00,0.0558 +2016-06-14 13:00:00,0.0568 +2016-06-14 14:00:00,0.062 +2016-06-14 15:00:00,0.0538 +2016-06-14 16:00:00,0.0607 +2016-06-14 17:00:00,0.0462 +2016-06-14 18:00:00,0.0343 +2016-06-14 19:00:00,0.0304 +2016-06-14 20:00:00,0.021 +2016-06-14 21:00:00,0.0086 +2016-06-14 22:00:00,0.0059 +2016-06-14 23:00:00,0.0051 +2016-06-15 00:00:00,0.0047 +2016-06-15 01:00:00,0.0046 +2016-06-15 02:00:00,0.0056 +2016-06-15 03:00:00,0.0143 +2016-06-15 04:00:00,0.0531 +2016-06-15 05:00:00,0.1247 +2016-06-15 06:00:00,0.2047 +2016-06-15 07:00:00,0.0582 +2016-06-15 08:00:00,0.0631 +2016-06-15 09:00:00,0.0662 +2016-06-15 10:00:00,0.0652 +2016-06-15 11:00:00,0.0588 +2016-06-15 12:00:00,0.0556 +2016-06-15 13:00:00,0.0553 +2016-06-15 14:00:00,0.0559 +2016-06-15 15:00:00,0.0516 +2016-06-15 16:00:00,0.0545 +2016-06-15 17:00:00,0.0484 +2016-06-15 18:00:00,0.0361 +2016-06-15 19:00:00,0.0301 +2016-06-15 20:00:00,0.0227 +2016-06-15 21:00:00,0.0121 +2016-06-15 22:00:00,0.0062 +2016-06-15 23:00:00,0.0048 +2016-06-16 00:00:00,0.0047 +2016-06-16 01:00:00,0.0049 +2016-06-16 02:00:00,0.0058 +2016-06-16 03:00:00,0.015 +2016-06-16 04:00:00,0.0504 +2016-06-16 05:00:00,0.0777 +2016-06-16 06:00:00,0.092 +2016-06-16 07:00:00,0.0565 +2016-06-16 08:00:00,0.0655 +2016-06-16 09:00:00,0.0682 +2016-06-16 10:00:00,0.0606 +2016-06-16 11:00:00,0.0631 +2016-06-16 12:00:00,0.0638 +2016-06-16 13:00:00,0.0646 +2016-06-16 14:00:00,0.0602 +2016-06-16 15:00:00,0.0591 +2016-06-16 16:00:00,0.0559 +2016-06-16 17:00:00,0.0462 +2016-06-16 18:00:00,0.0327 +2016-06-16 19:00:00,0.0261 +2016-06-16 20:00:00,0.0241 +2016-06-16 21:00:00,0.0081 +2016-06-16 22:00:00,0.0057 +2016-06-16 23:00:00,0.0051 +2016-06-17 00:00:00,0.0047 +2016-06-17 01:00:00,0.0049 +2016-06-17 02:00:00,0.0061 +2016-06-17 03:00:00,0.0146 +2016-06-17 04:00:00,0.0482 +2016-06-17 05:00:00,0.0719 +2016-06-17 06:00:00,0.0611 +2016-06-17 07:00:00,0.0572 +2016-06-17 08:00:00,0.0626 +2016-06-17 09:00:00,0.0611 +2016-06-17 10:00:00,0.0667 +2016-06-17 11:00:00,0.0627 +2016-06-17 12:00:00,0.063 +2016-06-17 13:00:00,0.061 +2016-06-17 14:00:00,0.0593 +2016-06-17 15:00:00,0.0577 +2016-06-17 16:00:00,0.0536 +2016-06-17 17:00:00,0.0487 +2016-06-17 18:00:00,0.039 +2016-06-17 19:00:00,0.0306 +2016-06-17 20:00:00,0.0277 +2016-06-17 21:00:00,0.0207 +2016-06-17 22:00:00,0.0069 +2016-06-17 23:00:00,0.0056 +2016-06-18 00:00:00,0.0046 +2016-06-18 01:00:00,0.0048 +2016-06-18 02:00:00,0.0052 +2016-06-18 03:00:00,0.0055 +2016-06-18 04:00:00,0.007 +2016-06-18 05:00:00,0.0221 +2016-06-18 06:00:00,0.0322 +2016-06-18 07:00:00,0.0446 +2016-06-18 08:00:00,0.0593 +2016-06-18 09:00:00,0.0648 +2016-06-18 10:00:00,0.0655 +2016-06-18 11:00:00,0.0619 +2016-06-18 12:00:00,0.0608 +2016-06-18 13:00:00,0.0612 +2016-06-18 14:00:00,0.0622 +2016-06-18 15:00:00,0.0625 +2016-06-18 16:00:00,0.0555 +2016-06-18 17:00:00,0.0562 +2016-06-18 18:00:00,0.0391 +2016-06-18 19:00:00,0.0363 +2016-06-18 20:00:00,0.0387 +2016-06-18 21:00:00,0.0312 +2016-06-18 22:00:00,0.019 +2016-06-18 23:00:00,0.0062 +2016-06-19 00:00:00,0.0052 +2016-06-19 01:00:00,0.0057 +2016-06-19 02:00:00,0.0051 +2016-06-19 03:00:00,0.005 +2016-06-19 04:00:00,0.0056 +2016-06-19 05:00:00,0.0114 +2016-06-19 06:00:00,0.0191 +2016-06-19 07:00:00,0.0355 +2016-06-19 08:00:00,0.0501 +2016-06-19 09:00:00,0.062 +2016-06-19 10:00:00,0.0646 +2016-06-19 11:00:00,0.0601 +2016-06-19 12:00:00,0.0587 +2016-06-19 13:00:00,0.0639 +2016-06-19 14:00:00,0.0635 +2016-06-19 15:00:00,0.0622 +2016-06-19 16:00:00,0.0568 +2016-06-19 17:00:00,0.0528 +2016-06-19 18:00:00,0.0425 +2016-06-19 19:00:00,0.0507 +2016-06-19 20:00:00,0.0421 +2016-06-19 21:00:00,0.0262 +2016-06-19 22:00:00,0.0072 +2016-06-19 23:00:00,0.0053 +2016-06-20 00:00:00,0.0049 +2016-06-20 01:00:00,0.0049 +2016-06-20 02:00:00,0.0056 +2016-06-20 03:00:00,0.0079 +2016-06-20 04:00:00,0.0507 +2016-06-20 05:00:00,0.0929 +2016-06-20 06:00:00,0.1907 +2016-06-20 07:00:00,0.0594 +2016-06-20 08:00:00,0.0635 +2016-06-20 09:00:00,0.0621 +2016-06-20 10:00:00,0.063 +2016-06-20 11:00:00,0.0593 +2016-06-20 12:00:00,0.0594 +2016-06-20 13:00:00,0.0548 +2016-06-20 14:00:00,0.0568 +2016-06-20 15:00:00,0.0527 +2016-06-20 16:00:00,0.0532 +2016-06-20 17:00:00,0.044 +2016-06-20 18:00:00,0.0342 +2016-06-20 19:00:00,0.029 +2016-06-20 20:00:00,0.0207 +2016-06-20 21:00:00,0.0123 +2016-06-20 22:00:00,0.0057 +2016-06-20 23:00:00,0.0049 +2016-06-21 00:00:00,0.0045 +2016-06-21 01:00:00,0.0049 +2016-06-21 02:00:00,0.0053 +2016-06-21 03:00:00,0.0132 +2016-06-21 04:00:00,0.0522 +2016-06-21 05:00:00,0.1007 +2016-06-21 06:00:00,0.1198 +2016-06-21 07:00:00,0.07 +2016-06-21 08:00:00,0.0633 +2016-06-21 09:00:00,0.0664 +2016-06-21 10:00:00,0.0624 +2016-06-21 11:00:00,0.0607 +2016-06-21 12:00:00,0.0573 +2016-06-21 13:00:00,0.0581 +2016-06-21 14:00:00,0.0554 +2016-06-21 15:00:00,0.0546 +2016-06-21 16:00:00,0.0551 +2016-06-21 17:00:00,0.0468 +2016-06-21 18:00:00,0.0354 +2016-06-21 19:00:00,0.0309 +2016-06-21 20:00:00,0.0245 +2016-06-21 21:00:00,0.0149 +2016-06-21 22:00:00,0.0062 +2016-06-21 23:00:00,0.0054 +2016-06-22 00:00:00,0.0046 +2016-06-22 01:00:00,0.0046 +2016-06-22 02:00:00,0.0056 +2016-06-22 03:00:00,0.0154 +2016-06-22 04:00:00,0.0522 +2016-06-22 05:00:00,0.1362 +2016-06-22 06:00:00,0.2946 +2016-06-22 07:00:00,0.1382 +2016-06-22 08:00:00,0.0644 +2016-06-22 09:00:00,0.067 +2016-06-22 10:00:00,0.0636 +2016-06-22 11:00:00,0.0607 +2016-06-22 12:00:00,0.0585 +2016-06-22 13:00:00,0.0592 +2016-06-22 14:00:00,0.0602 +2016-06-22 15:00:00,0.0537 +2016-06-22 16:00:00,0.0534 +2016-06-22 17:00:00,0.0455 +2016-06-22 18:00:00,0.0355 +2016-06-22 19:00:00,0.0299 +2016-06-22 20:00:00,0.0243 +2016-06-22 21:00:00,0.0151 +2016-06-22 22:00:00,0.0055 +2016-06-22 23:00:00,0.005 +2016-06-23 00:00:00,0.0047 +2016-06-23 01:00:00,0.0046 +2016-06-23 02:00:00,0.0055 +2016-06-23 03:00:00,0.0125 +2016-06-23 04:00:00,0.0545 +2016-06-23 05:00:00,0.1253 +2016-06-23 06:00:00,0.1768 +2016-06-23 07:00:00,0.0616 +2016-06-23 08:00:00,0.0661 +2016-06-23 09:00:00,0.068 +2016-06-23 10:00:00,0.0623 +2016-06-23 11:00:00,0.0633 +2016-06-23 12:00:00,0.0577 +2016-06-23 13:00:00,0.0581 +2016-06-23 14:00:00,0.0578 +2016-06-23 15:00:00,0.0567 +2016-06-23 16:00:00,0.0564 +2016-06-23 17:00:00,0.0449 +2016-06-23 18:00:00,0.0359 +2016-06-23 19:00:00,0.0337 +2016-06-23 20:00:00,0.0226 +2016-06-23 21:00:00,0.0085 +2016-06-23 22:00:00,0.0062 +2016-06-23 23:00:00,0.0054 +2016-06-24 00:00:00,0.0048 +2016-06-24 01:00:00,0.0049 +2016-06-24 02:00:00,0.0056 +2016-06-24 03:00:00,0.0135 +2016-06-24 04:00:00,0.0475 +2016-06-24 05:00:00,0.0692 +2016-06-24 06:00:00,0.0627 +2016-06-24 07:00:00,0.0611 +2016-06-24 08:00:00,0.0646 +2016-06-24 09:00:00,0.0649 +2016-06-24 10:00:00,0.0649 +2016-06-24 11:00:00,0.0656 +2016-06-24 12:00:00,0.0628 +2016-06-24 13:00:00,0.0621 +2016-06-24 14:00:00,0.0588 +2016-06-24 15:00:00,0.0635 +2016-06-24 16:00:00,0.0551 +2016-06-24 17:00:00,0.046 +2016-06-24 18:00:00,0.0385 +2016-06-24 19:00:00,0.0313 +2016-06-24 20:00:00,0.0278 +2016-06-24 21:00:00,0.022 +2016-06-24 22:00:00,0.0076 +2016-06-24 23:00:00,0.0058 +2016-06-25 00:00:00,0.0049 +2016-06-25 01:00:00,0.0054 +2016-06-25 02:00:00,0.0048 +2016-06-25 03:00:00,0.0055 +2016-06-25 04:00:00,0.0076 +2016-06-25 05:00:00,0.0249 +2016-06-25 06:00:00,0.0301 +2016-06-25 07:00:00,0.0461 +2016-06-25 08:00:00,0.0559 +2016-06-25 09:00:00,0.061 +2016-06-25 10:00:00,0.0641 +2016-06-25 11:00:00,0.0625 +2016-06-25 12:00:00,0.0616 +2016-06-25 13:00:00,0.0604 +2016-06-25 14:00:00,0.0629 +2016-06-25 15:00:00,0.0643 +2016-06-25 16:00:00,0.0595 +2016-06-25 17:00:00,0.0499 +2016-06-25 18:00:00,0.0439 +2016-06-25 19:00:00,0.0421 +2016-06-25 20:00:00,0.0385 +2016-06-25 21:00:00,0.0331 +2016-06-25 22:00:00,0.023 +2016-06-25 23:00:00,0.0073 +2016-06-26 00:00:00,0.0056 +2016-06-26 01:00:00,0.0046 +2016-06-26 02:00:00,0.0048 +2016-06-26 03:00:00,0.005 +2016-06-26 04:00:00,0.0057 +2016-06-26 05:00:00,0.0124 +2016-06-26 06:00:00,0.0257 +2016-06-26 07:00:00,0.0394 +2016-06-26 08:00:00,0.0538 +2016-06-26 09:00:00,0.0606 +2016-06-26 10:00:00,0.0652 +2016-06-26 11:00:00,0.0656 +2016-06-26 12:00:00,0.0636 +2016-06-26 13:00:00,0.0632 +2016-06-26 14:00:00,0.061 +2016-06-26 15:00:00,0.0655 +2016-06-26 16:00:00,0.0591 +2016-06-26 17:00:00,0.0557 +2016-06-26 18:00:00,0.047 +2016-06-26 19:00:00,0.0429 +2016-06-26 20:00:00,0.0337 +2016-06-26 21:00:00,0.0241 +2016-06-26 22:00:00,0.0086 +2016-06-26 23:00:00,0.0055 +2016-06-27 00:00:00,0.0049 +2016-06-27 01:00:00,0.005 +2016-06-27 02:00:00,0.0055 +2016-06-27 03:00:00,0.0151 +2016-06-27 04:00:00,0.0551 +2016-06-27 05:00:00,0.1082 +2016-06-27 06:00:00,0.2043 +2016-06-27 07:00:00,0.0635 +2016-06-27 08:00:00,0.063 +2016-06-27 09:00:00,0.0691 +2016-06-27 10:00:00,0.0594 +2016-06-27 11:00:00,0.0641 +2016-06-27 12:00:00,0.0595 +2016-06-27 13:00:00,0.0552 +2016-06-27 14:00:00,0.0592 +2016-06-27 15:00:00,0.0568 +2016-06-27 16:00:00,0.0535 +2016-06-27 17:00:00,0.0463 +2016-06-27 18:00:00,0.0358 +2016-06-27 19:00:00,0.0289 +2016-06-27 20:00:00,0.0238 +2016-06-27 21:00:00,0.0114 +2016-06-27 22:00:00,0.0055 +2016-06-27 23:00:00,0.0051 +2016-06-28 00:00:00,0.0051 +2016-06-28 01:00:00,0.0048 +2016-06-28 02:00:00,0.0056 +2016-06-28 03:00:00,0.0108 +2016-06-28 04:00:00,0.0527 +2016-06-28 05:00:00,0.1097 +2016-06-28 06:00:00,0.2578 +2016-06-28 07:00:00,0.1194 +2016-06-28 08:00:00,0.0635 +2016-06-28 09:00:00,0.0684 +2016-06-28 10:00:00,0.0617 +2016-06-28 11:00:00,0.0636 +2016-06-28 12:00:00,0.0581 +2016-06-28 13:00:00,0.063 +2016-06-28 14:00:00,0.0581 +2016-06-28 15:00:00,0.0555 +2016-06-28 16:00:00,0.0593 +2016-06-28 17:00:00,0.0457 +2016-06-28 18:00:00,0.0377 +2016-06-28 19:00:00,0.031 +2016-06-28 20:00:00,0.0257 +2016-06-28 21:00:00,0.0089 +2016-06-28 22:00:00,0.0059 +2016-06-28 23:00:00,0.0053 +2016-06-29 00:00:00,0.005 +2016-06-29 01:00:00,0.005 +2016-06-29 02:00:00,0.0055 +2016-06-29 03:00:00,0.0166 +2016-06-29 04:00:00,0.0516 +2016-06-29 05:00:00,0.0917 +2016-06-29 06:00:00,0.217 +2016-06-29 07:00:00,0.0628 +2016-06-29 08:00:00,0.0609 +2016-06-29 09:00:00,0.0628 +2016-06-29 10:00:00,0.0599 +2016-06-29 11:00:00,0.0605 +2016-06-29 12:00:00,0.0606 +2016-06-29 13:00:00,0.0602 +2016-06-29 14:00:00,0.0638 +2016-06-29 15:00:00,0.0619 +2016-06-29 16:00:00,0.0584 +2016-06-29 17:00:00,0.0454 +2016-06-29 18:00:00,0.0384 +2016-06-29 19:00:00,0.0311 +2016-06-29 20:00:00,0.0267 +2016-06-29 21:00:00,0.0142 +2016-06-29 22:00:00,0.0058 +2016-06-29 23:00:00,0.0052 +2016-06-30 00:00:00,0.0046 +2016-06-30 01:00:00,0.0048 +2016-06-30 02:00:00,0.0057 +2016-06-30 03:00:00,0.0132 +2016-06-30 04:00:00,0.0526 +2016-06-30 05:00:00,0.1694 +2016-06-30 06:00:00,0.2815 +2016-06-30 07:00:00,0.0897 +2016-06-30 08:00:00,0.066 +2016-06-30 09:00:00,0.0673 +2016-06-30 10:00:00,0.0651 +2016-06-30 11:00:00,0.0626 +2016-06-30 12:00:00,0.0628 +2016-06-30 13:00:00,0.0599 +2016-06-30 14:00:00,0.0634 +2016-06-30 15:00:00,0.06 +2016-06-30 16:00:00,0.0596 +2016-06-30 17:00:00,0.0474 +2016-06-30 18:00:00,0.0377 +2016-06-30 19:00:00,0.0318 +2016-06-30 20:00:00,0.0274 +2016-06-30 21:00:00,0.0144 +2016-06-30 22:00:00,0.0064 +2016-06-30 23:00:00,0.0052 +2016-07-01 00:00:00,0.0046 +2016-07-01 01:00:00,0.0048 +2016-07-01 02:00:00,0.0053 +2016-07-01 03:00:00,0.0106 +2016-07-01 04:00:00,0.0435 +2016-07-01 05:00:00,0.0675 +2016-07-01 06:00:00,0.0588 +2016-07-01 07:00:00,0.0591 +2016-07-01 08:00:00,0.0654 +2016-07-01 09:00:00,0.0628 +2016-07-01 10:00:00,0.0653 +2016-07-01 11:00:00,0.0621 +2016-07-01 12:00:00,0.0617 +2016-07-01 13:00:00,0.0638 +2016-07-01 14:00:00,0.0601 +2016-07-01 15:00:00,0.058 +2016-07-01 16:00:00,0.0502 +2016-07-01 17:00:00,0.0457 +2016-07-01 18:00:00,0.0387 +2016-07-01 19:00:00,0.0319 +2016-07-01 20:00:00,0.0264 +2016-07-01 21:00:00,0.0197 +2016-07-01 22:00:00,0.0083 +2016-07-01 23:00:00,0.0056 +2016-07-02 00:00:00,0.005 +2016-07-02 01:00:00,0.005 +2016-07-02 02:00:00,0.0054 +2016-07-02 03:00:00,0.006 +2016-07-02 04:00:00,0.0068 +2016-07-02 05:00:00,0.0215 +2016-07-02 06:00:00,0.0312 +2016-07-02 07:00:00,0.0371 +2016-07-02 08:00:00,0.0469 +2016-07-02 09:00:00,0.055 +2016-07-02 10:00:00,0.0609 +2016-07-02 11:00:00,0.0575 +2016-07-02 12:00:00,0.0538 +2016-07-02 13:00:00,0.0552 +2016-07-02 14:00:00,0.0555 +2016-07-02 15:00:00,0.0532 +2016-07-02 16:00:00,0.0542 +2016-07-02 17:00:00,0.0472 +2016-07-02 18:00:00,0.0403 +2016-07-02 19:00:00,0.037 +2016-07-02 20:00:00,0.0336 +2016-07-02 21:00:00,0.0271 +2016-07-02 22:00:00,0.012 +2016-07-02 23:00:00,0.0064 +2016-07-03 00:00:00,0.0053 +2016-07-03 01:00:00,0.005 +2016-07-03 02:00:00,0.0051 +2016-07-03 03:00:00,0.0052 +2016-07-03 04:00:00,0.0057 +2016-07-03 05:00:00,0.0115 +2016-07-03 06:00:00,0.014 +2016-07-03 07:00:00,0.0297 +2016-07-03 08:00:00,0.0416 +2016-07-03 09:00:00,0.0508 +2016-07-03 10:00:00,0.0576 +2016-07-03 11:00:00,0.055 +2016-07-03 12:00:00,0.0571 +2016-07-03 13:00:00,0.0542 +2016-07-03 14:00:00,0.0551 +2016-07-03 15:00:00,0.0579 +2016-07-03 16:00:00,0.0566 +2016-07-03 17:00:00,0.0486 +2016-07-03 18:00:00,0.0471 +2016-07-03 19:00:00,0.0432 +2016-07-03 20:00:00,0.0388 +2016-07-03 21:00:00,0.0305 +2016-07-03 22:00:00,0.0201 +2016-07-03 23:00:00,0.0062 +2016-07-04 00:00:00,0.0051 +2016-07-04 01:00:00,0.0054 +2016-07-04 02:00:00,0.0049 +2016-07-04 03:00:00,0.0053 +2016-07-04 04:00:00,0.0059 +2016-07-04 05:00:00,0.0126 +2016-07-04 06:00:00,0.0101 +2016-07-04 07:00:00,0.0249 +2016-07-04 08:00:00,0.0387 +2016-07-04 09:00:00,0.0508 +2016-07-04 10:00:00,0.0606 +2016-07-04 11:00:00,0.0645 +2016-07-04 12:00:00,0.0611 +2016-07-04 13:00:00,0.0599 +2016-07-04 14:00:00,0.0566 +2016-07-04 15:00:00,0.0534 +2016-07-04 16:00:00,0.0515 +2016-07-04 17:00:00,0.0487 +2016-07-04 18:00:00,0.0448 +2016-07-04 19:00:00,0.0394 +2016-07-04 20:00:00,0.0319 +2016-07-04 21:00:00,0.0325 +2016-07-04 22:00:00,0.0188 +2016-07-04 23:00:00,0.0056 +2016-07-05 00:00:00,0.0048 +2016-07-05 01:00:00,0.0048 +2016-07-05 02:00:00,0.0054 +2016-07-05 03:00:00,0.0153 +2016-07-05 04:00:00,0.0497 +2016-07-05 05:00:00,0.0724 +2016-07-05 06:00:00,0.0591 +2016-07-05 07:00:00,0.0613 +2016-07-05 08:00:00,0.0637 +2016-07-05 09:00:00,0.0671 +2016-07-05 10:00:00,0.0691 +2016-07-05 11:00:00,0.0714 +2016-07-05 12:00:00,0.0705 +2016-07-05 13:00:00,0.0615 +2016-07-05 14:00:00,0.0603 +2016-07-05 15:00:00,0.0577 +2016-07-05 16:00:00,0.0561 +2016-07-05 17:00:00,0.0482 +2016-07-05 18:00:00,0.0373 +2016-07-05 19:00:00,0.0314 +2016-07-05 20:00:00,0.0235 +2016-07-05 21:00:00,0.0103 +2016-07-05 22:00:00,0.0056 +2016-07-05 23:00:00,0.005 +2016-07-06 00:00:00,0.0047 +2016-07-06 01:00:00,0.0049 +2016-07-06 02:00:00,0.0056 +2016-07-06 03:00:00,0.0136 +2016-07-06 04:00:00,0.0536 +2016-07-06 05:00:00,0.076 +2016-07-06 06:00:00,0.0658 +2016-07-06 07:00:00,0.0599 +2016-07-06 08:00:00,0.0635 +2016-07-06 09:00:00,0.0648 +2016-07-06 10:00:00,0.0649 +2016-07-06 11:00:00,0.0622 +2016-07-06 12:00:00,0.0579 +2016-07-06 13:00:00,0.0581 +2016-07-06 14:00:00,0.0571 +2016-07-06 15:00:00,0.0589 +2016-07-06 16:00:00,0.0537 +2016-07-06 17:00:00,0.044 +2016-07-06 18:00:00,0.0341 +2016-07-06 19:00:00,0.029 +2016-07-06 20:00:00,0.0235 +2016-07-06 21:00:00,0.0129 +2016-07-06 22:00:00,0.0055 +2016-07-06 23:00:00,0.0049 +2016-07-07 00:00:00,0.0048 +2016-07-07 01:00:00,0.0047 +2016-07-07 02:00:00,0.0059 +2016-07-07 03:00:00,0.0138 +2016-07-07 04:00:00,0.0512 +2016-07-07 05:00:00,0.0852 +2016-07-07 06:00:00,0.3126 +2016-07-07 07:00:00,0.3176 +2016-07-07 08:00:00,0.1058 +2016-07-07 09:00:00,0.0677 +2016-07-07 10:00:00,0.0638 +2016-07-07 11:00:00,0.0617 +2016-07-07 12:00:00,0.0598 +2016-07-07 13:00:00,0.0604 +2016-07-07 14:00:00,0.0605 +2016-07-07 15:00:00,0.0568 +2016-07-07 16:00:00,0.0551 +2016-07-07 17:00:00,0.0468 +2016-07-07 18:00:00,0.0394 +2016-07-07 19:00:00,0.0312 +2016-07-07 20:00:00,0.0242 +2016-07-07 21:00:00,0.0146 +2016-07-07 22:00:00,0.0065 +2016-07-07 23:00:00,0.0048 +2016-07-08 00:00:00,0.0046 +2016-07-08 01:00:00,0.0047 +2016-07-08 02:00:00,0.0059 +2016-07-08 03:00:00,0.0154 +2016-07-08 04:00:00,0.046 +2016-07-08 05:00:00,0.0715 +2016-07-08 06:00:00,0.1005 +2016-07-08 07:00:00,0.0594 +2016-07-08 08:00:00,0.0617 +2016-07-08 09:00:00,0.0626 +2016-07-08 10:00:00,0.0615 +2016-07-08 11:00:00,0.0651 +2016-07-08 12:00:00,0.0612 +2016-07-08 13:00:00,0.0628 +2016-07-08 14:00:00,0.0596 +2016-07-08 15:00:00,0.0596 +2016-07-08 16:00:00,0.0614 +2016-07-08 17:00:00,0.0472 +2016-07-08 18:00:00,0.0367 +2016-07-08 19:00:00,0.0308 +2016-07-08 20:00:00,0.0293 +2016-07-08 21:00:00,0.0177 +2016-07-08 22:00:00,0.0061 +2016-07-08 23:00:00,0.0055 +2016-07-09 00:00:00,0.0048 +2016-07-09 01:00:00,0.0051 +2016-07-09 02:00:00,0.0048 +2016-07-09 03:00:00,0.0057 +2016-07-09 04:00:00,0.0118 +2016-07-09 05:00:00,0.0258 +2016-07-09 06:00:00,0.0372 +2016-07-09 07:00:00,0.044 +2016-07-09 08:00:00,0.0538 +2016-07-09 09:00:00,0.0597 +2016-07-09 10:00:00,0.0653 +2016-07-09 11:00:00,0.0597 +2016-07-09 12:00:00,0.0555 +2016-07-09 13:00:00,0.0552 +2016-07-09 14:00:00,0.0605 +2016-07-09 15:00:00,0.0629 +2016-07-09 16:00:00,0.0569 +2016-07-09 17:00:00,0.0495 +2016-07-09 18:00:00,0.0382 +2016-07-09 19:00:00,0.0352 +2016-07-09 20:00:00,0.0347 +2016-07-09 21:00:00,0.0273 +2016-07-09 22:00:00,0.017 +2016-07-09 23:00:00,0.0058 +2016-07-10 00:00:00,0.0059 +2016-07-10 01:00:00,0.005 +2016-07-10 02:00:00,0.0046 +2016-07-10 03:00:00,0.0049 +2016-07-10 04:00:00,0.0061 +2016-07-10 05:00:00,0.0131 +2016-07-10 06:00:00,0.026 +2016-07-10 07:00:00,0.0337 +2016-07-10 08:00:00,0.0445 +2016-07-10 09:00:00,0.0513 +2016-07-10 10:00:00,0.0597 +2016-07-10 11:00:00,0.0593 +2016-07-10 12:00:00,0.064 +2016-07-10 13:00:00,0.065 +2016-07-10 14:00:00,0.0602 +2016-07-10 15:00:00,0.0605 +2016-07-10 16:00:00,0.0586 +2016-07-10 17:00:00,0.0545 +2016-07-10 18:00:00,0.0468 +2016-07-10 19:00:00,0.0396 +2016-07-10 20:00:00,0.0345 +2016-07-10 21:00:00,0.0237 +2016-07-10 22:00:00,0.0061 +2016-07-10 23:00:00,0.0051 +2016-07-11 00:00:00,0.0051 +2016-07-11 01:00:00,0.0048 +2016-07-11 02:00:00,0.0054 +2016-07-11 03:00:00,0.0184 +2016-07-11 04:00:00,0.0534 +2016-07-11 05:00:00,0.0815 +2016-07-11 06:00:00,0.1081 +2016-07-11 07:00:00,0.0591 +2016-07-11 08:00:00,0.0627 +2016-07-11 09:00:00,0.0626 +2016-07-11 10:00:00,0.0619 +2016-07-11 11:00:00,0.0589 +2016-07-11 12:00:00,0.0595 +2016-07-11 13:00:00,0.0566 +2016-07-11 14:00:00,0.0563 +2016-07-11 15:00:00,0.0519 +2016-07-11 16:00:00,0.0533 +2016-07-11 17:00:00,0.0429 +2016-07-11 18:00:00,0.0327 +2016-07-11 19:00:00,0.028 +2016-07-11 20:00:00,0.0219 +2016-07-11 21:00:00,0.0084 +2016-07-11 22:00:00,0.0062 +2016-07-11 23:00:00,0.0051 +2016-07-12 00:00:00,0.0047 +2016-07-12 01:00:00,0.0047 +2016-07-12 02:00:00,0.0053 +2016-07-12 03:00:00,0.0122 +2016-07-12 04:00:00,0.0545 +2016-07-12 05:00:00,0.0956 +2016-07-12 06:00:00,0.2265 +2016-07-12 07:00:00,0.0609 +2016-07-12 08:00:00,0.0638 +2016-07-12 09:00:00,0.0668 +2016-07-12 10:00:00,0.0661 +2016-07-12 11:00:00,0.0614 +2016-07-12 12:00:00,0.0572 +2016-07-12 13:00:00,0.0566 +2016-07-12 14:00:00,0.0572 +2016-07-12 15:00:00,0.0554 +2016-07-12 16:00:00,0.0523 +2016-07-12 17:00:00,0.0441 +2016-07-12 18:00:00,0.035 +2016-07-12 19:00:00,0.0298 +2016-07-12 20:00:00,0.0243 +2016-07-12 21:00:00,0.0105 +2016-07-12 22:00:00,0.006 +2016-07-12 23:00:00,0.0052 +2016-07-13 00:00:00,0.0047 +2016-07-13 01:00:00,0.0046 +2016-07-13 02:00:00,0.0056 +2016-07-13 03:00:00,0.0169 +2016-07-13 04:00:00,0.0523 +2016-07-13 05:00:00,0.1235 +2016-07-13 06:00:00,0.1547 +2016-07-13 07:00:00,0.0677 +2016-07-13 08:00:00,0.0626 +2016-07-13 09:00:00,0.0667 +2016-07-13 10:00:00,0.0641 +2016-07-13 11:00:00,0.0632 +2016-07-13 12:00:00,0.0638 +2016-07-13 13:00:00,0.0602 +2016-07-13 14:00:00,0.0587 +2016-07-13 15:00:00,0.0572 +2016-07-13 16:00:00,0.0559 +2016-07-13 17:00:00,0.0483 +2016-07-13 18:00:00,0.0364 +2016-07-13 19:00:00,0.0327 +2016-07-13 20:00:00,0.0252 +2016-07-13 21:00:00,0.0123 +2016-07-13 22:00:00,0.0059 +2016-07-13 23:00:00,0.005 +2016-07-14 00:00:00,0.0048 +2016-07-14 01:00:00,0.0048 +2016-07-14 02:00:00,0.0055 +2016-07-14 03:00:00,0.0134 +2016-07-14 04:00:00,0.0528 +2016-07-14 05:00:00,0.0885 +2016-07-14 06:00:00,0.1632 +2016-07-14 07:00:00,0.0581 +2016-07-14 08:00:00,0.0655 +2016-07-14 09:00:00,0.0699 +2016-07-14 10:00:00,0.0647 +2016-07-14 11:00:00,0.062 +2016-07-14 12:00:00,0.059 +2016-07-14 13:00:00,0.0606 +2016-07-14 14:00:00,0.058 +2016-07-14 15:00:00,0.0578 +2016-07-14 16:00:00,0.0561 +2016-07-14 17:00:00,0.0463 +2016-07-14 18:00:00,0.0396 +2016-07-14 19:00:00,0.0326 +2016-07-14 20:00:00,0.025 +2016-07-14 21:00:00,0.0166 +2016-07-14 22:00:00,0.0063 +2016-07-14 23:00:00,0.0055 +2016-07-15 00:00:00,0.0046 +2016-07-15 01:00:00,0.005 +2016-07-15 02:00:00,0.0056 +2016-07-15 03:00:00,0.017 +2016-07-15 04:00:00,0.0474 +2016-07-15 05:00:00,0.07 +2016-07-15 06:00:00,0.0629 +2016-07-15 07:00:00,0.0607 +2016-07-15 08:00:00,0.0632 +2016-07-15 09:00:00,0.0602 +2016-07-15 10:00:00,0.0627 +2016-07-15 11:00:00,0.0636 +2016-07-15 12:00:00,0.0625 +2016-07-15 13:00:00,0.0643 +2016-07-15 14:00:00,0.0631 +2016-07-15 15:00:00,0.0594 +2016-07-15 16:00:00,0.0581 +2016-07-15 17:00:00,0.0465 +2016-07-15 18:00:00,0.0402 +2016-07-15 19:00:00,0.032 +2016-07-15 20:00:00,0.0256 +2016-07-15 21:00:00,0.0207 +2016-07-15 22:00:00,0.0076 +2016-07-15 23:00:00,0.0055 +2016-07-16 00:00:00,0.0053 +2016-07-16 01:00:00,0.0049 +2016-07-16 02:00:00,0.0048 +2016-07-16 03:00:00,0.006 +2016-07-16 04:00:00,0.0082 +2016-07-16 05:00:00,0.0237 +2016-07-16 06:00:00,0.033 +2016-07-16 07:00:00,0.0417 +2016-07-16 08:00:00,0.0493 +2016-07-16 09:00:00,0.0626 +2016-07-16 10:00:00,0.0644 +2016-07-16 11:00:00,0.0598 +2016-07-16 12:00:00,0.0599 +2016-07-16 13:00:00,0.0619 +2016-07-16 14:00:00,0.0585 +2016-07-16 15:00:00,0.0585 +2016-07-16 16:00:00,0.0583 +2016-07-16 17:00:00,0.0516 +2016-07-16 18:00:00,0.0447 +2016-07-16 19:00:00,0.0387 +2016-07-16 20:00:00,0.039 +2016-07-16 21:00:00,0.0332 +2016-07-16 22:00:00,0.0164 +2016-07-16 23:00:00,0.0066 +2016-07-17 00:00:00,0.0051 +2016-07-17 01:00:00,0.0051 +2016-07-17 02:00:00,0.0053 +2016-07-17 03:00:00,0.0051 +2016-07-17 04:00:00,0.0058 +2016-07-17 05:00:00,0.0091 +2016-07-17 06:00:00,0.0214 +2016-07-17 07:00:00,0.033 +2016-07-17 08:00:00,0.0464 +2016-07-17 09:00:00,0.0582 +2016-07-17 10:00:00,0.0616 +2016-07-17 11:00:00,0.0661 +2016-07-17 12:00:00,0.0644 +2016-07-17 13:00:00,0.0634 +2016-07-17 14:00:00,0.0626 +2016-07-17 15:00:00,0.0645 +2016-07-17 16:00:00,0.0576 +2016-07-17 17:00:00,0.056 +2016-07-17 18:00:00,0.0522 +2016-07-17 19:00:00,0.0479 +2016-07-17 20:00:00,0.045 +2016-07-17 21:00:00,0.0238 +2016-07-17 22:00:00,0.0108 +2016-07-17 23:00:00,0.0054 +2016-07-18 00:00:00,0.0049 +2016-07-18 01:00:00,0.0052 +2016-07-18 02:00:00,0.0055 +2016-07-18 03:00:00,0.0178 +2016-07-18 04:00:00,0.0511 +2016-07-18 05:00:00,0.0708 +2016-07-18 06:00:00,0.0635 +2016-07-18 07:00:00,0.0585 +2016-07-18 08:00:00,0.0647 +2016-07-18 09:00:00,0.0642 +2016-07-18 10:00:00,0.0605 +2016-07-18 11:00:00,0.0604 +2016-07-18 12:00:00,0.0595 +2016-07-18 13:00:00,0.0578 +2016-07-18 14:00:00,0.0591 +2016-07-18 15:00:00,0.055 +2016-07-18 16:00:00,0.0536 +2016-07-18 17:00:00,0.0458 +2016-07-18 18:00:00,0.0379 +2016-07-18 19:00:00,0.0305 +2016-07-18 20:00:00,0.0236 +2016-07-18 21:00:00,0.0077 +2016-07-18 22:00:00,0.0059 +2016-07-18 23:00:00,0.0052 +2016-07-19 00:00:00,0.0045 +2016-07-19 01:00:00,0.003 +2016-07-19 02:00:00,0.0038 +2016-07-19 03:00:00,0.0164 +2016-07-19 04:00:00,0.051 +2016-07-19 05:00:00,0.0847 +2016-07-19 06:00:00,0.1326 +2016-07-19 07:00:00,0.0567 +2016-07-19 08:00:00,0.0577 +2016-07-19 09:00:00,0.0583 +2016-07-19 10:00:00,0.0578 +2016-07-19 11:00:00,0.061 +2016-07-19 12:00:00,0.0555 +2016-07-19 13:00:00,0.0587 +2016-07-19 14:00:00,0.0576 +2016-07-19 15:00:00,0.056 +2016-07-19 16:00:00,0.0544 +2016-07-19 17:00:00,0.0479 +2016-07-19 18:00:00,0.0351 +2016-07-19 19:00:00,0.0319 +2016-07-19 20:00:00,0.0223 +2016-07-19 21:00:00,0.0124 +2016-07-19 22:00:00,0.0056 +2016-07-19 23:00:00,0.005 +2016-07-20 00:00:00,0.0045 +2016-07-20 01:00:00,0.0048 +2016-07-20 02:00:00,0.0054 +2016-07-20 03:00:00,0.0136 +2016-07-20 04:00:00,0.0532 +2016-07-20 05:00:00,0.0758 +2016-07-20 06:00:00,0.0717 +2016-07-20 07:00:00,0.0604 +2016-07-20 08:00:00,0.0585 +2016-07-20 09:00:00,0.0636 +2016-07-20 10:00:00,0.0619 +2016-07-20 11:00:00,0.0626 +2016-07-20 12:00:00,0.059 +2016-07-20 13:00:00,0.0613 +2016-07-20 14:00:00,0.0598 +2016-07-20 15:00:00,0.0535 +2016-07-20 16:00:00,0.0564 +2016-07-20 17:00:00,0.0445 +2016-07-20 18:00:00,0.0357 +2016-07-20 19:00:00,0.0277 +2016-07-20 20:00:00,0.0252 +2016-07-20 21:00:00,0.0097 +2016-07-20 22:00:00,0.0056 +2016-07-20 23:00:00,0.005 +2016-07-21 00:00:00,0.0043 +2016-07-21 01:00:00,0.0049 +2016-07-21 02:00:00,0.0056 +2016-07-21 03:00:00,0.0142 +2016-07-21 04:00:00,0.051 +2016-07-21 05:00:00,0.0739 +2016-07-21 06:00:00,0.0619 +2016-07-21 07:00:00,0.0636 +2016-07-21 08:00:00,0.0636 +2016-07-21 09:00:00,0.0664 +2016-07-21 10:00:00,0.066 +2016-07-21 11:00:00,0.0611 +2016-07-21 12:00:00,0.0597 +2016-07-21 13:00:00,0.0587 +2016-07-21 14:00:00,0.0594 +2016-07-21 15:00:00,0.0556 +2016-07-21 16:00:00,0.0602 +2016-07-21 17:00:00,0.049 +2016-07-21 18:00:00,0.0365 +2016-07-21 19:00:00,0.0317 +2016-07-21 20:00:00,0.0262 +2016-07-21 21:00:00,0.0122 +2016-07-21 22:00:00,0.0045 +2016-07-21 23:00:00,0.0043 +2016-07-22 00:00:00,0.0048 +2016-07-22 01:00:00,0.0051 +2016-07-22 02:00:00,0.0054 +2016-07-22 03:00:00,0.015 +2016-07-22 04:00:00,0.0477 +2016-07-22 05:00:00,0.0675 +2016-07-22 06:00:00,0.0617 +2016-07-22 07:00:00,0.0604 +2016-07-22 08:00:00,0.0629 +2016-07-22 09:00:00,0.064 +2016-07-22 10:00:00,0.0642 +2016-07-22 11:00:00,0.0597 +2016-07-22 12:00:00,0.0593 +2016-07-22 13:00:00,0.0606 +2016-07-22 14:00:00,0.0604 +2016-07-22 15:00:00,0.0567 +2016-07-22 16:00:00,0.0561 +2016-07-22 17:00:00,0.0464 +2016-07-22 18:00:00,0.0378 +2016-07-22 19:00:00,0.0328 +2016-07-22 20:00:00,0.0266 +2016-07-22 21:00:00,0.0218 +2016-07-22 22:00:00,0.0073 +2016-07-22 23:00:00,0.0057 +2016-07-23 00:00:00,0.005 +2016-07-23 01:00:00,0.0052 +2016-07-23 02:00:00,0.005 +2016-07-23 03:00:00,0.0056 +2016-07-23 04:00:00,0.011 +2016-07-23 05:00:00,0.0237 +2016-07-23 06:00:00,0.0357 +2016-07-23 07:00:00,0.041 +2016-07-23 08:00:00,0.0524 +2016-07-23 09:00:00,0.0596 +2016-07-23 10:00:00,0.0599 +2016-07-23 11:00:00,0.0625 +2016-07-23 12:00:00,0.0603 +2016-07-23 13:00:00,0.0553 +2016-07-23 14:00:00,0.0595 +2016-07-23 15:00:00,0.0576 +2016-07-23 16:00:00,0.0593 +2016-07-23 17:00:00,0.0539 +2016-07-23 18:00:00,0.0431 +2016-07-23 19:00:00,0.0386 +2016-07-23 20:00:00,0.0384 +2016-07-23 21:00:00,0.0316 +2016-07-23 22:00:00,0.018 +2016-07-23 23:00:00,0.0087 +2016-07-24 00:00:00,0.005 +2016-07-24 01:00:00,0.0056 +2016-07-24 02:00:00,0.005 +2016-07-24 03:00:00,0.0053 +2016-07-24 04:00:00,0.0058 +2016-07-24 05:00:00,0.0157 +2016-07-24 06:00:00,0.02 +2016-07-24 07:00:00,0.0351 +2016-07-24 08:00:00,0.0486 +2016-07-24 09:00:00,0.0588 +2016-07-24 10:00:00,0.0653 +2016-07-24 11:00:00,0.0657 +2016-07-24 12:00:00,0.0617 +2016-07-24 13:00:00,0.065 +2016-07-24 14:00:00,0.0564 +2016-07-24 15:00:00,0.0627 +2016-07-24 16:00:00,0.0604 +2016-07-24 17:00:00,0.0571 +2016-07-24 18:00:00,0.0483 +2016-07-24 19:00:00,0.0418 +2016-07-24 20:00:00,0.034 +2016-07-24 21:00:00,0.0206 +2016-07-24 22:00:00,0.0056 +2016-07-24 23:00:00,0.0036 +2016-07-25 00:00:00,0.0042 +2016-07-25 01:00:00,0.0046 +2016-07-25 02:00:00,0.0058 +2016-07-25 03:00:00,0.0201 +2016-07-25 04:00:00,0.0541 +2016-07-25 05:00:00,0.0707 +2016-07-25 06:00:00,0.065 +2016-07-25 07:00:00,0.0618 +2016-07-25 08:00:00,0.0616 +2016-07-25 09:00:00,0.0624 +2016-07-25 10:00:00,0.0618 +2016-07-25 11:00:00,0.0659 +2016-07-25 12:00:00,0.0605 +2016-07-25 13:00:00,0.0596 +2016-07-25 14:00:00,0.056 +2016-07-25 15:00:00,0.0576 +2016-07-25 16:00:00,0.0536 +2016-07-25 17:00:00,0.0399 +2016-07-25 18:00:00,0.0361 +2016-07-25 19:00:00,0.0297 +2016-07-25 20:00:00,0.0249 +2016-07-25 21:00:00,0.0103 +2016-07-25 22:00:00,0.0049 +2016-07-25 23:00:00,0.0053 +2016-07-26 00:00:00,0.0047 +2016-07-26 01:00:00,0.0047 +2016-07-26 02:00:00,0.0055 +2016-07-26 03:00:00,0.0162 +2016-07-26 04:00:00,0.0558 +2016-07-26 05:00:00,0.0751 +2016-07-26 06:00:00,0.0705 +2016-07-26 07:00:00,0.0639 +2016-07-26 08:00:00,0.0631 +2016-07-26 09:00:00,0.0665 +2016-07-26 10:00:00,0.0607 +2016-07-26 11:00:00,0.0609 +2016-07-26 12:00:00,0.0598 +2016-07-26 13:00:00,0.0605 +2016-07-26 14:00:00,0.0593 +2016-07-26 15:00:00,0.0581 +2016-07-26 16:00:00,0.0591 +2016-07-26 17:00:00,0.0448 +2016-07-26 18:00:00,0.0353 +2016-07-26 19:00:00,0.0298 +2016-07-26 20:00:00,0.0267 +2016-07-26 21:00:00,0.0124 +2016-07-26 22:00:00,0.0059 +2016-07-26 23:00:00,0.0051 +2016-07-27 00:00:00,0.0046 +2016-07-27 01:00:00,0.0047 +2016-07-27 02:00:00,0.0053 +2016-07-27 03:00:00,0.0171 +2016-07-27 04:00:00,0.0521 +2016-07-27 05:00:00,0.0757 +2016-07-27 06:00:00,0.0711 +2016-07-27 07:00:00,0.0627 +2016-07-27 08:00:00,0.0637 +2016-07-27 09:00:00,0.0663 +2016-07-27 10:00:00,0.0669 +2016-07-27 11:00:00,0.0634 +2016-07-27 12:00:00,0.0598 +2016-07-27 13:00:00,0.0582 +2016-07-27 14:00:00,0.0576 +2016-07-27 15:00:00,0.0567 +2016-07-27 16:00:00,0.0555 +2016-07-27 17:00:00,0.0463 +2016-07-27 18:00:00,0.0377 +2016-07-27 19:00:00,0.0312 +2016-07-27 20:00:00,0.0275 +2016-07-27 21:00:00,0.0174 +2016-07-27 22:00:00,0.007 +2016-07-27 23:00:00,0.0053 +2016-07-28 00:00:00,0.0048 +2016-07-28 01:00:00,0.0049 +2016-07-28 02:00:00,0.0056 +2016-07-28 03:00:00,0.0167 +2016-07-28 04:00:00,0.0514 +2016-07-28 05:00:00,0.0798 +2016-07-28 06:00:00,0.0655 +2016-07-28 07:00:00,0.0636 +2016-07-28 08:00:00,0.063 +2016-07-28 09:00:00,0.0658 +2016-07-28 10:00:00,0.0644 +2016-07-28 11:00:00,0.0638 +2016-07-28 12:00:00,0.0605 +2016-07-28 13:00:00,0.0615 +2016-07-28 14:00:00,0.0623 +2016-07-28 15:00:00,0.0639 +2016-07-28 16:00:00,0.0588 +2016-07-28 17:00:00,0.0508 +2016-07-28 18:00:00,0.0377 +2016-07-28 19:00:00,0.0307 +2016-07-28 20:00:00,0.0281 +2016-07-28 21:00:00,0.0153 +2016-07-28 22:00:00,0.0059 +2016-07-28 23:00:00,0.0056 +2016-07-29 00:00:00,0.0049 +2016-07-29 01:00:00,0.0048 +2016-07-29 02:00:00,0.0055 +2016-07-29 03:00:00,0.0106 +2016-07-29 04:00:00,0.0481 +2016-07-29 05:00:00,0.0727 +2016-07-29 06:00:00,0.06 +2016-07-29 07:00:00,0.0618 +2016-07-29 08:00:00,0.0643 +2016-07-29 09:00:00,0.05 +2016-07-29 10:00:00,0.015 +2016-07-29 11:00:00,0.0143 +2016-07-29 12:00:00,0.0146 +2016-07-29 13:00:00,0.0145 +2016-07-29 14:00:00,0.014 +2016-07-29 15:00:00,0.0137 +2016-07-29 16:00:00,0.0138 +2016-07-29 17:00:00,0.0105 +2016-07-29 18:00:00,0.0117 +2016-07-29 19:00:00,0.0101 +2016-07-29 20:00:00,0.0086 +2016-07-29 21:00:00,0.0074 +2016-07-29 22:00:00,0.0062 +2016-07-29 23:00:00,0.0189 +2016-07-30 00:00:00,0.0162 +2016-07-30 01:00:00,0.0159 +2016-07-30 02:00:00,0.0183 +2016-07-30 03:00:00,0.0201 +2016-07-30 04:00:00,0.023 +2016-07-30 05:00:00,0.0294 +2016-07-30 06:00:00,0.0365 +2016-07-30 07:00:00,0.0426 +2016-07-30 08:00:00,0.0523 +2016-07-30 09:00:00,0.0618 +2016-07-30 10:00:00,0.0621 +2016-07-30 11:00:00,0.0583 +2016-07-30 12:00:00,0.0597 +2016-07-30 13:00:00,0.0613 +2016-07-30 14:00:00,0.0609 +2016-07-30 15:00:00,0.0595 +2016-07-30 16:00:00,0.0567 +2016-07-30 17:00:00,0.0548 +2016-07-30 18:00:00,0.0501 +2016-07-30 19:00:00,0.0484 +2016-07-30 20:00:00,0.0444 +2016-07-30 21:00:00,0.0383 +2016-07-30 22:00:00,0.0283 +2016-07-30 23:00:00,0.0234 +2016-07-31 00:00:00,0.0205 +2016-07-31 01:00:00,0.0195 +2016-07-31 02:00:00,0.0182 +2016-07-31 03:00:00,0.0185 +2016-07-31 04:00:00,0.0202 +2016-07-31 05:00:00,0.0242 +2016-07-31 06:00:00,0.0292 +2016-07-31 07:00:00,0.0372 +2016-07-31 08:00:00,0.0469 +2016-07-31 09:00:00,0.0587 +2016-07-31 10:00:00,0.062 +2016-07-31 11:00:00,0.062 +2016-07-31 12:00:00,0.0619 +2016-07-31 13:00:00,0.0611 +2016-07-31 14:00:00,0.0618 +2016-07-31 15:00:00,0.0625 +2016-07-31 16:00:00,0.0552 +2016-07-31 17:00:00,0.0591 +2016-07-31 18:00:00,0.0511 +2016-07-31 19:00:00,0.0448 +2016-07-31 20:00:00,0.0406 +2016-07-31 21:00:00,0.0319 +2016-07-31 22:00:00,0.0216 +2016-07-31 23:00:00,0.0156 +2016-08-01 00:00:00,0.0124 +2016-08-01 01:00:00,0.0124 +2016-08-01 02:00:00,0.0131 +2016-08-01 03:00:00,0.0286 +2016-08-01 04:00:00,0.0416 +2016-08-01 05:00:00,0.0674 +2016-08-01 06:00:00,0.0663 +2016-08-01 07:00:00,0.0598 +2016-08-01 08:00:00,0.0577 +2016-08-01 09:00:00,0.0666 +2016-08-01 10:00:00,0.0601 +2016-08-01 11:00:00,0.066 +2016-08-01 12:00:00,0.0694 +2016-08-01 13:00:00,0.0625 +2016-08-01 14:00:00,0.0606 +2016-08-01 15:00:00,0.0588 +2016-08-01 16:00:00,0.0574 +2016-08-01 17:00:00,0.0478 +2016-08-01 18:00:00,0.0412 +2016-08-01 19:00:00,0.0368 +2016-08-01 20:00:00,0.033 +2016-08-01 21:00:00,0.0215 +2016-08-01 22:00:00,0.0158 +2016-08-01 23:00:00,0.0157 +2016-08-02 00:00:00,0.0123 +2016-08-02 01:00:00,0.0133 +2016-08-02 02:00:00,0.0175 +2016-08-02 03:00:00,0.0263 +2016-08-02 04:00:00,0.0422 +2016-08-02 05:00:00,0.0672 +2016-08-02 06:00:00,0.0627 +2016-08-02 07:00:00,0.0583 +2016-08-02 08:00:00,0.0622 +2016-08-02 09:00:00,0.0631 +2016-08-02 10:00:00,0.0632 +2016-08-02 11:00:00,0.0622 +2016-08-02 12:00:00,0.0599 +2016-08-02 13:00:00,0.0629 +2016-08-02 14:00:00,0.0588 +2016-08-02 15:00:00,0.0584 +2016-08-02 16:00:00,0.0658 +2016-08-02 17:00:00,0.047 +2016-08-02 18:00:00,0.0424 +2016-08-02 19:00:00,0.0378 +2016-08-02 20:00:00,0.0298 +2016-08-02 21:00:00,0.0239 +2016-08-02 22:00:00,0.019 +2016-08-02 23:00:00,0.0123 +2016-08-03 00:00:00,0.0126 +2016-08-03 01:00:00,0.0139 +2016-08-03 02:00:00,0.012 +2016-08-03 03:00:00,0.024 +2016-08-03 04:00:00,0.0467 +2016-08-03 05:00:00,0.0872 +2016-08-03 06:00:00,0.0651 +2016-08-03 07:00:00,0.0632 +2016-08-03 08:00:00,0.0633 +2016-08-03 09:00:00,0.0629 +2016-08-03 10:00:00,0.0655 +2016-08-03 11:00:00,0.063 +2016-08-03 12:00:00,0.0622 +2016-08-03 13:00:00,0.0608 +2016-08-03 14:00:00,0.0604 +2016-08-03 15:00:00,0.059 +2016-08-03 16:00:00,0.0536 +2016-08-03 17:00:00,0.0511 +2016-08-03 18:00:00,0.0427 +2016-08-03 19:00:00,0.04 +2016-08-03 20:00:00,0.0341 +2016-08-03 21:00:00,0.0242 +2016-08-03 22:00:00,0.0189 +2016-08-03 23:00:00,0.0162 +2016-08-04 00:00:00,0.014 +2016-08-04 01:00:00,0.0152 +2016-08-04 02:00:00,0.0179 +2016-08-04 03:00:00,0.0264 +2016-08-04 04:00:00,0.0465 +2016-08-04 05:00:00,0.0657 +2016-08-04 06:00:00,0.0615 +2016-08-04 07:00:00,0.06 +2016-08-04 08:00:00,0.0619 +2016-08-04 09:00:00,0.0649 +2016-08-04 10:00:00,0.0664 +2016-08-04 11:00:00,0.0644 +2016-08-04 12:00:00,0.0639 +2016-08-04 13:00:00,0.065 +2016-08-04 14:00:00,0.0604 +2016-08-04 15:00:00,0.0594 +2016-08-04 16:00:00,0.0601 +2016-08-04 17:00:00,0.055 +2016-08-04 18:00:00,0.0449 +2016-08-04 19:00:00,0.0392 +2016-08-04 20:00:00,0.0323 +2016-08-04 21:00:00,0.0257 +2016-08-04 22:00:00,0.0183 +2016-08-04 23:00:00,0.0161 +2016-08-05 00:00:00,0.0136 +2016-08-05 01:00:00,0.0158 +2016-08-05 02:00:00,0.0171 +2016-08-05 03:00:00,0.0247 +2016-08-05 04:00:00,0.0417 +2016-08-05 05:00:00,0.0606 +2016-08-05 06:00:00,0.06 +2016-08-05 07:00:00,0.0658 +2016-08-05 08:00:00,0.0622 +2016-08-05 09:00:00,0.0619 +2016-08-05 10:00:00,0.0645 +2016-08-05 11:00:00,0.0676 +2016-08-05 12:00:00,0.0604 +2016-08-05 13:00:00,0.0632 +2016-08-05 14:00:00,0.0564 +2016-08-05 15:00:00,0.0568 +2016-08-05 16:00:00,0.061 +2016-08-05 17:00:00,0.0548 +2016-08-05 18:00:00,0.0471 +2016-08-05 19:00:00,0.0438 +2016-08-05 20:00:00,0.0337 +2016-08-05 21:00:00,0.0292 +2016-08-05 22:00:00,0.0203 +2016-08-05 23:00:00,0.0176 +2016-08-06 00:00:00,0.0167 +2016-08-06 01:00:00,0.0156 +2016-08-06 02:00:00,0.0175 +2016-08-06 03:00:00,0.0201 +2016-08-06 04:00:00,0.023 +2016-08-06 05:00:00,0.0301 +2016-08-06 06:00:00,0.0381 +2016-08-06 07:00:00,0.0451 +2016-08-06 08:00:00,0.056 +2016-08-06 09:00:00,0.0583 +2016-08-06 10:00:00,0.0604 +2016-08-06 11:00:00,0.064 +2016-08-06 12:00:00,0.0618 +2016-08-06 13:00:00,0.0601 +2016-08-06 14:00:00,0.0604 +2016-08-06 15:00:00,0.0577 +2016-08-06 16:00:00,0.0597 +2016-08-06 17:00:00,0.0536 +2016-08-06 18:00:00,0.0477 +2016-08-06 19:00:00,0.0438 +2016-08-06 20:00:00,0.0427 +2016-08-06 21:00:00,0.0322 +2016-08-06 22:00:00,0.0266 +2016-08-06 23:00:00,0.0218 +2016-08-07 00:00:00,0.0166 +2016-08-07 01:00:00,0.0178 +2016-08-07 02:00:00,0.018 +2016-08-07 03:00:00,0.0194 +2016-08-07 04:00:00,0.0192 +2016-08-07 05:00:00,0.0235 +2016-08-07 06:00:00,0.0311 +2016-08-07 07:00:00,0.0366 +2016-08-07 08:00:00,0.0485 +2016-08-07 09:00:00,0.0551 +2016-08-07 10:00:00,0.0607 +2016-08-07 11:00:00,0.0623 +2016-08-07 12:00:00,0.0625 +2016-08-07 13:00:00,0.061 +2016-08-07 14:00:00,0.0592 +2016-08-07 15:00:00,0.0575 +2016-08-07 16:00:00,0.0604 +2016-08-07 17:00:00,0.053 +2016-08-07 18:00:00,0.0533 +2016-08-07 19:00:00,0.05 +2016-08-07 20:00:00,0.0393 +2016-08-07 21:00:00,0.0187 +2016-08-07 22:00:00,0.0048 +2016-08-07 23:00:00,0.0112 +2016-08-08 00:00:00,0.015 +2016-08-08 01:00:00,0.0137 +2016-08-08 02:00:00,0.0177 +2016-08-08 03:00:00,0.026 +2016-08-08 04:00:00,0.0468 +2016-08-08 05:00:00,0.0666 +2016-08-08 06:00:00,0.0815 +2016-08-08 07:00:00,0.0627 +2016-08-08 08:00:00,0.0616 +2016-08-08 09:00:00,0.0641 +2016-08-08 10:00:00,0.06 +2016-08-08 11:00:00,0.065 +2016-08-08 12:00:00,0.0643 +2016-08-08 13:00:00,0.0599 +2016-08-08 14:00:00,0.0577 +2016-08-08 15:00:00,0.0562 +2016-08-08 16:00:00,0.056 +2016-08-08 17:00:00,0.0467 +2016-08-08 18:00:00,0.0412 +2016-08-08 19:00:00,0.0386 +2016-08-08 20:00:00,0.0331 +2016-08-08 21:00:00,0.0085 +2016-08-08 22:00:00,0.0129 +2016-08-08 23:00:00,0.0153 +2016-08-09 00:00:00,0.0133 +2016-08-09 01:00:00,0.0137 +2016-08-09 02:00:00,0.017 +2016-08-09 03:00:00,0.0245 +2016-08-09 04:00:00,0.0503 +2016-08-09 05:00:00,0.0676 +2016-08-09 06:00:00,0.1914 +2016-08-09 07:00:00,0.0771 +2016-08-09 08:00:00,0.0631 +2016-08-09 09:00:00,0.0709 +2016-08-09 10:00:00,0.0654 +2016-08-09 11:00:00,0.0633 +2016-08-09 12:00:00,0.0622 +2016-08-09 13:00:00,0.0639 +2016-08-09 14:00:00,0.0622 +2016-08-09 15:00:00,0.0608 +2016-08-09 16:00:00,0.0559 +2016-08-09 17:00:00,0.0501 +2016-08-09 18:00:00,0.0415 +2016-08-09 19:00:00,0.0387 +2016-08-09 20:00:00,0.0332 +2016-08-09 21:00:00,0.0276 +2016-08-09 22:00:00,0.0185 +2016-08-09 23:00:00,0.0157 +2016-08-10 00:00:00,0.0144 +2016-08-10 01:00:00,0.0142 +2016-08-10 02:00:00,0.0169 +2016-08-10 03:00:00,0.0271 +2016-08-10 04:00:00,0.045 +2016-08-10 05:00:00,0.068 +2016-08-10 06:00:00,0.0694 +2016-08-10 07:00:00,0.0592 +2016-08-10 08:00:00,0.0622 +2016-08-10 09:00:00,0.0639 +2016-08-10 10:00:00,0.0668 +2016-08-10 11:00:00,0.0646 +2016-08-10 12:00:00,0.0619 +2016-08-10 13:00:00,0.0607 +2016-08-10 14:00:00,0.0581 +2016-08-10 15:00:00,0.0598 +2016-08-10 16:00:00,0.0572 +2016-08-10 17:00:00,0.0518 +2016-08-10 18:00:00,0.0464 +2016-08-10 19:00:00,0.0393 +2016-08-10 20:00:00,0.0315 +2016-08-10 21:00:00,0.0243 +2016-08-10 22:00:00,0.018 +2016-08-10 23:00:00,0.0154 +2016-08-11 00:00:00,0.0142 +2016-08-11 01:00:00,0.0147 +2016-08-11 02:00:00,0.0172 +2016-08-11 03:00:00,0.0282 +2016-08-11 04:00:00,0.0467 +2016-08-11 05:00:00,0.0744 +2016-08-11 06:00:00,0.0657 +2016-08-11 07:00:00,0.0651 +2016-08-11 08:00:00,0.066 +2016-08-11 09:00:00,0.0639 +2016-08-11 10:00:00,0.0647 +2016-08-11 11:00:00,0.0655 +2016-08-11 12:00:00,0.0621 +2016-08-11 13:00:00,0.0682 +2016-08-11 14:00:00,0.0622 +2016-08-11 15:00:00,0.0577 +2016-08-11 16:00:00,0.0589 +2016-08-11 17:00:00,0.0506 +2016-08-11 18:00:00,0.0438 +2016-08-11 19:00:00,0.039 +2016-08-11 20:00:00,0.0313 +2016-08-11 21:00:00,0.0261 +2016-08-11 22:00:00,0.0196 +2016-08-11 23:00:00,0.0155 +2016-08-12 00:00:00,0.0154 +2016-08-12 01:00:00,0.0142 +2016-08-12 02:00:00,0.0169 +2016-08-12 03:00:00,0.0263 +2016-08-12 04:00:00,0.0417 +2016-08-12 05:00:00,0.0693 +2016-08-12 06:00:00,0.0551 +2016-08-12 07:00:00,0.0637 +2016-08-12 08:00:00,0.0646 +2016-08-12 09:00:00,0.0685 +2016-08-12 10:00:00,0.0645 +2016-08-12 11:00:00,0.0669 +2016-08-12 12:00:00,0.0626 +2016-08-12 13:00:00,0.0651 +2016-08-12 14:00:00,0.0595 +2016-08-12 15:00:00,0.059 +2016-08-12 16:00:00,0.069 +2016-08-12 17:00:00,0.0515 +2016-08-12 18:00:00,0.046 +2016-08-12 19:00:00,0.0421 +2016-08-12 20:00:00,0.0346 +2016-08-12 21:00:00,0.0295 +2016-08-12 22:00:00,0.0217 +2016-08-12 23:00:00,0.0185 +2016-08-13 00:00:00,0.0158 +2016-08-13 01:00:00,0.0166 +2016-08-13 02:00:00,0.0185 +2016-08-13 03:00:00,0.0191 +2016-08-13 04:00:00,0.0227 +2016-08-13 05:00:00,0.0308 +2016-08-13 06:00:00,0.0377 +2016-08-13 07:00:00,0.044 +2016-08-13 08:00:00,0.0546 +2016-08-13 09:00:00,0.0556 +2016-08-13 10:00:00,0.0588 +2016-08-13 11:00:00,0.0639 +2016-08-13 12:00:00,0.0603 +2016-08-13 13:00:00,0.0627 +2016-08-13 14:00:00,0.0607 +2016-08-13 15:00:00,0.0592 +2016-08-13 16:00:00,0.0566 +2016-08-13 17:00:00,0.0591 +2016-08-13 18:00:00,0.0417 +2016-08-13 19:00:00,0.0463 +2016-08-13 20:00:00,0.0405 +2016-08-13 21:00:00,0.0358 +2016-08-13 22:00:00,0.0264 +2016-08-13 23:00:00,0.0193 +2016-08-14 00:00:00,0.0191 +2016-08-14 01:00:00,0.0183 +2016-08-14 02:00:00,0.0168 +2016-08-14 03:00:00,0.0167 +2016-08-14 04:00:00,0.0202 +2016-08-14 05:00:00,0.024 +2016-08-14 06:00:00,0.0269 +2016-08-14 07:00:00,0.0355 +2016-08-14 08:00:00,0.0465 +2016-08-14 09:00:00,0.058 +2016-08-14 10:00:00,0.0615 +2016-08-14 11:00:00,0.0607 +2016-08-14 12:00:00,0.0607 +2016-08-14 13:00:00,0.0599 +2016-08-14 14:00:00,0.0596 +2016-08-14 15:00:00,0.0603 +2016-08-14 16:00:00,0.054 +2016-08-14 17:00:00,0.054 +2016-08-14 18:00:00,0.0599 +2016-08-14 19:00:00,0.0487 +2016-08-14 20:00:00,0.039 +2016-08-14 21:00:00,0.0276 +2016-08-14 22:00:00,0.0194 +2016-08-14 23:00:00,0.0177 +2016-08-15 00:00:00,0.0158 +2016-08-15 01:00:00,0.0143 +2016-08-15 02:00:00,0.0177 +2016-08-15 03:00:00,0.0263 +2016-08-15 04:00:00,0.046 +2016-08-15 05:00:00,0.0642 +2016-08-15 06:00:00,0.3921 +2016-08-15 07:00:00,0.3352 +2016-08-15 08:00:00,0.0596 +2016-08-15 09:00:00,0.0638 +2016-08-15 10:00:00,0.0635 +2016-08-15 11:00:00,0.0651 +2016-08-15 12:00:00,0.0636 +2016-08-15 13:00:00,0.058 +2016-08-15 14:00:00,0.0656 +2016-08-15 15:00:00,0.0611 +2016-08-15 16:00:00,0.0577 +2016-08-15 17:00:00,0.055 +2016-08-15 18:00:00,0.0447 +2016-08-15 19:00:00,0.0387 +2016-08-15 20:00:00,0.034 +2016-08-15 21:00:00,0.0229 +2016-08-15 22:00:00,0.0164 +2016-08-15 23:00:00,0.0147 +2016-08-16 00:00:00,0.014 +2016-08-16 01:00:00,0.0142 +2016-08-16 02:00:00,0.0175 +2016-08-16 03:00:00,0.0255 +2016-08-16 04:00:00,0.0472 +2016-08-16 05:00:00,0.1346 +2016-08-16 06:00:00,0.313 +2016-08-16 07:00:00,0.1906 +2016-08-16 08:00:00,0.0581 +2016-08-16 09:00:00,0.0676 +2016-08-16 10:00:00,0.0617 +2016-08-16 11:00:00,0.0668 +2016-08-16 12:00:00,0.0645 +2016-08-16 13:00:00,0.0648 +2016-08-16 14:00:00,0.2806 +2016-08-16 15:00:00,0.0759 +2016-08-16 16:00:00,0.0564 +2016-08-16 17:00:00,0.0512 +2016-08-16 18:00:00,0.0434 +2016-08-16 19:00:00,0.039 +2016-08-16 20:00:00,0.0342 +2016-08-16 21:00:00,0.0227 +2016-08-16 22:00:00,0.0177 +2016-08-16 23:00:00,0.0148 +2016-08-17 00:00:00,0.0142 +2016-08-17 01:00:00,0.0142 +2016-08-17 02:00:00,0.0174 +2016-08-17 03:00:00,0.0266 +2016-08-17 04:00:00,0.0454 +2016-08-17 05:00:00,0.144 +2016-08-17 06:00:00,0.2372 +2016-08-17 07:00:00,0.0633 +2016-08-17 08:00:00,0.0612 +2016-08-17 09:00:00,0.0668 +2016-08-17 10:00:00,0.0678 +2016-08-17 11:00:00,0.0672 +2016-08-17 12:00:00,0.06 +2016-08-17 13:00:00,0.0601 +2016-08-17 14:00:00,0.06 +2016-08-17 15:00:00,0.0589 +2016-08-17 16:00:00,0.0571 +2016-08-17 17:00:00,0.0559 +2016-08-17 18:00:00,0.0441 +2016-08-17 19:00:00,0.0397 +2016-08-17 20:00:00,0.0337 +2016-08-17 21:00:00,0.0243 +2016-08-17 22:00:00,0.0182 +2016-08-17 23:00:00,0.0145 +2016-08-18 00:00:00,0.0134 +2016-08-18 01:00:00,0.0133 +2016-08-18 02:00:00,0.0168 +2016-08-18 03:00:00,0.0253 +2016-08-18 04:00:00,0.0462 +2016-08-18 05:00:00,0.0779 +2016-08-18 06:00:00,0.2821 +2016-08-18 07:00:00,0.0945 +2016-08-18 08:00:00,0.0634 +2016-08-18 09:00:00,0.0635 +2016-08-18 10:00:00,0.0658 +2016-08-18 11:00:00,0.066 +2016-08-18 12:00:00,0.0606 +2016-08-18 13:00:00,0.064 +2016-08-18 14:00:00,0.0634 +2016-08-18 15:00:00,0.0622 +2016-08-18 16:00:00,0.0567 +2016-08-18 17:00:00,0.0506 +2016-08-18 18:00:00,0.0435 +2016-08-18 19:00:00,0.0395 +2016-08-18 20:00:00,0.0298 +2016-08-18 21:00:00,0.0249 +2016-08-18 22:00:00,0.0189 +2016-08-18 23:00:00,0.0143 +2016-08-19 00:00:00,0.0138 +2016-08-19 01:00:00,0.0133 +2016-08-19 02:00:00,0.0161 +2016-08-19 03:00:00,0.0254 +2016-08-19 04:00:00,0.0421 +2016-08-19 05:00:00,0.0641 +2016-08-19 06:00:00,0.0666 +2016-08-19 07:00:00,0.0562 +2016-08-19 08:00:00,0.0614 +2016-08-19 09:00:00,0.0619 +2016-08-19 10:00:00,0.0632 +2016-08-19 11:00:00,0.0632 +2016-08-19 12:00:00,0.0609 +2016-08-19 13:00:00,0.0619 +2016-08-19 14:00:00,0.0634 +2016-08-19 15:00:00,0.0593 +2016-08-19 16:00:00,0.0529 +2016-08-19 17:00:00,0.0448 +2016-08-19 18:00:00,0.0439 +2016-08-19 19:00:00,0.0405 +2016-08-19 20:00:00,0.0344 +2016-08-19 21:00:00,0.03 +2016-08-19 22:00:00,0.0248 +2016-08-19 23:00:00,0.0194 +2016-08-20 00:00:00,0.0155 +2016-08-20 01:00:00,0.0174 +2016-08-20 02:00:00,0.0169 +2016-08-20 03:00:00,0.0184 +2016-08-20 04:00:00,0.0223 +2016-08-20 05:00:00,0.03 +2016-08-20 06:00:00,0.0386 +2016-08-20 07:00:00,0.0468 +2016-08-20 08:00:00,0.0531 +2016-08-20 09:00:00,0.0607 +2016-08-20 10:00:00,0.0617 +2016-08-20 11:00:00,0.0602 +2016-08-20 12:00:00,0.0596 +2016-08-20 13:00:00,0.0645 +2016-08-20 14:00:00,0.0604 +2016-08-20 15:00:00,0.0603 +2016-08-20 16:00:00,0.0589 +2016-08-20 17:00:00,0.0564 +2016-08-20 18:00:00,0.0499 +2016-08-20 19:00:00,0.0442 +2016-08-20 20:00:00,0.0417 +2016-08-20 21:00:00,0.0354 +2016-08-20 22:00:00,0.028 +2016-08-20 23:00:00,0.0222 +2016-08-21 00:00:00,0.0183 +2016-08-21 01:00:00,0.0181 +2016-08-21 02:00:00,0.0172 +2016-08-21 03:00:00,0.0188 +2016-08-21 04:00:00,0.0203 +2016-08-21 05:00:00,0.0239 +2016-08-21 06:00:00,0.0288 +2016-08-21 07:00:00,0.0426 +2016-08-21 08:00:00,0.0484 +2016-08-21 09:00:00,0.0552 +2016-08-21 10:00:00,0.0597 +2016-08-21 11:00:00,0.0587 +2016-08-21 12:00:00,0.0601 +2016-08-21 13:00:00,0.0643 +2016-08-21 14:00:00,0.0616 +2016-08-21 15:00:00,0.0874 +2016-08-21 16:00:00,0.0588 +2016-08-21 17:00:00,0.0543 +2016-08-21 18:00:00,0.0507 +2016-08-21 19:00:00,0.0513 +2016-08-21 20:00:00,0.0364 +2016-08-21 21:00:00,0.0279 +2016-08-21 22:00:00,0.02 +2016-08-21 23:00:00,0.0167 +2016-08-22 00:00:00,0.0148 +2016-08-22 01:00:00,0.0133 +2016-08-22 02:00:00,0.0173 +2016-08-22 03:00:00,0.0256 +2016-08-22 04:00:00,0.0452 +2016-08-22 05:00:00,0.1217 +2016-08-22 06:00:00,0.3512 +2016-08-22 07:00:00,0.3393 +2016-08-22 08:00:00,0.0975 +2016-08-22 09:00:00,0.0614 +2016-08-22 10:00:00,0.0602 +2016-08-22 11:00:00,0.0633 +2016-08-22 12:00:00,0.0604 +2016-08-22 13:00:00,0.0594 +2016-08-22 14:00:00,0.0602 +2016-08-22 15:00:00,0.0553 +2016-08-22 16:00:00,0.0557 +2016-08-22 17:00:00,0.0521 +2016-08-22 18:00:00,0.044 +2016-08-22 19:00:00,0.0357 +2016-08-22 20:00:00,0.0302 +2016-08-22 21:00:00,0.0206 +2016-08-22 22:00:00,0.0174 +2016-08-22 23:00:00,0.0152 +2016-08-23 00:00:00,0.0139 +2016-08-23 01:00:00,0.0139 +2016-08-23 02:00:00,0.0165 +2016-08-23 03:00:00,0.0267 +2016-08-23 04:00:00,0.0459 +2016-08-23 05:00:00,0.1338 +2016-08-23 06:00:00,0.3471 +2016-08-23 07:00:00,0.3671 +2016-08-23 08:00:00,0.1233 +2016-08-23 09:00:00,0.0627 +2016-08-23 10:00:00,0.0635 +2016-08-23 11:00:00,0.0636 +2016-08-23 12:00:00,0.0643 +2016-08-23 13:00:00,0.0616 +2016-08-23 14:00:00,0.0602 +2016-08-23 15:00:00,0.057 +2016-08-23 16:00:00,0.0564 +2016-08-23 17:00:00,0.0496 +2016-08-23 18:00:00,0.044 +2016-08-23 19:00:00,0.0379 +2016-08-23 20:00:00,0.029 +2016-08-23 21:00:00,0.022 +2016-08-23 22:00:00,0.0189 +2016-08-23 23:00:00,0.0151 +2016-08-24 00:00:00,0.0134 +2016-08-24 01:00:00,0.0138 +2016-08-24 02:00:00,0.0174 +2016-08-24 03:00:00,0.0282 +2016-08-24 04:00:00,0.0456 +2016-08-24 05:00:00,0.1363 +2016-08-24 06:00:00,0.3752 +2016-08-24 07:00:00,0.3362 +2016-08-24 08:00:00,0.0661 +2016-08-24 09:00:00,0.0655 +2016-08-24 10:00:00,0.0636 +2016-08-24 11:00:00,0.0644 +2016-08-24 12:00:00,0.0621 +2016-08-24 13:00:00,0.0621 +2016-08-24 14:00:00,0.0591 +2016-08-24 15:00:00,0.0502 +2016-08-24 16:00:00,0.0484 +2016-08-24 17:00:00,0.057 +2016-08-24 18:00:00,0.0414 +2016-08-24 19:00:00,0.0386 +2016-08-24 20:00:00,0.0297 +2016-08-24 21:00:00,0.0216 +2016-08-24 22:00:00,0.0171 +2016-08-24 23:00:00,0.0049 +2016-08-25 00:00:00,0.0045 +2016-08-25 01:00:00,0.0046 +2016-08-25 02:00:00,0.0055 +2016-08-25 03:00:00,0.0137 +2016-08-25 04:00:00,0.0518 +2016-08-25 05:00:00,0.0984 +2016-08-25 06:00:00,0.3112 +2016-08-25 07:00:00,0.2851 +2016-08-25 08:00:00,0.0615 +2016-08-25 09:00:00,0.0626 +2016-08-25 10:00:00,0.0606 +2016-08-25 11:00:00,0.0588 +2016-08-25 12:00:00,0.059 +2016-08-25 13:00:00,0.0601 +2016-08-25 14:00:00,0.0619 +2016-08-25 15:00:00,0.0572 +2016-08-25 16:00:00,0.0564 +2016-08-25 17:00:00,0.0483 +2016-08-25 18:00:00,0.0457 +2016-08-25 19:00:00,0.0298 +2016-08-25 20:00:00,0.0229 +2016-08-25 21:00:00,0.0078 +2016-08-25 22:00:00,0.0055 +2016-08-25 23:00:00,0.0049 +2016-08-26 00:00:00,0.005 +2016-08-26 01:00:00,0.005 +2016-08-26 02:00:00,0.0051 +2016-08-26 03:00:00,0.0151 +2016-08-26 04:00:00,0.0456 +2016-08-26 05:00:00,0.0766 +2016-08-26 06:00:00,0.0715 +2016-08-26 07:00:00,0.056 +2016-08-26 08:00:00,0.0591 +2016-08-26 09:00:00,0.0606 +2016-08-26 10:00:00,0.064 +2016-08-26 11:00:00,0.0613 +2016-08-26 12:00:00,0.0589 +2016-08-26 13:00:00,0.0638 +2016-08-26 14:00:00,0.0655 +2016-08-26 15:00:00,0.0609 +2016-08-26 16:00:00,0.0569 +2016-08-26 17:00:00,0.0504 +2016-08-26 18:00:00,0.0391 +2016-08-26 19:00:00,0.0305 +2016-08-26 20:00:00,0.0242 +2016-08-26 21:00:00,0.0167 +2016-08-26 22:00:00,0.0062 +2016-08-26 23:00:00,0.0061 +2016-08-27 00:00:00,0.005 +2016-08-27 01:00:00,0.0045 +2016-08-27 02:00:00,0.0048 +2016-08-27 03:00:00,0.0056 +2016-08-27 04:00:00,0.0065 +2016-08-27 05:00:00,0.0232 +2016-08-27 06:00:00,0.0338 +2016-08-27 07:00:00,0.0452 +2016-08-27 08:00:00,0.0522 +2016-08-27 09:00:00,0.0585 +2016-08-27 10:00:00,0.0611 +2016-08-27 11:00:00,0.0625 +2016-08-27 12:00:00,0.0635 +2016-08-27 13:00:00,0.0635 +2016-08-27 14:00:00,0.0678 +2016-08-27 15:00:00,0.0649 +2016-08-27 16:00:00,0.063 +2016-08-27 17:00:00,0.0544 +2016-08-27 18:00:00,0.0421 +2016-08-27 19:00:00,0.0394 +2016-08-27 20:00:00,0.036 +2016-08-27 21:00:00,0.0278 +2016-08-27 22:00:00,0.0154 +2016-08-27 23:00:00,0.0057 +2016-08-28 00:00:00,0.0053 +2016-08-28 01:00:00,0.0051 +2016-08-28 02:00:00,0.0051 +2016-08-28 03:00:00,0.0048 +2016-08-28 04:00:00,0.0056 +2016-08-28 05:00:00,0.0098 +2016-08-28 06:00:00,0.012 +2016-08-28 07:00:00,0.0322 +2016-08-28 08:00:00,0.05 +2016-08-28 09:00:00,0.0647 +2016-08-28 10:00:00,0.0682 +2016-08-28 11:00:00,0.0673 +2016-08-28 12:00:00,0.0666 +2016-08-28 13:00:00,0.069 +2016-08-28 14:00:00,0.0644 +2016-08-28 15:00:00,0.0646 +2016-08-28 16:00:00,0.0613 +2016-08-28 17:00:00,0.0584 +2016-08-28 18:00:00,0.0505 +2016-08-28 19:00:00,0.0404 +2016-08-28 20:00:00,0.0305 +2016-08-28 21:00:00,0.0134 +2016-08-28 22:00:00,0.0067 +2016-08-28 23:00:00,0.0053 +2016-08-29 00:00:00,0.0049 +2016-08-29 01:00:00,0.0047 +2016-08-29 02:00:00,0.0055 +2016-08-29 03:00:00,0.0195 +2016-08-29 04:00:00,0.0534 +2016-08-29 05:00:00,0.134 +2016-08-29 06:00:00,0.3628 +2016-08-29 07:00:00,0.3694 +2016-08-29 08:00:00,0.0867 +2016-08-29 09:00:00,0.0647 +2016-08-29 10:00:00,0.0583 +2016-08-29 11:00:00,0.0558 +2016-08-29 12:00:00,0.0567 +2016-08-29 13:00:00,0.0567 +2016-08-29 14:00:00,0.0579 +2016-08-29 15:00:00,0.052 +2016-08-29 16:00:00,0.0564 +2016-08-29 17:00:00,0.0441 +2016-08-29 18:00:00,0.0352 +2016-08-29 19:00:00,0.0272 +2016-08-29 20:00:00,0.0169 +2016-08-29 21:00:00,0.0075 +2016-08-29 22:00:00,0.0057 +2016-08-29 23:00:00,0.0048 +2016-08-30 00:00:00,0.0045 +2016-08-30 01:00:00,0.0045 +2016-08-30 02:00:00,0.0052 +2016-08-30 03:00:00,0.0164 +2016-08-30 04:00:00,0.0538 +2016-08-30 05:00:00,0.1497 +2016-08-30 06:00:00,0.3571 +2016-08-30 07:00:00,0.3526 +2016-08-30 08:00:00,0.1596 +2016-08-30 09:00:00,0.0616 +2016-08-30 10:00:00,0.0602 +2016-08-30 11:00:00,0.0556 +2016-08-30 12:00:00,0.0562 +2016-08-30 13:00:00,0.0563 +2016-08-30 14:00:00,0.0597 +2016-08-30 15:00:00,0.056 +2016-08-30 16:00:00,0.0605 +2016-08-30 17:00:00,0.0452 +2016-08-30 18:00:00,0.0347 +2016-08-30 19:00:00,0.027 +2016-08-30 20:00:00,0.021 +2016-08-30 21:00:00,0.007 +2016-08-30 22:00:00,0.0056 +2016-08-30 23:00:00,0.0046 +2016-08-31 00:00:00,0.0046 +2016-08-31 01:00:00,0.0045 +2016-08-31 02:00:00,0.0055 +2016-08-31 03:00:00,0.0151 +2016-08-31 04:00:00,0.054 +2016-08-31 05:00:00,0.1354 +2016-08-31 06:00:00,0.3789 +2016-08-31 07:00:00,0.4039 +2016-08-31 08:00:00,0.2647 +2016-08-31 09:00:00,0.0816 +2016-08-31 10:00:00,0.0614 +2016-08-31 11:00:00,0.0559 +2016-08-31 12:00:00,0.0535 +2016-08-31 13:00:00,0.0613 +2016-08-31 14:00:00,0.0567 +2016-08-31 15:00:00,0.0532 +2016-08-31 16:00:00,0.0536 +2016-08-31 17:00:00,0.0447 +2016-08-31 18:00:00,0.0354 +2016-08-31 19:00:00,0.0297 +2016-08-31 20:00:00,0.0223 +2016-08-31 21:00:00,0.0083 +2016-08-31 22:00:00,0.0063 +2016-08-31 23:00:00,0.005 +2016-09-01 00:00:00,0.0037 +2016-09-01 01:00:00,0.0047 +2016-09-01 02:00:00,0.0045 +2016-09-01 03:00:00,0.0105 +2016-09-01 04:00:00,0.0485 +2016-09-01 05:00:00,0.1187 +2016-09-01 06:00:00,0.3188 +2016-09-01 07:00:00,0.2297 +2016-09-01 08:00:00,0.0726 +2016-09-01 09:00:00,0.0644 +2016-09-01 10:00:00,0.0576 +2016-09-01 11:00:00,0.0597 +2016-09-01 12:00:00,0.0575 +2016-09-01 13:00:00,0.0573 +2016-09-01 14:00:00,0.0591 +2016-09-01 15:00:00,0.0554 +2016-09-01 16:00:00,0.0577 +2016-09-01 17:00:00,0.0475 +2016-09-01 18:00:00,0.0372 +2016-09-01 19:00:00,0.0304 +2016-09-01 20:00:00,0.0217 +2016-09-01 21:00:00,0.0113 +2016-09-01 22:00:00,0.0057 +2016-09-01 23:00:00,0.0052 +2016-09-02 00:00:00,0.0045 +2016-09-02 01:00:00,0.0048 +2016-09-02 02:00:00,0.0055 +2016-09-02 03:00:00,0.0112 +2016-09-02 04:00:00,0.041 +2016-09-02 05:00:00,0.065 +2016-09-02 06:00:00,0.065 +2016-09-02 07:00:00,0.0592 +2016-09-02 08:00:00,0.0569 +2016-09-02 09:00:00,0.0552 +2016-09-02 10:00:00,0.0613 +2016-09-02 11:00:00,0.0616 +2016-09-02 12:00:00,0.0605 +2016-09-02 13:00:00,0.0568 +2016-09-02 14:00:00,0.0625 +2016-09-02 15:00:00,0.0555 +2016-09-02 16:00:00,0.0538 +2016-09-02 17:00:00,0.0449 +2016-09-02 18:00:00,0.0381 +2016-09-02 19:00:00,0.0318 +2016-09-02 20:00:00,0.0253 +2016-09-02 21:00:00,0.0156 +2016-09-02 22:00:00,0.0081 +2016-09-02 23:00:00,0.0051 +2016-09-03 00:00:00,0.005 +2016-09-03 01:00:00,0.0046 +2016-09-03 02:00:00,0.0047 +2016-09-03 03:00:00,0.0053 +2016-09-03 04:00:00,0.0071 +2016-09-03 05:00:00,0.0182 +2016-09-03 06:00:00,0.0321 +2016-09-03 07:00:00,0.0389 +2016-09-03 08:00:00,0.0481 +2016-09-03 09:00:00,0.0567 +2016-09-03 10:00:00,0.0573 +2016-09-03 11:00:00,0.0599 +2016-09-03 12:00:00,0.0554 +2016-09-03 13:00:00,0.0533 +2016-09-03 14:00:00,0.0558 +2016-09-03 15:00:00,0.0574 +2016-09-03 16:00:00,0.0516 +2016-09-03 17:00:00,0.0532 +2016-09-03 18:00:00,0.0407 +2016-09-03 19:00:00,0.0382 +2016-09-03 20:00:00,0.0348 +2016-09-03 21:00:00,0.0254 +2016-09-03 22:00:00,0.012 +2016-09-03 23:00:00,0.0057 +2016-09-04 00:00:00,0.005 +2016-09-04 01:00:00,0.0048 +2016-09-04 02:00:00,0.0048 +2016-09-04 03:00:00,0.0055 +2016-09-04 04:00:00,0.0057 +2016-09-04 05:00:00,0.0066 +2016-09-04 06:00:00,0.0127 +2016-09-04 07:00:00,0.0294 +2016-09-04 08:00:00,0.0481 +2016-09-04 09:00:00,0.0565 +2016-09-04 10:00:00,0.0678 +2016-09-04 11:00:00,0.064 +2016-09-04 12:00:00,0.0586 +2016-09-04 13:00:00,0.0561 +2016-09-04 14:00:00,0.0539 +2016-09-04 15:00:00,0.0565 +2016-09-04 16:00:00,0.0548 +2016-09-04 17:00:00,0.05 +2016-09-04 18:00:00,0.0466 +2016-09-04 19:00:00,0.044 +2016-09-04 20:00:00,0.0383 +2016-09-04 21:00:00,0.0272 +2016-09-04 22:00:00,0.0077 +2016-09-04 23:00:00,0.0055 +2016-09-05 00:00:00,0.0052 +2016-09-05 01:00:00,0.0049 +2016-09-05 02:00:00,0.0048 +2016-09-05 03:00:00,0.0059 +2016-09-05 04:00:00,0.0072 +2016-09-05 05:00:00,0.0076 +2016-09-05 06:00:00,0.0135 +2016-09-05 07:00:00,0.0293 +2016-09-05 08:00:00,0.0456 +2016-09-05 09:00:00,0.0561 +2016-09-05 10:00:00,0.0624 +2016-09-05 11:00:00,0.0599 +2016-09-05 12:00:00,0.0601 +2016-09-05 13:00:00,0.0645 +2016-09-05 14:00:00,0.0628 +2016-09-05 15:00:00,0.0585 +2016-09-05 16:00:00,0.0568 +2016-09-05 17:00:00,0.0543 +2016-09-05 18:00:00,0.0457 +2016-09-05 19:00:00,0.0434 +2016-09-05 20:00:00,0.0299 +2016-09-05 21:00:00,0.0127 +2016-09-05 22:00:00,0.0055 +2016-09-05 23:00:00,0.0055 +2016-09-06 00:00:00,0.0046 +2016-09-06 01:00:00,0.0046 +2016-09-06 02:00:00,0.0053 +2016-09-06 03:00:00,0.0176 +2016-09-06 04:00:00,0.0561 +2016-09-06 05:00:00,0.1326 +2016-09-06 06:00:00,0.3681 +2016-09-06 07:00:00,0.4044 +2016-09-06 08:00:00,0.3811 +2016-09-06 09:00:00,0.1085 +2016-09-06 10:00:00,0.0659 +2016-09-06 11:00:00,0.0615 +2016-09-06 12:00:00,0.0611 +2016-09-06 13:00:00,0.0601 +2016-09-06 14:00:00,0.0597 +2016-09-06 15:00:00,0.0475 +2016-09-06 16:00:00,0.0457 +2016-09-06 17:00:00,0.0369 +2016-09-06 18:00:00,0.0274 +2016-09-06 19:00:00,0.0229 +2016-09-06 20:00:00,0.0153 +2016-09-06 21:00:00,0.0065 +2016-09-06 22:00:00,0.0048 +2016-09-06 23:00:00,0.0044 +2016-09-07 00:00:00,0.0038 +2016-09-07 01:00:00,0.0042 +2016-09-07 02:00:00,0.0048 +2016-09-07 03:00:00,0.0124 +2016-09-07 04:00:00,0.0399 +2016-09-07 05:00:00,0.1243 +2016-09-07 06:00:00,0.3591 +2016-09-07 07:00:00,0.4195 +2016-09-07 08:00:00,0.2591 +2016-09-07 09:00:00,0.0599 +2016-09-07 10:00:00,0.06 +2016-09-07 11:00:00,0.0574 +2016-09-07 12:00:00,0.0575 +2016-09-07 13:00:00,0.0607 +2016-09-07 14:00:00,0.0565 +2016-09-07 15:00:00,0.0552 +2016-09-07 16:00:00,0.0565 +2016-09-07 17:00:00,0.0433 +2016-09-07 18:00:00,0.0382 +2016-09-07 19:00:00,0.0293 +2016-09-07 20:00:00,0.0213 +2016-09-07 21:00:00,0.0056 +2016-09-07 22:00:00,0.0056 +2016-09-07 23:00:00,0.0046 +2016-09-08 00:00:00,0.0047 +2016-09-08 01:00:00,0.0044 +2016-09-08 02:00:00,0.0049 +2016-09-08 03:00:00,0.0116 +2016-09-08 04:00:00,0.0532 +2016-09-08 05:00:00,0.1287 +2016-09-08 06:00:00,0.3661 +2016-09-08 07:00:00,0.4053 +2016-09-08 08:00:00,0.1899 +2016-09-08 09:00:00,0.0639 +2016-09-08 10:00:00,0.0624 +2016-09-08 11:00:00,0.0594 +2016-09-08 12:00:00,0.06 +2016-09-08 13:00:00,0.0629 +2016-09-08 14:00:00,0.0599 +2016-09-08 15:00:00,0.0582 +2016-09-08 16:00:00,0.0576 +2016-09-08 17:00:00,0.0471 +2016-09-08 18:00:00,0.0379 +2016-09-08 19:00:00,0.0305 +2016-09-08 20:00:00,0.0222 +2016-09-08 21:00:00,0.0075 +2016-09-08 22:00:00,0.0055 +2016-09-08 23:00:00,0.0045 +2016-09-09 00:00:00,0.0045 +2016-09-09 01:00:00,0.0045 +2016-09-09 02:00:00,0.0051 +2016-09-09 03:00:00,0.0176 +2016-09-09 04:00:00,0.0452 +2016-09-09 05:00:00,0.0795 +2016-09-09 06:00:00,0.3149 +2016-09-09 07:00:00,0.1404 +2016-09-09 08:00:00,0.0616 +2016-09-09 09:00:00,0.063 +2016-09-09 10:00:00,0.0606 +2016-09-09 11:00:00,0.0595 +2016-09-09 12:00:00,0.062 +2016-09-09 13:00:00,0.064 +2016-09-09 14:00:00,0.0642 +2016-09-09 15:00:00,0.0635 +2016-09-09 16:00:00,0.0602 +2016-09-09 17:00:00,0.0435 +2016-09-09 18:00:00,0.0425 +2016-09-09 19:00:00,0.0319 +2016-09-09 20:00:00,0.0247 +2016-09-09 21:00:00,0.0122 +2016-09-09 22:00:00,0.0065 +2016-09-09 23:00:00,0.0041 +2016-09-10 00:00:00,0.0045 +2016-09-10 01:00:00,0.004 +2016-09-10 02:00:00,0.0029 +2016-09-10 03:00:00,0.004 +2016-09-10 04:00:00,0.0062 +2016-09-10 05:00:00,0.0248 +2016-09-10 06:00:00,0.0367 +2016-09-10 07:00:00,0.0414 +2016-09-10 08:00:00,0.0528 +2016-09-10 09:00:00,0.0595 +2016-09-10 10:00:00,0.0624 +2016-09-10 11:00:00,0.0657 +2016-09-10 12:00:00,0.0632 +2016-09-10 13:00:00,0.0605 +2016-09-10 14:00:00,0.0616 +2016-09-10 15:00:00,0.0623 +2016-09-10 16:00:00,0.06 +2016-09-10 17:00:00,0.0518 +2016-09-10 18:00:00,0.0443 +2016-09-10 19:00:00,0.0384 +2016-09-10 20:00:00,0.0331 +2016-09-10 21:00:00,0.0259 +2016-09-10 22:00:00,0.0115 +2016-09-10 23:00:00,0.0056 +2016-09-11 00:00:00,0.0047 +2016-09-11 01:00:00,0.0041 +2016-09-11 02:00:00,0.0042 +2016-09-11 03:00:00,0.0045 +2016-09-11 04:00:00,0.0052 +2016-09-11 05:00:00,0.0073 +2016-09-11 06:00:00,0.0171 +2016-09-11 07:00:00,0.0344 +2016-09-11 08:00:00,0.0483 +2016-09-11 09:00:00,0.0549 +2016-09-11 10:00:00,0.0651 +2016-09-11 11:00:00,0.0635 +2016-09-11 12:00:00,0.0657 +2016-09-11 13:00:00,0.0659 +2016-09-11 14:00:00,0.0631 +2016-09-11 15:00:00,0.0619 +2016-09-11 16:00:00,0.0657 +2016-09-11 17:00:00,0.0548 +2016-09-11 18:00:00,0.0434 +2016-09-11 19:00:00,0.0392 +2016-09-11 20:00:00,0.0307 +2016-09-11 21:00:00,0.0122 +2016-09-11 22:00:00,0.0052 +2016-09-11 23:00:00,0.0045 +2016-09-12 00:00:00,0.0039 +2016-09-12 01:00:00,0.0041 +2016-09-12 02:00:00,0.0051 +2016-09-12 03:00:00,0.0141 +2016-09-12 04:00:00,0.0445 +2016-09-12 05:00:00,0.1211 +2016-09-12 06:00:00,0.3478 +2016-09-12 07:00:00,0.3523 +2016-09-12 08:00:00,0.0576 +2016-09-12 09:00:00,0.0642 +2016-09-12 10:00:00,0.06 +2016-09-12 11:00:00,0.0557 +2016-09-12 12:00:00,0.0521 +2016-09-12 13:00:00,0.0565 +2016-09-12 14:00:00,0.0598 +2016-09-12 15:00:00,0.0561 +2016-09-12 16:00:00,0.0566 +2016-09-12 17:00:00,0.0435 +2016-09-12 18:00:00,0.0333 +2016-09-12 19:00:00,0.0237 +2016-09-12 20:00:00,0.0159 +2016-09-12 21:00:00,0.0064 +2016-09-12 22:00:00,0.0051 +2016-09-12 23:00:00,0.0043 +2016-09-13 00:00:00,0.004 +2016-09-13 01:00:00,0.0042 +2016-09-13 02:00:00,0.0053 +2016-09-13 03:00:00,0.0135 +2016-09-13 04:00:00,0.0525 +2016-09-13 05:00:00,0.1179 +2016-09-13 06:00:00,0.3465 +2016-09-13 07:00:00,0.3874 +2016-09-13 08:00:00,0.118 +2016-09-13 09:00:00,0.0605 +2016-09-13 10:00:00,0.0589 +2016-09-13 11:00:00,0.0564 +2016-09-13 12:00:00,0.0575 +2016-09-13 13:00:00,0.0584 +2016-09-13 14:00:00,0.0585 +2016-09-13 15:00:00,0.0618 +2016-09-13 16:00:00,0.0578 +2016-09-13 17:00:00,0.048 +2016-09-13 18:00:00,0.036 +2016-09-13 19:00:00,0.027 +2016-09-13 20:00:00,0.0193 +2016-09-13 21:00:00,0.0068 +2016-09-13 22:00:00,0.0056 +2016-09-13 23:00:00,0.0045 +2016-09-14 00:00:00,0.0043 +2016-09-14 01:00:00,0.0043 +2016-09-14 02:00:00,0.0051 +2016-09-14 03:00:00,0.0128 +2016-09-14 04:00:00,0.0533 +2016-09-14 05:00:00,0.1281 +2016-09-14 06:00:00,0.366 +2016-09-14 07:00:00,0.3915 +2016-09-14 08:00:00,0.1663 +2016-09-14 09:00:00,0.0653 +2016-09-14 10:00:00,0.0635 +2016-09-14 11:00:00,0.0595 +2016-09-14 12:00:00,0.0587 +2016-09-14 13:00:00,0.0604 +2016-09-14 14:00:00,0.0571 +2016-09-14 15:00:00,0.0578 +2016-09-14 16:00:00,0.057 +2016-09-14 17:00:00,0.0458 +2016-09-14 18:00:00,0.0378 +2016-09-14 19:00:00,0.0298 +2016-09-14 20:00:00,0.02 +2016-09-14 21:00:00,0.0083 +2016-09-14 22:00:00,0.0052 +2016-09-14 23:00:00,0.0044 +2016-09-15 00:00:00,0.0044 +2016-09-15 01:00:00,0.0043 +2016-09-15 02:00:00,0.0053 +2016-09-15 03:00:00,0.016 +2016-09-15 04:00:00,0.0525 +2016-09-15 05:00:00,0.118 +2016-09-15 06:00:00,0.3375 +2016-09-15 07:00:00,0.385 +2016-09-15 08:00:00,0.1946 +2016-09-15 09:00:00,0.0626 +2016-09-15 10:00:00,0.0619 +2016-09-15 11:00:00,0.0612 +2016-09-15 12:00:00,0.0627 +2016-09-15 13:00:00,0.0615 +2016-09-15 14:00:00,0.0633 +2016-09-15 15:00:00,0.0612 +2016-09-15 16:00:00,0.0606 +2016-09-15 17:00:00,0.0499 +2016-09-15 18:00:00,0.0395 +2016-09-15 19:00:00,0.031 +2016-09-15 20:00:00,0.0243 +2016-09-15 21:00:00,0.0132 +2016-09-15 22:00:00,0.0056 +2016-09-15 23:00:00,0.0049 +2016-09-16 00:00:00,0.0045 +2016-09-16 01:00:00,0.0045 +2016-09-16 02:00:00,0.0052 +2016-09-16 03:00:00,0.019 +2016-09-16 04:00:00,0.0469 +2016-09-16 05:00:00,0.0734 +2016-09-16 06:00:00,0.0705 +2016-09-16 07:00:00,0.0606 +2016-09-16 08:00:00,0.0604 +2016-09-16 09:00:00,0.0622 +2016-09-16 10:00:00,0.0646 +2016-09-16 11:00:00,0.0634 +2016-09-16 12:00:00,0.0618 +2016-09-16 13:00:00,0.0637 +2016-09-16 14:00:00,0.0664 +2016-09-16 15:00:00,0.0617 +2016-09-16 16:00:00,0.0599 +2016-09-16 17:00:00,0.0502 +2016-09-16 18:00:00,0.0407 +2016-09-16 19:00:00,0.0339 +2016-09-16 20:00:00,0.0256 +2016-09-16 21:00:00,0.0203 +2016-09-16 22:00:00,0.0092 +2016-09-16 23:00:00,0.0059 +2016-09-17 00:00:00,0.0047 +2016-09-17 01:00:00,0.0045 +2016-09-17 02:00:00,0.0045 +2016-09-17 03:00:00,0.0057 +2016-09-17 04:00:00,0.0073 +2016-09-17 05:00:00,0.0257 +2016-09-17 06:00:00,0.0359 +2016-09-17 07:00:00,0.0467 +2016-09-17 08:00:00,0.0541 +2016-09-17 09:00:00,0.0678 +2016-09-17 10:00:00,0.0674 +2016-09-17 11:00:00,0.0651 +2016-09-17 12:00:00,0.065 +2016-09-17 13:00:00,0.0633 +2016-09-17 14:00:00,0.0668 +2016-09-17 15:00:00,0.0672 +2016-09-17 16:00:00,0.064 +2016-09-17 17:00:00,0.0521 +2016-09-17 18:00:00,0.0417 +2016-09-17 19:00:00,0.0382 +2016-09-17 20:00:00,0.0328 +2016-09-17 21:00:00,0.0268 +2016-09-17 22:00:00,0.0116 +2016-09-17 23:00:00,0.0055 +2016-09-18 00:00:00,0.0047 +2016-09-18 01:00:00,0.0044 +2016-09-18 02:00:00,0.0042 +2016-09-18 03:00:00,0.0045 +2016-09-18 04:00:00,0.0055 +2016-09-18 05:00:00,0.0132 +2016-09-18 06:00:00,0.0161 +2016-09-18 07:00:00,0.0394 +2016-09-18 08:00:00,0.0525 +2016-09-18 09:00:00,0.0649 +2016-09-18 10:00:00,0.0677 +2016-09-18 11:00:00,0.0663 +2016-09-18 12:00:00,0.0657 +2016-09-18 13:00:00,0.0634 +2016-09-18 14:00:00,0.0643 +2016-09-18 15:00:00,0.0631 +2016-09-18 16:00:00,0.0603 +2016-09-18 17:00:00,0.0525 +2016-09-18 18:00:00,0.0468 +2016-09-18 19:00:00,0.0413 +2016-09-18 20:00:00,0.0308 +2016-09-18 21:00:00,0.0199 +2016-09-18 22:00:00,0.0049 +2016-09-18 23:00:00,0.0046 +2016-09-19 00:00:00,0.0043 +2016-09-19 01:00:00,0.0046 +2016-09-19 02:00:00,0.0052 +2016-09-19 03:00:00,0.0141 +2016-09-19 04:00:00,0.0535 +2016-09-19 05:00:00,0.1115 +2016-09-19 06:00:00,0.3236 +2016-09-19 07:00:00,0.3703 +2016-09-19 08:00:00,0.1876 +2016-09-19 09:00:00,0.062 +2016-09-19 10:00:00,0.0578 +2016-09-19 11:00:00,0.0625 +2016-09-19 12:00:00,0.058 +2016-09-19 13:00:00,0.0554 +2016-09-19 14:00:00,0.0582 +2016-09-19 15:00:00,0.0527 +2016-09-19 16:00:00,0.0544 +2016-09-19 17:00:00,0.0442 +2016-09-19 18:00:00,0.036 +2016-09-19 19:00:00,0.0275 +2016-09-19 20:00:00,0.0149 +2016-09-19 21:00:00,0.0065 +2016-09-19 22:00:00,0.0051 +2016-09-19 23:00:00,0.0045 +2016-09-20 00:00:00,0.0042 +2016-09-20 01:00:00,0.0045 +2016-09-20 02:00:00,0.0052 +2016-09-20 03:00:00,0.0157 +2016-09-20 04:00:00,0.0534 +2016-09-20 05:00:00,0.1453 +2016-09-20 06:00:00,0.3672 +2016-09-20 07:00:00,0.419 +2016-09-20 08:00:00,0.277 +2016-09-20 09:00:00,0.0651 +2016-09-20 10:00:00,0.0612 +2016-09-20 11:00:00,0.0592 +2016-09-20 12:00:00,0.0579 +2016-09-20 13:00:00,0.0593 +2016-09-20 14:00:00,0.0606 +2016-09-20 15:00:00,0.0549 +2016-09-20 16:00:00,0.0557 +2016-09-20 17:00:00,0.0466 +2016-09-20 18:00:00,0.0371 +2016-09-20 19:00:00,0.0259 +2016-09-20 20:00:00,0.0123 +2016-09-20 21:00:00,0.0067 +2016-09-20 22:00:00,0.0051 +2016-09-20 23:00:00,0.0045 +2016-09-21 00:00:00,0.0044 +2016-09-21 01:00:00,0.0042 +2016-09-21 02:00:00,0.005 +2016-09-21 03:00:00,0.0146 +2016-09-21 04:00:00,0.0541 +2016-09-21 05:00:00,0.1407 +2016-09-21 06:00:00,0.4015 +2016-09-21 07:00:00,0.417 +2016-09-21 08:00:00,0.206 +2016-09-21 09:00:00,0.0639 +2016-09-21 10:00:00,0.0609 +2016-09-21 11:00:00,0.0601 +2016-09-21 12:00:00,0.0551 +2016-09-21 13:00:00,0.0589 +2016-09-21 14:00:00,0.0587 +2016-09-21 15:00:00,0.0558 +2016-09-21 16:00:00,0.0571 +2016-09-21 17:00:00,0.0479 +2016-09-21 18:00:00,0.038 +2016-09-21 19:00:00,0.0281 +2016-09-21 20:00:00,0.0182 +2016-09-21 21:00:00,0.0067 +2016-09-21 22:00:00,0.0055 +2016-09-21 23:00:00,0.0049 +2016-09-22 00:00:00,0.0043 +2016-09-22 01:00:00,0.0045 +2016-09-22 02:00:00,0.0054 +2016-09-22 03:00:00,0.0132 +2016-09-22 04:00:00,0.0534 +2016-09-22 05:00:00,0.1242 +2016-09-22 06:00:00,0.3518 +2016-09-22 07:00:00,0.3854 +2016-09-22 08:00:00,0.1397 +2016-09-22 09:00:00,0.0626 +2016-09-22 10:00:00,0.0626 +2016-09-22 11:00:00,0.0594 +2016-09-22 12:00:00,0.0599 +2016-09-22 13:00:00,0.0604 +2016-09-22 14:00:00,0.0602 +2016-09-22 15:00:00,0.0591 +2016-09-22 16:00:00,0.0587 +2016-09-22 17:00:00,0.049 +2016-09-22 18:00:00,0.0435 +2016-09-22 19:00:00,0.0279 +2016-09-22 20:00:00,0.0233 +2016-09-22 21:00:00,0.0078 +2016-09-22 22:00:00,0.0052 +2016-09-22 23:00:00,0.0046 +2016-09-23 00:00:00,0.0043 +2016-09-23 01:00:00,0.0044 +2016-09-23 02:00:00,0.0051 +2016-09-23 03:00:00,0.0136 +2016-09-23 04:00:00,0.0479 +2016-09-23 05:00:00,0.0735 +2016-09-23 06:00:00,0.0717 +2016-09-23 07:00:00,0.0596 +2016-09-23 08:00:00,0.0596 +2016-09-23 09:00:00,0.0612 +2016-09-23 10:00:00,0.0608 +2016-09-23 11:00:00,0.0602 +2016-09-23 12:00:00,0.0633 +2016-09-23 13:00:00,0.0638 +2016-09-23 14:00:00,0.0636 +2016-09-23 15:00:00,0.061 +2016-09-23 16:00:00,0.0559 +2016-09-23 17:00:00,0.0479 +2016-09-23 18:00:00,0.0426 +2016-09-23 19:00:00,0.0327 +2016-09-23 20:00:00,0.0235 +2016-09-23 21:00:00,0.0141 +2016-09-23 22:00:00,0.0064 +2016-09-23 23:00:00,0.0051 +2016-09-24 00:00:00,0.0048 +2016-09-24 01:00:00,0.0047 +2016-09-24 02:00:00,0.0047 +2016-09-24 03:00:00,0.0054 +2016-09-24 04:00:00,0.0072 +2016-09-24 05:00:00,0.0189 +2016-09-24 06:00:00,0.0359 +2016-09-24 07:00:00,0.0479 +2016-09-24 08:00:00,0.0566 +2016-09-24 09:00:00,0.061 +2016-09-24 10:00:00,0.064 +2016-09-24 11:00:00,0.0608 +2016-09-24 12:00:00,0.0636 +2016-09-24 13:00:00,0.0635 +2016-09-24 14:00:00,0.0651 +2016-09-24 15:00:00,0.0621 +2016-09-24 16:00:00,0.0625 +2016-09-24 17:00:00,0.0566 +2016-09-24 18:00:00,0.0449 +2016-09-24 19:00:00,0.0385 +2016-09-24 20:00:00,0.0336 +2016-09-24 21:00:00,0.0298 +2016-09-24 22:00:00,0.014 +2016-09-24 23:00:00,0.0056 +2016-09-25 00:00:00,0.0049 +2016-09-25 01:00:00,0.0044 +2016-09-25 02:00:00,0.0044 +2016-09-25 03:00:00,0.0049 +2016-09-25 04:00:00,0.0055 +2016-09-25 05:00:00,0.0086 +2016-09-25 06:00:00,0.02 +2016-09-25 07:00:00,0.0345 +2016-09-25 08:00:00,0.049 +2016-09-25 09:00:00,0.0597 +2016-09-25 10:00:00,0.0677 +2016-09-25 11:00:00,0.0665 +2016-09-25 12:00:00,0.0639 +2016-09-25 13:00:00,0.0629 +2016-09-25 14:00:00,0.0667 +2016-09-25 15:00:00,0.0648 +2016-09-25 16:00:00,0.0603 +2016-09-25 17:00:00,0.0557 +2016-09-25 18:00:00,0.0418 +2016-09-25 19:00:00,0.0433 +2016-09-25 20:00:00,0.0338 +2016-09-25 21:00:00,0.0143 +2016-09-25 22:00:00,0.0061 +2016-09-25 23:00:00,0.005 +2016-09-26 00:00:00,0.0044 +2016-09-26 01:00:00,0.0046 +2016-09-26 02:00:00,0.0054 +2016-09-26 03:00:00,0.0152 +2016-09-26 04:00:00,0.0528 +2016-09-26 05:00:00,0.1309 +2016-09-26 06:00:00,0.3507 +2016-09-26 07:00:00,0.4154 +2016-09-26 08:00:00,0.4542 +2016-09-26 09:00:00,0.2224 +2016-09-26 10:00:00,0.0594 +2016-09-26 11:00:00,0.0544 +2016-09-26 12:00:00,0.0595 +2016-09-26 13:00:00,0.0572 +2016-09-26 14:00:00,0.0565 +2016-09-26 15:00:00,0.0548 +2016-09-26 16:00:00,0.0543 +2016-09-26 17:00:00,0.0399 +2016-09-26 18:00:00,0.0338 +2016-09-26 19:00:00,0.0264 +2016-09-26 20:00:00,0.0206 +2016-09-26 21:00:00,0.0073 +2016-09-26 22:00:00,0.0051 +2016-09-26 23:00:00,0.0044 +2016-09-27 00:00:00,0.0044 +2016-09-27 01:00:00,0.0045 +2016-09-27 02:00:00,0.005 +2016-09-27 03:00:00,0.0178 +2016-09-27 04:00:00,0.0546 +2016-09-27 05:00:00,0.1193 +2016-09-27 06:00:00,0.3764 +2016-09-27 07:00:00,0.4188 +2016-09-27 08:00:00,0.2401 +2016-09-27 09:00:00,0.0571 +2016-09-27 10:00:00,0.0536 +2016-09-27 11:00:00,0.055 +2016-09-27 12:00:00,0.0557 +2016-09-27 13:00:00,0.0577 +2016-09-27 14:00:00,0.0532 +2016-09-27 15:00:00,0.0526 +2016-09-27 16:00:00,0.0528 +2016-09-27 17:00:00,0.0449 +2016-09-27 18:00:00,0.0374 +2016-09-27 19:00:00,0.0281 +2016-09-27 20:00:00,0.0188 +2016-09-27 21:00:00,0.007 +2016-09-27 22:00:00,0.0053 +2016-09-27 23:00:00,0.0048 +2016-09-28 00:00:00,0.0044 +2016-09-28 01:00:00,0.0043 +2016-09-28 02:00:00,0.0054 +2016-09-28 03:00:00,0.0128 +2016-09-28 04:00:00,0.0535 +2016-09-28 05:00:00,0.1322 +2016-09-28 06:00:00,0.3693 +2016-09-28 07:00:00,0.4174 +2016-09-28 08:00:00,0.3197 +2016-09-28 09:00:00,0.0616 +2016-09-28 10:00:00,0.0592 +2016-09-28 11:00:00,0.0565 +2016-09-28 12:00:00,0.0586 +2016-09-28 13:00:00,0.1495 +2016-09-28 14:00:00,0.0771 +2016-09-28 15:00:00,0.0596 +2016-09-28 16:00:00,0.0607 +2016-09-28 17:00:00,0.0505 +2016-09-28 18:00:00,0.0363 +2016-09-28 19:00:00,0.0284 +2016-09-28 20:00:00,0.018 +2016-09-28 21:00:00,0.0074 +2016-09-28 22:00:00,0.0054 +2016-09-28 23:00:00,0.0044 +2016-09-29 00:00:00,0.0043 +2016-09-29 01:00:00,0.0044 +2016-09-29 02:00:00,0.0054 +2016-09-29 03:00:00,0.0163 +2016-09-29 04:00:00,0.0523 +2016-09-29 05:00:00,0.1439 +2016-09-29 06:00:00,0.3776 +2016-09-29 07:00:00,0.3971 +2016-09-29 08:00:00,0.1703 +2016-09-29 09:00:00,0.1007 +2016-09-29 10:00:00,0.0647 +2016-09-29 11:00:00,0.0607 +2016-09-29 12:00:00,0.0593 +2016-09-29 13:00:00,0.061 +2016-09-29 14:00:00,0.0608 +2016-09-29 15:00:00,0.0612 +2016-09-29 16:00:00,0.0596 +2016-09-29 17:00:00,0.0489 +2016-09-29 18:00:00,0.0407 +2016-09-29 19:00:00,0.0324 +2016-09-29 20:00:00,0.0202 +2016-09-29 21:00:00,0.0092 +2016-09-29 22:00:00,0.0034 +2016-09-29 23:00:00,0.0042 +2016-09-30 00:00:00,0.0044 +2016-09-30 01:00:00,0.0044 +2016-09-30 02:00:00,0.0056 +2016-09-30 03:00:00,0.0143 +2016-09-30 04:00:00,0.049 +2016-09-30 05:00:00,0.0801 +2016-09-30 06:00:00,0.0698 +2016-09-30 07:00:00,0.0593 +2016-09-30 08:00:00,0.0579 +2016-09-30 09:00:00,0.0641 +2016-09-30 10:00:00,0.0647 +2016-09-30 11:00:00,0.0637 +2016-09-30 12:00:00,0.0624 +2016-09-30 13:00:00,0.0654 +2016-09-30 14:00:00,0.0622 +2016-09-30 15:00:00,0.0604 +2016-09-30 16:00:00,0.057 +2016-09-30 17:00:00,0.0487 +2016-09-30 18:00:00,0.0382 +2016-09-30 19:00:00,0.0289 +2016-09-30 20:00:00,0.0236 +2016-09-30 21:00:00,0.0137 +2016-09-30 22:00:00,0.0064 +2016-09-30 23:00:00,0.0054 +2016-10-01 00:00:00,0.0046 +2016-10-01 01:00:00,0.0044 +2016-10-01 02:00:00,0.0042 +2016-10-01 03:00:00,0.0048 +2016-10-01 04:00:00,0.0051 +2016-10-01 05:00:00,0.0197 +2016-10-01 06:00:00,0.0314 +2016-10-01 07:00:00,0.0472 +2016-10-01 08:00:00,0.0543 +2016-10-01 09:00:00,0.065 +2016-10-01 10:00:00,0.0654 +2016-10-01 11:00:00,0.0607 +2016-10-01 12:00:00,0.0611 +2016-10-01 13:00:00,0.0614 +2016-10-01 14:00:00,0.0633 +2016-10-01 15:00:00,0.066 +2016-10-01 16:00:00,0.0618 +2016-10-01 17:00:00,0.056 +2016-10-01 18:00:00,0.0438 +2016-10-01 19:00:00,0.0359 +2016-10-01 20:00:00,0.0287 +2016-10-01 21:00:00,0.0227 +2016-10-01 22:00:00,0.0097 +2016-10-01 23:00:00,0.0059 +2016-10-02 00:00:00,0.0051 +2016-10-02 01:00:00,0.0046 +2016-10-02 02:00:00,0.0046 +2016-10-02 03:00:00,0.0051 +2016-10-02 04:00:00,0.0072 +2016-10-02 05:00:00,0.0076 +2016-10-02 06:00:00,0.0181 +2016-10-02 07:00:00,0.037 +2016-10-02 08:00:00,0.054 +2016-10-02 09:00:00,0.0578 +2016-10-02 10:00:00,0.0654 +2016-10-02 11:00:00,0.0641 +2016-10-02 12:00:00,0.0635 +2016-10-02 13:00:00,0.06 +2016-10-02 14:00:00,0.0656 +2016-10-02 15:00:00,0.0568 +2016-10-02 16:00:00,0.0647 +2016-10-02 17:00:00,0.0515 +2016-10-02 18:00:00,0.0457 +2016-10-02 19:00:00,0.036 +2016-10-02 20:00:00,0.0287 +2016-10-02 21:00:00,0.0123 +2016-10-02 22:00:00,0.004 +2016-10-02 23:00:00,0.0051 +2016-10-03 00:00:00,0.0045 +2016-10-03 01:00:00,0.0047 +2016-10-03 02:00:00,0.006 +2016-10-03 03:00:00,0.019 +2016-10-03 04:00:00,0.0535 +2016-10-03 05:00:00,0.1522 +2016-10-03 06:00:00,0.3349 +2016-10-03 07:00:00,0.1974 +2016-10-03 08:00:00,0.0651 +2016-10-03 09:00:00,0.0607 +2016-10-03 10:00:00,0.062 +2016-10-03 11:00:00,0.0576 +2016-10-03 12:00:00,0.0546 +2016-10-03 13:00:00,0.0577 +2016-10-03 14:00:00,0.0567 +2016-10-03 15:00:00,0.0525 +2016-10-03 16:00:00,0.0542 +2016-10-03 17:00:00,0.0453 +2016-10-03 18:00:00,0.0302 +2016-10-03 19:00:00,0.003 +2016-10-03 20:00:00,0.003 +2016-10-03 21:00:00,0.003 +2016-10-03 22:00:00,0.003 +2016-10-03 23:00:00,0.0032 +2016-10-04 00:00:00,0.0031 +2016-10-04 01:00:00,0.0032 +2016-10-04 02:00:00,0.0033 +2016-10-04 03:00:00,0.0056 +2016-10-04 04:00:00,0.0063 +2016-10-04 05:00:00,0.0574 +2016-10-04 06:00:00,0.37 +2016-10-04 07:00:00,0.4186 +2016-10-04 08:00:00,0.1468 +2016-10-04 09:00:00,0.06 +2016-10-04 10:00:00,0.0617 +2016-10-04 11:00:00,0.0584 +2016-10-04 12:00:00,0.0601 +2016-10-04 13:00:00,0.0575 +2016-10-04 14:00:00,0.06 +2016-10-04 15:00:00,0.0551 +2016-10-04 16:00:00,0.0554 +2016-10-04 17:00:00,0.0437 +2016-10-04 18:00:00,0.0352 +2016-10-04 19:00:00,0.0255 +2016-10-04 20:00:00,0.0205 +2016-10-04 21:00:00,0.0077 +2016-10-04 22:00:00,0.005 +2016-10-04 23:00:00,0.0045 +2016-10-05 00:00:00,0.0043 +2016-10-05 01:00:00,0.0041 +2016-10-05 02:00:00,0.0053 +2016-10-05 03:00:00,0.0139 +2016-10-05 04:00:00,0.056 +2016-10-05 05:00:00,0.1622 +2016-10-05 06:00:00,0.3693 +2016-10-05 07:00:00,0.4074 +2016-10-05 08:00:00,0.1293 +2016-10-05 09:00:00,0.0624 +2016-10-05 10:00:00,0.0592 +2016-10-05 11:00:00,0.0593 +2016-10-05 12:00:00,0.0587 +2016-10-05 13:00:00,0.0593 +2016-10-05 14:00:00,0.0564 +2016-10-05 15:00:00,0.0567 +2016-10-05 16:00:00,0.0569 +2016-10-05 17:00:00,0.047 +2016-10-05 18:00:00,0.0352 +2016-10-05 19:00:00,0.0296 +2016-10-05 20:00:00,0.0207 +2016-10-05 21:00:00,0.007 +2016-10-05 22:00:00,0.005 +2016-10-05 23:00:00,0.0045 +2016-10-06 00:00:00,0.0042 +2016-10-06 01:00:00,0.0043 +2016-10-06 02:00:00,0.0053 +2016-10-06 03:00:00,0.0159 +2016-10-06 04:00:00,0.0534 +2016-10-06 05:00:00,0.1627 +2016-10-06 06:00:00,0.3679 +2016-10-06 07:00:00,0.4164 +2016-10-06 08:00:00,0.2462 +2016-10-06 09:00:00,0.0628 +2016-10-06 10:00:00,0.0616 +2016-10-06 11:00:00,0.0646 +2016-10-06 12:00:00,0.0624 +2016-10-06 13:00:00,0.0627 +2016-10-06 14:00:00,0.0601 +2016-10-06 15:00:00,0.0596 +2016-10-06 16:00:00,0.0586 +2016-10-06 17:00:00,0.0479 +2016-10-06 18:00:00,0.0438 +2016-10-06 19:00:00,0.0296 +2016-10-06 20:00:00,0.0218 +2016-10-06 21:00:00,0.0082 +2016-10-06 22:00:00,0.0053 +2016-10-06 23:00:00,0.0047 +2016-10-07 00:00:00,0.0045 +2016-10-07 01:00:00,0.0044 +2016-10-07 02:00:00,0.0051 +2016-10-07 03:00:00,0.0158 +2016-10-07 04:00:00,0.0486 +2016-10-07 05:00:00,0.0752 +2016-10-07 06:00:00,0.0726 +2016-10-07 07:00:00,0.0574 +2016-10-07 08:00:00,0.0619 +2016-10-07 09:00:00,0.0634 +2016-10-07 10:00:00,0.0661 +2016-10-07 11:00:00,0.0614 +2016-10-07 12:00:00,0.0612 +2016-10-07 13:00:00,0.0618 +2016-10-07 14:00:00,0.063 +2016-10-07 15:00:00,0.0617 +2016-10-07 16:00:00,0.0588 +2016-10-07 17:00:00,0.0512 +2016-10-07 18:00:00,0.0415 +2016-10-07 19:00:00,0.0327 +2016-10-07 20:00:00,0.0264 +2016-10-07 21:00:00,0.013 +2016-10-07 22:00:00,0.0067 +2016-10-07 23:00:00,0.0052 +2016-10-08 00:00:00,0.0046 +2016-10-08 01:00:00,0.0043 +2016-10-08 02:00:00,0.0045 +2016-10-08 03:00:00,0.006 +2016-10-08 04:00:00,0.0075 +2016-10-08 05:00:00,0.0253 +2016-10-08 06:00:00,0.0361 +2016-10-08 07:00:00,0.049 +2016-10-08 08:00:00,0.0595 +2016-10-08 09:00:00,0.0631 +2016-10-08 10:00:00,0.0656 +2016-10-08 11:00:00,0.0636 +2016-10-08 12:00:00,0.0591 +2016-10-08 13:00:00,0.0599 +2016-10-08 14:00:00,0.0598 +2016-10-08 15:00:00,0.0638 +2016-10-08 16:00:00,0.0579 +2016-10-08 17:00:00,0.0522 +2016-10-08 18:00:00,0.0411 +2016-10-08 19:00:00,0.0381 +2016-10-08 20:00:00,0.0329 +2016-10-08 21:00:00,0.0282 +2016-10-08 22:00:00,0.009 +2016-10-08 23:00:00,0.0069 +2016-10-09 00:00:00,0.0048 +2016-10-09 01:00:00,0.0043 +2016-10-09 02:00:00,0.0047 +2016-10-09 03:00:00,0.0045 +2016-10-09 04:00:00,0.0055 +2016-10-09 05:00:00,0.0116 +2016-10-09 06:00:00,0.0245 +2016-10-09 07:00:00,0.0366 +2016-10-09 08:00:00,0.0538 +2016-10-09 09:00:00,0.0527 +2016-10-09 10:00:00,0.0575 +2016-10-09 11:00:00,0.0657 +2016-10-09 12:00:00,0.0648 +2016-10-09 13:00:00,0.072 +2016-10-09 14:00:00,0.0639 +2016-10-09 15:00:00,0.0646 +2016-10-09 16:00:00,0.0589 +2016-10-09 17:00:00,0.0476 +2016-10-09 18:00:00,0.0407 +2016-10-09 19:00:00,0.0364 +2016-10-09 20:00:00,0.0295 +2016-10-09 21:00:00,0.0154 +2016-10-09 22:00:00,0.0049 +2016-10-09 23:00:00,0.0051 +2016-10-10 00:00:00,0.0044 +2016-10-10 01:00:00,0.0044 +2016-10-10 02:00:00,0.0052 +2016-10-10 03:00:00,0.0148 +2016-10-10 04:00:00,0.0529 +2016-10-10 05:00:00,0.085 +2016-10-10 06:00:00,0.1949 +2016-10-10 07:00:00,0.0541 +2016-10-10 08:00:00,0.0563 +2016-10-10 09:00:00,0.0637 +2016-10-10 10:00:00,0.0576 +2016-10-10 11:00:00,0.0632 +2016-10-10 12:00:00,0.0603 +2016-10-10 13:00:00,0.0634 +2016-10-10 14:00:00,0.0683 +2016-10-10 15:00:00,0.0622 +2016-10-10 16:00:00,0.0592 +2016-10-10 17:00:00,0.0488 +2016-10-10 18:00:00,0.036 +2016-10-10 19:00:00,0.0269 +2016-10-10 20:00:00,0.0147 +2016-10-10 21:00:00,0.0065 +2016-10-10 22:00:00,0.005 +2016-10-10 23:00:00,0.0046 +2016-10-11 00:00:00,0.0046 +2016-10-11 01:00:00,0.0045 +2016-10-11 02:00:00,0.0052 +2016-10-11 03:00:00,0.0131 +2016-10-11 04:00:00,0.0559 +2016-10-11 05:00:00,0.1519 +2016-10-11 06:00:00,0.3741 +2016-10-11 07:00:00,0.3842 +2016-10-11 08:00:00,0.1246 +2016-10-11 09:00:00,0.0617 +2016-10-11 10:00:00,0.0596 +2016-10-11 11:00:00,0.0595 +2016-10-11 12:00:00,0.0607 +2016-10-11 13:00:00,0.0625 +2016-10-11 14:00:00,0.062 +2016-10-11 15:00:00,0.057 +2016-10-11 16:00:00,0.0562 +2016-10-11 17:00:00,0.044 +2016-10-11 18:00:00,0.0358 +2016-10-11 19:00:00,0.0253 +2016-10-11 20:00:00,0.0164 +2016-10-11 21:00:00,0.007 +2016-10-11 22:00:00,0.0051 +2016-10-11 23:00:00,0.0044 +2016-10-12 00:00:00,0.0042 +2016-10-12 01:00:00,0.0045 +2016-10-12 02:00:00,0.0053 +2016-10-12 03:00:00,0.0154 +2016-10-12 04:00:00,0.0544 +2016-10-12 05:00:00,0.085 +2016-10-12 06:00:00,0.3063 +2016-10-12 07:00:00,0.2507 +2016-10-12 08:00:00,0.058 +2016-10-12 09:00:00,0.0643 +2016-10-12 10:00:00,0.0595 +2016-10-12 11:00:00,0.0599 +2016-10-12 12:00:00,0.0585 +2016-10-12 13:00:00,0.0626 +2016-10-12 14:00:00,0.061 +2016-10-12 15:00:00,0.0576 +2016-10-12 16:00:00,0.0554 +2016-10-12 17:00:00,0.0475 +2016-10-12 18:00:00,0.0382 +2016-10-12 19:00:00,0.0296 +2016-10-12 20:00:00,0.0218 +2016-10-12 21:00:00,0.0089 +2016-10-12 22:00:00,0.0051 +2016-10-12 23:00:00,0.0045 +2016-10-13 00:00:00,0.0046 +2016-10-13 01:00:00,0.0043 +2016-10-13 02:00:00,0.0053 +2016-10-13 03:00:00,0.0162 +2016-10-13 04:00:00,0.0542 +2016-10-13 05:00:00,0.1324 +2016-10-13 06:00:00,0.3746 +2016-10-13 07:00:00,0.3884 +2016-10-13 08:00:00,0.2515 +2016-10-13 09:00:00,0.1607 +2016-10-13 10:00:00,0.0606 +2016-10-13 11:00:00,0.0646 +2016-10-13 12:00:00,0.0618 +2016-10-13 13:00:00,0.0618 +2016-10-13 14:00:00,0.0628 +2016-10-13 15:00:00,0.0585 +2016-10-13 16:00:00,0.0573 +2016-10-13 17:00:00,0.0508 +2016-10-13 18:00:00,0.0408 +2016-10-13 19:00:00,0.0286 +2016-10-13 20:00:00,0.0199 +2016-10-13 21:00:00,0.0079 +2016-10-13 22:00:00,0.0054 +2016-10-13 23:00:00,0.0046 +2016-10-14 00:00:00,0.0043 +2016-10-14 01:00:00,0.0046 +2016-10-14 02:00:00,0.0057 +2016-10-14 03:00:00,0.0122 +2016-10-14 04:00:00,0.0495 +2016-10-14 05:00:00,0.0742 +2016-10-14 06:00:00,0.1375 +2016-10-14 07:00:00,0.2398 +2016-10-14 08:00:00,0.3739 +2016-10-14 09:00:00,0.4518 +2016-10-14 10:00:00,0.1779 +2016-10-14 11:00:00,0.0496 +2016-10-14 12:00:00,0.0561 +2016-10-14 13:00:00,0.0589 +2016-10-14 14:00:00,0.0574 +2016-10-14 15:00:00,0.0545 +2016-10-14 16:00:00,0.0548 +2016-10-14 17:00:00,0.048 +2016-10-14 18:00:00,0.0397 +2016-10-14 19:00:00,0.0287 +2016-10-14 20:00:00,0.0213 +2016-10-14 21:00:00,0.0137 +2016-10-14 22:00:00,0.0063 +2016-10-14 23:00:00,0.0052 +2016-10-15 00:00:00,0.0047 +2016-10-15 01:00:00,0.0043 +2016-10-15 02:00:00,0.0045 +2016-10-15 03:00:00,0.0057 +2016-10-15 04:00:00,0.0069 +2016-10-15 05:00:00,0.0239 +2016-10-15 06:00:00,0.0326 +2016-10-15 07:00:00,0.0441 +2016-10-15 08:00:00,0.0557 +2016-10-15 09:00:00,0.0637 +2016-10-15 10:00:00,0.064 +2016-10-15 11:00:00,0.0612 +2016-10-15 12:00:00,0.0627 +2016-10-15 13:00:00,0.0629 +2016-10-15 14:00:00,0.06 +2016-10-15 15:00:00,0.0636 +2016-10-15 16:00:00,0.0641 +2016-10-15 17:00:00,0.0493 +2016-10-15 18:00:00,0.0352 +2016-10-15 19:00:00,0.0308 +2016-10-15 20:00:00,0.0271 +2016-10-15 21:00:00,0.0218 +2016-10-15 22:00:00,0.011 +2016-10-15 23:00:00,0.0055 +2016-10-16 00:00:00,0.0048 +2016-10-16 01:00:00,0.0046 +2016-10-16 02:00:00,0.0041 +2016-10-16 03:00:00,0.0047 +2016-10-16 04:00:00,0.006 +2016-10-16 05:00:00,0.0106 +2016-10-16 06:00:00,0.0151 +2016-10-16 07:00:00,0.031 +2016-10-16 08:00:00,0.0453 +2016-10-16 09:00:00,0.0548 +2016-10-16 10:00:00,0.0636 +2016-10-16 11:00:00,0.0626 +2016-10-16 12:00:00,0.0631 +2016-10-16 13:00:00,0.0649 +2016-10-16 14:00:00,0.0667 +2016-10-16 15:00:00,0.0617 +2016-10-16 16:00:00,0.0567 +2016-10-16 17:00:00,0.0456 +2016-10-16 18:00:00,0.0395 +2016-10-16 19:00:00,0.0289 +2016-10-16 20:00:00,0.0231 +2016-10-16 21:00:00,0.0121 +2016-10-16 22:00:00,0.0043 +2016-10-16 23:00:00,0.0044 +2016-10-17 00:00:00,0.0042 +2016-10-17 01:00:00,0.0046 +2016-10-17 02:00:00,0.0054 +2016-10-17 03:00:00,0.0162 +2016-10-17 04:00:00,0.0536 +2016-10-17 05:00:00,0.1401 +2016-10-17 06:00:00,0.376 +2016-10-17 07:00:00,0.3268 +2016-10-17 08:00:00,0.0799 +2016-10-17 09:00:00,0.0619 +2016-10-17 10:00:00,0.0593 +2016-10-17 11:00:00,0.0595 +2016-10-17 12:00:00,0.0559 +2016-10-17 13:00:00,0.059 +2016-10-17 14:00:00,0.0546 +2016-10-17 15:00:00,0.0541 +2016-10-17 16:00:00,0.0527 +2016-10-17 17:00:00,0.044 +2016-10-17 18:00:00,0.0341 +2016-10-17 19:00:00,0.0242 +2016-10-17 20:00:00,0.0173 +2016-10-17 21:00:00,0.0065 +2016-10-17 22:00:00,0.005 +2016-10-17 23:00:00,0.0044 +2016-10-18 00:00:00,0.0043 +2016-10-18 01:00:00,0.0045 +2016-10-18 02:00:00,0.0059 +2016-10-18 03:00:00,0.0174 +2016-10-18 04:00:00,0.0588 +2016-10-18 05:00:00,0.2928 +2016-10-18 06:00:00,0.4078 +2016-10-18 07:00:00,0.434 +2016-10-18 08:00:00,0.3792 +2016-10-18 09:00:00,0.2082 +2016-10-18 10:00:00,0.0595 +2016-10-18 11:00:00,0.058 +2016-10-18 12:00:00,0.0585 +2016-10-18 13:00:00,0.0565 +2016-10-18 14:00:00,0.0571 +2016-10-18 15:00:00,0.0552 +2016-10-18 16:00:00,0.0544 +2016-10-18 17:00:00,0.0435 +2016-10-18 18:00:00,0.0334 +2016-10-18 19:00:00,0.0259 +2016-10-18 20:00:00,0.0154 +2016-10-18 21:00:00,0.0062 +2016-10-18 22:00:00,0.0051 +2016-10-18 23:00:00,0.0044 +2016-10-19 00:00:00,0.0041 +2016-10-19 01:00:00,0.0041 +2016-10-19 02:00:00,0.0051 +2016-10-19 03:00:00,0.0151 +2016-10-19 04:00:00,0.0561 +2016-10-19 05:00:00,0.1537 +2016-10-19 06:00:00,0.3815 +2016-10-19 07:00:00,0.3594 +2016-10-19 08:00:00,0.1124 +2016-10-19 09:00:00,0.0517 +2016-10-19 10:00:00,0.0584 +2016-10-19 11:00:00,0.0574 +2016-10-19 12:00:00,0.0548 +2016-10-19 13:00:00,0.0626 +2016-10-19 14:00:00,0.0593 +2016-10-19 15:00:00,0.0583 +2016-10-19 16:00:00,0.0568 +2016-10-19 17:00:00,0.0453 +2016-10-19 18:00:00,0.0353 +2016-10-19 19:00:00,0.0299 +2016-10-19 20:00:00,0.0218 +2016-10-19 21:00:00,0.0075 +2016-10-19 22:00:00,0.005 +2016-10-19 23:00:00,0.0046 +2016-10-20 00:00:00,0.0043 +2016-10-20 01:00:00,0.0046 +2016-10-20 02:00:00,0.005 +2016-10-20 03:00:00,0.0139 +2016-10-20 04:00:00,0.049 +2016-10-20 05:00:00,0.103 +2016-10-20 06:00:00,0.3063 +2016-10-20 07:00:00,0.2978 +2016-10-20 08:00:00,0.0824 +2016-10-20 09:00:00,0.055 +2016-10-20 10:00:00,0.0528 +2016-10-20 11:00:00,0.0545 +2016-10-20 12:00:00,0.0505 +2016-10-20 13:00:00,0.0485 +2016-10-20 14:00:00,0.0537 +2016-10-20 15:00:00,0.0509 +2016-10-20 16:00:00,0.0478 +2016-10-20 17:00:00,0.0391 +2016-10-20 18:00:00,0.0322 +2016-10-20 19:00:00,0.023 +2016-10-20 20:00:00,0.0181 +2016-10-20 21:00:00,0.0087 +2016-10-20 22:00:00,0.0049 +2016-10-20 23:00:00,0.004 +2016-10-21 00:00:00,0.0035 +2016-10-21 01:00:00,0.0044 +2016-10-21 02:00:00,0.0049 +2016-10-21 03:00:00,0.0137 +2016-10-21 04:00:00,0.0412 +2016-10-21 05:00:00,0.0642 +2016-10-21 06:00:00,0.0518 +2016-10-21 07:00:00,0.0482 +2016-10-21 08:00:00,0.0559 +2016-10-21 09:00:00,0.063 +2016-10-21 10:00:00,0.0683 +2016-10-21 11:00:00,0.064 +2016-10-21 12:00:00,0.0617 +2016-10-21 13:00:00,0.0666 +2016-10-21 14:00:00,0.0624 +2016-10-21 15:00:00,0.0609 +2016-10-21 16:00:00,0.0573 +2016-10-21 17:00:00,0.0524 +2016-10-21 18:00:00,0.0407 +2016-10-21 19:00:00,0.0311 +2016-10-21 20:00:00,0.0247 +2016-10-21 21:00:00,0.0168 +2016-10-21 22:00:00,0.0069 +2016-10-21 23:00:00,0.0054 +2016-10-22 00:00:00,0.0049 +2016-10-22 01:00:00,0.0044 +2016-10-22 02:00:00,0.0044 +2016-10-22 03:00:00,0.0053 +2016-10-22 04:00:00,0.0094 +2016-10-22 05:00:00,0.0267 +2016-10-22 06:00:00,0.0383 +2016-10-22 07:00:00,0.0491 +2016-10-22 08:00:00,0.0568 +2016-10-22 09:00:00,0.0611 +2016-10-22 10:00:00,0.0659 +2016-10-22 11:00:00,0.0677 +2016-10-22 12:00:00,0.0545 +2016-10-22 13:00:00,0.0532 +2016-10-22 14:00:00,0.0642 +2016-10-22 15:00:00,0.0647 +2016-10-22 16:00:00,0.0613 +2016-10-22 17:00:00,0.0556 +2016-10-22 18:00:00,0.0497 +2016-10-22 19:00:00,0.0365 +2016-10-22 20:00:00,0.0313 +2016-10-22 21:00:00,0.0273 +2016-10-22 22:00:00,0.0178 +2016-10-22 23:00:00,0.0064 +2016-10-23 00:00:00,0.0052 +2016-10-23 01:00:00,0.0048 +2016-10-23 02:00:00,0.0043 +2016-10-23 03:00:00,0.0048 +2016-10-23 04:00:00,0.0053 +2016-10-23 05:00:00,0.0067 +2016-10-23 06:00:00,0.0212 +2016-10-23 07:00:00,0.0346 +2016-10-23 08:00:00,0.0476 +2016-10-23 09:00:00,0.0531 +2016-10-23 10:00:00,0.0634 +2016-10-23 11:00:00,0.0633 +2016-10-23 12:00:00,0.0667 +2016-10-23 13:00:00,0.065 +2016-10-23 14:00:00,0.0642 +2016-10-23 15:00:00,0.0635 +2016-10-23 16:00:00,0.0636 +2016-10-23 17:00:00,0.0553 +2016-10-23 18:00:00,0.0539 +2016-10-23 19:00:00,0.0423 +2016-10-23 20:00:00,0.027 +2016-10-23 21:00:00,0.0096 +2016-10-23 22:00:00,0.0055 +2016-10-23 23:00:00,0.0044 +2016-10-24 00:00:00,0.0045 +2016-10-24 01:00:00,0.0045 +2016-10-24 02:00:00,0.0055 +2016-10-24 03:00:00,0.017 +2016-10-24 04:00:00,0.053 +2016-10-24 05:00:00,0.1326 +2016-10-24 06:00:00,0.3643 +2016-10-24 07:00:00,0.3434 +2016-10-24 08:00:00,0.0605 +2016-10-24 09:00:00,0.0616 +2016-10-24 10:00:00,0.0596 +2016-10-24 11:00:00,0.0585 +2016-10-24 12:00:00,0.0573 +2016-10-24 13:00:00,0.0543 +2016-10-24 14:00:00,0.057 +2016-10-24 15:00:00,0.0539 +2016-10-24 16:00:00,0.0534 +2016-10-24 17:00:00,0.0455 +2016-10-24 18:00:00,0.0343 +2016-10-24 19:00:00,0.0243 +2016-10-24 20:00:00,0.0097 +2016-10-24 21:00:00,0.0061 +2016-10-24 22:00:00,0.0053 +2016-10-24 23:00:00,0.0046 +2016-10-25 00:00:00,0.0042 +2016-10-25 01:00:00,0.0045 +2016-10-25 02:00:00,0.0053 +2016-10-25 03:00:00,0.0158 +2016-10-25 04:00:00,0.0588 +2016-10-25 05:00:00,0.1725 +2016-10-25 06:00:00,0.408 +2016-10-25 07:00:00,0.4058 +2016-10-25 08:00:00,0.3509 +2016-10-25 09:00:00,0.3266 +2016-10-25 10:00:00,0.0709 +2016-10-25 11:00:00,0.0574 +2016-10-25 12:00:00,0.057 +2016-10-25 13:00:00,0.0542 +2016-10-25 14:00:00,0.0538 +2016-10-25 15:00:00,0.0516 +2016-10-25 16:00:00,0.055 +2016-10-25 17:00:00,0.0443 +2016-10-25 18:00:00,0.0329 +2016-10-25 19:00:00,0.0234 +2016-10-25 20:00:00,0.0146 +2016-10-25 21:00:00,0.0065 +2016-10-25 22:00:00,0.0052 +2016-10-25 23:00:00,0.0033 +2016-10-26 00:00:00,0.004 +2016-10-26 01:00:00,0.0045 +2016-10-26 02:00:00,0.0053 +2016-10-26 03:00:00,0.0163 +2016-10-26 04:00:00,0.0559 +2016-10-26 05:00:00,0.1567 +2016-10-26 06:00:00,0.4086 +2016-10-26 07:00:00,0.3851 +2016-10-26 08:00:00,0.132 +2016-10-26 09:00:00,0.0636 +2016-10-26 10:00:00,0.0606 +2016-10-26 11:00:00,0.0611 +2016-10-26 12:00:00,0.059 +2016-10-26 13:00:00,0.0602 +2016-10-26 14:00:00,0.0553 +2016-10-26 15:00:00,0.0599 +2016-10-26 16:00:00,0.0577 +2016-10-26 17:00:00,0.0487 +2016-10-26 18:00:00,0.0369 +2016-10-26 19:00:00,0.0274 +2016-10-26 20:00:00,0.0214 +2016-10-26 21:00:00,0.008 +2016-10-26 22:00:00,0.005 +2016-10-26 23:00:00,0.0046 +2016-10-27 00:00:00,0.0046 +2016-10-27 01:00:00,0.0045 +2016-10-27 02:00:00,0.0052 +2016-10-27 03:00:00,0.0144 +2016-10-27 04:00:00,0.0581 +2016-10-27 05:00:00,0.1449 +2016-10-27 06:00:00,0.3754 +2016-10-27 07:00:00,0.2622 +2016-10-27 08:00:00,0.0573 +2016-10-27 09:00:00,0.0592 +2016-10-27 10:00:00,0.0583 +2016-10-27 11:00:00,0.059 +2016-10-27 12:00:00,0.0578 +2016-10-27 13:00:00,0.0607 +2016-10-27 14:00:00,0.059 +2016-10-27 15:00:00,0.0601 +2016-10-27 16:00:00,0.059 +2016-10-27 17:00:00,0.0481 +2016-10-27 18:00:00,0.0436 +2016-10-27 19:00:00,0.029 +2016-10-27 20:00:00,0.0172 +2016-10-27 21:00:00,0.0082 +2016-10-27 22:00:00,0.0053 +2016-10-27 23:00:00,0.0048 +2016-10-28 00:00:00,0.004 +2016-10-28 01:00:00,0.0039 +2016-10-28 02:00:00,0.0051 +2016-10-28 03:00:00,0.0135 +2016-10-28 04:00:00,0.0499 +2016-10-28 05:00:00,0.0806 +2016-10-28 06:00:00,0.2094 +2016-10-28 07:00:00,0.0647 +2016-10-28 08:00:00,0.0551 +2016-10-28 09:00:00,0.0568 +2016-10-28 10:00:00,0.0568 +2016-10-28 11:00:00,0.0575 +2016-10-28 12:00:00,0.0531 +2016-10-28 13:00:00,0.0493 +2016-10-28 14:00:00,0.0177 +2016-10-28 15:00:00,0.0152 +2016-10-28 16:00:00,0.0142 +2016-10-28 17:00:00,0.0142 +2016-10-28 18:00:00,0.012 +2016-10-28 19:00:00,0.0113 +2016-10-28 20:00:00,0.0093 +2016-10-28 21:00:00,0.0074 +2016-10-28 22:00:00,0.0056 +2016-10-28 23:00:00,0.0046 +2016-10-29 00:00:00,0.0043 +2016-10-29 01:00:00,0.0043 +2016-10-29 02:00:00,0.0042 +2016-10-29 03:00:00,0.005 +2016-10-29 04:00:00,0.0062 +2016-10-29 05:00:00,0.0081 +2016-10-29 06:00:00,0.0094 +2016-10-29 07:00:00,0.0118 +2016-10-29 08:00:00,0.0131 +2016-10-29 09:00:00,0.0152 +2016-10-29 10:00:00,0.0569 +2016-10-29 11:00:00,0.0536 +2016-10-29 12:00:00,0.0163 +2016-10-29 13:00:00,0.0177 +2016-10-29 14:00:00,0.0157 +2016-10-29 15:00:00,0.017 +2016-10-29 16:00:00,0.0157 +2016-10-29 17:00:00,0.0141 +2016-10-29 18:00:00,0.0118 +2016-10-29 19:00:00,0.0106 +2016-10-29 20:00:00,0.0095 +2016-10-29 21:00:00,0.008 +2016-10-29 22:00:00,0.0095 +2016-10-29 23:00:00,0.0195 +2016-10-30 00:00:00,0.0172 +2016-10-30 01:00:00,0.0173 +2016-10-30 02:00:00,0.0173 +2016-10-30 03:00:00,0.0161 +2016-10-30 04:00:00,0.0192 +2016-10-30 05:00:00,0.021 +2016-10-30 06:00:00,0.0251 +2016-10-30 07:00:00,0.0333 +2016-10-30 08:00:00,0.0419 +2016-10-30 09:00:00,0.0515 +2016-10-30 10:00:00,0.055 +2016-10-30 11:00:00,0.0555 +2016-10-30 12:00:00,0.0201 +2016-10-30 13:00:00,0.0509 +2016-10-30 14:00:00,0.0593 +2016-10-30 15:00:00,0.0577 +2016-10-30 16:00:00,0.0507 +2016-10-30 17:00:00,0.048 +2016-10-30 18:00:00,0.0416 +2016-10-30 19:00:00,0.0348 +2016-10-30 20:00:00,0.0281 +2016-10-30 21:00:00,0.024 +2016-10-30 22:00:00,0.0162 +2016-10-30 23:00:00,0.0155 +2016-10-31 00:00:00,0.015 +2016-10-31 01:00:00,0.0148 +2016-10-31 02:00:00,0.0173 +2016-10-31 03:00:00,0.0259 +2016-10-31 04:00:00,0.0469 +2016-10-31 05:00:00,0.1338 +2016-10-31 06:00:00,0.3356 +2016-10-31 07:00:00,0.2159 +2016-10-31 08:00:00,0.0566 +2016-10-31 09:00:00,0.059 +2016-10-31 10:00:00,0.0584 +2016-10-31 11:00:00,0.0659 +2016-10-31 12:00:00,0.0598 +2016-10-31 13:00:00,0.0223 +2016-10-31 14:00:00,0.0558 +2016-10-31 15:00:00,0.0564 +2016-10-31 16:00:00,0.0547 +2016-10-31 17:00:00,0.0477 +2016-10-31 18:00:00,0.0406 +2016-10-31 19:00:00,0.0349 +2016-10-31 20:00:00,0.0294 +2016-10-31 21:00:00,0.0204 +2016-10-31 22:00:00,0.0159 +2016-10-31 23:00:00,0.0145 +2016-11-01 00:00:00,0.0138 +2016-11-01 01:00:00,0.0138 +2016-11-01 02:00:00,0.0183 +2016-11-01 03:00:00,0.0264 +2016-11-01 04:00:00,0.0513 +2016-11-01 05:00:00,0.1667 +2016-11-01 06:00:00,0.3935 +2016-11-01 07:00:00,0.3724 +2016-11-01 08:00:00,0.1131 +2016-11-01 09:00:00,0.0554 +2016-11-01 10:00:00,0.0606 +2016-11-01 11:00:00,0.0629 +2016-11-01 12:00:00,0.0621 +2016-11-01 13:00:00,0.0579 +2016-11-01 14:00:00,0.0622 +2016-11-01 15:00:00,0.0546 +2016-11-01 16:00:00,0.06 +2016-11-01 17:00:00,0.0534 +2016-11-01 18:00:00,0.0388 +2016-11-01 19:00:00,0.033 +2016-11-01 20:00:00,0.0268 +2016-11-01 21:00:00,0.0229 +2016-11-01 22:00:00,0.0183 +2016-11-01 23:00:00,0.016 +2016-11-02 00:00:00,0.0139 +2016-11-02 01:00:00,0.0152 +2016-11-02 02:00:00,0.0168 +2016-11-02 03:00:00,0.0268 +2016-11-02 04:00:00,0.0396 +2016-11-02 05:00:00,0.1575 +2016-11-02 06:00:00,0.3788 +2016-11-02 07:00:00,0.3729 +2016-11-02 08:00:00,0.1739 +2016-11-02 09:00:00,0.0614 +2016-11-02 10:00:00,0.058 +2016-11-02 11:00:00,0.0611 +2016-11-02 12:00:00,0.0602 +2016-11-02 13:00:00,0.0606 +2016-11-02 14:00:00,0.0588 +2016-11-02 15:00:00,0.0573 +2016-11-02 16:00:00,0.059 +2016-11-02 17:00:00,0.0501 +2016-11-02 18:00:00,0.0402 +2016-11-02 19:00:00,0.0331 +2016-11-02 20:00:00,0.0273 +2016-11-02 21:00:00,0.023 +2016-11-02 22:00:00,0.016 +2016-11-02 23:00:00,0.0044 +2016-11-03 00:00:00,0.0044 +2016-11-03 01:00:00,0.0043 +2016-11-03 02:00:00,0.0051 +2016-11-03 03:00:00,0.0152 +2016-11-03 04:00:00,0.0518 +2016-11-03 05:00:00,0.2401 +2016-11-03 06:00:00,0.4526 +2016-11-03 07:00:00,0.404 +2016-11-03 08:00:00,0.3625 +2016-11-03 09:00:00,0.1272 +2016-11-03 10:00:00,0.0599 +2016-11-03 11:00:00,0.0587 +2016-11-03 12:00:00,0.058 +2016-11-03 13:00:00,0.0627 +2016-11-03 14:00:00,0.0595 +2016-11-03 15:00:00,0.0602 +2016-11-03 16:00:00,0.0601 +2016-11-03 17:00:00,0.0514 +2016-11-03 18:00:00,0.0419 +2016-11-03 19:00:00,0.027 +2016-11-03 20:00:00,0.0181 +2016-11-03 21:00:00,0.0066 +2016-11-03 22:00:00,0.0053 +2016-11-03 23:00:00,0.0047 +2016-11-04 00:00:00,0.0045 +2016-11-04 01:00:00,0.0044 +2016-11-04 02:00:00,0.0048 +2016-11-04 03:00:00,0.012 +2016-11-04 04:00:00,0.0509 +2016-11-04 05:00:00,0.077 +2016-11-04 06:00:00,0.1233 +2016-11-04 07:00:00,0.0564 +2016-11-04 08:00:00,0.0608 +2016-11-04 09:00:00,0.0596 +2016-11-04 10:00:00,0.0632 +2016-11-04 11:00:00,0.0579 +2016-11-04 12:00:00,0.0602 +2016-11-04 13:00:00,0.0619 +2016-11-04 14:00:00,0.0637 +2016-11-04 15:00:00,0.0598 +2016-11-04 16:00:00,0.057 +2016-11-04 17:00:00,0.0532 +2016-11-04 18:00:00,0.0423 +2016-11-04 19:00:00,0.0302 +2016-11-04 20:00:00,0.0228 +2016-11-04 21:00:00,0.018 +2016-11-04 22:00:00,0.0084 +2016-11-04 23:00:00,0.0056 +2016-11-05 00:00:00,0.0047 +2016-11-05 01:00:00,0.0047 +2016-11-05 02:00:00,0.0045 +2016-11-05 03:00:00,0.0054 +2016-11-05 04:00:00,0.0102 +2016-11-05 05:00:00,0.0233 +2016-11-05 06:00:00,0.035 +2016-11-05 07:00:00,0.0463 +2016-11-05 08:00:00,0.05 +2016-11-05 09:00:00,0.0583 +2016-11-05 10:00:00,0.0605 +2016-11-05 11:00:00,0.0617 +2016-11-05 12:00:00,0.0618 +2016-11-05 13:00:00,0.0572 +2016-11-05 14:00:00,0.0666 +2016-11-05 15:00:00,0.0673 +2016-11-05 16:00:00,0.0607 +2016-11-05 17:00:00,0.0602 +2016-11-05 18:00:00,0.0428 +2016-11-05 19:00:00,0.0315 +2016-11-05 20:00:00,0.0304 +2016-11-05 21:00:00,0.0254 +2016-11-05 22:00:00,0.012 +2016-11-05 23:00:00,0.0055 +2016-11-06 00:00:00,0.0046 +2016-11-06 01:00:00,0.0 +2016-11-06 02:00:00,0.0039 +2016-11-06 03:00:00,0.0042 +2016-11-06 04:00:00,0.0044 +2016-11-06 05:00:00,0.0054 +2016-11-06 06:00:00,0.0075 +2016-11-06 07:00:00,0.0216 +2016-11-06 08:00:00,0.0381 +2016-11-06 09:00:00,0.0513 +2016-11-06 10:00:00,0.0617 +2016-11-06 11:00:00,0.0642 +2016-11-06 12:00:00,0.0637 +2016-11-06 13:00:00,0.0652 +2016-11-06 14:00:00,0.0659 +2016-11-06 15:00:00,0.0661 +2016-11-06 16:00:00,0.0623 +2016-11-06 17:00:00,0.0621 +2016-11-06 18:00:00,0.05 +2016-11-06 19:00:00,0.0355 +2016-11-06 20:00:00,0.0287 +2016-11-06 21:00:00,0.0231 +2016-11-06 22:00:00,0.0068 +2016-11-06 23:00:00,0.0046 +2016-11-07 00:00:00,0.0048 +2016-11-07 01:00:00,0.0044 +2016-11-07 02:00:00,0.0046 +2016-11-07 03:00:00,0.0052 +2016-11-07 04:00:00,0.019 +2016-11-07 05:00:00,0.0546 +2016-11-07 06:00:00,0.1898 +2016-11-07 07:00:00,0.3844 +2016-11-07 08:00:00,0.3758 +2016-11-07 09:00:00,0.0884 +2016-11-07 10:00:00,0.0599 +2016-11-07 11:00:00,0.0552 +2016-11-07 12:00:00,0.0587 +2016-11-07 13:00:00,0.055 +2016-11-07 14:00:00,0.0575 +2016-11-07 15:00:00,0.0554 +2016-11-07 16:00:00,0.0559 +2016-11-07 17:00:00,0.0556 +2016-11-07 18:00:00,0.0429 +2016-11-07 19:00:00,0.0313 +2016-11-07 20:00:00,0.0179 +2016-11-07 21:00:00,0.0127 +2016-11-07 22:00:00,0.0059 +2016-11-07 23:00:00,0.0051 +2016-11-08 00:00:00,0.0045 +2016-11-08 01:00:00,0.0042 +2016-11-08 02:00:00,0.0046 +2016-11-08 03:00:00,0.0053 +2016-11-08 04:00:00,0.0169 +2016-11-08 05:00:00,0.0566 +2016-11-08 06:00:00,0.1772 +2016-11-08 07:00:00,0.3679 +2016-11-08 08:00:00,0.3933 +2016-11-08 09:00:00,0.1659 +2016-11-08 10:00:00,0.0576 +2016-11-08 11:00:00,0.0579 +2016-11-08 12:00:00,0.0543 +2016-11-08 13:00:00,0.0465 +2016-11-08 14:00:00,0.0557 +2016-11-08 15:00:00,0.0581 +2016-11-08 16:00:00,0.0514 +2016-11-08 17:00:00,0.0558 +2016-11-08 18:00:00,0.0416 +2016-11-08 19:00:00,0.0289 +2016-11-08 20:00:00,0.0184 +2016-11-08 21:00:00,0.014 +2016-11-08 22:00:00,0.0064 +2016-11-08 23:00:00,0.005 +2016-11-09 00:00:00,0.0042 +2016-11-09 01:00:00,0.0045 +2016-11-09 02:00:00,0.0042 +2016-11-09 03:00:00,0.0053 +2016-11-09 04:00:00,0.0142 +2016-11-09 05:00:00,0.0546 +2016-11-09 06:00:00,0.1557 +2016-11-09 07:00:00,0.3817 +2016-11-09 08:00:00,0.4219 +2016-11-09 09:00:00,0.3112 +2016-11-09 10:00:00,0.0623 +2016-11-09 11:00:00,0.0587 +2016-11-09 12:00:00,0.0584 +2016-11-09 13:00:00,0.0581 +2016-11-09 14:00:00,0.0614 +2016-11-09 15:00:00,0.056 +2016-11-09 16:00:00,0.0592 +2016-11-09 17:00:00,0.0593 +2016-11-09 18:00:00,0.0468 +2016-11-09 19:00:00,0.0343 +2016-11-09 20:00:00,0.0244 +2016-11-09 21:00:00,0.0145 +2016-11-09 22:00:00,0.0065 +2016-11-09 23:00:00,0.0049 +2016-11-10 00:00:00,0.0043 +2016-11-10 01:00:00,0.0042 +2016-11-10 02:00:00,0.0043 +2016-11-10 03:00:00,0.0059 +2016-11-10 04:00:00,0.0171 +2016-11-10 05:00:00,0.0552 +2016-11-10 06:00:00,0.1673 +2016-11-10 07:00:00,0.3754 +2016-11-10 08:00:00,0.377 +2016-11-10 09:00:00,0.0704 +2016-11-10 10:00:00,0.0632 +2016-11-10 11:00:00,0.0604 +2016-11-10 12:00:00,0.0597 +2016-11-10 13:00:00,0.0623 +2016-11-10 14:00:00,0.0647 +2016-11-10 15:00:00,0.0608 +2016-11-10 16:00:00,0.0603 +2016-11-10 17:00:00,0.0581 +2016-11-10 18:00:00,0.054 +2016-11-10 19:00:00,0.0358 +2016-11-10 20:00:00,0.0282 +2016-11-10 21:00:00,0.0214 +2016-11-10 22:00:00,0.0071 +2016-11-10 23:00:00,0.0051 +2016-11-11 00:00:00,0.0049 +2016-11-11 01:00:00,0.0044 +2016-11-11 02:00:00,0.0043 +2016-11-11 03:00:00,0.0054 +2016-11-11 04:00:00,0.008 +2016-11-11 05:00:00,0.0464 +2016-11-11 06:00:00,0.0634 +2016-11-11 07:00:00,0.053 +2016-11-11 08:00:00,0.0525 +2016-11-11 09:00:00,0.0586 +2016-11-11 10:00:00,0.0625 +2016-11-11 11:00:00,0.0694 +2016-11-11 12:00:00,0.0606 +2016-11-11 13:00:00,0.0667 +2016-11-11 14:00:00,0.0644 +2016-11-11 15:00:00,0.0667 +2016-11-11 16:00:00,0.0642 +2016-11-11 17:00:00,0.0619 +2016-11-11 18:00:00,0.0565 +2016-11-11 19:00:00,0.0352 +2016-11-11 20:00:00,0.0285 +2016-11-11 21:00:00,0.0256 +2016-11-11 22:00:00,0.0153 +2016-11-11 23:00:00,0.0065 +2016-11-12 00:00:00,0.0051 +2016-11-12 01:00:00,0.0044 +2016-11-12 02:00:00,0.0046 +2016-11-12 03:00:00,0.0046 +2016-11-12 04:00:00,0.0051 +2016-11-12 05:00:00,0.0088 +2016-11-12 06:00:00,0.0225 +2016-11-12 07:00:00,0.0346 +2016-11-12 08:00:00,0.045 +2016-11-12 09:00:00,0.0575 +2016-11-12 10:00:00,0.0606 +2016-11-12 11:00:00,0.0628 +2016-11-12 12:00:00,0.0606 +2016-11-12 13:00:00,0.0624 +2016-11-12 14:00:00,0.0606 +2016-11-12 15:00:00,0.0612 +2016-11-12 16:00:00,0.0625 +2016-11-12 17:00:00,0.0591 +2016-11-12 18:00:00,0.0424 +2016-11-12 19:00:00,0.0394 +2016-11-12 20:00:00,0.0313 +2016-11-12 21:00:00,0.0278 +2016-11-12 22:00:00,0.0224 +2016-11-12 23:00:00,0.0159 +2016-11-13 00:00:00,0.0059 +2016-11-13 01:00:00,0.0053 +2016-11-13 02:00:00,0.0046 +2016-11-13 03:00:00,0.0039 +2016-11-13 04:00:00,0.0049 +2016-11-13 05:00:00,0.0058 +2016-11-13 06:00:00,0.0078 +2016-11-13 07:00:00,0.0188 +2016-11-13 08:00:00,0.0328 +2016-11-13 09:00:00,0.0471 +2016-11-13 10:00:00,0.0569 +2016-11-13 11:00:00,0.0648 +2016-11-13 12:00:00,0.0657 +2016-11-13 13:00:00,0.066 +2016-11-13 14:00:00,0.0652 +2016-11-13 15:00:00,0.064 +2016-11-13 16:00:00,0.0636 +2016-11-13 17:00:00,0.0583 +2016-11-13 18:00:00,0.0582 +2016-11-13 19:00:00,0.0427 +2016-11-13 20:00:00,0.0319 +2016-11-13 21:00:00,0.0252 +2016-11-13 22:00:00,0.0079 +2016-11-13 23:00:00,0.0055 +2016-11-14 00:00:00,0.0046 +2016-11-14 01:00:00,0.0044 +2016-11-14 02:00:00,0.0045 +2016-11-14 03:00:00,0.0052 +2016-11-14 04:00:00,0.0173 +2016-11-14 05:00:00,0.0564 +2016-11-14 06:00:00,0.1432 +2016-11-14 07:00:00,0.3734 +2016-11-14 08:00:00,0.4 +2016-11-14 09:00:00,0.1866 +2016-11-14 10:00:00,0.0581 +2016-11-14 11:00:00,0.0555 +2016-11-14 12:00:00,0.0519 +2016-11-14 13:00:00,0.0611 +2016-11-14 14:00:00,0.0581 +2016-11-14 15:00:00,0.0569 +2016-11-14 16:00:00,0.0574 +2016-11-14 17:00:00,0.0579 +2016-11-14 18:00:00,0.0445 +2016-11-14 19:00:00,0.0343 +2016-11-14 20:00:00,0.0235 +2016-11-14 21:00:00,0.0147 +2016-11-14 22:00:00,0.0055 +2016-11-14 23:00:00,0.0048 +2016-11-15 00:00:00,0.0044 +2016-11-15 01:00:00,0.0041 +2016-11-15 02:00:00,0.0044 +2016-11-15 03:00:00,0.005 +2016-11-15 04:00:00,0.0136 +2016-11-15 05:00:00,0.0536 +2016-11-15 06:00:00,0.1753 +2016-11-15 07:00:00,0.3957 +2016-11-15 08:00:00,0.3947 +2016-11-15 09:00:00,0.184 +2016-11-15 10:00:00,0.063 +2016-11-15 11:00:00,0.0569 +2016-11-15 12:00:00,0.0578 +2016-11-15 13:00:00,0.0568 +2016-11-15 14:00:00,0.0598 +2016-11-15 15:00:00,0.0584 +2016-11-15 16:00:00,0.0581 +2016-11-15 17:00:00,0.0566 +2016-11-15 18:00:00,0.0449 +2016-11-15 19:00:00,0.036 +2016-11-15 20:00:00,0.0242 +2016-11-15 21:00:00,0.0159 +2016-11-15 22:00:00,0.0071 +2016-11-15 23:00:00,0.0053 +2016-11-16 00:00:00,0.0043 +2016-11-16 01:00:00,0.0038 +2016-11-16 02:00:00,0.0043 +2016-11-16 03:00:00,0.0051 +2016-11-16 04:00:00,0.0179 +2016-11-16 05:00:00,0.055 +2016-11-16 06:00:00,0.1707 +2016-11-16 07:00:00,0.3895 +2016-11-16 08:00:00,0.4188 +2016-11-16 09:00:00,0.2512 +2016-11-16 10:00:00,0.0619 +2016-11-16 11:00:00,0.0585 +2016-11-16 12:00:00,0.0616 +2016-11-16 13:00:00,0.0572 +2016-11-16 14:00:00,0.0618 +2016-11-16 15:00:00,0.0596 +2016-11-16 16:00:00,0.0606 +2016-11-16 17:00:00,0.0592 +2016-11-16 18:00:00,0.0446 +2016-11-16 19:00:00,0.0364 +2016-11-16 20:00:00,0.0288 +2016-11-16 21:00:00,0.0164 +2016-11-16 22:00:00,0.0064 +2016-11-16 23:00:00,0.0048 +2016-11-17 00:00:00,0.0047 +2016-11-17 01:00:00,0.0043 +2016-11-17 02:00:00,0.0044 +2016-11-17 03:00:00,0.005 +2016-11-17 04:00:00,0.0164 +2016-11-17 05:00:00,0.0577 +2016-11-17 06:00:00,0.1906 +2016-11-17 07:00:00,0.3946 +2016-11-17 08:00:00,0.4239 +2016-11-17 09:00:00,0.2812 +2016-11-17 10:00:00,0.0627 +2016-11-17 11:00:00,0.0593 +2016-11-17 12:00:00,0.072 +2016-11-17 13:00:00,0.0647 +2016-11-17 14:00:00,0.0638 +2016-11-17 15:00:00,0.0628 +2016-11-17 16:00:00,0.0583 +2016-11-17 17:00:00,0.0633 +2016-11-17 18:00:00,0.0506 +2016-11-17 19:00:00,0.0364 +2016-11-17 20:00:00,0.0281 +2016-11-17 21:00:00,0.0181 +2016-11-17 22:00:00,0.0081 +2016-11-17 23:00:00,0.0056 +2016-11-18 00:00:00,0.0047 +2016-11-18 01:00:00,0.0043 +2016-11-18 02:00:00,0.0043 +2016-11-18 03:00:00,0.0055 +2016-11-18 04:00:00,0.0167 +2016-11-18 05:00:00,0.0527 +2016-11-18 06:00:00,0.2582 +2016-11-18 07:00:00,0.3877 +2016-11-18 08:00:00,0.2554 +2016-11-18 09:00:00,0.1082 +2016-11-18 10:00:00,0.0704 +2016-11-18 11:00:00,0.0635 +2016-11-18 12:00:00,0.0653 +2016-11-18 13:00:00,0.0644 +2016-11-18 14:00:00,0.0657 +2016-11-18 15:00:00,0.0656 +2016-11-18 16:00:00,0.0619 +2016-11-18 17:00:00,0.0601 +2016-11-18 18:00:00,0.0526 +2016-11-18 19:00:00,0.0404 +2016-11-18 20:00:00,0.0303 +2016-11-18 21:00:00,0.0222 +2016-11-18 22:00:00,0.0155 +2016-11-18 23:00:00,0.0066 +2016-11-19 00:00:00,0.0053 +2016-11-19 01:00:00,0.0047 +2016-11-19 02:00:00,0.0045 +2016-11-19 03:00:00,0.0049 +2016-11-19 04:00:00,0.0055 +2016-11-19 05:00:00,0.0105 +2016-11-19 06:00:00,0.0293 +2016-11-19 07:00:00,0.037 +2016-11-19 08:00:00,0.0477 +2016-11-19 09:00:00,0.0534 +2016-11-19 10:00:00,0.0616 +2016-11-19 11:00:00,0.0656 +2016-11-19 12:00:00,0.0649 +2016-11-19 13:00:00,0.0622 +2016-11-19 14:00:00,0.0567 +2016-11-19 15:00:00,0.0568 +2016-11-19 16:00:00,0.0609 +2016-11-19 17:00:00,0.0663 +2016-11-19 18:00:00,0.0483 +2016-11-19 19:00:00,0.0386 +2016-11-19 20:00:00,0.0301 +2016-11-19 21:00:00,0.0256 +2016-11-19 22:00:00,0.0209 +2016-11-19 23:00:00,0.0065 +2016-11-20 00:00:00,0.0058 +2016-11-20 01:00:00,0.0046 +2016-11-20 02:00:00,0.0042 +2016-11-20 03:00:00,0.0043 +2016-11-20 04:00:00,0.0048 +2016-11-20 05:00:00,0.0055 +2016-11-20 06:00:00,0.0065 +2016-11-20 07:00:00,0.0161 +2016-11-20 08:00:00,0.0319 +2016-11-20 09:00:00,0.0454 +2016-11-20 10:00:00,0.053 +2016-11-20 11:00:00,0.0596 +2016-11-20 12:00:00,0.0629 +2016-11-20 13:00:00,0.0654 +2016-11-20 14:00:00,0.0604 +2016-11-20 15:00:00,0.063 +2016-11-20 16:00:00,0.0584 +2016-11-20 17:00:00,0.054 +2016-11-20 18:00:00,0.0443 +2016-11-20 19:00:00,0.0328 +2016-11-20 20:00:00,0.0286 +2016-11-20 21:00:00,0.0221 +2016-11-20 22:00:00,0.01 +2016-11-20 23:00:00,0.0051 +2016-11-21 00:00:00,0.0048 +2016-11-21 01:00:00,0.0043 +2016-11-21 02:00:00,0.0045 +2016-11-21 03:00:00,0.006 +2016-11-21 04:00:00,0.0173 +2016-11-21 05:00:00,0.0555 +2016-11-21 06:00:00,0.1509 +2016-11-21 07:00:00,0.3709 +2016-11-21 08:00:00,0.4056 +2016-11-21 09:00:00,0.1478 +2016-11-21 10:00:00,0.0651 +2016-11-21 11:00:00,0.0647 +2016-11-21 12:00:00,0.0648 +2016-11-21 13:00:00,0.0645 +2016-11-21 14:00:00,0.0626 +2016-11-21 15:00:00,0.0621 +2016-11-21 16:00:00,0.0583 +2016-11-21 17:00:00,0.0588 +2016-11-21 18:00:00,0.046 +2016-11-21 19:00:00,0.0345 +2016-11-21 20:00:00,0.0277 +2016-11-21 21:00:00,0.0193 +2016-11-21 22:00:00,0.0074 +2016-11-21 23:00:00,0.0052 +2016-11-22 00:00:00,0.0046 +2016-11-22 01:00:00,0.0041 +2016-11-22 02:00:00,0.0044 +2016-11-22 03:00:00,0.0054 +2016-11-22 04:00:00,0.0119 +2016-11-22 05:00:00,0.0522 +2016-11-22 06:00:00,0.1161 +2016-11-22 07:00:00,0.2148 +2016-11-22 08:00:00,0.0476 +2016-11-22 09:00:00,0.0603 +2016-11-22 10:00:00,0.0706 +2016-11-22 11:00:00,0.0688 +2016-11-22 12:00:00,0.0697 +2016-11-22 13:00:00,0.0651 +2016-11-22 14:00:00,0.0656 +2016-11-22 15:00:00,0.0651 +2016-11-22 16:00:00,0.0605 +2016-11-22 17:00:00,0.0608 +2016-11-22 18:00:00,0.0498 +2016-11-22 19:00:00,0.0395 +2016-11-22 20:00:00,0.0299 +2016-11-22 21:00:00,0.0246 +2016-11-22 22:00:00,0.0108 +2016-11-22 23:00:00,0.0048 +2016-11-23 00:00:00,0.0036 +2016-11-23 01:00:00,0.0034 +2016-11-23 02:00:00,0.0034 +2016-11-23 03:00:00,0.0036 +2016-11-23 04:00:00,0.0109 +2016-11-23 05:00:00,0.0456 +2016-11-23 06:00:00,0.1114 +2016-11-23 07:00:00,0.0497 +2016-11-23 08:00:00,0.0516 +2016-11-23 09:00:00,0.0558 +2016-11-23 10:00:00,0.0666 +2016-11-23 11:00:00,0.0676 +2016-11-23 12:00:00,0.0649 +2016-11-23 13:00:00,0.0634 +2016-11-23 14:00:00,0.0629 +2016-11-23 15:00:00,0.0599 +2016-11-23 16:00:00,0.0526 +2016-11-23 17:00:00,0.0544 +2016-11-23 18:00:00,0.0446 +2016-11-23 19:00:00,0.0385 +2016-11-23 20:00:00,0.028 +2016-11-23 21:00:00,0.0227 +2016-11-23 22:00:00,0.0109 +2016-11-23 23:00:00,0.0044 +2016-11-24 00:00:00,0.004 +2016-11-24 01:00:00,0.0038 +2016-11-24 02:00:00,0.0034 +2016-11-24 03:00:00,0.0042 +2016-11-24 04:00:00,0.0036 +2016-11-24 05:00:00,0.0038 +2016-11-24 06:00:00,0.0049 +2016-11-24 07:00:00,0.0072 +2016-11-24 08:00:00,0.0167 +2016-11-24 09:00:00,0.0327 +2016-11-24 10:00:00,0.0415 +2016-11-24 11:00:00,0.0512 +2016-11-24 12:00:00,0.0528 +2016-11-24 13:00:00,0.0526 +2016-11-24 14:00:00,0.0515 +2016-11-24 15:00:00,0.044 +2016-11-24 16:00:00,0.0366 +2016-11-24 17:00:00,0.0356 +2016-11-24 18:00:00,0.0388 +2016-11-24 19:00:00,0.0494 +2016-11-24 20:00:00,0.0561 +2016-11-24 21:00:00,0.0466 +2016-11-24 22:00:00,0.0326 +2016-11-24 23:00:00,0.017 +2016-11-25 00:00:00,0.0041 +2016-11-25 01:00:00,0.0039 +2016-11-25 02:00:00,0.004 +2016-11-25 03:00:00,0.004 +2016-11-25 04:00:00,0.0048 +2016-11-25 05:00:00,0.0121 +2016-11-25 06:00:00,0.0255 +2016-11-25 07:00:00,0.0277 +2016-11-25 08:00:00,0.0349 +2016-11-25 09:00:00,0.0439 +2016-11-25 10:00:00,0.0559 +2016-11-25 11:00:00,0.0619 +2016-11-25 12:00:00,0.0665 +2016-11-25 13:00:00,0.0614 +2016-11-25 14:00:00,0.0631 +2016-11-25 15:00:00,0.0651 +2016-11-25 16:00:00,0.0618 +2016-11-25 17:00:00,0.0591 +2016-11-25 18:00:00,0.0526 +2016-11-25 19:00:00,0.0389 +2016-11-25 20:00:00,0.0327 +2016-11-25 21:00:00,0.0277 +2016-11-25 22:00:00,0.0231 +2016-11-25 23:00:00,0.006 +2016-11-26 00:00:00,0.0035 +2016-11-26 01:00:00,0.004 +2016-11-26 02:00:00,0.0033 +2016-11-26 03:00:00,0.0035 +2016-11-26 04:00:00,0.0037 +2016-11-26 05:00:00,0.0047 +2016-11-26 06:00:00,0.0129 +2016-11-26 07:00:00,0.0185 +2016-11-26 08:00:00,0.0344 +2016-11-26 09:00:00,0.0447 +2016-11-26 10:00:00,0.0526 +2016-11-26 11:00:00,0.0579 +2016-11-26 12:00:00,0.0593 +2016-11-26 13:00:00,0.057 +2016-11-26 14:00:00,0.0617 +2016-11-26 15:00:00,0.0611 +2016-11-26 16:00:00,0.0608 +2016-11-26 17:00:00,0.0576 +2016-11-26 18:00:00,0.058 +2016-11-26 19:00:00,0.0359 +2016-11-26 20:00:00,0.0297 +2016-11-26 21:00:00,0.0259 +2016-11-26 22:00:00,0.0169 +2016-11-26 23:00:00,0.0055 +2016-11-27 00:00:00,0.0054 +2016-11-27 01:00:00,0.0047 +2016-11-27 02:00:00,0.0043 +2016-11-27 03:00:00,0.0045 +2016-11-27 04:00:00,0.0048 +2016-11-27 05:00:00,0.0056 +2016-11-27 06:00:00,0.0112 +2016-11-27 07:00:00,0.0167 +2016-11-27 08:00:00,0.03 +2016-11-27 09:00:00,0.0471 +2016-11-27 10:00:00,0.0577 +2016-11-27 11:00:00,0.0666 +2016-11-27 12:00:00,0.0585 +2016-11-27 13:00:00,0.061 +2016-11-27 14:00:00,0.0592 +2016-11-27 15:00:00,0.0604 +2016-11-27 16:00:00,0.0579 +2016-11-27 17:00:00,0.055 +2016-11-27 18:00:00,0.0469 +2016-11-27 19:00:00,0.034 +2016-11-27 20:00:00,0.0272 +2016-11-27 21:00:00,0.0211 +2016-11-27 22:00:00,0.0072 +2016-11-27 23:00:00,0.0029 +2016-11-28 00:00:00,0.0018 +2016-11-28 01:00:00,0.0011 +2016-11-28 02:00:00,0.001 +2016-11-28 03:00:00,0.0011 +2016-11-28 04:00:00,0.0118 +2016-11-28 05:00:00,0.0503 +2016-11-28 06:00:00,0.1517 +2016-11-28 07:00:00,0.3884 +2016-11-28 08:00:00,0.212 +2016-11-28 09:00:00,0.0549 +2016-11-28 10:00:00,0.0597 +2016-11-28 11:00:00,0.0563 +2016-11-28 12:00:00,0.0573 +2016-11-28 13:00:00,0.0554 +2016-11-28 14:00:00,0.0578 +2016-11-28 15:00:00,0.0559 +2016-11-28 16:00:00,0.0544 +2016-11-28 17:00:00,0.0556 +2016-11-28 18:00:00,0.0443 +2016-11-28 19:00:00,0.0329 +2016-11-28 20:00:00,0.024 +2016-11-28 21:00:00,0.0089 +2016-11-28 22:00:00,0.0063 +2016-11-28 23:00:00,0.0041 +2016-11-29 00:00:00,0.0044 +2016-11-29 01:00:00,0.0043 +2016-11-29 02:00:00,0.0034 +2016-11-29 03:00:00,0.0012 +2016-11-29 04:00:00,0.0089 +2016-11-29 05:00:00,0.0466 +2016-11-29 06:00:00,0.1399 +2016-11-29 07:00:00,0.2952 +2016-11-29 08:00:00,0.3069 +2016-11-29 09:00:00,0.1426 +2016-11-29 10:00:00,0.0589 +2016-11-29 11:00:00,0.0572 +2016-11-29 12:00:00,0.0589 +2016-11-29 13:00:00,0.0588 +2016-11-29 14:00:00,0.0573 +2016-11-29 15:00:00,0.0553 +2016-11-29 16:00:00,0.0569 +2016-11-29 17:00:00,0.059 +2016-11-29 18:00:00,0.0448 +2016-11-29 19:00:00,0.032 +2016-11-29 20:00:00,0.025 +2016-11-29 21:00:00,0.0138 +2016-11-29 22:00:00,0.0086 +2016-11-29 23:00:00,0.005 +2016-11-30 00:00:00,0.0043 +2016-11-30 01:00:00,0.0042 +2016-11-30 02:00:00,0.0044 +2016-11-30 03:00:00,0.0054 +2016-11-30 04:00:00,0.0137 +2016-11-30 05:00:00,0.0558 +2016-11-30 06:00:00,0.1424 +2016-11-30 07:00:00,0.3933 +2016-11-30 08:00:00,0.3977 +2016-11-30 09:00:00,0.1199 +2016-11-30 10:00:00,0.0606 +2016-11-30 11:00:00,0.0602 +2016-11-30 12:00:00,0.0567 +2016-11-30 13:00:00,0.0556 +2016-11-30 14:00:00,0.0576 +2016-11-30 15:00:00,0.0551 +2016-11-30 16:00:00,0.0601 +2016-11-30 17:00:00,0.0582 +2016-11-30 18:00:00,0.0455 +2016-11-30 19:00:00,0.0328 +2016-11-30 20:00:00,0.0256 +2016-11-30 21:00:00,0.0144 +2016-11-30 22:00:00,0.0072 +2016-11-30 23:00:00,0.005 +2016-12-01 00:00:00,0.0045 +2016-12-01 01:00:00,0.0044 +2016-12-01 02:00:00,0.0048 +2016-12-01 03:00:00,0.0056 +2016-12-01 04:00:00,0.0185 +2016-12-01 05:00:00,0.0517 +2016-12-01 06:00:00,0.1755 +2016-12-01 07:00:00,0.3714 +2016-12-01 08:00:00,0.3785 +2016-12-01 09:00:00,0.1777 +2016-12-01 10:00:00,0.0609 +2016-12-01 11:00:00,0.0576 +2016-12-01 12:00:00,0.0599 +2016-12-01 13:00:00,0.0586 +2016-12-01 14:00:00,0.0584 +2016-12-01 15:00:00,0.0592 +2016-12-01 16:00:00,0.06 +2016-12-01 17:00:00,0.0635 +2016-12-01 18:00:00,0.0498 +2016-12-01 19:00:00,0.0368 +2016-12-01 20:00:00,0.0251 +2016-12-01 21:00:00,0.0194 +2016-12-01 22:00:00,0.0077 +2016-12-01 23:00:00,0.0054 +2016-12-02 00:00:00,0.0045 +2016-12-02 01:00:00,0.0046 +2016-12-02 02:00:00,0.0044 +2016-12-02 03:00:00,0.0053 +2016-12-02 04:00:00,0.014 +2016-12-02 05:00:00,0.0498 +2016-12-02 06:00:00,0.0807 +2016-12-02 07:00:00,0.0647 +2016-12-02 08:00:00,0.0577 +2016-12-02 09:00:00,0.0578 +2016-12-02 10:00:00,0.0628 +2016-12-02 11:00:00,0.0606 +2016-12-02 12:00:00,0.0581 +2016-12-02 13:00:00,0.0599 +2016-12-02 14:00:00,0.0621 +2016-12-02 15:00:00,0.0624 +2016-12-02 16:00:00,0.0672 +2016-12-02 17:00:00,0.0645 +2016-12-02 18:00:00,0.0533 +2016-12-02 19:00:00,0.0367 +2016-12-02 20:00:00,0.0271 +2016-12-02 21:00:00,0.0247 +2016-12-02 22:00:00,0.0152 +2016-12-02 23:00:00,0.0058 +2016-12-03 00:00:00,0.0055 +2016-12-03 01:00:00,0.0049 +2016-12-03 02:00:00,0.0045 +2016-12-03 03:00:00,0.0047 +2016-12-03 04:00:00,0.005 +2016-12-03 05:00:00,0.0114 +2016-12-03 06:00:00,0.0225 +2016-12-03 07:00:00,0.0337 +2016-12-03 08:00:00,0.0439 +2016-12-03 09:00:00,0.0546 +2016-12-03 10:00:00,0.059 +2016-12-03 11:00:00,0.0615 +2016-12-03 12:00:00,0.0623 +2016-12-03 13:00:00,0.0629 +2016-12-03 14:00:00,0.0652 +2016-12-03 15:00:00,0.0683 +2016-12-03 16:00:00,0.0658 +2016-12-03 17:00:00,0.064 +2016-12-03 18:00:00,0.0631 +2016-12-03 19:00:00,0.0369 +2016-12-03 20:00:00,0.0306 +2016-12-03 21:00:00,0.0269 +2016-12-03 22:00:00,0.0222 +2016-12-03 23:00:00,0.008 +2016-12-04 00:00:00,0.0048 +2016-12-04 01:00:00,0.0045 +2016-12-04 02:00:00,0.0046 +2016-12-04 03:00:00,0.0043 +2016-12-04 04:00:00,0.0047 +2016-12-04 05:00:00,0.0056 +2016-12-04 06:00:00,0.0085 +2016-12-04 07:00:00,0.02 +2016-12-04 08:00:00,0.0333 +2016-12-04 09:00:00,0.0465 +2016-12-04 10:00:00,0.0586 +2016-12-04 11:00:00,0.0584 +2016-12-04 12:00:00,0.0616 +2016-12-04 13:00:00,0.0677 +2016-12-04 14:00:00,0.0638 +2016-12-04 15:00:00,0.0665 +2016-12-04 16:00:00,0.0621 +2016-12-04 17:00:00,0.059 +2016-12-04 18:00:00,0.0515 +2016-12-04 19:00:00,0.0366 +2016-12-04 20:00:00,0.0298 +2016-12-04 21:00:00,0.0224 +2016-12-04 22:00:00,0.01 +2016-12-04 23:00:00,0.0055 +2016-12-05 00:00:00,0.0046 +2016-12-05 01:00:00,0.0043 +2016-12-05 02:00:00,0.0042 +2016-12-05 03:00:00,0.0048 +2016-12-05 04:00:00,0.0122 +2016-12-05 05:00:00,0.0447 +2016-12-05 06:00:00,0.1182 +2016-12-05 07:00:00,0.3737 +2016-12-05 08:00:00,0.4611 +2016-12-05 09:00:00,0.317 +2016-12-05 10:00:00,0.0599 +2016-12-05 11:00:00,0.0589 +2016-12-05 12:00:00,0.0586 +2016-12-05 13:00:00,0.0577 +2016-12-05 14:00:00,0.0577 +2016-12-05 15:00:00,0.0574 +2016-12-05 16:00:00,0.0573 +2016-12-05 17:00:00,0.0584 +2016-12-05 18:00:00,0.0456 +2016-12-05 19:00:00,0.0322 +2016-12-05 20:00:00,0.022 +2016-12-05 21:00:00,0.0094 +2016-12-05 22:00:00,0.0061 +2016-12-05 23:00:00,0.0052 +2016-12-06 00:00:00,0.0043 +2016-12-06 01:00:00,0.0043 +2016-12-06 02:00:00,0.0043 +2016-12-06 03:00:00,0.0054 +2016-12-06 04:00:00,0.017 +2016-12-06 05:00:00,0.054 +2016-12-06 06:00:00,0.1863 +2016-12-06 07:00:00,0.3791 +2016-12-06 08:00:00,0.3933 +2016-12-06 09:00:00,0.1427 +2016-12-06 10:00:00,0.0613 +2016-12-06 11:00:00,0.0599 +2016-12-06 12:00:00,0.0587 +2016-12-06 13:00:00,0.0595 +2016-12-06 14:00:00,0.0585 +2016-12-06 15:00:00,0.0593 +2016-12-06 16:00:00,0.0595 +2016-12-06 17:00:00,0.0596 +2016-12-06 18:00:00,0.0453 +2016-12-06 19:00:00,0.0338 +2016-12-06 20:00:00,0.0251 +2016-12-06 21:00:00,0.0185 +2016-12-06 22:00:00,0.0061 +2016-12-06 23:00:00,0.0051 +2016-12-07 00:00:00,0.0045 +2016-12-07 01:00:00,0.0042 +2016-12-07 02:00:00,0.0044 +2016-12-07 03:00:00,0.0052 +2016-12-07 04:00:00,0.0128 +2016-12-07 05:00:00,0.055 +2016-12-07 06:00:00,0.1662 +2016-12-07 07:00:00,0.4149 +2016-12-07 08:00:00,0.4131 +2016-12-07 09:00:00,0.1672 +2016-12-07 10:00:00,0.0639 +2016-12-07 11:00:00,0.0624 +2016-12-07 12:00:00,0.0605 +2016-12-07 13:00:00,0.0548 +2016-12-07 14:00:00,0.0641 +2016-12-07 15:00:00,0.0596 +2016-12-07 16:00:00,0.0588 +2016-12-07 17:00:00,0.0581 +2016-12-07 18:00:00,0.0465 +2016-12-07 19:00:00,0.0342 +2016-12-07 20:00:00,0.0246 +2016-12-07 21:00:00,0.0174 +2016-12-07 22:00:00,0.0077 +2016-12-07 23:00:00,0.0051 +2016-12-08 00:00:00,0.0044 +2016-12-08 01:00:00,0.0045 +2016-12-08 02:00:00,0.0045 +2016-12-08 03:00:00,0.0054 +2016-12-08 04:00:00,0.0146 +2016-12-08 05:00:00,0.053 +2016-12-08 06:00:00,0.1395 +2016-12-08 07:00:00,0.399 +2016-12-08 08:00:00,0.4747 +2016-12-08 09:00:00,0.3903 +2016-12-08 10:00:00,0.3383 +2016-12-08 11:00:00,0.1313 +2016-12-08 12:00:00,0.0565 +2016-12-08 13:00:00,0.0605 +2016-12-08 14:00:00,0.0556 +2016-12-08 15:00:00,0.0623 +2016-12-08 16:00:00,0.0562 +2016-12-08 17:00:00,0.0591 +2016-12-08 18:00:00,0.0465 +2016-12-08 19:00:00,0.0335 +2016-12-08 20:00:00,0.026 +2016-12-08 21:00:00,0.0213 +2016-12-08 22:00:00,0.0089 +2016-12-08 23:00:00,0.0055 +2016-12-09 00:00:00,0.0046 +2016-12-09 01:00:00,0.0045 +2016-12-09 02:00:00,0.0044 +2016-12-09 03:00:00,0.0053 +2016-12-09 04:00:00,0.0154 +2016-12-09 05:00:00,0.0517 +2016-12-09 06:00:00,0.0769 +2016-12-09 07:00:00,0.2868 +2016-12-09 08:00:00,0.1758 +2016-12-09 09:00:00,0.0561 +2016-12-09 10:00:00,0.0606 +2016-12-09 11:00:00,0.0615 +2016-12-09 12:00:00,0.0621 +2016-12-09 13:00:00,0.0641 +2016-12-09 14:00:00,0.0637 +2016-12-09 15:00:00,0.0652 +2016-12-09 16:00:00,0.0618 +2016-12-09 17:00:00,0.062 +2016-12-09 18:00:00,0.0492 +2016-12-09 19:00:00,0.0396 +2016-12-09 20:00:00,0.0307 +2016-12-09 21:00:00,0.0262 +2016-12-09 22:00:00,0.0191 +2016-12-09 23:00:00,0.0075 +2016-12-10 00:00:00,0.0052 +2016-12-10 01:00:00,0.0048 +2016-12-10 02:00:00,0.0043 +2016-12-10 03:00:00,0.0048 +2016-12-10 04:00:00,0.0053 +2016-12-10 05:00:00,0.0088 +2016-12-10 06:00:00,0.0143 +2016-12-10 07:00:00,0.0291 +2016-12-10 08:00:00,0.0427 +2016-12-10 09:00:00,0.0537 +2016-12-10 10:00:00,0.0584 +2016-12-10 11:00:00,0.0627 +2016-12-10 12:00:00,0.063 +2016-12-10 13:00:00,0.0615 +2016-12-10 14:00:00,0.0632 +2016-12-10 15:00:00,0.0661 +2016-12-10 16:00:00,0.0677 +2016-12-10 17:00:00,0.0642 +2016-12-10 18:00:00,0.0546 +2016-12-10 19:00:00,0.0364 +2016-12-10 20:00:00,0.0308 +2016-12-10 21:00:00,0.0295 +2016-12-10 22:00:00,0.028 +2016-12-10 23:00:00,0.0179 +2016-12-11 00:00:00,0.006 +2016-12-11 01:00:00,0.0052 +2016-12-11 02:00:00,0.0046 +2016-12-11 03:00:00,0.0043 +2016-12-11 04:00:00,0.0046 +2016-12-11 05:00:00,0.0053 +2016-12-11 06:00:00,0.0067 +2016-12-11 07:00:00,0.0178 +2016-12-11 08:00:00,0.03 +2016-12-11 09:00:00,0.046 +2016-12-11 10:00:00,0.0551 +2016-12-11 11:00:00,0.0621 +2016-12-11 12:00:00,0.0615 +2016-12-11 13:00:00,0.0632 +2016-12-11 14:00:00,0.0618 +2016-12-11 15:00:00,0.0628 +2016-12-11 16:00:00,0.0582 +2016-12-11 17:00:00,0.0626 +2016-12-11 18:00:00,0.048 +2016-12-11 19:00:00,0.0374 +2016-12-11 20:00:00,0.034 +2016-12-11 21:00:00,0.0276 +2016-12-11 22:00:00,0.0146 +2016-12-11 23:00:00,0.0046 +2016-12-12 00:00:00,0.0048 +2016-12-12 01:00:00,0.0045 +2016-12-12 02:00:00,0.0045 +2016-12-12 03:00:00,0.0056 +2016-12-12 04:00:00,0.0159 +2016-12-12 05:00:00,0.0544 +2016-12-12 06:00:00,0.1506 +2016-12-12 07:00:00,0.3888 +2016-12-12 08:00:00,0.2604 +2016-12-12 09:00:00,0.0809 +2016-12-12 10:00:00,0.0638 +2016-12-12 11:00:00,0.0616 +2016-12-12 12:00:00,0.0606 +2016-12-12 13:00:00,0.0616 +2016-12-12 14:00:00,0.06 +2016-12-12 15:00:00,0.0582 +2016-12-12 16:00:00,0.0556 +2016-12-12 17:00:00,0.0574 +2016-12-12 18:00:00,0.0456 +2016-12-12 19:00:00,0.0332 +2016-12-12 20:00:00,0.0214 +2016-12-12 21:00:00,0.0147 +2016-12-12 22:00:00,0.0089 +2016-12-12 23:00:00,0.0052 +2016-12-13 00:00:00,0.0045 +2016-12-13 01:00:00,0.0045 +2016-12-13 02:00:00,0.0042 +2016-12-13 03:00:00,0.0051 +2016-12-13 04:00:00,0.0144 +2016-12-13 05:00:00,0.0542 +2016-12-13 06:00:00,0.1815 +2016-12-13 07:00:00,0.3879 +2016-12-13 08:00:00,0.3581 +2016-12-13 09:00:00,0.0588 +2016-12-13 10:00:00,0.0652 +2016-12-13 11:00:00,0.0609 +2016-12-13 12:00:00,0.062 +2016-12-13 13:00:00,0.0604 +2016-12-13 14:00:00,0.0593 +2016-12-13 15:00:00,0.0596 +2016-12-13 16:00:00,0.0563 +2016-12-13 17:00:00,0.0589 +2016-12-13 18:00:00,0.0462 +2016-12-13 19:00:00,0.0323 +2016-12-13 20:00:00,0.0274 +2016-12-13 21:00:00,0.0206 +2016-12-13 22:00:00,0.0084 +2016-12-13 23:00:00,0.0053 +2016-12-14 00:00:00,0.0045 +2016-12-14 01:00:00,0.0046 +2016-12-14 02:00:00,0.0043 +2016-12-14 03:00:00,0.0056 +2016-12-14 04:00:00,0.0145 +2016-12-14 05:00:00,0.0534 +2016-12-14 06:00:00,0.1824 +2016-12-14 07:00:00,0.3946 +2016-12-14 08:00:00,0.4359 +2016-12-14 09:00:00,0.3854 +2016-12-14 10:00:00,0.227 +2016-12-14 11:00:00,0.0639 +2016-12-14 12:00:00,0.0601 +2016-12-14 13:00:00,0.0587 +2016-12-14 14:00:00,0.0638 +2016-12-14 15:00:00,0.0657 +2016-12-14 16:00:00,0.0627 +2016-12-14 17:00:00,0.0603 +2016-12-14 18:00:00,0.0484 +2016-12-14 19:00:00,0.0333 +2016-12-14 20:00:00,0.0268 +2016-12-14 21:00:00,0.0204 +2016-12-14 22:00:00,0.0069 +2016-12-14 23:00:00,0.0051 +2016-12-15 00:00:00,0.0047 +2016-12-15 01:00:00,0.0047 +2016-12-15 02:00:00,0.0045 +2016-12-15 03:00:00,0.0057 +2016-12-15 04:00:00,0.0121 +2016-12-15 05:00:00,0.0578 +2016-12-15 06:00:00,0.1828 +2016-12-15 07:00:00,0.3725 +2016-12-15 08:00:00,0.3152 +2016-12-15 09:00:00,0.0638 +2016-12-15 10:00:00,0.0629 +2016-12-15 11:00:00,0.0623 +2016-12-15 12:00:00,0.06 +2016-12-15 13:00:00,0.0598 +2016-12-15 14:00:00,0.0592 +2016-12-15 15:00:00,0.0618 +2016-12-15 16:00:00,0.0554 +2016-12-15 17:00:00,0.0517 +2016-12-15 18:00:00,0.0421 +2016-12-15 19:00:00,0.0309 +2016-12-15 20:00:00,0.0242 +2016-12-15 21:00:00,0.0168 +2016-12-15 22:00:00,0.0087 +2016-12-15 23:00:00,0.0057 +2016-12-16 00:00:00,0.0045 +2016-12-16 01:00:00,0.0046 +2016-12-16 02:00:00,0.0052 +2016-12-16 03:00:00,0.006 +2016-12-16 04:00:00,0.0178 +2016-12-16 05:00:00,0.0496 +2016-12-16 06:00:00,0.0782 +2016-12-16 07:00:00,0.0624 +2016-12-16 08:00:00,0.0559 +2016-12-16 09:00:00,0.0621 +2016-12-16 10:00:00,0.0639 +2016-12-16 11:00:00,0.0624 +2016-12-16 12:00:00,0.0666 +2016-12-16 13:00:00,0.0648 +2016-12-16 14:00:00,0.0662 +2016-12-16 15:00:00,0.0654 +2016-12-16 16:00:00,0.0655 +2016-12-16 17:00:00,0.063 +2016-12-16 18:00:00,0.0569 +2016-12-16 19:00:00,0.0429 +2016-12-16 20:00:00,0.0314 +2016-12-16 21:00:00,0.0269 +2016-12-16 22:00:00,0.024 +2016-12-16 23:00:00,0.0074 +2016-12-17 00:00:00,0.0055 +2016-12-17 01:00:00,0.0052 +2016-12-17 02:00:00,0.0048 +2016-12-17 03:00:00,0.0047 +2016-12-17 04:00:00,0.0057 +2016-12-17 05:00:00,0.006 +2016-12-17 06:00:00,0.0187 +2016-12-17 07:00:00,0.0332 +2016-12-17 08:00:00,0.0443 +2016-12-17 09:00:00,0.054 +2016-12-17 10:00:00,0.065 +2016-12-17 11:00:00,0.0687 +2016-12-17 12:00:00,0.0706 +2016-12-17 13:00:00,0.0669 +2016-12-17 14:00:00,0.07 +2016-12-17 15:00:00,0.0693 +2016-12-17 16:00:00,0.0681 +2016-12-17 17:00:00,0.067 +2016-12-17 18:00:00,0.1189 +2016-12-17 19:00:00,0.0415 +2016-12-17 20:00:00,0.0332 +2016-12-17 21:00:00,0.0312 +2016-12-17 22:00:00,0.0272 +2016-12-17 23:00:00,0.0138 +2016-12-18 00:00:00,0.0068 +2016-12-18 01:00:00,0.0051 +2016-12-18 02:00:00,0.0042 +2016-12-18 03:00:00,0.0046 +2016-12-18 04:00:00,0.0048 +2016-12-18 05:00:00,0.005 +2016-12-18 06:00:00,0.006 +2016-12-18 07:00:00,0.0107 +2016-12-18 08:00:00,0.029 +2016-12-18 09:00:00,0.0444 +2016-12-18 10:00:00,0.0558 +2016-12-18 11:00:00,0.0654 +2016-12-18 12:00:00,0.0652 +2016-12-18 13:00:00,0.0667 +2016-12-18 14:00:00,0.07 +2016-12-18 15:00:00,0.0661 +2016-12-18 16:00:00,0.0623 +2016-12-18 17:00:00,0.0617 +2016-12-18 18:00:00,0.0529 +2016-12-18 19:00:00,0.0407 +2016-12-18 20:00:00,0.0346 +2016-12-18 21:00:00,0.028 +2016-12-18 22:00:00,0.0141 +2016-12-18 23:00:00,0.0051 +2016-12-19 00:00:00,0.005 +2016-12-19 01:00:00,0.0045 +2016-12-19 02:00:00,0.0048 +2016-12-19 03:00:00,0.0054 +2016-12-19 04:00:00,0.0164 +2016-12-19 05:00:00,0.0538 +2016-12-19 06:00:00,0.1222 +2016-12-19 07:00:00,0.3158 +2016-12-19 08:00:00,0.0545 +2016-12-19 09:00:00,0.0599 +2016-12-19 10:00:00,0.0704 +2016-12-19 11:00:00,0.0669 +2016-12-19 12:00:00,0.062 +2016-12-19 13:00:00,0.0649 +2016-12-19 14:00:00,0.063 +2016-12-19 15:00:00,0.061 +2016-12-19 16:00:00,0.0604 +2016-12-19 17:00:00,0.0578 +2016-12-19 18:00:00,0.0492 +2016-12-19 19:00:00,0.0342 +2016-12-19 20:00:00,0.028 +2016-12-19 21:00:00,0.0221 +2016-12-19 22:00:00,0.0076 +2016-12-19 23:00:00,0.005 +2016-12-20 00:00:00,0.0046 +2016-12-20 01:00:00,0.0043 +2016-12-20 02:00:00,0.0045 +2016-12-20 03:00:00,0.0053 +2016-12-20 04:00:00,0.0148 +2016-12-20 05:00:00,0.0534 +2016-12-20 06:00:00,0.1305 +2016-12-20 07:00:00,0.2587 +2016-12-20 08:00:00,0.0544 +2016-12-20 09:00:00,0.0626 +2016-12-20 10:00:00,0.0695 +2016-12-20 11:00:00,0.0699 +2016-12-20 12:00:00,0.0643 +2016-12-20 13:00:00,0.0635 +2016-12-20 14:00:00,0.0644 +2016-12-20 15:00:00,0.0637 +2016-12-20 16:00:00,0.0616 +2016-12-20 17:00:00,0.0596 +2016-12-20 18:00:00,0.0495 +2016-12-20 19:00:00,0.0345 +2016-12-20 20:00:00,0.0275 +2016-12-20 21:00:00,0.0191 +2016-12-20 22:00:00,0.0077 +2016-12-20 23:00:00,0.0055 +2016-12-21 00:00:00,0.0047 +2016-12-21 01:00:00,0.0045 +2016-12-21 02:00:00,0.0045 +2016-12-21 03:00:00,0.0055 +2016-12-21 04:00:00,0.0161 +2016-12-21 05:00:00,0.038 +2016-12-21 06:00:00,0.1246 +2016-12-21 07:00:00,0.3454 +2016-12-21 08:00:00,0.0872 +2016-12-21 09:00:00,0.064 +2016-12-21 10:00:00,0.0673 +2016-12-21 11:00:00,0.0683 +2016-12-21 12:00:00,0.0672 +2016-12-21 13:00:00,0.0684 +2016-12-21 14:00:00,0.068 +2016-12-21 15:00:00,0.0652 +2016-12-21 16:00:00,0.0631 +2016-12-21 17:00:00,0.0622 +2016-12-21 18:00:00,0.0346 +2016-12-21 19:00:00,0.0266 +2016-12-21 20:00:00,0.023 +2016-12-21 21:00:00,0.0205 +2016-12-21 22:00:00,0.0141 +2016-12-21 23:00:00,0.0053 +2016-12-22 00:00:00,0.0046 +2016-12-22 01:00:00,0.0041 +2016-12-22 02:00:00,0.0042 +2016-12-22 03:00:00,0.0049 +2016-12-22 04:00:00,0.0119 +2016-12-22 05:00:00,0.0354 +2016-12-22 06:00:00,0.0654 +2016-12-22 07:00:00,0.058 +2016-12-22 08:00:00,0.0544 +2016-12-22 09:00:00,0.066 +2016-12-22 10:00:00,0.0715 +2016-12-22 11:00:00,0.0733 +2016-12-22 12:00:00,0.0723 +2016-12-22 13:00:00,0.0678 +2016-12-22 14:00:00,0.077 +2016-12-22 15:00:00,0.064 +2016-12-22 16:00:00,0.0614 +2016-12-22 17:00:00,0.0641 +2016-12-22 18:00:00,0.0507 +2016-12-22 19:00:00,0.0423 +2016-12-22 20:00:00,0.034 +2016-12-22 21:00:00,0.0319 +2016-12-22 22:00:00,0.0145 +2016-12-22 23:00:00,0.0058 +2016-12-23 00:00:00,0.0047 +2016-12-23 01:00:00,0.0047 +2016-12-23 02:00:00,0.0047 +2016-12-23 03:00:00,0.0052 +2016-12-23 04:00:00,0.0097 +2016-12-23 05:00:00,0.0392 +2016-12-23 06:00:00,0.0554 +2016-12-23 07:00:00,0.044 +2016-12-23 08:00:00,0.0452 +2016-12-23 09:00:00,0.0544 +2016-12-23 10:00:00,0.0663 +2016-12-23 11:00:00,0.0686 +2016-12-23 12:00:00,0.0687 +2016-12-23 13:00:00,0.0683 +2016-12-23 14:00:00,0.0664 +2016-12-23 15:00:00,0.0624 +2016-12-23 16:00:00,0.0587 +2016-12-23 17:00:00,0.055 +2016-12-23 18:00:00,0.0456 +2016-12-23 19:00:00,0.0385 +2016-12-23 20:00:00,0.032 +2016-12-23 21:00:00,0.0282 +2016-12-23 22:00:00,0.0224 +2016-12-23 23:00:00,0.0074 +2016-12-24 00:00:00,0.0057 +2016-12-24 01:00:00,0.0047 +2016-12-24 02:00:00,0.0046 +2016-12-24 03:00:00,0.0045 +2016-12-24 04:00:00,0.0051 +2016-12-24 05:00:00,0.0064 +2016-12-24 06:00:00,0.008 +2016-12-24 07:00:00,0.0199 +2016-12-24 08:00:00,0.0306 +2016-12-24 09:00:00,0.0439 +2016-12-24 10:00:00,0.0566 +2016-12-24 11:00:00,0.0562 +2016-12-24 12:00:00,0.0549 +2016-12-24 13:00:00,0.0551 +2016-12-24 14:00:00,0.0563 +2016-12-24 15:00:00,0.0582 +2016-12-24 16:00:00,0.0547 +2016-12-24 17:00:00,0.0457 +2016-12-24 18:00:00,0.0377 +2016-12-24 19:00:00,0.0303 +2016-12-24 20:00:00,0.0314 +2016-12-24 21:00:00,0.0324 +2016-12-24 22:00:00,0.0258 +2016-12-24 23:00:00,0.0083 +2016-12-25 00:00:00,0.0051 +2016-12-25 01:00:00,0.0049 +2016-12-25 02:00:00,0.0041 +2016-12-25 03:00:00,0.0041 +2016-12-25 04:00:00,0.0039 +2016-12-25 05:00:00,0.0043 +2016-12-25 06:00:00,0.0047 +2016-12-25 07:00:00,0.0056 +2016-12-25 08:00:00,0.0073 +2016-12-25 09:00:00,0.0237 +2016-12-25 10:00:00,0.0344 +2016-12-25 11:00:00,0.0475 +2016-12-25 12:00:00,0.0519 +2016-12-25 13:00:00,0.0471 +2016-12-25 14:00:00,0.0506 +2016-12-25 15:00:00,0.0486 +2016-12-25 16:00:00,0.0459 +2016-12-25 17:00:00,0.0354 +2016-12-25 18:00:00,0.036 +2016-12-25 19:00:00,0.0409 +2016-12-25 20:00:00,0.0452 +2016-12-25 21:00:00,0.0429 +2016-12-25 22:00:00,0.0285 +2016-12-25 23:00:00,0.0107 +2016-12-26 00:00:00,0.0052 +2016-12-26 01:00:00,0.0042 +2016-12-26 02:00:00,0.0043 +2016-12-26 03:00:00,0.0046 +2016-12-26 04:00:00,0.006 +2016-12-26 05:00:00,0.0067 +2016-12-26 06:00:00,0.0112 +2016-12-26 07:00:00,0.0164 +2016-12-26 08:00:00,0.0276 +2016-12-26 09:00:00,0.0398 +2016-12-26 10:00:00,0.0542 +2016-12-26 11:00:00,0.0648 +2016-12-26 12:00:00,0.0658 +2016-12-26 13:00:00,0.0642 +2016-12-26 14:00:00,0.064 +2016-12-26 15:00:00,0.0653 +2016-12-26 16:00:00,0.0594 +2016-12-26 17:00:00,0.0569 +2016-12-26 18:00:00,0.0468 +2016-12-26 19:00:00,0.0374 +2016-12-26 20:00:00,0.0317 +2016-12-26 21:00:00,0.0237 +2016-12-26 22:00:00,0.0108 +2016-12-26 23:00:00,0.0058 +2016-12-27 00:00:00,0.0046 +2016-12-27 01:00:00,0.0045 +2016-12-27 02:00:00,0.0043 +2016-12-27 03:00:00,0.0052 +2016-12-27 04:00:00,0.0103 +2016-12-27 05:00:00,0.0473 +2016-12-27 06:00:00,0.0579 +2016-12-27 07:00:00,0.046 +2016-12-27 08:00:00,0.0479 +2016-12-27 09:00:00,0.056 +2016-12-27 10:00:00,0.0641 +2016-12-27 11:00:00,0.0701 +2016-12-27 12:00:00,0.0671 +2016-12-27 13:00:00,0.0636 +2016-12-27 14:00:00,0.0606 +2016-12-27 15:00:00,0.0625 +2016-12-27 16:00:00,0.0598 +2016-12-27 17:00:00,0.0551 +2016-12-27 18:00:00,0.0469 +2016-12-27 19:00:00,0.0331 +2016-12-27 20:00:00,0.0258 +2016-12-27 21:00:00,0.0205 +2016-12-27 22:00:00,0.0091 +2016-12-27 23:00:00,0.0055 +2016-12-28 00:00:00,0.0048 +2016-12-28 01:00:00,0.0045 +2016-12-28 02:00:00,0.0042 +2016-12-28 03:00:00,0.005 +2016-12-28 04:00:00,0.0106 +2016-12-28 05:00:00,0.0461 +2016-12-28 06:00:00,0.0586 +2016-12-28 07:00:00,0.0474 +2016-12-28 08:00:00,0.0495 +2016-12-28 09:00:00,0.0573 +2016-12-28 10:00:00,0.0677 +2016-12-28 11:00:00,0.068 +2016-12-28 12:00:00,0.0652 +2016-12-28 13:00:00,0.0636 +2016-12-28 14:00:00,0.0645 +2016-12-28 15:00:00,0.0609 +2016-12-28 16:00:00,0.0612 +2016-12-28 17:00:00,0.0593 +2016-12-28 18:00:00,0.0475 +2016-12-28 19:00:00,0.0349 +2016-12-28 20:00:00,0.0279 +2016-12-28 21:00:00,0.0223 +2016-12-28 22:00:00,0.0086 +2016-12-28 23:00:00,0.0055 +2016-12-29 00:00:00,0.0048 +2016-12-29 01:00:00,0.0044 +2016-12-29 02:00:00,0.0044 +2016-12-29 03:00:00,0.0054 +2016-12-29 04:00:00,0.0149 +2016-12-29 05:00:00,0.0436 +2016-12-29 06:00:00,0.0592 +2016-12-29 07:00:00,0.0478 +2016-12-29 08:00:00,0.0504 +2016-12-29 09:00:00,0.0594 +2016-12-29 10:00:00,0.0658 +2016-12-29 11:00:00,0.0676 +2016-12-29 12:00:00,0.0597 +2016-12-29 13:00:00,0.0682 +2016-12-29 14:00:00,0.0633 +2016-12-29 15:00:00,0.0626 +2016-12-29 16:00:00,0.0625 +2016-12-29 17:00:00,0.0557 +2016-12-29 18:00:00,0.0495 +2016-12-29 19:00:00,0.0352 +2016-12-29 20:00:00,0.0287 +2016-12-29 21:00:00,0.0207 +2016-12-29 22:00:00,0.0085 +2016-12-29 23:00:00,0.0061 +2016-12-30 00:00:00,0.0046 +2016-12-30 01:00:00,0.0044 +2016-12-30 02:00:00,0.0046 +2016-12-30 03:00:00,0.005 +2016-12-30 04:00:00,0.0065 +2016-12-30 05:00:00,0.033 +2016-12-30 06:00:00,0.0505 +2016-12-30 07:00:00,0.0424 +2016-12-30 08:00:00,0.0467 +2016-12-30 09:00:00,0.0542 +2016-12-30 10:00:00,0.061 +2016-12-30 11:00:00,0.0667 +2016-12-30 12:00:00,0.0643 +2016-12-30 13:00:00,0.0562 +2016-12-30 14:00:00,0.0666 +2016-12-30 15:00:00,0.0689 +2016-12-30 16:00:00,0.0629 +2016-12-30 17:00:00,0.0431 +2016-12-30 18:00:00,0.0542 +2016-12-30 19:00:00,0.0385 +2016-12-30 20:00:00,0.0289 +2016-12-30 21:00:00,0.0248 +2016-12-30 22:00:00,0.0205 +2016-12-30 23:00:00,0.0076 +2016-12-31 00:00:00,0.0053 +2016-12-31 01:00:00,0.0049 +2016-12-31 02:00:00,0.0045 +2016-12-31 03:00:00,0.0045 +2016-12-31 04:00:00,0.0049 +2016-12-31 05:00:00,0.0055 +2016-12-31 06:00:00,0.0107 +2016-12-31 07:00:00,0.0252 +2016-12-31 08:00:00,0.0367 +2016-12-31 09:00:00,0.0464 +2016-12-31 10:00:00,0.0536 +2016-12-31 11:00:00,0.0574 +2016-12-31 12:00:00,0.0574 +2016-12-31 13:00:00,0.058 +2016-12-31 14:00:00,0.0599 +2016-12-31 15:00:00,0.0615 +2016-12-31 16:00:00,0.0609 +2016-12-31 17:00:00,0.0586 +2016-12-31 18:00:00,0.0547 +2016-12-31 19:00:00,0.0342 +2016-12-31 20:00:00,0.0285 +2016-12-31 21:00:00,0.0276 +2016-12-31 22:00:00,0.0232 +2016-12-31 23:00:00,0.009 diff --git a/greykite/data/hourly/hourly_solarpower.csv b/greykite/data/hourly/hourly_solarpower.csv new file mode 100644 index 0000000..c1cd9d1 --- /dev/null +++ b/greykite/data/hourly/hourly_solarpower.csv @@ -0,0 +1,8221 @@ +ts,y +2019-08-01 00:00:00,0.0 +2019-08-01 01:00:00,0.0 +2019-08-01 02:00:00,0.0 +2019-08-01 03:00:00,0.0 +2019-08-01 04:00:00,0.0 +2019-08-01 05:00:00,0.0 +2019-08-01 06:00:00,0.0 +2019-08-01 07:00:00,19.952000000000155 +2019-08-01 08:00:00,73.69044444444377 +2019-08-01 09:00:00,92.77000000000042 +2019-08-01 10:00:00,95.23777777777835 +2019-08-01 11:00:00,98.09944444444493 +2019-08-01 12:00:00,102.26011111111202 +2019-08-01 13:00:00,102.74866666666665 +2019-08-01 14:00:00,106.76577777777696 +2019-08-01 15:00:00,34.507222222222055 +2019-08-01 16:00:00,10.731111111111112 +2019-08-01 17:00:00,2.8177777777778004 +2019-08-01 18:00:00,0.0 +2019-08-01 19:00:00,0.0 +2019-08-01 20:00:00,0.0 +2019-08-01 21:00:00,0.0 +2019-08-01 22:00:00,0.0 +2019-08-01 23:00:00,0.0 +2019-08-02 00:00:00,0.0 +2019-08-02 01:00:00,0.0 +2019-08-02 02:00:00,0.0 +2019-08-02 03:00:00,0.0 +2019-08-02 04:00:00,0.0 +2019-08-02 05:00:00,0.0 +2019-08-02 06:00:00,0.07777777777777778 +2019-08-02 07:00:00,26.0536666666665 +2019-08-02 08:00:00,83.05066666666683 +2019-08-02 09:00:00,95.55333333333273 +2019-08-02 10:00:00,87.75555555555543 +2019-08-02 11:00:00,0.0 +2019-08-02 12:00:00,0.0 +2019-08-02 13:00:00,0.0 +2019-08-02 14:00:00,0.0 +2019-08-02 15:00:00,0.0 +2019-08-02 16:00:00,0.0 +2019-08-02 17:00:00,0.0 +2019-08-02 18:00:00,0.0 +2019-08-02 19:00:00,2.3733333333333233 +2019-08-02 20:00:00,25.326111111111118 +2019-08-02 21:00:00,82.96155555555562 +2019-08-02 22:00:00,94.03777777777829 +2019-08-02 23:00:00,95.01666666666723 +2019-08-03 00:00:00,95.5014444444436 +2019-08-03 01:00:00,86.85933333333377 +2019-08-03 02:00:00,66.44122222222246 +2019-08-03 03:00:00,105.54677777777734 +2019-08-03 04:00:00,74.9819999999988 +2019-08-03 05:00:00,33.15911111111159 +2019-08-03 06:00:00,0.7029999999999985 +2019-08-03 07:00:00,0.0 +2019-08-03 08:00:00,0.0 +2019-08-03 09:00:00,0.0 +2019-08-03 10:00:00,0.0 +2019-08-03 11:00:00,0.0 +2019-08-03 12:00:00,0.0 +2019-08-03 13:00:00,0.0 +2019-08-03 14:00:00,0.0 +2019-08-03 15:00:00,0.0 +2019-08-03 16:00:00,0.0 +2019-08-03 17:00:00,0.0 +2019-08-03 18:00:00,0.0 +2019-08-03 19:00:00,8.218000000000025 +2019-08-03 20:00:00,64.74755555555569 +2019-08-03 21:00:00,95.36555555555556 +2019-08-03 22:00:00,98.12333333333333 +2019-08-03 23:00:00,99.73100000000117 +2019-08-04 00:00:00,101.86266666666756 +2019-08-04 01:00:00,101.8719999999999 +2019-08-04 02:00:00,80.1863333333346 +2019-08-04 03:00:00,62.80944444444517 +2019-08-04 04:00:00,50.99766666666542 +2019-08-04 05:00:00,20.35011111111127 +2019-08-04 06:00:00,0.22555555555555556 +2019-08-04 07:00:00,0.0 +2019-08-04 08:00:00,0.0 +2019-08-04 09:00:00,0.0 +2019-08-04 10:00:00,0.0 +2019-08-04 11:00:00,0.0 +2019-08-04 12:00:00,0.0 +2019-08-04 13:00:00,0.0 +2019-08-04 14:00:00,0.0 +2019-08-04 15:00:00,0.0 +2019-08-04 16:00:00,0.0 +2019-08-04 17:00:00,0.0 +2019-08-04 18:00:00,0.0 +2019-08-04 19:00:00,8.766555555555554 +2019-08-04 20:00:00,40.06422222222175 +2019-08-04 21:00:00,52.04933333333299 +2019-08-04 22:00:00,76.64933333333337 +2019-08-04 23:00:00,76.0466666666677 +2019-08-05 00:00:00,100.38455555555444 +2019-08-05 01:00:00,98.84888888888811 +2019-08-05 02:00:00,98.05777777777705 +2019-08-05 03:00:00,96.80033333333442 +2019-08-05 04:00:00,69.93899999999874 +2019-08-05 05:00:00,24.373555555555306 +2019-08-05 06:00:00,0.4304444444444455 +2019-08-05 07:00:00,0.0 +2019-08-05 08:00:00,0.0 +2019-08-05 09:00:00,0.0 +2019-08-05 10:00:00,0.0 +2019-08-05 11:00:00,0.0 +2019-08-05 12:00:00,0.0 +2019-08-05 13:00:00,0.0 +2019-08-05 14:00:00,0.0 +2019-08-05 15:00:00,0.0 +2019-08-05 16:00:00,0.0 +2019-08-05 17:00:00,0.0 +2019-08-05 18:00:00,0.0 +2019-08-05 19:00:00,12.265555555555668 +2019-08-05 20:00:00,71.95333333333343 +2019-08-05 21:00:00,102.46777777777874 +2019-08-05 22:00:00,107.18111111111227 +2019-08-05 23:00:00,108.32333333333453 +2019-08-06 00:00:00,109.39111111111235 +2019-08-06 01:00:00,112.26111111111248 +2019-08-06 02:00:00,113.49888888889033 +2019-08-06 03:00:00,111.6033333333347 +2019-08-06 04:00:00,83.67133333333305 +2019-08-06 05:00:00,31.766666666666605 +2019-08-06 06:00:00,0.19933333333333314 +2019-08-06 07:00:00,0.0 +2019-08-06 08:00:00,0.0 +2019-08-06 09:00:00,0.0 +2019-08-06 10:00:00,0.0 +2019-08-06 11:00:00,0.0 +2019-08-06 12:00:00,0.0 +2019-08-06 13:00:00,0.0 +2019-08-06 14:00:00,0.0 +2019-08-06 15:00:00,0.0 +2019-08-06 16:00:00,0.0 +2019-08-06 17:00:00,0.0 +2019-08-06 18:00:00,0.0 +2019-08-06 19:00:00,15.347777777777718 +2019-08-06 20:00:00,77.67322222222084 +2019-08-06 21:00:00,101.99999999999834 +2019-08-06 22:00:00,105.14777777777607 +2019-08-06 23:00:00,106.48999999999828 +2019-08-07 00:00:00,109.21311111111312 +2019-08-07 01:00:00,110.54033333333136 +2019-08-07 02:00:00,109.77933333333229 +2019-08-07 03:00:00,108.97644444444637 +2019-08-07 04:00:00,80.15711111111078 +2019-08-07 05:00:00,25.49800000000011 +2019-08-07 06:00:00,0.0 +2019-08-07 07:00:00,0.0 +2019-08-07 08:00:00,0.0 +2019-08-07 09:00:00,0.0 +2019-08-07 10:00:00,0.0 +2019-08-07 11:00:00,0.0 +2019-08-07 12:00:00,0.0 +2019-08-07 13:00:00,0.0 +2019-08-07 14:00:00,0.0 +2019-08-07 15:00:00,0.0 +2019-08-07 16:00:00,0.0 +2019-08-07 17:00:00,0.0 +2019-08-07 18:00:00,0.0 +2019-08-07 19:00:00,18.22455555555573 +2019-08-07 20:00:00,75.06011111111067 +2019-08-07 21:00:00,98.44677777777557 +2019-08-07 22:00:00,101.03111111111025 +2019-08-07 23:00:00,102.98777777777678 +2019-08-08 00:00:00,102.90088888888887 +2019-08-08 01:00:00,106.41355555555647 +2019-08-08 02:00:00,103.85577777777686 +2019-08-08 03:00:00,93.04333333333402 +2019-08-08 04:00:00,74.88277777777819 +2019-08-08 05:00:00,23.12533333333299 +2019-08-08 06:00:00,0.08399999999999999 +2019-08-08 07:00:00,0.0 +2019-08-08 08:00:00,0.0 +2019-08-08 09:00:00,0.0 +2019-08-08 10:00:00,0.0 +2019-08-08 11:00:00,0.0 +2019-08-08 12:00:00,0.0 +2019-08-08 13:00:00,0.0 +2019-08-08 14:00:00,0.0 +2019-08-08 15:00:00,0.0 +2019-08-08 16:00:00,0.0 +2019-08-08 17:00:00,0.0 +2019-08-08 18:00:00,0.0 +2019-08-08 19:00:00,18.349222222222323 +2019-08-08 20:00:00,75.68944444444499 +2019-08-08 21:00:00,97.82766666666528 +2019-08-08 22:00:00,100.82555555555469 +2019-08-08 23:00:00,98.49944444444573 +2019-08-09 00:00:00,104.63411111111076 +2019-08-09 01:00:00,106.29855555555598 +2019-08-09 02:00:00,108.89999999999876 +2019-08-09 03:00:00,107.02566666666797 +2019-08-09 04:00:00,75.71244444444403 +2019-08-09 05:00:00,23.948333333333377 +2019-08-09 06:00:00,0.10266666666666674 +2019-08-09 07:00:00,0.0 +2019-08-09 08:00:00,0.0 +2019-08-09 09:00:00,0.0 +2019-08-09 10:00:00,0.0 +2019-08-09 11:00:00,0.0 +2019-08-09 12:00:00,0.0 +2019-08-09 13:00:00,0.0 +2019-08-09 14:00:00,0.0 +2019-08-09 15:00:00,0.0 +2019-08-09 16:00:00,0.0 +2019-08-09 17:00:00,0.0 +2019-08-09 18:00:00,0.0 +2019-08-09 19:00:00,14.852555555555673 +2019-08-09 20:00:00,69.95833333333304 +2019-08-09 21:00:00,93.88311111110949 +2019-08-09 22:00:00,99.05222222222058 +2019-08-09 23:00:00,100.22111111110945 +2019-08-10 00:00:00,103.82266666666823 +2019-08-10 01:00:00,107.86777777777951 +2019-08-10 02:00:00,89.64144444444399 +2019-08-10 03:00:00,88.62788888888913 +2019-08-10 04:00:00,74.27711111111105 +2019-08-10 05:00:00,7.7891111111111035 +2019-08-10 06:00:00,0.0 +2019-08-10 07:00:00,0.0 +2019-08-10 08:00:00,0.0 +2019-08-10 09:00:00,0.0 +2019-08-10 10:00:00,0.0 +2019-08-10 11:00:00,0.0 +2019-08-10 12:00:00,0.0 +2019-08-10 13:00:00,0.0 +2019-08-10 14:00:00,0.0 +2019-08-10 15:00:00,0.0 +2019-08-10 16:00:00,0.0 +2019-08-10 17:00:00,0.0 +2019-08-10 18:00:00,0.0 +2019-08-10 19:00:00,12.40755555555559 +2019-08-10 20:00:00,30.237333333333655 +2019-08-10 21:00:00,71.72233333333416 +2019-08-10 22:00:00,100.61777777777944 +2019-08-10 23:00:00,96.925222222223 +2019-08-11 00:00:00,105.18622222222322 +2019-08-11 01:00:00,71.15011111111178 +2019-08-11 02:00:00,82.87277777777776 +2019-08-11 03:00:00,16.41955555555592 +2019-08-11 04:00:00,50.84322222222277 +2019-08-11 05:00:00,24.066111111111212 +2019-08-11 06:00:00,0.039 +2019-08-11 07:00:00,0.0 +2019-08-11 08:00:00,0.0 +2019-08-11 09:00:00,0.0 +2019-08-11 10:00:00,0.0 +2019-08-11 11:00:00,0.0 +2019-08-11 12:00:00,0.0 +2019-08-11 13:00:00,0.0 +2019-08-11 14:00:00,0.0 +2019-08-11 15:00:00,0.0 +2019-08-11 16:00:00,0.0 +2019-08-11 17:00:00,0.0 +2019-08-11 18:00:00,0.0 +2019-08-11 19:00:00,19.863444444444568 +2019-08-11 20:00:00,78.11422222222248 +2019-08-11 21:00:00,97.16333333333333 +2019-08-11 22:00:00,100.27222222222223 +2019-08-11 23:00:00,101.60666666666667 +2019-08-12 00:00:00,103.80344444444398 +2019-08-12 01:00:00,104.72766666666494 +2019-08-12 02:00:00,110.21811111111239 +2019-08-12 03:00:00,105.40555555555572 +2019-08-12 04:00:00,76.50699999999891 +2019-08-12 05:00:00,16.976555555555105 +2019-08-12 06:00:00,0.12222222222222232 +2019-08-12 07:00:00,0.0 +2019-08-12 08:00:00,0.0 +2019-08-12 09:00:00,0.0 +2019-08-12 10:00:00,0.0 +2019-08-12 11:00:00,0.0 +2019-08-12 12:00:00,0.0 +2019-08-12 13:00:00,0.0 +2019-08-12 14:00:00,0.0 +2019-08-12 15:00:00,0.0 +2019-08-12 16:00:00,0.0 +2019-08-12 17:00:00,0.0 +2019-08-12 18:00:00,0.0 +2019-08-12 19:00:00,11.060777777777883 +2019-08-12 20:00:00,68.85333333333324 +2019-08-12 21:00:00,95.27422222222347 +2019-08-12 22:00:00,98.20888888888963 +2019-08-12 23:00:00,99.73777777777859 +2019-08-13 00:00:00,88.76144444444438 +2019-08-13 01:00:00,103.82211111111226 +2019-08-13 02:00:00,108.38622222222162 +2019-08-13 03:00:00,104.52333333333333 +2019-08-13 04:00:00,74.72244444444509 +2019-08-13 05:00:00,23.8895555555562 +2019-08-13 06:00:00,0.0 +2019-08-13 07:00:00,0.0 +2019-08-13 08:00:00,0.0 +2019-08-13 09:00:00,0.0 +2019-08-13 10:00:00,0.0 +2019-08-13 11:00:00,0.0 +2019-08-13 12:00:00,0.0 +2019-08-13 13:00:00,0.0 +2019-08-13 14:00:00,0.0 +2019-08-13 15:00:00,0.0 +2019-08-13 16:00:00,0.0 +2019-08-13 17:00:00,0.0 +2019-08-13 18:00:00,0.0 +2019-08-13 19:00:00,20.358111111111125 +2019-08-13 20:00:00,77.83000000000013 +2019-08-13 21:00:00,96.53444444444445 +2019-08-13 22:00:00,100.20777777777778 +2019-08-13 23:00:00,102.60888888888888 +2019-08-14 00:00:00,105.58600000000153 +2019-08-14 01:00:00,107.88522222222184 +2019-08-14 02:00:00,109.14 +2019-08-14 03:00:00,106.08444444444444 +2019-08-14 04:00:00,73.56877777777694 +2019-08-14 05:00:00,24.15500000000071 +2019-08-14 06:00:00,0.08266666666666667 +2019-08-14 07:00:00,0.0 +2019-08-14 08:00:00,0.0 +2019-08-14 09:00:00,0.0 +2019-08-14 10:00:00,0.0 +2019-08-14 11:00:00,0.0 +2019-08-14 12:00:00,0.0 +2019-08-14 13:00:00,0.0 +2019-08-14 14:00:00,0.0 +2019-08-14 15:00:00,0.0 +2019-08-14 16:00:00,0.0 +2019-08-14 17:00:00,0.0 +2019-08-14 18:00:00,0.0 +2019-08-14 19:00:00,19.437777777777963 +2019-08-14 20:00:00,76.66322222222233 +2019-08-14 21:00:00,100.46377777777903 +2019-08-14 22:00:00,103.35777777777878 +2019-08-14 23:00:00,104.19666666666768 +2019-08-15 00:00:00,104.55266666666667 +2019-08-15 01:00:00,108.03888888888889 +2019-08-15 02:00:00,109.0 +2019-08-15 03:00:00,106.66311111111096 +2019-08-15 04:00:00,74.8053333333347 +2019-08-15 05:00:00,22.86266666666668 +2019-08-15 06:00:00,0.16944444444444445 +2019-08-15 07:00:00,0.0 +2019-08-15 08:00:00,0.0 +2019-08-15 09:00:00,0.0 +2019-08-15 10:00:00,0.0 +2019-08-15 11:00:00,0.0 +2019-08-15 12:00:00,0.0 +2019-08-15 13:00:00,0.0 +2019-08-15 14:00:00,0.0 +2019-08-15 15:00:00,0.0 +2019-08-15 16:00:00,0.0 +2019-08-15 17:00:00,0.0 +2019-08-15 18:00:00,0.0 +2019-08-15 19:00:00,23.13266666666651 +2019-08-15 20:00:00,83.0528888888894 +2019-08-15 21:00:00,104.82111111111215 +2019-08-15 22:00:00,106.57422222222297 +2019-08-15 23:00:00,106.47077777777902 +2019-08-16 00:00:00,108.02555555555675 +2019-08-16 01:00:00,110.31466666666485 +2019-08-16 02:00:00,112.48222222222043 +2019-08-16 03:00:00,110.63666666666485 +2019-08-16 04:00:00,80.00966666666642 +2019-08-16 05:00:00,25.511444444444678 +2019-08-16 06:00:00,0.0 +2019-08-16 07:00:00,0.0 +2019-08-16 08:00:00,0.0 +2019-08-16 09:00:00,0.0 +2019-08-16 10:00:00,0.0 +2019-08-16 11:00:00,0.0 +2019-08-16 12:00:00,0.0 +2019-08-16 13:00:00,0.0 +2019-08-16 14:00:00,0.0 +2019-08-16 15:00:00,0.0 +2019-08-16 16:00:00,0.0 +2019-08-16 17:00:00,0.0 +2019-08-16 18:00:00,0.0 +2019-08-16 19:00:00,23.777000000000157 +2019-08-16 20:00:00,87.58988888888929 +2019-08-16 21:00:00,105.7911111111111 +2019-08-16 22:00:00,107.2911111111111 +2019-08-16 23:00:00,110.12 +2019-08-17 00:00:00,112.69666666666667 +2019-08-17 01:00:00,114.5 +2019-08-17 02:00:00,115.45777777777778 +2019-08-17 03:00:00,113.54888888888888 +2019-08-17 04:00:00,80.93255555555693 +2019-08-17 05:00:00,26.38522222222273 +2019-08-17 06:00:00,0.0 +2019-08-17 07:00:00,0.0 +2019-08-17 08:00:00,0.0 +2019-08-17 09:00:00,0.0 +2019-08-17 10:00:00,0.0 +2019-08-17 11:00:00,0.0 +2019-08-17 12:00:00,0.0 +2019-08-17 13:00:00,0.0 +2019-08-17 14:00:00,0.0 +2019-08-17 15:00:00,0.0 +2019-08-17 16:00:00,0.0 +2019-08-17 17:00:00,0.0 +2019-08-17 18:00:00,0.022222222222222223 +2019-08-17 19:00:00,29.561888888888905 +2019-08-17 20:00:00,90.85255555555504 +2019-08-17 21:00:00,108.09666666666547 +2019-08-17 22:00:00,109.39999999999874 +2019-08-17 23:00:00,108.48444444444321 +2019-08-18 00:00:00,109.87777777777652 +2019-08-18 01:00:00,111.90766666666603 +2019-08-18 02:00:00,114.38555555555556 +2019-08-18 03:00:00,112.8404444444433 +2019-08-18 04:00:00,80.99988888888913 +2019-08-18 05:00:00,25.21655555555625 +2019-08-18 06:00:00,0.0 +2019-08-18 07:00:00,0.0 +2019-08-18 08:00:00,0.0 +2019-08-18 09:00:00,0.0 +2019-08-18 10:00:00,0.0 +2019-08-18 11:00:00,0.0 +2019-08-18 12:00:00,0.0 +2019-08-18 13:00:00,0.0 +2019-08-18 14:00:00,0.0 +2019-08-18 15:00:00,0.0 +2019-08-18 16:00:00,0.0 +2019-08-18 17:00:00,0.0 +2019-08-18 18:00:00,0.0 +2019-08-18 19:00:00,25.00655555555573 +2019-08-18 20:00:00,83.33755555555625 +2019-08-18 21:00:00,100.62777777777778 +2019-08-18 22:00:00,97.70088888888903 +2019-08-18 23:00:00,93.7572222222217 +2019-08-19 00:00:00,61.580444444444744 +2019-08-19 01:00:00,87.78877777777834 +2019-08-19 02:00:00,114.31033333333434 +2019-08-19 03:00:00,87.20511111111142 +2019-08-19 04:00:00,32.66755555555599 +2019-08-19 05:00:00,7.659555555555349 +2019-08-19 06:00:00,0.0 +2019-08-19 07:00:00,0.0 +2019-08-19 08:00:00,0.0 +2019-08-19 09:00:00,0.0 +2019-08-19 10:00:00,0.0 +2019-08-19 11:00:00,0.0 +2019-08-19 12:00:00,0.0 +2019-08-19 13:00:00,0.0 +2019-08-19 14:00:00,0.0 +2019-08-19 15:00:00,0.0 +2019-08-19 16:00:00,0.0 +2019-08-19 17:00:00,0.0 +2019-08-19 18:00:00,0.07777777777777778 +2019-08-19 19:00:00,27.388444444444385 +2019-08-19 20:00:00,41.679777777778106 +2019-08-19 21:00:00,93.70722222222119 +2019-08-19 22:00:00,71.2863333333343 +2019-08-19 23:00:00,75.49377777777863 +2019-08-20 00:00:00,89.57499999999965 +2019-08-20 01:00:00,81.50444444444365 +2019-08-20 02:00:00,27.3706666666667 +2019-08-20 03:00:00,73.08044444444376 +2019-08-20 04:00:00,79.63044444444549 +2019-08-20 05:00:00,24.58877777777731 +2019-08-20 06:00:00,0.14233333333333317 +2019-08-20 07:00:00,0.0 +2019-08-20 08:00:00,0.0 +2019-08-20 09:00:00,0.0 +2019-08-20 10:00:00,0.0 +2019-08-20 11:00:00,0.0 +2019-08-20 12:00:00,0.0 +2019-08-20 13:00:00,0.0 +2019-08-20 14:00:00,0.0 +2019-08-20 15:00:00,0.0 +2019-08-20 16:00:00,0.0 +2019-08-20 17:00:00,0.0 +2019-08-20 18:00:00,0.0 +2019-08-20 19:00:00,20.92822222222223 +2019-08-20 20:00:00,85.55311111111126 +2019-08-20 21:00:00,102.16222222222315 +2019-08-20 22:00:00,104.29622222222281 +2019-08-20 23:00:00,96.35822222222144 +2019-08-21 00:00:00,90.99766666666685 +2019-08-21 01:00:00,111.75933333333316 +2019-08-21 02:00:00,110.28400000000016 +2019-08-21 03:00:00,101.49522222222149 +2019-08-21 04:00:00,78.95177777777701 +2019-08-21 05:00:00,25.600111111110984 +2019-08-21 06:00:00,0.0 +2019-08-21 07:00:00,0.0 +2019-08-21 08:00:00,0.0 +2019-08-21 09:00:00,0.0 +2019-08-21 10:00:00,0.0 +2019-08-21 11:00:00,0.0 +2019-08-21 12:00:00,0.0 +2019-08-21 13:00:00,0.0 +2019-08-21 14:00:00,0.0 +2019-08-21 15:00:00,0.0 +2019-08-21 16:00:00,0.0 +2019-08-21 17:00:00,0.0 +2019-08-21 18:00:00,0.09333333333333334 +2019-08-21 19:00:00,26.87133333333329 +2019-08-21 20:00:00,83.50688888888918 +2019-08-21 21:00:00,103.12666666666834 +2019-08-21 22:00:00,105.29888888889062 +2019-08-21 23:00:00,106.42533333333411 +2019-08-22 00:00:00,110.20999999999873 +2019-08-22 01:00:00,109.79222222222097 +2019-08-22 02:00:00,105.0161111111097 +2019-08-22 03:00:00,78.57333333333419 +2019-08-22 04:00:00,39.898222222222195 +2019-08-22 05:00:00,25.992888888888988 +2019-08-22 06:00:00,0.0 +2019-08-22 07:00:00,0.0 +2019-08-22 08:00:00,0.0 +2019-08-22 09:00:00,0.0 +2019-08-22 10:00:00,0.0 +2019-08-22 11:00:00,0.0 +2019-08-22 12:00:00,0.0 +2019-08-22 13:00:00,0.0 +2019-08-22 14:00:00,0.0 +2019-08-22 15:00:00,0.0 +2019-08-22 16:00:00,0.0 +2019-08-22 17:00:00,0.0 +2019-08-22 18:00:00,0.0 +2019-08-22 19:00:00,17.515000000000228 +2019-08-22 20:00:00,84.20988888888868 +2019-08-22 21:00:00,102.51111111111129 +2019-08-22 22:00:00,105.9876666666663 +2019-08-22 23:00:00,107.55155555555734 +2019-08-23 00:00:00,109.64833333333421 +2019-08-23 01:00:00,112.56355555555393 +2019-08-23 02:00:00,104.35955555555498 +2019-08-23 03:00:00,107.4979999999982 +2019-08-23 04:00:00,74.09588888888875 +2019-08-23 05:00:00,25.569444444444283 +2019-08-23 06:00:00,0.030555555555555555 +2019-08-23 07:00:00,0.0 +2019-08-23 08:00:00,0.0 +2019-08-23 09:00:00,0.0 +2019-08-23 10:00:00,0.0 +2019-08-23 11:00:00,0.0 +2019-08-23 12:00:00,0.0 +2019-08-23 13:00:00,0.0 +2019-08-23 14:00:00,0.0 +2019-08-23 15:00:00,0.0 +2019-08-23 16:00:00,0.0 +2019-08-23 17:00:00,0.0 +2019-08-23 18:00:00,0.0 +2019-08-23 19:00:00,9.481333333333401 +2019-08-23 20:00:00,28.737000000000116 +2019-08-23 21:00:00,58.71488888888958 +2019-08-23 22:00:00,85.53711111111035 +2019-08-23 23:00:00,88.51566666666622 +2019-08-24 00:00:00,109.50533333333209 +2019-08-24 01:00:00,114.20888888888656 +2019-08-24 02:00:00,99.54844444444477 +2019-08-24 03:00:00,77.77566666666705 +2019-08-24 04:00:00,37.35488888888875 +2019-08-24 05:00:00,25.365222222222858 +2019-08-24 06:00:00,0.13600000000000012 +2019-08-24 07:00:00,0.0 +2019-08-24 08:00:00,0.0 +2019-08-24 09:00:00,0.0 +2019-08-24 10:00:00,0.0 +2019-08-24 11:00:00,0.0 +2019-08-24 12:00:00,0.0 +2019-08-24 13:00:00,0.0 +2019-08-24 14:00:00,0.0 +2019-08-24 15:00:00,0.0 +2019-08-24 16:00:00,0.0 +2019-08-24 17:00:00,0.0 +2019-08-24 18:00:00,0.06666666666666667 +2019-08-24 19:00:00,30.244333333333213 +2019-08-24 20:00:00,87.1574444444444 +2019-08-24 21:00:00,102.51477777777693 +2019-08-24 22:00:00,106.36555555555442 +2019-08-24 23:00:00,107.55444444444326 +2019-08-25 00:00:00,110.82922222222247 +2019-08-25 01:00:00,106.39144444444335 +2019-08-25 02:00:00,78.05011111111072 +2019-08-25 03:00:00,52.80355555555511 +2019-08-25 04:00:00,70.95366666666723 +2019-08-25 05:00:00,19.390666666666515 +2019-08-25 06:00:00,0.1417777777777779 +2019-08-25 07:00:00,0.0 +2019-08-25 08:00:00,0.0 +2019-08-25 09:00:00,0.0 +2019-08-25 10:00:00,0.0 +2019-08-25 11:00:00,0.0 +2019-08-25 12:00:00,0.0 +2019-08-25 13:00:00,0.0 +2019-08-25 14:00:00,0.0 +2019-08-25 15:00:00,0.0 +2019-08-25 16:00:00,0.0 +2019-08-25 17:00:00,0.0 +2019-08-25 18:00:00,0.28555555555555556 +2019-08-25 19:00:00,29.45255555555586 +2019-08-25 20:00:00,88.51744444444431 +2019-08-25 21:00:00,103.66055555555552 +2019-08-25 22:00:00,105.77411111111128 +2019-08-25 23:00:00,103.2301111111105 +2019-08-26 00:00:00,111.75433333333201 +2019-08-26 01:00:00,115.06977777777647 +2019-08-26 02:00:00,84.26755555555597 +2019-08-26 03:00:00,109.23800000000135 +2019-08-26 04:00:00,78.39566666666717 +2019-08-26 05:00:00,25.240111111110902 +2019-08-26 06:00:00,0.0 +2019-08-26 07:00:00,0.0 +2019-08-26 08:00:00,0.0 +2019-08-26 09:00:00,0.0 +2019-08-26 10:00:00,0.0 +2019-08-26 11:00:00,0.0 +2019-08-26 12:00:00,0.0 +2019-08-26 13:00:00,0.0 +2019-08-26 14:00:00,0.0 +2019-08-26 15:00:00,0.0 +2019-08-26 16:00:00,0.0 +2019-08-26 17:00:00,0.0 +2019-08-26 18:00:00,0.2877777777777778 +2019-08-26 19:00:00,24.401555555555785 +2019-08-26 20:00:00,89.33755555555389 +2019-08-26 21:00:00,104.59222222222053 +2019-08-26 22:00:00,107.57055555555455 +2019-08-26 23:00:00,107.41588888888813 +2019-08-27 00:00:00,51.04700000000028 +2019-08-27 01:00:00,67.08744444444457 +2019-08-27 02:00:00,103.37477777777711 +2019-08-27 03:00:00,110.13411111111289 +2019-08-27 04:00:00,78.86122222222176 +2019-08-27 05:00:00,25.98777777777771 +2019-08-27 06:00:00,0.2346666666666663 +2019-08-27 07:00:00,0.0 +2019-08-27 08:00:00,0.0 +2019-08-27 09:00:00,0.0 +2019-08-27 10:00:00,0.0 +2019-08-27 11:00:00,0.0 +2019-08-27 12:00:00,0.0 +2019-08-27 13:00:00,0.0 +2019-08-27 14:00:00,0.0 +2019-08-27 15:00:00,0.0 +2019-08-27 16:00:00,0.0 +2019-08-27 17:00:00,0.0 +2019-08-27 18:00:00,0.5211111111111111 +2019-08-27 19:00:00,33.92233333333349 +2019-08-27 20:00:00,90.92666666666697 +2019-08-27 21:00:00,104.2088888888889 +2019-08-27 22:00:00,107.14555555555556 +2019-08-27 23:00:00,109.00888888888889 +2019-08-28 00:00:00,112.32444444444444 +2019-08-28 01:00:00,105.28044444444447 +2019-08-28 02:00:00,60.816777777778256 +2019-08-28 03:00:00,81.19766666666666 +2019-08-28 04:00:00,78.52266666666765 +2019-08-28 05:00:00,27.258222222222418 +2019-08-28 06:00:00,0.12266666666666677 +2019-08-28 07:00:00,0.0 +2019-08-28 08:00:00,0.0 +2019-08-28 09:00:00,0.0 +2019-08-28 10:00:00,0.0 +2019-08-28 11:00:00,0.0 +2019-08-28 12:00:00,0.0 +2019-08-28 13:00:00,0.0 +2019-08-28 14:00:00,0.0 +2019-08-28 15:00:00,0.0 +2019-08-28 16:00:00,0.0 +2019-08-28 17:00:00,0.0 +2019-08-28 18:00:00,0.5 +2019-08-28 19:00:00,37.785222222222586 +2019-08-28 20:00:00,96.53499999999816 +2019-08-28 21:00:00,108.67888888888714 +2019-08-28 22:00:00,110.41222222222045 +2019-08-28 23:00:00,112.10666666666488 +2019-08-29 00:00:00,113.57911111111073 +2019-08-29 01:00:00,114.69111111111292 +2019-08-29 02:00:00,114.80000000000183 +2019-08-29 03:00:00,113.72311111111293 +2019-08-29 04:00:00,84.92666666666595 +2019-08-29 05:00:00,29.377333333333333 +2019-08-29 06:00:00,0.12133333333333322 +2019-08-29 07:00:00,0.0 +2019-08-29 08:00:00,0.0 +2019-08-29 09:00:00,0.0 +2019-08-29 10:00:00,0.0 +2019-08-29 11:00:00,0.0 +2019-08-29 12:00:00,0.0 +2019-08-29 13:00:00,0.0 +2019-08-29 14:00:00,0.0 +2019-08-29 15:00:00,0.0 +2019-08-29 16:00:00,0.0 +2019-08-29 17:00:00,0.0 +2019-08-29 18:00:00,0.6459999999999996 +2019-08-29 19:00:00,40.40588888888853 +2019-08-29 20:00:00,98.65877777777683 +2019-08-29 21:00:00,105.99977777777859 +2019-08-29 22:00:00,17.322888888888844 +2019-08-29 23:00:00,0.9508888888888908 +2019-08-30 00:00:00,0.0 +2019-08-30 01:00:00,44.34433333333291 +2019-08-30 02:00:00,115.10000000000149 +2019-08-30 03:00:00,113.77111111111255 +2019-08-30 04:00:00,85.08877777777737 +2019-08-30 05:00:00,30.05611111111066 +2019-08-30 06:00:00,0.011555555555555557 +2019-08-30 07:00:00,0.0 +2019-08-30 08:00:00,0.0 +2019-08-30 09:00:00,0.0 +2019-08-30 10:00:00,0.0 +2019-08-30 11:00:00,0.0 +2019-08-30 12:00:00,0.0 +2019-08-30 13:00:00,0.0 +2019-08-30 14:00:00,0.0 +2019-08-30 15:00:00,0.0 +2019-08-30 16:00:00,0.0 +2019-08-30 17:00:00,0.0 +2019-08-30 18:00:00,0.7140000000000006 +2019-08-30 19:00:00,39.60199999999956 +2019-08-30 20:00:00,93.99677777777714 +2019-08-30 21:00:00,105.43666666666563 +2019-08-30 22:00:00,91.3695555555558 +2019-08-30 23:00:00,13.663333333333304 +2019-08-31 00:00:00,12.273333333333317 +2019-08-31 01:00:00,110.32111111110981 +2019-08-31 02:00:00,112.57988888888906 +2019-08-31 03:00:00,112.25555555555465 +2019-08-31 04:00:00,78.28288888888804 +2019-08-31 05:00:00,26.814444444444142 +2019-08-31 06:00:00,0.09244444444444441 +2019-08-31 07:00:00,0.0 +2019-08-31 08:00:00,0.0 +2019-08-31 09:00:00,0.0 +2019-08-31 10:00:00,0.0 +2019-08-31 11:00:00,0.0 +2019-08-31 12:00:00,0.0 +2019-08-31 13:00:00,0.0 +2019-08-31 14:00:00,0.0 +2019-08-31 15:00:00,0.0 +2019-08-31 16:00:00,0.0 +2019-08-31 17:00:00,0.0 +2019-08-31 18:00:00,0.6172222222222208 +2019-08-31 19:00:00,30.939111111111014 +2019-08-31 20:00:00,84.20066666666692 +2019-08-31 21:00:00,108.21466666666672 +2019-08-31 22:00:00,108.15111111111231 +2019-08-31 23:00:00,108.92800000000001 +2019-09-01 00:00:00,110.36111111111111 +2019-09-01 01:00:00,112.56055555555746 +2019-09-01 02:00:00,114.46000000000149 +2019-09-01 03:00:00,112.14166666666804 +2019-09-01 04:00:00,82.66288888888856 +2019-09-01 05:00:00,27.94133333333304 +2019-09-01 06:00:00,0.06933333333333336 +2019-09-01 07:00:00,0.0 +2019-09-01 08:00:00,0.0 +2019-09-01 09:00:00,0.0 +2019-09-01 10:00:00,0.0 +2019-09-01 11:00:00,0.0 +2019-09-01 12:00:00,0.0 +2019-09-01 13:00:00,0.0 +2019-09-01 14:00:00,0.0 +2019-09-01 15:00:00,0.0 +2019-09-01 16:00:00,0.0 +2019-09-01 17:00:00,0.0 +2019-09-01 18:00:00,0.9788888888888889 +2019-09-01 19:00:00,32.712111111111014 +2019-09-01 20:00:00,86.47311111111154 +2019-09-01 21:00:00,104.61333333333437 +2019-09-01 22:00:00,106.61000000000114 +2019-09-01 23:00:00,107.22444444444561 +2019-09-02 00:00:00,109.28666666666791 +2019-09-02 01:00:00,110.60333333333463 +2019-09-02 02:00:00,112.10000000000137 +2019-09-02 03:00:00,110.16333333333469 +2019-09-02 04:00:00,79.35844444444545 +2019-09-02 05:00:00,27.09155555555533 +2019-09-02 06:00:00,0.18611111111111112 +2019-09-02 07:00:00,0.0 +2019-09-02 08:00:00,0.0 +2019-09-02 09:00:00,0.0 +2019-09-02 10:00:00,0.0 +2019-09-02 11:00:00,0.0 +2019-09-02 12:00:00,0.0 +2019-09-02 13:00:00,0.0 +2019-09-02 14:00:00,0.0 +2019-09-02 15:00:00,0.0 +2019-09-02 16:00:00,0.0 +2019-09-02 17:00:00,0.0 +2019-09-02 18:00:00,0.9588888888888889 +2019-09-02 19:00:00,32.17966666666682 +2019-09-02 20:00:00,82.8283333333333 +2019-09-02 21:00:00,100.226 +2019-09-02 22:00:00,106.57822222222066 +2019-09-02 23:00:00,105.16888888888778 +2019-09-03 00:00:00,108.23922222222092 +2019-09-03 01:00:00,107.45333333333215 +2019-09-03 02:00:00,104.50555555555447 +2019-09-03 03:00:00,96.22222222222148 +2019-09-03 04:00:00,63.023999999998836 +2019-09-03 05:00:00,17.333555555555584 +2019-09-03 06:00:00,0.22333333333333333 +2019-09-03 07:00:00,0.0 +2019-09-03 08:00:00,0.0 +2019-09-03 09:00:00,0.0 +2019-09-03 10:00:00,0.0 +2019-09-03 11:00:00,0.0 +2019-09-03 12:00:00,0.0 +2019-09-03 13:00:00,0.0 +2019-09-03 14:00:00,0.0 +2019-09-03 15:00:00,0.0 +2019-09-03 16:00:00,0.0 +2019-09-03 17:00:00,0.0 +2019-09-03 18:00:00,1.1177777777777758 +2019-09-03 19:00:00,34.71466666666703 +2019-09-03 20:00:00,93.15122222222192 +2019-09-03 21:00:00,107.0 +2019-09-03 22:00:00,111.09344444444572 +2019-09-03 23:00:00,112.60433333333307 +2019-09-04 00:00:00,110.69999999999823 +2019-09-04 01:00:00,108.69833333333412 +2019-09-04 02:00:00,110.11600000000182 +2019-09-04 03:00:00,109.95600000000064 +2019-09-04 04:00:00,83.38044444444395 +2019-09-04 05:00:00,30.4121111111113 +2019-09-04 06:00:00,0.07200000000000002 +2019-09-04 07:00:00,0.0 +2019-09-04 08:00:00,0.0 +2019-09-04 09:00:00,0.0 +2019-09-04 10:00:00,0.0 +2019-09-04 11:00:00,0.0 +2019-09-04 12:00:00,0.0 +2019-09-04 13:00:00,0.0 +2019-09-04 14:00:00,0.0 +2019-09-04 15:00:00,0.0 +2019-09-04 16:00:00,0.0 +2019-09-04 17:00:00,0.0 +2019-09-04 18:00:00,0.9550000000000017 +2019-09-04 19:00:00,34.12622222222234 +2019-09-04 20:00:00,96.50066666666578 +2019-09-04 21:00:00,111.50755555555376 +2019-09-04 22:00:00,111.69999999999821 +2019-09-04 23:00:00,111.0899999999982 +2019-09-05 00:00:00,109.65666666666489 +2019-09-05 01:00:00,107.99555555555379 +2019-09-05 02:00:00,105.56644444444397 +2019-09-05 03:00:00,107.60222222222048 +2019-09-05 04:00:00,72.097777777778 +2019-09-05 05:00:00,23.189777777777817 +2019-09-05 06:00:00,0.1934444444444443 +2019-09-05 07:00:00,0.0 +2019-09-05 08:00:00,0.0 +2019-09-05 09:00:00,0.0 +2019-09-05 10:00:00,0.0 +2019-09-05 11:00:00,0.0 +2019-09-05 12:00:00,0.0 +2019-09-05 13:00:00,0.0 +2019-09-05 14:00:00,0.0 +2019-09-05 15:00:00,0.0 +2019-09-05 16:00:00,0.0 +2019-09-05 17:00:00,0.0 +2019-09-05 18:00:00,1.2777777777777777 +2019-09-05 19:00:00,34.58944444444462 +2019-09-05 20:00:00,91.0746666666662 +2019-09-05 21:00:00,104.26333333333231 +2019-09-05 22:00:00,106.36555555555442 +2019-09-05 23:00:00,106.78777777777661 +2019-09-06 00:00:00,106.20733333333341 +2019-09-06 01:00:00,95.25244444444508 +2019-09-06 02:00:00,97.25466666666786 +2019-09-06 03:00:00,101.86355555555443 +2019-09-06 04:00:00,71.77911111111099 +2019-09-06 05:00:00,25.072444444444017 +2019-09-06 06:00:00,0.2099999999999998 +2019-09-06 07:00:00,0.0 +2019-09-06 08:00:00,0.0 +2019-09-06 09:00:00,0.0 +2019-09-06 10:00:00,0.0 +2019-09-06 11:00:00,0.0 +2019-09-06 12:00:00,0.0 +2019-09-06 13:00:00,0.0 +2019-09-06 14:00:00,0.0 +2019-09-06 15:00:00,0.0 +2019-09-06 16:00:00,0.0 +2019-09-06 17:00:00,0.0 +2019-09-06 18:00:00,0.7767777777777796 +2019-09-06 19:00:00,31.440888888888754 +2019-09-06 20:00:00,83.71111111111094 +2019-09-06 21:00:00,108.79833333333359 +2019-09-06 22:00:00,107.9554444444462 +2019-09-06 23:00:00,108.12666666666841 +2019-09-07 00:00:00,109.17277777777873 +2019-09-07 01:00:00,106.68100000000054 +2019-09-07 02:00:00,102.8651111111105 +2019-09-07 03:00:00,104.12311111110989 +2019-09-07 04:00:00,26.608888888889027 +2019-09-07 05:00:00,10.034888888889048 +2019-09-07 06:00:00,0.0 +2019-09-07 07:00:00,0.0 +2019-09-07 08:00:00,0.0 +2019-09-07 09:00:00,0.0 +2019-09-07 10:00:00,0.0 +2019-09-07 11:00:00,0.0 +2019-09-07 12:00:00,0.0 +2019-09-07 13:00:00,0.0 +2019-09-07 14:00:00,0.0 +2019-09-07 15:00:00,0.0 +2019-09-07 16:00:00,0.0 +2019-09-07 17:00:00,0.0 +2019-09-07 18:00:00,1.2562222222222224 +2019-09-07 19:00:00,36.919111111111356 +2019-09-07 20:00:00,87.771111111111 +2019-09-07 21:00:00,106.26 +2019-09-07 22:00:00,107.81666666666666 +2019-09-07 23:00:00,107.1917777777776 +2019-09-08 00:00:00,106.94888888888889 +2019-09-08 01:00:00,107.26777777777778 +2019-09-08 02:00:00,107.05333333333333 +2019-09-08 03:00:00,106.92622222222214 +2019-09-08 04:00:00,81.12977777777837 +2019-09-08 05:00:00,27.988000000000643 +2019-09-08 06:00:00,0.1448888888888888 +2019-09-08 07:00:00,0.0 +2019-09-08 08:00:00,0.0 +2019-09-08 09:00:00,0.0 +2019-09-08 10:00:00,0.0 +2019-09-08 11:00:00,0.0 +2019-09-08 12:00:00,0.0 +2019-09-08 13:00:00,0.0 +2019-09-08 14:00:00,0.0 +2019-09-08 15:00:00,0.0 +2019-09-08 16:00:00,0.0 +2019-09-08 17:00:00,0.0 +2019-09-08 18:00:00,1.9625555555555492 +2019-09-08 19:00:00,44.301555555555986 +2019-09-08 20:00:00,94.41100000000048 +2019-09-08 21:00:00,104.81444444444445 +2019-09-08 22:00:00,107.59 +2019-09-08 23:00:00,108.54888888888888 +2019-09-09 00:00:00,110.57211111111093 +2019-09-09 01:00:00,113.39277777777781 +2019-09-09 02:00:00,113.5 +2019-09-09 03:00:00,111.20844444444306 +2019-09-09 04:00:00,81.04333333333292 +2019-09-09 05:00:00,28.04100000000024 +2019-09-09 06:00:00,0.1377777777777777 +2019-09-09 07:00:00,0.0 +2019-09-09 08:00:00,0.0 +2019-09-09 09:00:00,0.0 +2019-09-09 10:00:00,0.0 +2019-09-09 11:00:00,0.0 +2019-09-09 12:00:00,0.0 +2019-09-09 13:00:00,0.0 +2019-09-09 14:00:00,0.0 +2019-09-09 15:00:00,0.0 +2019-09-09 16:00:00,0.0 +2019-09-09 17:00:00,0.0 +2019-09-09 18:00:00,1.7977777777777777 +2019-09-09 19:00:00,43.0555555555559 +2019-09-09 20:00:00,91.64233333333341 +2019-09-09 21:00:00,101.6288888888889 +2019-09-09 22:00:00,106.54555555555555 +2019-09-09 23:00:00,109.8488888888889 +2019-09-10 00:00:00,112.77533333333521 +2019-09-10 01:00:00,113.60000000000144 +2019-09-10 02:00:00,113.60000000000144 +2019-09-10 03:00:00,111.57433333333377 +2019-09-10 04:00:00,80.73144444444587 +2019-09-10 05:00:00,27.3483333333341 +2019-09-10 06:00:00,0.1507777777777779 +2019-09-10 07:00:00,0.0 +2019-09-10 08:00:00,0.0 +2019-09-10 09:00:00,0.0 +2019-09-10 10:00:00,0.0 +2019-09-10 11:00:00,0.0 +2019-09-10 12:00:00,0.0 +2019-09-10 13:00:00,0.0 +2019-09-10 14:00:00,0.0 +2019-09-10 15:00:00,0.0 +2019-09-10 16:00:00,0.0 +2019-09-10 17:00:00,0.0 +2019-09-10 18:00:00,1.260888888888888 +2019-09-10 19:00:00,31.796222222222468 +2019-09-10 20:00:00,78.50255555555488 +2019-09-10 21:00:00,89.52166666666652 +2019-09-10 22:00:00,88.28622222222265 +2019-09-10 23:00:00,97.69222222222196 +2019-09-11 00:00:00,80.94277777777833 +2019-09-11 01:00:00,90.45244444444525 +2019-09-11 02:00:00,93.31088888888809 +2019-09-11 03:00:00,93.2807777777775 +2019-09-11 04:00:00,39.843333333333085 +2019-09-11 05:00:00,15.986777777777807 +2019-09-11 06:00:00,0.3666666666666656 +2019-09-11 07:00:00,0.0 +2019-09-11 08:00:00,0.0 +2019-09-11 09:00:00,0.0 +2019-09-11 10:00:00,0.0 +2019-09-11 11:00:00,0.0 +2019-09-11 12:00:00,0.0 +2019-09-11 13:00:00,0.0 +2019-09-11 14:00:00,0.0 +2019-09-11 15:00:00,0.0 +2019-09-11 16:00:00,0.0 +2019-09-11 17:00:00,0.0 +2019-09-11 18:00:00,1.7788888888888863 +2019-09-11 19:00:00,35.125222222222284 +2019-09-11 20:00:00,87.26811111111128 +2019-09-11 21:00:00,107.57666666666783 +2019-09-11 22:00:00,110.49000000000129 +2019-09-11 23:00:00,110.91111111111245 +2019-09-12 00:00:00,110.66177777777568 +2019-09-12 01:00:00,112.68144444444637 +2019-09-12 02:00:00,113.10100000000003 +2019-09-12 03:00:00,106.33322222222095 +2019-09-12 04:00:00,59.9507777777778 +2019-09-12 05:00:00,29.3282222222225 +2019-09-12 06:00:00,0.15200000000000005 +2019-09-12 07:00:00,0.0 +2019-09-12 08:00:00,0.0 +2019-09-12 09:00:00,0.0 +2019-09-12 10:00:00,0.0 +2019-09-12 11:00:00,0.0 +2019-09-12 12:00:00,0.0 +2019-09-12 13:00:00,0.0 +2019-09-12 14:00:00,0.0 +2019-09-12 15:00:00,0.0 +2019-09-12 16:00:00,0.0 +2019-09-12 17:00:00,0.0 +2019-09-12 18:00:00,2.1135555555555507 +2019-09-12 19:00:00,37.471000000000025 +2019-09-12 20:00:00,88.14833333333401 +2019-09-12 21:00:00,108.1522222222234 +2019-09-12 22:00:00,109.80666666666798 +2019-09-12 23:00:00,107.84211111111227 +2019-09-13 00:00:00,111.89111111111248 +2019-09-13 01:00:00,111.99111111111249 +2019-09-13 02:00:00,113.0888888888903 +2019-09-13 03:00:00,107.59000000000071 +2019-09-13 04:00:00,80.64077777777788 +2019-09-13 05:00:00,28.177222222222156 +2019-09-13 06:00:00,0.32766666666666744 +2019-09-13 07:00:00,0.0 +2019-09-13 08:00:00,0.0 +2019-09-13 09:00:00,0.0 +2019-09-13 10:00:00,0.0 +2019-09-13 11:00:00,0.0 +2019-09-13 12:00:00,0.0 +2019-09-13 13:00:00,0.0 +2019-09-13 14:00:00,0.0 +2019-09-13 15:00:00,0.0 +2019-09-13 16:00:00,0.0 +2019-09-13 17:00:00,0.0 +2019-09-13 18:00:00,0.0 +2019-09-13 19:00:00,1.691666666666657 +2019-09-13 20:00:00,21.568222222222182 +2019-09-13 21:00:00,58.51188888888972 +2019-09-13 22:00:00,103.32277777777728 +2019-09-13 23:00:00,96.75511111111123 +2019-09-14 00:00:00,108.3550000000012 +2019-09-14 01:00:00,106.4084444444432 +2019-09-14 02:00:00,100.73077777777723 +2019-09-14 03:00:00,104.12277777777634 +2019-09-14 04:00:00,76.71833333333319 +2019-09-14 05:00:00,26.22433333333312 +2019-09-14 06:00:00,0.6937777777777764 +2019-09-14 07:00:00,0.0 +2019-09-14 08:00:00,0.0 +2019-09-14 09:00:00,0.0 +2019-09-14 10:00:00,0.0 +2019-09-14 11:00:00,0.0 +2019-09-14 12:00:00,0.0 +2019-09-14 13:00:00,0.0 +2019-09-14 14:00:00,0.0 +2019-09-14 15:00:00,0.0 +2019-09-14 16:00:00,0.0 +2019-09-14 17:00:00,0.0 +2019-09-14 18:00:00,0.8133333333333334 +2019-09-14 19:00:00,6.068222222222284 +2019-09-14 20:00:00,21.768222222222352 +2019-09-14 21:00:00,44.55222222222199 +2019-09-14 22:00:00,90.85444444444464 +2019-09-14 23:00:00,112.85666666666667 +2019-09-15 00:00:00,113.76555555555555 +2019-09-15 01:00:00,114.0 +2019-09-15 02:00:00,112.59277777777643 +2019-09-15 03:00:00,111.50999999999988 +2019-09-15 04:00:00,86.73377777777654 +2019-09-15 05:00:00,31.30144444444425 +2019-09-15 06:00:00,0.0 +2019-09-15 07:00:00,0.0 +2019-09-15 08:00:00,0.0 +2019-09-15 09:00:00,0.0 +2019-09-15 10:00:00,0.0 +2019-09-15 11:00:00,0.0 +2019-09-15 12:00:00,0.0 +2019-09-15 13:00:00,0.0 +2019-09-15 14:00:00,0.0 +2019-09-15 15:00:00,0.0 +2019-09-15 16:00:00,0.0 +2019-09-15 17:00:00,0.0 +2019-09-15 18:00:00,3.594444444444432 +2019-09-15 19:00:00,52.69366666666681 +2019-09-15 20:00:00,101.58933333333484 +2019-09-15 21:00:00,110.16111111111238 +2019-09-15 22:00:00,111.43922222222358 +2019-09-15 23:00:00,85.84777777777816 +2019-09-16 00:00:00,89.43755555555583 +2019-09-16 01:00:00,85.75688888888877 +2019-09-16 02:00:00,74.86022222222215 +2019-09-16 03:00:00,29.15488888888852 +2019-09-16 04:00:00,15.504555555555715 +2019-09-16 05:00:00,11.230888888888686 +2019-09-16 06:00:00,0.28000000000000047 +2019-09-16 07:00:00,0.0 +2019-09-16 08:00:00,0.0 +2019-09-16 09:00:00,0.0 +2019-09-16 10:00:00,0.0 +2019-09-16 11:00:00,0.0 +2019-09-16 12:00:00,0.0 +2019-09-16 13:00:00,0.0 +2019-09-16 14:00:00,0.0 +2019-09-16 15:00:00,0.0 +2019-09-16 16:00:00,0.0 +2019-09-16 17:00:00,0.0 +2019-09-16 18:00:00,3.507444444444431 +2019-09-16 19:00:00,50.756222222222284 +2019-09-16 20:00:00,100.39277777777619 +2019-09-16 21:00:00,96.19688888888926 +2019-09-16 22:00:00,76.58899999999997 +2019-09-16 23:00:00,53.639888888888564 +2019-09-17 00:00:00,65.61433333333342 +2019-09-17 01:00:00,63.352888888889936 +2019-09-17 02:00:00,58.214000000000574 +2019-09-17 03:00:00,101.75955555555726 +2019-09-17 04:00:00,65.24299999999985 +2019-09-17 05:00:00,26.192000000000018 +2019-09-17 06:00:00,0.22333333333333366 +2019-09-17 07:00:00,0.0 +2019-09-17 08:00:00,0.0 +2019-09-17 09:00:00,0.0 +2019-09-17 10:00:00,0.0 +2019-09-17 11:00:00,0.0 +2019-09-17 12:00:00,0.0 +2019-09-17 13:00:00,0.0 +2019-09-17 14:00:00,0.0 +2019-09-17 15:00:00,0.0 +2019-09-17 16:00:00,0.0 +2019-09-17 17:00:00,0.0 +2019-09-17 18:00:00,1.9876666666666807 +2019-09-17 19:00:00,8.247222222222296 +2019-09-17 20:00:00,23.379777777777644 +2019-09-17 21:00:00,44.23277777777796 +2019-09-17 22:00:00,101.34122222222196 +2019-09-17 23:00:00,110.5566666666665 +2019-09-18 00:00:00,109.27377777777701 +2019-09-18 01:00:00,106.57377777777923 +2019-09-18 02:00:00,93.80111111111117 +2019-09-18 03:00:00,100.75022222222115 +2019-09-18 04:00:00,81.08588888888984 +2019-09-18 05:00:00,28.102555555555465 +2019-09-18 06:00:00,0.04800000000000001 +2019-09-18 07:00:00,0.0 +2019-09-18 08:00:00,0.0 +2019-09-18 09:00:00,0.0 +2019-09-18 10:00:00,0.0 +2019-09-18 11:00:00,0.0 +2019-09-18 12:00:00,0.0 +2019-09-18 13:00:00,0.0 +2019-09-18 14:00:00,0.0 +2019-09-18 15:00:00,0.0 +2019-09-18 16:00:00,0.0 +2019-09-18 17:00:00,0.0 +2019-09-18 18:00:00,1.0926666666666678 +2019-09-18 19:00:00,41.01855555555556 +2019-09-18 20:00:00,43.227222222222196 +2019-09-18 21:00:00,0.0 +2019-09-18 22:00:00,30.995444444444445 +2019-09-18 23:00:00,107.42544444444475 +2019-09-19 00:00:00,102.85644444444354 +2019-09-19 01:00:00,99.16655555555579 +2019-09-19 02:00:00,100.41033333333394 +2019-09-19 03:00:00,97.81999999999927 +2019-09-19 04:00:00,62.82566666666672 +2019-09-19 05:00:00,24.867888888888817 +2019-09-19 06:00:00,0.27022222222222264 +2019-09-19 07:00:00,0.0 +2019-09-19 08:00:00,0.0 +2019-09-19 09:00:00,0.0 +2019-09-19 10:00:00,0.0 +2019-09-19 11:00:00,0.0 +2019-09-19 12:00:00,0.0 +2019-09-19 13:00:00,0.0 +2019-09-19 14:00:00,0.0 +2019-09-19 15:00:00,0.0 +2019-09-19 16:00:00,0.0 +2019-09-19 17:00:00,0.0 +2019-09-19 18:00:00,0.8446666666666672 +2019-09-19 19:00:00,22.61166666666669 +2019-09-19 20:00:00,61.904111111110936 +2019-09-19 21:00:00,30.548999999999623 +2019-09-19 22:00:00,23.964444444444307 +2019-09-19 23:00:00,82.16155555555525 +2019-09-20 00:00:00,92.61711111111114 +2019-09-20 01:00:00,103.96544444444447 +2019-09-20 02:00:00,107.39166666666615 +2019-09-20 03:00:00,97.67711111111063 +2019-09-20 04:00:00,80.18611111111203 +2019-09-20 05:00:00,28.7544444444449 +2019-09-20 06:00:00,0.2951111111111114 +2019-09-20 07:00:00,0.0 +2019-09-20 08:00:00,0.0 +2019-09-20 09:00:00,0.0 +2019-09-20 10:00:00,0.0 +2019-09-20 11:00:00,0.0 +2019-09-20 12:00:00,0.0 +2019-09-20 13:00:00,0.0 +2019-09-20 14:00:00,0.0 +2019-09-20 15:00:00,0.0 +2019-09-20 16:00:00,0.0 +2019-09-20 17:00:00,0.0 +2019-09-20 18:00:00,3.071333333333341 +2019-09-20 19:00:00,39.5982222222225 +2019-09-20 20:00:00,77.20944444444393 +2019-09-20 21:00:00,71.8883333333336 +2019-09-20 22:00:00,71.55688888888895 +2019-09-20 23:00:00,85.48922222222225 +2019-09-21 00:00:00,86.22033333333417 +2019-09-21 01:00:00,86.53722222222241 +2019-09-21 02:00:00,57.23555555555562 +2019-09-21 03:00:00,85.08277777777741 +2019-09-21 04:00:00,39.80277777777749 +2019-09-21 05:00:00,11.781777777777704 +2019-09-21 06:00:00,0.35911111111111077 +2019-09-21 07:00:00,0.0 +2019-09-21 08:00:00,0.0 +2019-09-21 09:00:00,0.0 +2019-09-21 10:00:00,0.0 +2019-09-21 11:00:00,0.0 +2019-09-21 12:00:00,0.0 +2019-09-21 13:00:00,0.0 +2019-09-21 14:00:00,0.0 +2019-09-21 15:00:00,0.0 +2019-09-21 16:00:00,0.0 +2019-09-21 17:00:00,0.0 +2019-09-21 18:00:00,3.3396666666666848 +2019-09-21 19:00:00,40.77744444444417 +2019-09-21 20:00:00,88.32588888888851 +2019-09-21 21:00:00,107.27822222222504 +2019-09-21 22:00:00,78.10144444444475 +2019-09-21 23:00:00,62.950111111110566 +2019-09-22 00:00:00,57.75899999999959 +2019-09-22 01:00:00,71.1508888888884 +2019-09-22 02:00:00,85.29555555555531 +2019-09-22 03:00:00,83.25266666666678 +2019-09-22 04:00:00,54.94288888888863 +2019-09-22 05:00:00,19.339444444444393 +2019-09-22 06:00:00,0.4055555555555564 +2019-09-22 07:00:00,0.0 +2019-09-22 08:00:00,0.0 +2019-09-22 09:00:00,0.0 +2019-09-22 10:00:00,0.0 +2019-09-22 11:00:00,0.0 +2019-09-22 12:00:00,0.0 +2019-09-22 13:00:00,0.0 +2019-09-22 14:00:00,0.0 +2019-09-22 15:00:00,0.0 +2019-09-22 16:00:00,0.0 +2019-09-22 17:00:00,0.0 +2019-09-22 18:00:00,5.053333333333329 +2019-09-22 19:00:00,50.26799999999992 +2019-09-22 20:00:00,75.69833333333312 +2019-09-22 21:00:00,78.25255555555485 +2019-09-22 22:00:00,103.10088888888919 +2019-09-22 23:00:00,108.90966666666554 +2019-09-23 00:00:00,99.60111111111168 +2019-09-23 01:00:00,106.80377777777672 +2019-09-23 02:00:00,110.39999999999868 +2019-09-23 03:00:00,107.77866666666563 +2019-09-23 04:00:00,79.36588888888934 +2019-09-23 05:00:00,24.17644444444423 +2019-09-23 06:00:00,0.4102222222222233 +2019-09-23 07:00:00,0.0 +2019-09-23 08:00:00,0.0 +2019-09-23 09:00:00,0.0 +2019-09-23 10:00:00,0.0 +2019-09-23 11:00:00,0.0 +2019-09-23 12:00:00,0.0 +2019-09-23 13:00:00,0.0 +2019-09-23 14:00:00,0.0 +2019-09-23 15:00:00,0.0 +2019-09-23 16:00:00,0.0 +2019-09-23 17:00:00,0.0 +2019-09-23 18:00:00,4.524444444444422 +2019-09-23 19:00:00,38.71377777777772 +2019-09-23 20:00:00,54.96600000000011 +2019-09-23 21:00:00,106.57155555555676 +2019-09-23 22:00:00,109.60000000000127 +2019-09-23 23:00:00,109.60000000000127 +2019-09-24 00:00:00,91.75877777777809 +2019-09-24 01:00:00,81.64788888888869 +2019-09-24 02:00:00,109.60000000000127 +2019-09-24 03:00:00,108.38188888888975 +2019-09-24 04:00:00,80.68488888888974 +2019-09-24 05:00:00,28.35444444444511 +2019-09-24 06:00:00,0.27200000000000046 +2019-09-24 07:00:00,0.0 +2019-09-24 08:00:00,0.0 +2019-09-24 09:00:00,0.0 +2019-09-24 10:00:00,0.0 +2019-09-24 11:00:00,0.0 +2019-09-24 12:00:00,0.0 +2019-09-24 13:00:00,0.0 +2019-09-24 14:00:00,0.0 +2019-09-24 15:00:00,0.0 +2019-09-24 16:00:00,0.0 +2019-09-24 17:00:00,0.0 +2019-09-24 18:00:00,3.5024444444444294 +2019-09-24 19:00:00,35.83833333333355 +2019-09-24 20:00:00,89.03555555555636 +2019-09-24 21:00:00,107.14244444444485 +2019-09-24 22:00:00,106.38755555555636 +2019-09-24 23:00:00,106.46377777777758 +2019-09-25 00:00:00,105.93877777777656 +2019-09-25 01:00:00,107.56555555555437 +2019-09-25 02:00:00,106.92844444444574 +2019-09-25 03:00:00,99.24344444444564 +2019-09-25 04:00:00,82.96477777777696 +2019-09-25 05:00:00,30.00088888888841 +2019-09-25 06:00:00,0.4666666666666683 +2019-09-25 07:00:00,0.0 +2019-09-25 08:00:00,0.0 +2019-09-25 09:00:00,0.0 +2019-09-25 10:00:00,0.0 +2019-09-25 11:00:00,0.0 +2019-09-25 12:00:00,0.0 +2019-09-25 13:00:00,0.0 +2019-09-25 14:00:00,0.0 +2019-09-25 15:00:00,0.0 +2019-09-25 16:00:00,0.0 +2019-09-25 17:00:00,0.0 +2019-09-25 18:00:00,6.718444444444465 +2019-09-25 19:00:00,48.0999999999997 +2019-09-25 20:00:00,70.30111111111076 +2019-09-25 21:00:00,75.92344444444448 +2019-09-25 22:00:00,81.4593333333342 +2019-09-25 23:00:00,70.84100000000062 +2019-09-26 00:00:00,98.08911111110972 +2019-09-26 01:00:00,105.66477777777823 +2019-09-26 02:00:00,100.60822222222225 +2019-09-26 03:00:00,95.0750000000011 +2019-09-26 04:00:00,78.5697777777768 +2019-09-26 05:00:00,28.667777777777342 +2019-09-26 06:00:00,0.3011111111111111 +2019-09-26 07:00:00,0.0 +2019-09-26 08:00:00,0.0 +2019-09-26 09:00:00,0.0 +2019-09-26 10:00:00,0.0 +2019-09-26 11:00:00,0.0 +2019-09-26 12:00:00,0.0 +2019-09-26 13:00:00,0.0 +2019-09-26 14:00:00,0.0 +2019-09-26 15:00:00,0.0 +2019-09-26 16:00:00,0.0 +2019-09-26 17:00:00,0.0 +2019-09-26 18:00:00,4.47788888888889 +2019-09-26 19:00:00,44.13122222222194 +2019-09-26 20:00:00,66.8883333333343 +2019-09-26 21:00:00,78.30722222222265 +2019-09-26 22:00:00,72.98011111111133 +2019-09-26 23:00:00,64.58777777777837 +2019-09-27 00:00:00,64.87433333333321 +2019-09-27 01:00:00,90.7096666666671 +2019-09-27 02:00:00,93.26922222222255 +2019-09-27 03:00:00,62.148777777777916 +2019-09-27 04:00:00,19.23699999999996 +2019-09-27 05:00:00,22.03822222222216 +2019-09-27 06:00:00,0.23444444444444446 +2019-09-27 07:00:00,0.0 +2019-09-27 08:00:00,0.0 +2019-09-27 09:00:00,0.0 +2019-09-27 10:00:00,0.0 +2019-09-27 11:00:00,0.0 +2019-09-27 12:00:00,0.0 +2019-09-27 13:00:00,0.0 +2019-09-27 14:00:00,0.0 +2019-09-27 15:00:00,0.0 +2019-09-27 16:00:00,0.0 +2019-09-27 17:00:00,0.0 +2019-09-27 18:00:00,2.4598888888888717 +2019-09-27 19:00:00,19.104666666666624 +2019-09-27 20:00:00,60.06033333333383 +2019-09-27 21:00:00,83.87266666666694 +2019-09-27 22:00:00,99.75366666666825 +2019-09-27 23:00:00,92.9365555555557 +2019-09-28 00:00:00,35.63700000000009 +2019-09-28 01:00:00,43.241111111111195 +2019-09-28 02:00:00,26.04377777777816 +2019-09-28 03:00:00,11.70677777777795 +2019-09-28 04:00:00,13.982666666666777 +2019-09-28 05:00:00,7.140777777777717 +2019-09-28 06:00:00,0.1973333333333336 +2019-09-28 07:00:00,0.0 +2019-09-28 08:00:00,0.0 +2019-09-28 09:00:00,0.0 +2019-09-28 10:00:00,0.0 +2019-09-28 11:00:00,0.0 +2019-09-28 12:00:00,0.0 +2019-09-28 13:00:00,0.0 +2019-09-28 14:00:00,0.0 +2019-09-28 15:00:00,0.0 +2019-09-28 16:00:00,0.0 +2019-09-28 17:00:00,0.0 +2019-09-28 18:00:00,5.036000000000017 +2019-09-28 19:00:00,48.229888888888986 +2019-09-28 20:00:00,90.41344444444543 +2019-09-28 21:00:00,93.6292222222225 +2019-09-28 22:00:00,91.61288888888923 +2019-09-28 23:00:00,94.13133333333413 +2019-09-29 00:00:00,92.27388888888935 +2019-09-29 01:00:00,81.64611111111073 +2019-09-29 02:00:00,84.90022222222188 +2019-09-29 03:00:00,85.13966666666708 +2019-09-29 04:00:00,78.88144444444325 +2019-09-29 05:00:00,24.1572222222221 +2019-09-29 06:00:00,0.5331111111111095 +2019-09-29 07:00:00,0.0 +2019-09-29 08:00:00,0.0 +2019-09-29 09:00:00,0.0 +2019-09-29 10:00:00,0.0 +2019-09-29 11:00:00,0.0 +2019-09-29 12:00:00,0.0 +2019-09-29 13:00:00,0.0 +2019-09-29 14:00:00,0.0 +2019-09-29 15:00:00,0.0 +2019-09-29 16:00:00,0.0 +2019-09-29 17:00:00,0.0 +2019-09-29 18:00:00,8.333333333333341 +2019-09-29 19:00:00,45.34377777777811 +2019-09-29 20:00:00,45.696222222222566 +2019-09-29 21:00:00,112.7999999999986 +2019-09-29 22:00:00,113.39999999999857 +2019-09-29 23:00:00,113.39999999999857 +2019-09-30 00:00:00,113.38666666666525 +2019-09-30 01:00:00,113.39999999999857 +2019-09-30 02:00:00,113.0904444444445 +2019-09-30 03:00:00,113.31322222222363 +2019-09-30 04:00:00,85.71088888888976 +2019-09-30 05:00:00,30.8295555555557 +2019-09-30 06:00:00,0.422888888888888 +2019-09-30 07:00:00,0.0 +2019-09-30 08:00:00,0.0 +2019-09-30 09:00:00,0.0 +2019-09-30 10:00:00,0.0 +2019-09-30 11:00:00,0.0 +2019-09-30 12:00:00,0.0 +2019-09-30 13:00:00,0.0 +2019-09-30 14:00:00,0.0 +2019-09-30 15:00:00,0.0 +2019-09-30 16:00:00,0.0 +2019-09-30 17:00:00,0.0 +2019-09-30 18:00:00,8.982666666666683 +2019-09-30 19:00:00,72.76122222222307 +2019-09-30 20:00:00,111.06777777777648 +2019-09-30 21:00:00,113.89999999999856 +2019-09-30 22:00:00,113.89999999999856 +2019-09-30 23:00:00,113.89999999999856 +2019-10-01 00:00:00,113.89999999999856 +2019-10-01 01:00:00,113.89999999999856 +2019-10-01 02:00:00,113.01966666666696 +2019-10-01 03:00:00,113.9026666666665 +2019-10-01 04:00:00,88.42422222222305 +2019-10-01 05:00:00,32.5312222222229 +2019-10-01 06:00:00,0.4854444444444458 +2019-10-01 07:00:00,0.0 +2019-10-01 08:00:00,0.0 +2019-10-01 09:00:00,0.0 +2019-10-01 10:00:00,0.0 +2019-10-01 11:00:00,0.0 +2019-10-01 12:00:00,0.0 +2019-10-01 13:00:00,0.0 +2019-10-01 14:00:00,0.0 +2019-10-01 15:00:00,0.0 +2019-10-01 16:00:00,0.0 +2019-10-01 17:00:00,0.0 +2019-10-01 18:00:00,10.890999999999998 +2019-10-01 19:00:00,69.19566666666677 +2019-10-01 20:00:00,105.44455555555453 +2019-10-01 21:00:00,91.23777777777728 +2019-10-01 22:00:00,113.89999999999856 +2019-10-01 23:00:00,113.89999999999856 +2019-10-02 00:00:00,113.89999999999856 +2019-10-02 01:00:00,113.89999999999856 +2019-10-02 02:00:00,113.89999999999856 +2019-10-02 03:00:00,112.92388888889059 +2019-10-02 04:00:00,86.1828888888886 +2019-10-02 05:00:00,31.860111111110864 +2019-10-02 06:00:00,0.3919999999999992 +2019-10-02 07:00:00,0.0 +2019-10-02 08:00:00,0.0 +2019-10-02 09:00:00,0.0 +2019-10-02 10:00:00,0.0 +2019-10-02 11:00:00,0.0 +2019-10-02 12:00:00,0.0 +2019-10-02 13:00:00,0.0 +2019-10-02 14:00:00,0.0 +2019-10-02 15:00:00,0.0 +2019-10-02 16:00:00,0.0 +2019-10-02 17:00:00,0.0 +2019-10-02 18:00:00,9.512333333333356 +2019-10-02 19:00:00,67.44355555555522 +2019-10-02 20:00:00,108.14066666666817 +2019-10-02 21:00:00,113.1000000000014 +2019-10-02 22:00:00,89.38833333333348 +2019-10-02 23:00:00,78.12655555555654 +2019-10-03 00:00:00,77.47022222222148 +2019-10-03 01:00:00,77.1456666666677 +2019-10-03 02:00:00,76.96033333333368 +2019-10-03 03:00:00,77.35877777777905 +2019-10-03 04:00:00,75.3556666666674 +2019-10-03 05:00:00,32.05822222222236 +2019-10-03 06:00:00,0.48755555555555397 +2019-10-03 07:00:00,0.0 +2019-10-03 08:00:00,0.0 +2019-10-03 09:00:00,0.0 +2019-10-03 10:00:00,0.0 +2019-10-03 11:00:00,0.0 +2019-10-03 12:00:00,0.0 +2019-10-03 13:00:00,0.0 +2019-10-03 14:00:00,0.0 +2019-10-03 15:00:00,0.0 +2019-10-03 16:00:00,0.0 +2019-10-03 17:00:00,0.0 +2019-10-03 18:00:00,6.957000000000025 +2019-10-03 19:00:00,24.561444444444472 +2019-10-03 20:00:00,68.13766666666662 +2019-10-03 21:00:00,77.9836666666662 +2019-10-03 22:00:00,74.68433333333353 +2019-10-03 23:00:00,75.36922222222279 +2019-10-04 00:00:00,75.26677777777765 +2019-10-04 01:00:00,74.35477777777814 +2019-10-04 02:00:00,77.11277777777718 +2019-10-04 03:00:00,80.07722222222215 +2019-10-04 04:00:00,53.43955555555532 +2019-10-04 05:00:00,30.016111111111137 +2019-10-04 06:00:00,0.48366666666666785 +2019-10-04 07:00:00,0.0 +2019-10-04 08:00:00,0.0 +2019-10-04 09:00:00,0.0 +2019-10-04 10:00:00,0.0 +2019-10-04 11:00:00,0.0 +2019-10-04 12:00:00,0.0 +2019-10-04 13:00:00,0.0 +2019-10-04 14:00:00,0.0 +2019-10-04 15:00:00,0.0 +2019-10-04 16:00:00,0.0 +2019-10-04 17:00:00,0.0 +2019-10-04 18:00:00,8.317111111111116 +2019-10-04 19:00:00,14.320111111111054 +2019-10-04 20:00:00,28.35088888888898 +2019-10-04 21:00:00,28.046777777777898 +2019-10-04 22:00:00,107.90388888888762 +2019-10-04 23:00:00,111.05633333333179 +2019-10-05 00:00:00,111.13699999999866 +2019-10-05 01:00:00,109.64688888888796 +2019-10-05 02:00:00,63.94555555555571 +2019-10-05 03:00:00,106.23100000000026 +2019-10-05 04:00:00,45.794777777777995 +2019-10-05 05:00:00,29.084555555555824 +2019-10-05 06:00:00,0.4728888888888878 +2019-10-05 07:00:00,0.0 +2019-10-05 08:00:00,0.0 +2019-10-05 09:00:00,0.0 +2019-10-05 10:00:00,0.0 +2019-10-05 11:00:00,0.0 +2019-10-05 12:00:00,0.0 +2019-10-05 13:00:00,0.0 +2019-10-05 14:00:00,0.0 +2019-10-05 15:00:00,0.0 +2019-10-05 16:00:00,0.0 +2019-10-05 17:00:00,0.0 +2019-10-05 18:00:00,0.0 +2019-10-05 19:00:00,3.5407777777777345 +2019-10-05 20:00:00,19.093555555555685 +2019-10-05 21:00:00,7.001555555555567 +2019-10-05 22:00:00,0.6601111111111139 +2019-10-05 23:00:00,78.77444444444463 +2019-10-06 00:00:00,105.77188888888976 +2019-10-06 01:00:00,101.46088888888727 +2019-10-06 02:00:00,85.84488888889037 +2019-10-06 03:00:00,81.812222222223 +2019-10-06 04:00:00,74.80988888888912 +2019-10-06 05:00:00,28.710555555555942 +2019-10-06 06:00:00,0.43222222222222223 +2019-10-06 07:00:00,0.0 +2019-10-06 08:00:00,0.0 +2019-10-06 09:00:00,0.0 +2019-10-06 10:00:00,0.0 +2019-10-06 11:00:00,0.0 +2019-10-06 12:00:00,0.0 +2019-10-06 13:00:00,0.0 +2019-10-06 14:00:00,0.0 +2019-10-06 15:00:00,0.0 +2019-10-06 16:00:00,0.0 +2019-10-06 17:00:00,0.0 +2019-10-06 18:00:00,9.144666666666655 +2019-10-06 19:00:00,57.014777777777624 +2019-10-06 20:00:00,79.5607777777766 +2019-10-06 21:00:00,73.12999999999889 +2019-10-06 22:00:00,69.83411111111131 +2019-10-06 23:00:00,68.40011111111019 +2019-10-07 00:00:00,70.871888888888 +2019-10-07 01:00:00,73.03533333333462 +2019-10-07 02:00:00,72.75300000000048 +2019-10-07 03:00:00,85.7400000000011 +2019-10-07 04:00:00,78.82655555555468 +2019-10-07 05:00:00,30.560333333333276 +2019-10-07 06:00:00,0.4411111111111102 +2019-10-07 07:00:00,0.0 +2019-10-07 08:00:00,0.0 +2019-10-07 09:00:00,0.0 +2019-10-07 10:00:00,0.0 +2019-10-07 11:00:00,0.0 +2019-10-07 12:00:00,0.0 +2019-10-07 13:00:00,0.0 +2019-10-07 14:00:00,0.0 +2019-10-07 15:00:00,0.0 +2019-10-07 16:00:00,0.0 +2019-10-07 17:00:00,0.0 +2019-10-07 18:00:00,9.020777777777857 +2019-10-07 19:00:00,55.408222222221724 +2019-10-07 20:00:00,57.242555555555214 +2019-10-07 21:00:00,94.99000000000034 +2019-10-07 22:00:00,89.06055555555479 +2019-10-07 23:00:00,89.38477777777683 +2019-10-08 00:00:00,87.32411111111178 +2019-10-08 01:00:00,81.55311111111148 +2019-10-08 02:00:00,80.71333333333332 +2019-10-08 03:00:00,83.8910000000006 +2019-10-08 04:00:00,82.37188888888842 +2019-10-08 05:00:00,33.52288888888871 +2019-10-08 06:00:00,0.6315555555555553 +2019-10-08 07:00:00,0.0 +2019-10-08 08:00:00,0.0 +2019-10-08 09:00:00,0.0 +2019-10-08 10:00:00,0.0 +2019-10-08 11:00:00,0.0 +2019-10-08 12:00:00,0.0 +2019-10-08 13:00:00,0.0 +2019-10-08 14:00:00,0.0 +2019-10-08 15:00:00,0.0 +2019-10-08 16:00:00,0.0 +2019-10-08 17:00:00,0.0 +2019-10-08 18:00:00,9.255777777777753 +2019-10-08 19:00:00,52.804222222222734 +2019-10-08 20:00:00,71.47833333333266 +2019-10-08 21:00:00,69.96666666666782 +2019-10-08 22:00:00,70.68844444444483 +2019-10-08 23:00:00,69.03144444444497 +2019-10-09 00:00:00,71.5123333333323 +2019-10-09 01:00:00,71.28655555555625 +2019-10-09 02:00:00,70.76744444444408 +2019-10-09 03:00:00,73.49177777777862 +2019-10-09 04:00:00,75.68099999999966 +2019-10-09 05:00:00,32.06688888888868 +2019-10-09 06:00:00,0.7564444444444481 +2019-10-09 07:00:00,0.0 +2019-10-09 08:00:00,0.0 +2019-10-09 09:00:00,0.0 +2019-10-09 10:00:00,0.0 +2019-10-09 11:00:00,0.0 +2019-10-09 12:00:00,0.0 +2019-10-09 13:00:00,0.0 +2019-10-09 14:00:00,0.0 +2019-10-09 15:00:00,0.0 +2019-10-09 16:00:00,0.0 +2019-10-09 17:00:00,0.02566666666666667 +2019-10-09 18:00:00,21.588777777777885 +2019-10-09 19:00:00,60.94633333333354 +2019-10-09 20:00:00,64.56144444444504 +2019-10-09 21:00:00,76.38022222222239 +2019-10-09 22:00:00,74.28688888888922 +2019-10-09 23:00:00,95.05222222222372 +2019-10-10 00:00:00,59.817222222222284 +2019-10-10 01:00:00,115.57244444444453 +2019-10-10 02:00:00,114.88333333333516 +2019-10-10 03:00:00,110.1754444444438 +2019-10-10 04:00:00,71.59155555555546 +2019-10-10 05:00:00,16.43655555555582 +2019-10-10 06:00:00,0.0 +2019-10-10 07:00:00,0.0 +2019-10-10 08:00:00,0.0 +2019-10-10 09:00:00,0.0 +2019-10-10 10:00:00,0.0 +2019-10-10 11:00:00,0.0 +2019-10-10 12:00:00,0.0 +2019-10-10 13:00:00,0.0 +2019-10-10 14:00:00,0.0 +2019-10-10 15:00:00,0.0 +2019-10-10 16:00:00,0.0 +2019-10-10 17:00:00,0.38177777777777716 +2019-10-10 18:00:00,29.396444444444416 +2019-10-10 19:00:00,78.64577777777714 +2019-10-10 20:00:00,106.39722222222204 +2019-10-10 21:00:00,115.59077777777814 +2019-10-10 22:00:00,116.0 +2019-10-10 23:00:00,116.0 +2019-10-11 00:00:00,116.0 +2019-10-11 01:00:00,113.58511111110994 +2019-10-11 02:00:00,112.6495555555557 +2019-10-11 03:00:00,89.38488888888926 +2019-10-11 04:00:00,45.61055555555623 +2019-10-11 05:00:00,7.396777777777623 +2019-10-11 06:00:00,0.0 +2019-10-11 07:00:00,0.0 +2019-10-11 08:00:00,0.0 +2019-10-11 09:00:00,0.0 +2019-10-11 10:00:00,0.0 +2019-10-11 11:00:00,0.0 +2019-10-11 12:00:00,0.0 +2019-10-11 13:00:00,0.0 +2019-10-11 14:00:00,0.0 +2019-10-11 15:00:00,0.0 +2019-10-11 16:00:00,0.0 +2019-10-11 17:00:00,0.24 +2019-10-11 18:00:00,14.836222222222261 +2019-10-11 19:00:00,38.94955555555575 +2019-10-11 20:00:00,38.88777777777739 +2019-10-11 21:00:00,80.32677777777741 +2019-10-11 22:00:00,100.52733333333339 +2019-10-11 23:00:00,109.9697777777775 +2019-10-12 00:00:00,113.02077777777795 +2019-10-12 01:00:00,111.54800000000195 +2019-10-12 02:00:00,108.86922222222243 +2019-10-12 03:00:00,101.18733333333398 +2019-10-12 04:00:00,46.39988888888906 +2019-10-12 05:00:00,10.553555555555782 +2019-10-12 06:00:00,0.0 +2019-10-12 07:00:00,0.0 +2019-10-12 08:00:00,0.0 +2019-10-12 09:00:00,0.0 +2019-10-12 10:00:00,0.0 +2019-10-12 11:00:00,0.0 +2019-10-12 12:00:00,0.0 +2019-10-12 13:00:00,0.0 +2019-10-12 14:00:00,0.0 +2019-10-12 15:00:00,0.0 +2019-10-12 16:00:00,0.0 +2019-10-12 17:00:00,0.24 +2019-10-12 18:00:00,23.52055555555565 +2019-10-12 19:00:00,54.48544444444426 +2019-10-12 20:00:00,64.1969999999998 +2019-10-12 21:00:00,71.09588888888904 +2019-10-12 22:00:00,100.51144444444472 +2019-10-12 23:00:00,112.76299999999829 +2019-10-13 00:00:00,115.87999999999847 +2019-10-13 01:00:00,115.89999999999849 +2019-10-13 02:00:00,115.69666666666515 +2019-10-13 03:00:00,107.04244444444552 +2019-10-13 04:00:00,64.43700000000024 +2019-10-13 05:00:00,12.363444444444736 +2019-10-13 06:00:00,0.0 +2019-10-13 07:00:00,0.0 +2019-10-13 08:00:00,0.0 +2019-10-13 09:00:00,0.0 +2019-10-13 10:00:00,0.0 +2019-10-13 11:00:00,0.0 +2019-10-13 12:00:00,0.0 +2019-10-13 13:00:00,0.0 +2019-10-13 14:00:00,0.0 +2019-10-13 15:00:00,0.0 +2019-10-13 16:00:00,0.0 +2019-10-13 17:00:00,0.851666666666668 +2019-10-13 18:00:00,32.94499999999998 +2019-10-13 19:00:00,74.47766666666698 +2019-10-13 20:00:00,110.72988888888736 +2019-10-13 21:00:00,115.61888888888738 +2019-10-13 22:00:00,115.57255555555564 +2019-10-13 23:00:00,116.0 +2019-10-14 00:00:00,115.90844444444306 +2019-10-14 01:00:00,115.89999999999849 +2019-10-14 02:00:00,115.6922222222207 +2019-10-14 03:00:00,107.27088888888855 +2019-10-14 04:00:00,67.77155555555443 +2019-10-14 05:00:00,15.985777777777518 +2019-10-14 06:00:00,0.0 +2019-10-14 07:00:00,0.0 +2019-10-14 08:00:00,0.0 +2019-10-14 09:00:00,0.0 +2019-10-14 10:00:00,0.0 +2019-10-14 11:00:00,0.0 +2019-10-14 12:00:00,0.0 +2019-10-14 13:00:00,0.0 +2019-10-14 14:00:00,0.0 +2019-10-14 15:00:00,0.0 +2019-10-14 16:00:00,0.0 +2019-10-14 17:00:00,0.8687777777777758 +2019-10-14 18:00:00,40.703222222222614 +2019-10-14 19:00:00,100.90688888888818 +2019-10-14 20:00:00,115.6799999999985 +2019-10-14 21:00:00,115.89999999999849 +2019-10-14 22:00:00,115.89999999999849 +2019-10-14 23:00:00,115.89999999999849 +2019-10-15 00:00:00,115.89999999999849 +2019-10-15 01:00:00,115.89999999999849 +2019-10-15 02:00:00,115.89999999999849 +2019-10-15 03:00:00,110.66066666666708 +2019-10-15 04:00:00,70.33822222222106 +2019-10-15 05:00:00,16.462666666666344 +2019-10-15 06:00:00,0.0 +2019-10-15 07:00:00,0.0 +2019-10-15 08:00:00,0.0 +2019-10-15 09:00:00,0.0 +2019-10-15 10:00:00,0.0 +2019-10-15 11:00:00,0.0 +2019-10-15 12:00:00,0.0 +2019-10-15 13:00:00,0.0 +2019-10-15 14:00:00,0.0 +2019-10-15 15:00:00,0.0 +2019-10-15 16:00:00,0.0 +2019-10-15 17:00:00,0.7142222222222224 +2019-10-15 18:00:00,36.0551111111111 +2019-10-15 19:00:00,93.88444444444374 +2019-10-15 20:00:00,113.50100000000002 +2019-10-15 21:00:00,114.8178888888889 +2019-10-15 22:00:00,110.42533333333306 +2019-10-15 23:00:00,95.42099999999978 +2019-10-16 00:00:00,100.5793333333346 +2019-10-16 01:00:00,110.07333333333457 +2019-10-16 02:00:00,84.39755555555581 +2019-10-16 03:00:00,31.14377777777715 +2019-10-16 04:00:00,23.962111111111277 +2019-10-16 05:00:00,8.439333333333254 +2019-10-16 06:00:00,0.0 +2019-10-16 07:00:00,0.0 +2019-10-16 08:00:00,0.0 +2019-10-16 09:00:00,0.0 +2019-10-16 10:00:00,0.0 +2019-10-16 11:00:00,0.0 +2019-10-16 12:00:00,0.0 +2019-10-16 13:00:00,0.0 +2019-10-16 14:00:00,0.0 +2019-10-16 15:00:00,0.0 +2019-10-16 16:00:00,0.0 +2019-10-16 17:00:00,0.8555555555555555 +2019-10-16 18:00:00,36.72722222222233 +2019-10-16 19:00:00,93.4681111111113 +2019-10-16 20:00:00,107.9907777777775 +2019-10-16 21:00:00,103.9092222222214 +2019-10-16 22:00:00,109.84011111111221 +2019-10-16 23:00:00,92.732666666667 +2019-10-17 00:00:00,109.27688888888729 +2019-10-17 01:00:00,111.65777777777598 +2019-10-17 02:00:00,111.69999999999821 +2019-10-17 03:00:00,103.4925555555546 +2019-10-17 04:00:00,58.82033333333262 +2019-10-17 05:00:00,13.596111111111014 +2019-10-17 06:00:00,0.0 +2019-10-17 07:00:00,0.0 +2019-10-17 08:00:00,0.0 +2019-10-17 09:00:00,0.0 +2019-10-17 10:00:00,0.0 +2019-10-17 11:00:00,0.0 +2019-10-17 12:00:00,0.0 +2019-10-17 13:00:00,0.0 +2019-10-17 14:00:00,0.0 +2019-10-17 15:00:00,0.0 +2019-10-17 16:00:00,0.0 +2019-10-17 17:00:00,0.5155555555555555 +2019-10-17 18:00:00,32.99511111111125 +2019-10-17 19:00:00,98.67477777777714 +2019-10-17 20:00:00,64.71633333333327 +2019-10-17 21:00:00,32.89066666666653 +2019-10-17 22:00:00,46.40122222222246 +2019-10-17 23:00:00,38.08577777777756 +2019-10-18 00:00:00,35.183777777777934 +2019-10-18 01:00:00,37.379555555555676 +2019-10-18 02:00:00,50.54711111111078 +2019-10-18 03:00:00,38.330999999999825 +2019-10-18 04:00:00,25.756333333332947 +2019-10-18 05:00:00,7.380666666666538 +2019-10-18 06:00:00,0.0 +2019-10-18 07:00:00,0.0 +2019-10-18 08:00:00,0.0 +2019-10-18 09:00:00,0.0 +2019-10-18 10:00:00,0.0 +2019-10-18 11:00:00,0.0 +2019-10-18 12:00:00,0.0 +2019-10-18 13:00:00,0.0 +2019-10-18 14:00:00,0.0 +2019-10-18 15:00:00,0.0 +2019-10-18 16:00:00,0.0 +2019-10-18 17:00:00,1.0393333333333357 +2019-10-18 18:00:00,21.904666666666856 +2019-10-18 19:00:00,95.39166666666713 +2019-10-18 20:00:00,108.85044444444516 +2019-10-18 21:00:00,74.74777777777817 +2019-10-18 22:00:00,69.94577777777796 +2019-10-18 23:00:00,70.7805555555553 +2019-10-19 00:00:00,88.2206666666669 +2019-10-19 01:00:00,85.42155555555539 +2019-10-19 02:00:00,67.6554444444445 +2019-10-19 03:00:00,49.722999999999864 +2019-10-19 04:00:00,41.67200000000024 +2019-10-19 05:00:00,6.008222222222279 +2019-10-19 06:00:00,0.0 +2019-10-19 07:00:00,0.0 +2019-10-19 08:00:00,0.0 +2019-10-19 09:00:00,0.0 +2019-10-19 10:00:00,0.0 +2019-10-19 11:00:00,0.0 +2019-10-19 12:00:00,0.0 +2019-10-19 13:00:00,0.0 +2019-10-19 14:00:00,0.0 +2019-10-19 15:00:00,0.0 +2019-10-19 16:00:00,0.0 +2019-10-19 17:00:00,1.3688888888888957 +2019-10-19 18:00:00,23.203888888888766 +2019-10-19 19:00:00,83.97400000000003 +2019-10-19 20:00:00,114.45333333333153 +2019-10-19 21:00:00,114.29488888889071 +2019-10-19 22:00:00,113.61700000000016 +2019-10-19 23:00:00,103.78011111111078 +2019-10-20 00:00:00,56.23211111111099 +2019-10-20 01:00:00,68.41144444444433 +2019-10-20 02:00:00,21.78711111111116 +2019-10-20 03:00:00,19.44311111111065 +2019-10-20 04:00:00,22.655333333333413 +2019-10-20 05:00:00,8.241555555555596 +2019-10-20 06:00:00,0.0 +2019-10-20 07:00:00,0.0 +2019-10-20 08:00:00,0.0 +2019-10-20 09:00:00,0.0 +2019-10-20 10:00:00,0.0 +2019-10-20 11:00:00,0.0 +2019-10-20 12:00:00,0.0 +2019-10-20 13:00:00,0.0 +2019-10-20 14:00:00,0.0 +2019-10-20 15:00:00,0.0 +2019-10-20 16:00:00,0.0 +2019-10-20 17:00:00,2.6217777777777873 +2019-10-20 18:00:00,42.55377777777781 +2019-10-20 19:00:00,87.1445555555557 +2019-10-20 20:00:00,110.157111111113 +2019-10-20 21:00:00,113.57111111111293 +2019-10-20 22:00:00,113.72666666666848 +2019-10-20 23:00:00,106.79788888888947 +2019-10-21 00:00:00,96.13877777777878 +2019-10-21 01:00:00,73.37933333333385 +2019-10-21 02:00:00,55.74255555555535 +2019-10-21 03:00:00,74.78011111111047 +2019-10-21 04:00:00,65.71777777777685 +2019-10-21 05:00:00,14.937111111111172 +2019-10-21 06:00:00,0.0 +2019-10-21 07:00:00,0.0 +2019-10-21 08:00:00,0.0 +2019-10-21 09:00:00,0.0 +2019-10-21 10:00:00,0.0 +2019-10-21 11:00:00,0.0 +2019-10-21 12:00:00,0.0 +2019-10-21 13:00:00,0.0 +2019-10-21 14:00:00,0.0 +2019-10-21 15:00:00,0.0 +2019-10-21 16:00:00,0.0 +2019-10-21 17:00:00,1.0755555555555556 +2019-10-21 18:00:00,19.46233333333324 +2019-10-21 19:00:00,38.57644444444421 +2019-10-21 20:00:00,72.10233333333372 +2019-10-21 21:00:00,75.68411111111044 +2019-10-21 22:00:00,75.67311111111113 +2019-10-21 23:00:00,76.14122222222194 +2019-10-22 00:00:00,90.2446666666664 +2019-10-22 01:00:00,92.89944444444548 +2019-10-22 02:00:00,91.34477777777708 +2019-10-22 03:00:00,86.59344444444254 +2019-10-22 04:00:00,68.39222222222341 +2019-10-22 05:00:00,16.04955555555588 +2019-10-22 06:00:00,0.0 +2019-10-22 07:00:00,0.0 +2019-10-22 08:00:00,0.0 +2019-10-22 09:00:00,0.0 +2019-10-22 10:00:00,0.0 +2019-10-22 11:00:00,0.0 +2019-10-22 12:00:00,0.0 +2019-10-22 13:00:00,0.0 +2019-10-22 14:00:00,0.0 +2019-10-22 15:00:00,0.0 +2019-10-22 16:00:00,0.0 +2019-10-22 17:00:00,0.5891111111111105 +2019-10-22 18:00:00,21.43333333333336 +2019-10-22 19:00:00,75.95233333333421 +2019-10-22 20:00:00,78.32344444444547 +2019-10-22 21:00:00,80.65277777777766 +2019-10-22 22:00:00,79.4181111111098 +2019-10-22 23:00:00,74.90066666666604 +2019-10-23 00:00:00,78.27866666666687 +2019-10-23 01:00:00,97.17555555555509 +2019-10-23 02:00:00,85.11444444444426 +2019-10-23 03:00:00,79.26477777777751 +2019-10-23 04:00:00,17.548333333333417 +2019-10-23 05:00:00,4.322888888888929 +2019-10-23 06:00:00,0.0 +2019-10-23 07:00:00,0.0 +2019-10-23 08:00:00,0.0 +2019-10-23 09:00:00,0.0 +2019-10-23 10:00:00,0.0 +2019-10-23 11:00:00,0.0 +2019-10-23 12:00:00,0.0 +2019-10-23 13:00:00,0.0 +2019-10-23 14:00:00,0.0 +2019-10-23 15:00:00,0.0 +2019-10-23 16:00:00,0.0 +2019-10-23 17:00:00,2.07 +2019-10-23 18:00:00,18.16300000000016 +2019-10-23 19:00:00,19.48188888888878 +2019-10-23 20:00:00,54.05799999999973 +2019-10-23 21:00:00,59.46744444444419 +2019-10-23 22:00:00,75.79055555555567 +2019-10-23 23:00:00,89.13922222222217 +2019-10-24 00:00:00,82.94355555555602 +2019-10-24 01:00:00,70.87800000000026 +2019-10-24 02:00:00,67.0486666666673 +2019-10-24 03:00:00,48.25733333333299 +2019-10-24 04:00:00,29.65611111111056 +2019-10-24 05:00:00,9.24755555555552 +2019-10-24 06:00:00,0.0 +2019-10-24 07:00:00,0.0 +2019-10-24 08:00:00,0.0 +2019-10-24 09:00:00,0.0 +2019-10-24 10:00:00,0.0 +2019-10-24 11:00:00,0.0 +2019-10-24 12:00:00,0.0 +2019-10-24 13:00:00,0.0 +2019-10-24 14:00:00,0.0 +2019-10-24 15:00:00,0.0 +2019-10-24 16:00:00,0.0 +2019-10-24 17:00:00,0.6577777777777778 +2019-10-24 18:00:00,23.046666666666816 +2019-10-24 19:00:00,64.28466666666705 +2019-10-24 20:00:00,45.731555555555786 +2019-10-24 21:00:00,71.87199999999989 +2019-10-24 22:00:00,84.04244444444512 +2019-10-24 23:00:00,100.68900000000123 +2019-10-25 00:00:00,106.20033333333127 +2019-10-25 01:00:00,76.00333333333298 +2019-10-25 02:00:00,94.9858888888895 +2019-10-25 03:00:00,50.47988888888909 +2019-10-25 04:00:00,18.103333333332877 +2019-10-25 05:00:00,5.143888888889009 +2019-10-25 06:00:00,0.0 +2019-10-25 07:00:00,0.0 +2019-10-25 08:00:00,0.0 +2019-10-25 09:00:00,0.0 +2019-10-25 10:00:00,0.0 +2019-10-25 11:00:00,0.0 +2019-10-25 12:00:00,0.0 +2019-10-25 13:00:00,0.0 +2019-10-25 14:00:00,0.0 +2019-10-25 15:00:00,0.0 +2019-10-25 16:00:00,0.0 +2019-10-25 17:00:00,2.8416666666666646 +2019-10-25 18:00:00,44.218666666666245 +2019-10-25 19:00:00,58.496888888888805 +2019-10-25 20:00:00,79.3908888888896 +2019-10-25 21:00:00,43.22977777777791 +2019-10-25 22:00:00,42.951222222222384 +2019-10-25 23:00:00,49.76522222222245 +2019-10-26 00:00:00,47.69988888888905 +2019-10-26 01:00:00,81.55333333333326 +2019-10-26 02:00:00,66.98733333333377 +2019-10-26 03:00:00,83.77277777777752 +2019-10-26 04:00:00,67.12122222222168 +2019-10-26 05:00:00,6.440444444444406 +2019-10-26 06:00:00,0.0 +2019-10-26 07:00:00,0.0 +2019-10-26 08:00:00,0.0 +2019-10-26 09:00:00,0.0 +2019-10-26 10:00:00,0.0 +2019-10-26 11:00:00,0.0 +2019-10-26 12:00:00,0.0 +2019-10-26 13:00:00,0.0 +2019-10-26 14:00:00,0.0 +2019-10-26 15:00:00,0.0 +2019-10-26 16:00:00,0.0 +2019-10-26 17:00:00,0.26066666666666627 +2019-10-26 18:00:00,9.153444444444505 +2019-10-26 19:00:00,11.749111111110963 +2019-10-26 20:00:00,43.20777777777789 +2019-10-26 21:00:00,49.33966666666679 +2019-10-26 22:00:00,69.22733333333356 +2019-10-26 23:00:00,67.06977777777732 +2019-10-27 00:00:00,34.738555555555436 +2019-10-27 01:00:00,16.61544444444418 +2019-10-27 02:00:00,54.22933333333298 +2019-10-27 03:00:00,38.13944444444401 +2019-10-27 04:00:00,33.5145555555557 +2019-10-27 05:00:00,17.583444444444332 +2019-10-27 06:00:00,0.0 +2019-10-27 07:00:00,0.0 +2019-10-27 08:00:00,0.0 +2019-10-27 09:00:00,0.0 +2019-10-27 10:00:00,0.0 +2019-10-27 11:00:00,0.0 +2019-10-27 12:00:00,0.0 +2019-10-27 13:00:00,0.0 +2019-10-27 14:00:00,0.0 +2019-10-27 15:00:00,0.0 +2019-10-27 16:00:00,0.0 +2019-10-27 17:00:00,1.5044444444444445 +2019-10-27 18:00:00,35.93944444444424 +2019-10-27 19:00:00,64.4902222222222 +2019-10-27 20:00:00,36.040777777778004 +2019-10-27 21:00:00,35.65333333333352 +2019-10-27 22:00:00,51.85199999999943 +2019-10-27 23:00:00,60.88244444444422 +2019-10-28 00:00:00,75.00855555555559 +2019-10-28 01:00:00,71.9697777777776 +2019-10-28 02:00:00,93.81077777777692 +2019-10-28 03:00:00,98.22155555555493 +2019-10-28 04:00:00,72.92788888888941 +2019-10-28 05:00:00,17.183444444444465 +2019-10-28 06:00:00,0.0 +2019-10-28 07:00:00,0.0 +2019-10-28 08:00:00,0.0 +2019-10-28 09:00:00,0.0 +2019-10-28 10:00:00,0.0 +2019-10-28 11:00:00,0.0 +2019-10-28 12:00:00,0.0 +2019-10-28 13:00:00,0.0 +2019-10-28 14:00:00,0.0 +2019-10-28 15:00:00,0.0 +2019-10-28 16:00:00,0.0 +2019-10-28 17:00:00,3.0765555555555553 +2019-10-28 18:00:00,48.86988888888919 +2019-10-28 19:00:00,92.76399999999946 +2019-10-28 20:00:00,93.0101111111115 +2019-10-28 21:00:00,104.11211111111115 +2019-10-28 22:00:00,96.05300000000003 +2019-10-28 23:00:00,88.63211111111129 +2019-10-29 00:00:00,74.87311111111073 +2019-10-29 01:00:00,94.71744444444452 +2019-10-29 02:00:00,75.35711111111057 +2019-10-29 03:00:00,68.42944444444446 +2019-10-29 04:00:00,73.46588888888823 +2019-10-29 05:00:00,18.11777777777731 +2019-10-29 06:00:00,0.0 +2019-10-29 07:00:00,0.0 +2019-10-29 08:00:00,0.0 +2019-10-29 09:00:00,0.0 +2019-10-29 10:00:00,0.0 +2019-10-29 11:00:00,0.0 +2019-10-29 12:00:00,0.0 +2019-10-29 13:00:00,0.0 +2019-10-29 14:00:00,0.0 +2019-10-29 15:00:00,0.0 +2019-10-29 16:00:00,0.0 +2019-10-29 17:00:00,1.9922222222222135 +2019-10-29 18:00:00,11.163555555555426 +2019-10-29 19:00:00,25.533777777777424 +2019-10-29 20:00:00,63.336555555555556 +2019-10-29 21:00:00,96.45266666666525 +2019-10-29 22:00:00,81.82999999999959 +2019-10-29 23:00:00,68.39322222222212 +2019-10-30 00:00:00,81.26755555555576 +2019-10-30 01:00:00,78.36266666666671 +2019-10-30 02:00:00,96.01911111111171 +2019-10-30 03:00:00,81.52877777777762 +2019-10-30 04:00:00,39.80366666666762 +2019-10-30 05:00:00,7.003777777777885 +2019-10-30 06:00:00,0.0 +2019-10-30 07:00:00,0.0 +2019-10-30 08:00:00,0.0 +2019-10-30 09:00:00,0.0 +2019-10-30 10:00:00,0.0 +2019-10-30 11:00:00,0.0 +2019-10-30 12:00:00,0.0 +2019-10-30 13:00:00,0.0 +2019-10-30 14:00:00,0.0 +2019-10-30 15:00:00,0.0 +2019-10-30 16:00:00,0.0 +2019-10-30 17:00:00,3.7051111111111004 +2019-10-30 18:00:00,40.26022222222213 +2019-10-30 19:00:00,88.83011111111088 +2019-10-30 20:00:00,38.11588888888945 +2019-10-30 21:00:00,63.95811111111179 +2019-10-30 22:00:00,88.6696666666673 +2019-10-30 23:00:00,96.71944444444392 +2019-10-31 00:00:00,93.72677777777699 +2019-10-31 01:00:00,103.07400000000031 +2019-10-31 02:00:00,115.74555555555739 +2019-10-31 03:00:00,108.66233333333508 +2019-10-31 04:00:00,69.00744444444386 +2019-10-31 05:00:00,16.832222222221905 +2019-10-31 06:00:00,0.0 +2019-10-31 07:00:00,0.0 +2019-10-31 08:00:00,0.0 +2019-10-31 09:00:00,0.0 +2019-10-31 10:00:00,0.0 +2019-10-31 11:00:00,0.0 +2019-10-31 12:00:00,0.0 +2019-10-31 13:00:00,0.0 +2019-10-31 14:00:00,0.0 +2019-10-31 15:00:00,0.0 +2019-10-31 16:00:00,0.0 +2019-10-31 17:00:00,4.2457777777777945 +2019-10-31 18:00:00,56.084444444445296 +2019-10-31 19:00:00,109.02077777777792 +2019-10-31 20:00:00,115.86111111111111 +2019-10-31 21:00:00,116.0 +2019-10-31 22:00:00,116.0 +2019-10-31 23:00:00,116.0 +2019-11-01 00:00:00,111.78911111111071 +2019-11-01 01:00:00,112.08333333333334 +2019-11-01 02:00:00,114.27599999999951 +2019-11-01 03:00:00,108.1937777777765 +2019-11-01 04:00:00,68.93677777777641 +2019-11-01 05:00:00,16.453444444444266 +2019-11-01 06:00:00,0.0 +2019-11-01 07:00:00,0.0 +2019-11-01 08:00:00,0.0 +2019-11-01 09:00:00,0.0 +2019-11-01 10:00:00,0.0 +2019-11-01 11:00:00,0.0 +2019-11-01 12:00:00,0.0 +2019-11-01 13:00:00,0.0 +2019-11-01 14:00:00,0.0 +2019-11-01 15:00:00,0.0 +2019-11-01 16:00:00,0.0 +2019-11-01 17:00:00,4.0184444444444605 +2019-11-01 18:00:00,51.34466666666601 +2019-11-01 19:00:00,102.07944444444513 +2019-11-01 20:00:00,98.72033333333331 +2019-11-01 21:00:00,102.21555555555608 +2019-11-01 22:00:00,108.9154444444459 +2019-11-01 23:00:00,102.78244444444478 +2019-11-02 00:00:00,114.27544444444447 +2019-11-02 01:00:00,115.5 +2019-11-02 02:00:00,115.79399999999877 +2019-11-02 03:00:00,111.57188888888705 +2019-11-02 04:00:00,73.19277777777661 +2019-11-02 05:00:00,18.48511111111091 +2019-11-02 06:00:00,0.0 +2019-11-02 07:00:00,0.0 +2019-11-02 08:00:00,0.0 +2019-11-02 09:00:00,0.0 +2019-11-02 10:00:00,0.0 +2019-11-02 11:00:00,0.0 +2019-11-02 12:00:00,0.0 +2019-11-02 13:00:00,0.0 +2019-11-02 14:00:00,0.0 +2019-11-02 15:00:00,0.0 +2019-11-02 16:00:00,0.0 +2019-11-02 17:00:00,4.276555555555544 +2019-11-02 18:00:00,52.69777777777815 +2019-11-02 19:00:00,104.85611111111221 +2019-11-02 20:00:00,115.6000000000015 +2019-11-02 21:00:00,115.6000000000015 +2019-11-02 22:00:00,115.6000000000015 +2019-11-02 23:00:00,115.76000000000047 +2019-11-03 00:00:00,116.5 +2019-11-03 01:00:00,115.17411111110911 +2019-11-03 02:00:00,115.19999999999817 +2019-11-03 03:00:00,109.62144444444385 +2019-11-03 04:00:00,71.00677777777817 +2019-11-03 05:00:00,19.04133333333365 +2019-11-03 06:00:00,0.0 +2019-11-03 07:00:00,0.0 +2019-11-03 08:00:00,0.0 +2019-11-03 09:00:00,0.0 +2019-11-03 10:00:00,0.0 +2019-11-03 11:00:00,0.0 +2019-11-03 12:00:00,0.0 +2019-11-03 13:00:00,0.0 +2019-11-03 14:00:00,0.0 +2019-11-03 15:00:00,0.0 +2019-11-03 16:00:00,0.0 +2019-11-03 17:00:00,4.395111111111092 +2019-11-03 18:00:00,18.15366666666659 +2019-11-03 19:00:00,96.61533333333308 +2019-11-03 20:00:00,115.80000000000183 +2019-11-03 21:00:00,115.80000000000183 +2019-11-03 22:00:00,115.80000000000183 +2019-11-03 23:00:00,115.80000000000183 +2019-11-04 00:00:00,115.80000000000183 +2019-11-04 01:00:00,115.80000000000183 +2019-11-04 02:00:00,115.80000000000183 +2019-11-04 03:00:00,108.79222222222161 +2019-11-04 04:00:00,74.30777777777737 +2019-11-04 05:00:00,19.283444444444047 +2019-11-04 06:00:00,0.0 +2019-11-04 07:00:00,0.0 +2019-11-04 08:00:00,0.0 +2019-11-04 09:00:00,0.0 +2019-11-04 10:00:00,0.0 +2019-11-04 11:00:00,0.0 +2019-11-04 12:00:00,0.0 +2019-11-04 13:00:00,0.0 +2019-11-04 14:00:00,0.0 +2019-11-04 15:00:00,0.0 +2019-11-04 16:00:00,0.0 +2019-11-04 17:00:00,4.264555555555561 +2019-11-04 18:00:00,39.77722222222192 +2019-11-04 19:00:00,21.618555555555556 +2019-11-04 20:00:00,61.71222222222141 +2019-11-04 21:00:00,113.69999999999818 +2019-11-04 22:00:00,113.50555555555613 +2019-11-04 23:00:00,113.80111111111255 +2019-11-05 00:00:00,114.10000000000146 +2019-11-05 01:00:00,114.10000000000146 +2019-11-05 02:00:00,112.13444444444586 +2019-11-05 03:00:00,95.49255555555474 +2019-11-05 04:00:00,56.00766666666564 +2019-11-05 05:00:00,13.708666666666828 +2019-11-05 06:00:00,0.0 +2019-11-05 07:00:00,0.0 +2019-11-05 08:00:00,0.0 +2019-11-05 09:00:00,0.0 +2019-11-05 10:00:00,0.0 +2019-11-05 11:00:00,0.0 +2019-11-05 12:00:00,0.0 +2019-11-05 13:00:00,0.0 +2019-11-05 14:00:00,0.0 +2019-11-05 15:00:00,0.0 +2019-11-05 16:00:00,0.0 +2019-11-05 17:00:00,4.183444444444429 +2019-11-05 18:00:00,43.52144444444464 +2019-11-05 19:00:00,90.19433333333392 +2019-11-05 20:00:00,96.90077777777624 +2019-11-05 21:00:00,109.96622222222395 +2019-11-05 22:00:00,113.80000000000182 +2019-11-05 23:00:00,113.80000000000182 +2019-11-06 00:00:00,113.80000000000182 +2019-11-06 01:00:00,115.1477777777796 +2019-11-06 02:00:00,115.45444444444627 +2019-11-06 03:00:00,109.6843333333338 +2019-11-06 04:00:00,71.46222222222094 +2019-11-06 05:00:00,18.559111111110774 +2019-11-06 06:00:00,0.0 +2019-11-06 07:00:00,0.0 +2019-11-06 08:00:00,0.0 +2019-11-06 09:00:00,0.0 +2019-11-06 10:00:00,0.0 +2019-11-06 11:00:00,0.0 +2019-11-06 12:00:00,0.0 +2019-11-06 13:00:00,0.0 +2019-11-06 14:00:00,0.0 +2019-11-06 15:00:00,0.0 +2019-11-06 16:00:00,0.0 +2019-11-06 17:00:00,4.385222222222209 +2019-11-06 18:00:00,47.36200000000051 +2019-11-06 19:00:00,90.29844444444423 +2019-11-06 20:00:00,115.43377777777604 +2019-11-06 21:00:00,116.19999999999816 +2019-11-06 22:00:00,116.19999999999816 +2019-11-06 23:00:00,116.19999999999816 +2019-11-07 00:00:00,116.19999999999816 +2019-11-07 01:00:00,115.98555555555372 +2019-11-07 02:00:00,115.05066666666498 +2019-11-07 03:00:00,97.3666666666668 +2019-11-07 04:00:00,69.63166666666515 +2019-11-07 05:00:00,18.52100000000005 +2019-11-07 06:00:00,0.02666666666666666 +2019-11-07 07:00:00,0.0 +2019-11-07 08:00:00,0.0 +2019-11-07 09:00:00,0.0 +2019-11-07 10:00:00,0.0 +2019-11-07 11:00:00,0.0 +2019-11-07 12:00:00,0.0 +2019-11-07 13:00:00,0.0 +2019-11-07 14:00:00,0.0 +2019-11-07 15:00:00,0.0 +2019-11-07 16:00:00,0.0 +2019-11-07 17:00:00,4.014444444444444 +2019-11-07 18:00:00,46.3208888888892 +2019-11-07 19:00:00,87.64311111111041 +2019-11-07 20:00:00,111.29344444444652 +2019-11-07 21:00:00,115.34000000000182 +2019-11-07 22:00:00,115.80000000000183 +2019-11-07 23:00:00,115.71111111111261 +2019-11-08 00:00:00,114.19999999999818 +2019-11-08 01:00:00,113.78666666666486 +2019-11-08 02:00:00,112.97799999999836 +2019-11-08 03:00:00,104.27377777777596 +2019-11-08 04:00:00,65.74277777777753 +2019-11-08 05:00:00,17.725666666666452 +2019-11-08 06:00:00,0.10755555555555563 +2019-11-08 07:00:00,0.0 +2019-11-08 08:00:00,0.0 +2019-11-08 09:00:00,0.0 +2019-11-08 10:00:00,0.0 +2019-11-08 11:00:00,0.0 +2019-11-08 12:00:00,0.0 +2019-11-08 13:00:00,0.0 +2019-11-08 14:00:00,0.0 +2019-11-08 15:00:00,0.0 +2019-11-08 16:00:00,0.0 +2019-11-08 17:00:00,2.662666666666669 +2019-11-08 18:00:00,42.495444444444374 +2019-11-08 19:00:00,59.239222222221734 +2019-11-08 20:00:00,79.50177777777772 +2019-11-08 21:00:00,107.55366666666683 +2019-11-08 22:00:00,113.95222222222222 +2019-11-08 23:00:00,114.1311111111092 +2019-11-09 00:00:00,114.39999999999853 +2019-11-09 01:00:00,114.62888888888742 +2019-11-09 02:00:00,115.20777777777627 +2019-11-09 03:00:00,107.49144444444464 +2019-11-09 04:00:00,68.65366666666542 +2019-11-09 05:00:00,17.915111111110804 +2019-11-09 06:00:00,0.0 +2019-11-09 07:00:00,0.0 +2019-11-09 08:00:00,0.0 +2019-11-09 09:00:00,0.0 +2019-11-09 10:00:00,0.0 +2019-11-09 11:00:00,0.0 +2019-11-09 12:00:00,0.0 +2019-11-09 13:00:00,0.0 +2019-11-09 14:00:00,0.0 +2019-11-09 15:00:00,0.0 +2019-11-09 16:00:00,0.0 +2019-11-09 17:00:00,2.6491111111111048 +2019-11-09 18:00:00,35.5893333333333 +2019-11-09 19:00:00,65.96622222222194 +2019-11-09 20:00:00,106.41677777777798 +2019-11-09 21:00:00,109.3705555555553 +2019-11-09 22:00:00,110.71088888888855 +2019-11-09 23:00:00,108.93144444444503 +2019-11-10 00:00:00,115.20888888889037 +2019-11-10 01:00:00,109.62244444444359 +2019-11-10 02:00:00,113.65999999999818 +2019-11-10 03:00:00,103.6391111111097 +2019-11-10 04:00:00,67.69366666666683 +2019-11-10 05:00:00,16.345333333333546 +2019-11-10 06:00:00,0.05133333333333334 +2019-11-10 07:00:00,0.0 +2019-11-10 08:00:00,0.0 +2019-11-10 09:00:00,0.0 +2019-11-10 10:00:00,0.0 +2019-11-10 11:00:00,0.0 +2019-11-10 12:00:00,0.0 +2019-11-10 13:00:00,0.0 +2019-11-10 14:00:00,0.0 +2019-11-10 15:00:00,0.0 +2019-11-10 16:00:00,0.0 +2019-11-10 17:00:00,3.043777777777764 +2019-11-10 18:00:00,29.364888888888892 +2019-11-10 19:00:00,96.17111111111058 +2019-11-10 20:00:00,64.34711111111224 +2019-11-10 21:00:00,102.29544444444402 +2019-11-10 22:00:00,108.77288888888901 +2019-11-10 23:00:00,115.92555555555398 +2019-11-11 00:00:00,116.19999999999816 +2019-11-11 01:00:00,116.19999999999816 +2019-11-11 02:00:00,115.38444444444261 +2019-11-11 03:00:00,105.78555555555535 +2019-11-11 04:00:00,68.92533333333412 +2019-11-11 05:00:00,18.76000000000011 +2019-11-11 06:00:00,0.025 +2019-11-11 07:00:00,0.0 +2019-11-11 08:00:00,0.0 +2019-11-11 09:00:00,0.0 +2019-11-11 10:00:00,0.0 +2019-11-11 11:00:00,0.0 +2019-11-11 12:00:00,0.0 +2019-11-11 13:00:00,0.0 +2019-11-11 14:00:00,0.0 +2019-11-11 15:00:00,0.0 +2019-11-11 16:00:00,0.0 +2019-11-11 17:00:00,4.608333333333333 +2019-11-11 18:00:00,47.16033333333382 +2019-11-11 19:00:00,70.53288888888913 +2019-11-11 20:00:00,110.98311111110996 +2019-11-11 21:00:00,113.35511111111087 +2019-11-11 22:00:00,115.49777777777778 +2019-11-11 23:00:00,115.5 +2019-11-12 00:00:00,115.5 +2019-11-12 01:00:00,115.5 +2019-11-12 02:00:00,115.35 +2019-11-12 03:00:00,107.24188888888732 +2019-11-12 04:00:00,70.97288888888784 +2019-11-12 05:00:00,18.739777777777817 +2019-11-12 06:00:00,0.0 +2019-11-12 07:00:00,0.0 +2019-11-12 08:00:00,0.0 +2019-11-12 09:00:00,0.0 +2019-11-12 10:00:00,0.0 +2019-11-12 11:00:00,0.0 +2019-11-12 12:00:00,0.0 +2019-11-12 13:00:00,0.0 +2019-11-12 14:00:00,0.0 +2019-11-12 15:00:00,0.0 +2019-11-12 16:00:00,0.0 +2019-11-12 17:00:00,4.348777777777775 +2019-11-12 18:00:00,42.105666666667 +2019-11-12 19:00:00,94.80711111111152 +2019-11-12 20:00:00,108.55555555555671 +2019-11-12 21:00:00,113.80000000000182 +2019-11-12 22:00:00,112.78388888889067 +2019-11-12 23:00:00,112.12422222222277 +2019-11-13 00:00:00,113.66288888888717 +2019-11-13 01:00:00,114.2246666666667 +2019-11-13 02:00:00,115.30088888888865 +2019-11-13 03:00:00,108.33922222222051 +2019-11-13 04:00:00,66.05122222222202 +2019-11-13 05:00:00,16.905444444444495 +2019-11-13 06:00:00,0.29511111111111044 +2019-11-13 07:00:00,0.0 +2019-11-13 08:00:00,0.0 +2019-11-13 09:00:00,0.0 +2019-11-13 10:00:00,0.0 +2019-11-13 11:00:00,0.0 +2019-11-13 12:00:00,0.0 +2019-11-13 13:00:00,0.0 +2019-11-13 14:00:00,0.0 +2019-11-13 15:00:00,0.0 +2019-11-13 16:00:00,0.0 +2019-11-13 17:00:00,4.902555555555585 +2019-11-13 18:00:00,50.61722222222156 +2019-11-13 19:00:00,71.38855555555533 +2019-11-13 20:00:00,108.3823333333326 +2019-11-13 21:00:00,106.16488888888998 +2019-11-13 22:00:00,114.82444444444626 +2019-11-13 23:00:00,116.14799999999985 +2019-11-14 00:00:00,114.80722222222413 +2019-11-14 01:00:00,115.05000000000182 +2019-11-14 02:00:00,115.66111111111294 +2019-11-14 03:00:00,103.21955555555415 +2019-11-14 04:00:00,48.161444444445245 +2019-11-14 05:00:00,21.089222222222137 +2019-11-14 06:00:00,0.25600000000000034 +2019-11-14 07:00:00,0.0 +2019-11-14 08:00:00,0.0 +2019-11-14 09:00:00,0.0 +2019-11-14 10:00:00,0.0 +2019-11-14 11:00:00,0.0 +2019-11-14 12:00:00,0.0 +2019-11-14 13:00:00,0.0 +2019-11-14 14:00:00,0.0 +2019-11-14 15:00:00,0.0 +2019-11-14 16:00:00,0.0 +2019-11-14 17:00:00,4.768222222222222 +2019-11-14 18:00:00,46.819000000000194 +2019-11-14 19:00:00,91.04144444444486 +2019-11-14 20:00:00,100.07533333333346 +2019-11-14 21:00:00,110.67944444444464 +2019-11-14 22:00:00,114.74555555555555 +2019-11-14 23:00:00,114.85722222222078 +2019-11-15 00:00:00,113.86244444444301 +2019-11-15 01:00:00,113.42911111111322 +2019-11-15 02:00:00,112.54111111111293 +2019-11-15 03:00:00,102.78000000000175 +2019-11-15 04:00:00,68.40333333333284 +2019-11-15 05:00:00,19.370555555555168 +2019-11-15 06:00:00,0.04666666666666666 +2019-11-15 07:00:00,0.0 +2019-11-15 08:00:00,0.0 +2019-11-15 09:00:00,0.0 +2019-11-15 10:00:00,0.0 +2019-11-15 11:00:00,0.0 +2019-11-15 12:00:00,0.0 +2019-11-15 13:00:00,0.0 +2019-11-15 14:00:00,0.0 +2019-11-15 15:00:00,0.0 +2019-11-15 16:00:00,0.0 +2019-11-15 17:00:00,3.18 +2019-11-15 18:00:00,31.66744444444444 +2019-11-15 19:00:00,52.948777777777984 +2019-11-15 20:00:00,47.653222222222894 +2019-11-15 21:00:00,81.54211111111147 +2019-11-15 22:00:00,90.9026666666663 +2019-11-15 23:00:00,100.15988888888795 +2019-11-16 00:00:00,94.03344444444389 +2019-11-16 01:00:00,94.05433333333352 +2019-11-16 02:00:00,103.69577777777778 +2019-11-16 03:00:00,88.37388888888843 +2019-11-16 04:00:00,34.51866666666681 +2019-11-16 05:00:00,7.889222222222282 +2019-11-16 06:00:00,0.02566666666666667 +2019-11-16 07:00:00,0.0 +2019-11-16 08:00:00,0.0 +2019-11-16 09:00:00,0.0 +2019-11-16 10:00:00,0.0 +2019-11-16 11:00:00,0.0 +2019-11-16 12:00:00,0.0 +2019-11-16 13:00:00,0.0 +2019-11-16 14:00:00,0.0 +2019-11-16 15:00:00,0.0 +2019-11-16 16:00:00,0.0 +2019-11-16 17:00:00,5.980999999999972 +2019-11-16 18:00:00,52.938222222222365 +2019-11-16 19:00:00,103.91355555555374 +2019-11-16 20:00:00,111.95177777777786 +2019-11-16 21:00:00,98.45355555555523 +2019-11-16 22:00:00,108.2886666666662 +2019-11-16 23:00:00,57.64555555555611 +2019-11-17 00:00:00,103.76511111110977 +2019-11-17 01:00:00,104.36666666666594 +2019-11-17 02:00:00,86.1627777777775 +2019-11-17 03:00:00,96.43133333333321 +2019-11-17 04:00:00,72.56433333333423 +2019-11-17 05:00:00,20.745666666666395 +2019-11-17 06:00:00,0.1959999999999997 +2019-11-17 07:00:00,0.0 +2019-11-17 08:00:00,0.0 +2019-11-17 09:00:00,0.0 +2019-11-17 10:00:00,0.0 +2019-11-17 11:00:00,0.0 +2019-11-17 12:00:00,0.0 +2019-11-17 13:00:00,0.0 +2019-11-17 14:00:00,0.0 +2019-11-17 15:00:00,0.0 +2019-11-17 16:00:00,0.0 +2019-11-17 17:00:00,6.096333333333293 +2019-11-17 18:00:00,56.310666666667 +2019-11-17 19:00:00,104.81755555555381 +2019-11-17 20:00:00,115.39333333333151 +2019-11-17 21:00:00,115.69999999999817 +2019-11-17 22:00:00,115.69999999999817 +2019-11-17 23:00:00,114.56399999999964 +2019-11-18 00:00:00,111.48644444444456 +2019-11-18 01:00:00,98.60277777777836 +2019-11-18 02:00:00,74.67677777777753 +2019-11-18 03:00:00,98.20722222222099 +2019-11-18 04:00:00,72.69844444444405 +2019-11-18 05:00:00,20.736777777778272 +2019-11-18 06:00:00,0.1386666666666668 +2019-11-18 07:00:00,0.0 +2019-11-18 08:00:00,0.0 +2019-11-18 09:00:00,0.0 +2019-11-18 10:00:00,0.0 +2019-11-18 11:00:00,0.0 +2019-11-18 12:00:00,0.0 +2019-11-18 13:00:00,0.0 +2019-11-18 14:00:00,0.0 +2019-11-18 15:00:00,0.0 +2019-11-18 16:00:00,0.0 +2019-11-18 17:00:00,4.8140000000000125 +2019-11-18 18:00:00,22.484444444444442 +2019-11-18 19:00:00,61.98044444444416 +2019-11-18 20:00:00,113.9726666666652 +2019-11-18 21:00:00,112.42277777777899 +2019-11-18 22:00:00,96.2337777777779 +2019-11-18 23:00:00,108.40955555555375 +2019-11-19 00:00:00,109.44522222222213 +2019-11-19 01:00:00,88.9635555555551 +2019-11-19 02:00:00,108.29944444444378 +2019-11-19 03:00:00,97.32022222222224 +2019-11-19 04:00:00,65.10555555555446 +2019-11-19 05:00:00,19.097666666666235 +2019-11-19 06:00:00,0.03322222222222223 +2019-11-19 07:00:00,0.0 +2019-11-19 08:00:00,0.0 +2019-11-19 09:00:00,0.0 +2019-11-19 10:00:00,0.0 +2019-11-19 11:00:00,0.0 +2019-11-19 12:00:00,0.0 +2019-11-19 13:00:00,0.0 +2019-11-19 14:00:00,0.0 +2019-11-19 15:00:00,0.0 +2019-11-19 16:00:00,0.0 +2019-11-19 17:00:00,5.276777777777789 +2019-11-19 18:00:00,48.006555555554954 +2019-11-19 19:00:00,56.30977777777721 +2019-11-19 20:00:00,79.27899999999978 +2019-11-19 21:00:00,57.46988888888821 +2019-11-19 22:00:00,77.38022222222207 +2019-11-19 23:00:00,92.90622222222176 +2019-11-20 00:00:00,104.86266666666688 +2019-11-20 01:00:00,108.83422222222242 +2019-11-20 02:00:00,112.15022222222254 +2019-11-20 03:00:00,105.79055555555419 +2019-11-20 04:00:00,72.58433333333342 +2019-11-20 05:00:00,21.493000000000126 +2019-11-20 06:00:00,0.03333333333333333 +2019-11-20 07:00:00,0.0 +2019-11-20 08:00:00,0.0 +2019-11-20 09:00:00,0.0 +2019-11-20 10:00:00,0.0 +2019-11-20 11:00:00,0.0 +2019-11-20 12:00:00,0.0 +2019-11-20 13:00:00,0.0 +2019-11-20 14:00:00,0.0 +2019-11-20 15:00:00,0.0 +2019-11-20 16:00:00,0.0 +2019-11-20 17:00:00,2.929777777777772 +2019-11-20 18:00:00,37.55800000000001 +2019-11-20 19:00:00,101.57833333333295 +2019-11-20 20:00:00,114.5222222222204 +2019-11-20 21:00:00,115.69999999999817 +2019-11-20 22:00:00,115.45322222222048 +2019-11-20 23:00:00,90.60433333333404 +2019-11-21 00:00:00,110.99255555555717 +2019-11-21 01:00:00,115.7566666666685 +2019-11-21 02:00:00,114.34333333333517 +2019-11-21 03:00:00,106.23777777777862 +2019-11-21 04:00:00,72.67255555555408 +2019-11-21 05:00:00,21.815999999999715 +2019-11-21 06:00:00,0.0 +2019-11-21 07:00:00,0.0 +2019-11-21 08:00:00,0.0 +2019-11-21 09:00:00,0.0 +2019-11-21 10:00:00,0.0 +2019-11-21 11:00:00,0.0 +2019-11-21 12:00:00,0.0 +2019-11-21 13:00:00,0.0 +2019-11-21 14:00:00,0.0 +2019-11-21 15:00:00,0.0 +2019-11-21 16:00:00,0.0 +2019-11-21 17:00:00,3.289222222222214 +2019-11-21 18:00:00,56.04066666666681 +2019-11-21 19:00:00,27.150666666666066 +2019-11-21 20:00:00,64.10822222222227 +2019-11-21 21:00:00,93.07355555555561 +2019-11-21 22:00:00,104.37288888888894 +2019-11-21 23:00:00,108.56577777777753 +2019-11-22 00:00:00,100.03155555555544 +2019-11-22 01:00:00,103.11277777777663 +2019-11-22 02:00:00,111.13833333333191 +2019-11-22 03:00:00,106.73188888888816 +2019-11-22 04:00:00,73.65099999999873 +2019-11-22 05:00:00,22.928666666666604 +2019-11-22 06:00:00,0.189888888888889 +2019-11-22 07:00:00,0.0 +2019-11-22 08:00:00,0.0 +2019-11-22 09:00:00,0.0 +2019-11-22 10:00:00,0.0 +2019-11-22 11:00:00,0.0 +2019-11-22 12:00:00,0.0 +2019-11-22 13:00:00,0.0 +2019-11-22 14:00:00,0.0 +2019-11-22 15:00:00,0.0 +2019-11-22 16:00:00,0.0 +2019-11-22 17:00:00,3.241111111111111 +2019-11-22 18:00:00,41.4121111111109 +2019-11-22 19:00:00,43.51922222222242 +2019-11-22 20:00:00,55.37733333333352 +2019-11-22 21:00:00,52.46144444444434 +2019-11-22 22:00:00,74.07344444444445 +2019-11-22 23:00:00,70.71911111111115 +2019-11-23 00:00:00,60.36688888888855 +2019-11-23 01:00:00,58.66088888888892 +2019-11-23 02:00:00,50.676444444444584 +2019-11-23 03:00:00,10.05777777777801 +2019-11-23 04:00:00,0.0 +2019-11-23 05:00:00,0.0 +2019-11-23 06:00:00,0.0 +2019-11-23 07:00:00,0.0 +2019-11-23 08:00:00,0.0 +2019-11-23 09:00:00,0.0 +2019-11-23 10:00:00,0.0 +2019-11-23 11:00:00,0.0 +2019-11-23 12:00:00,0.0 +2019-11-23 13:00:00,0.0 +2019-11-23 14:00:00,0.0 +2019-11-23 15:00:00,12.76244444444449 +2019-11-23 16:00:00,55.17955555555537 +2019-11-23 17:00:00,86.04966666666647 +2019-11-23 18:00:00,91.23944444444467 +2019-11-23 19:00:00,68.27733333333346 +2019-11-23 20:00:00,90.86100000000008 +2019-11-23 21:00:00,97.75011111110966 +2019-11-23 22:00:00,86.5933333333333 +2019-11-23 23:00:00,77.04077777777765 +2019-11-24 00:00:00,65.3924444444443 +2019-11-24 01:00:00,97.2227777777792 +2019-11-24 02:00:00,50.8773333333333 +2019-11-24 03:00:00,12.121444444444268 +2019-11-24 04:00:00,0.0 +2019-11-24 05:00:00,0.0 +2019-11-24 06:00:00,0.0 +2019-11-24 07:00:00,0.0 +2019-11-24 08:00:00,0.0 +2019-11-24 09:00:00,0.0 +2019-11-24 10:00:00,0.0 +2019-11-24 11:00:00,0.0 +2019-11-24 12:00:00,0.0 +2019-11-24 13:00:00,0.0 +2019-11-24 14:00:00,0.0 +2019-11-24 15:00:00,8.839666666666687 +2019-11-24 16:00:00,63.855444444444764 +2019-11-24 17:00:00,93.01055555555558 +2019-11-24 18:00:00,83.73500000000033 +2019-11-24 19:00:00,67.86300000000058 +2019-11-24 20:00:00,48.993999999999936 +2019-11-24 21:00:00,86.49300000000036 +2019-11-24 22:00:00,100.96811111111072 +2019-11-24 23:00:00,108.8958888888908 +2019-11-25 00:00:00,111.59333333333512 +2019-11-25 01:00:00,102.10555555555732 +2019-11-25 02:00:00,63.00822222222184 +2019-11-25 03:00:00,13.813888888888476 +2019-11-25 04:00:00,0.0 +2019-11-25 05:00:00,0.0 +2019-11-25 06:00:00,0.0 +2019-11-25 07:00:00,0.0 +2019-11-25 08:00:00,0.0 +2019-11-25 09:00:00,0.0 +2019-11-25 10:00:00,0.0 +2019-11-25 11:00:00,0.0 +2019-11-25 12:00:00,0.0 +2019-11-25 13:00:00,0.0 +2019-11-25 14:00:00,0.0 +2019-11-25 15:00:00,13.610222222222124 +2019-11-25 16:00:00,43.34844444444439 +2019-11-25 17:00:00,68.30933333333412 +2019-11-25 18:00:00,106.57688888888761 +2019-11-25 19:00:00,106.82855555555543 +2019-11-25 20:00:00,110.92233333333206 +2019-11-25 21:00:00,112.39999999999863 +2019-11-25 22:00:00,110.31188888888701 +2019-11-25 23:00:00,102.7087777777789 +2019-11-26 00:00:00,78.94211111111181 +2019-11-26 01:00:00,66.61788888888894 +2019-11-26 02:00:00,37.37344444444486 +2019-11-26 03:00:00,0.1901111111111113 +2019-11-26 04:00:00,0.0 +2019-11-26 05:00:00,0.0 +2019-11-26 06:00:00,0.0 +2019-11-26 07:00:00,0.0 +2019-11-26 08:00:00,0.0 +2019-11-26 09:00:00,0.0 +2019-11-26 10:00:00,0.0 +2019-11-26 11:00:00,0.0 +2019-11-26 12:00:00,0.0 +2019-11-26 13:00:00,0.0 +2019-11-26 14:00:00,0.0 +2019-11-26 15:00:00,14.077777777777849 +2019-11-26 16:00:00,36.75833333333299 +2019-11-26 17:00:00,78.64344444444451 +2019-11-26 18:00:00,94.78355555555576 +2019-11-26 19:00:00,110.5130000000001 +2019-11-26 20:00:00,111.77644444444303 +2019-11-26 21:00:00,111.89999999999863 +2019-11-26 22:00:00,110.43822222222188 +2019-11-26 23:00:00,111.88111111110973 +2019-11-27 00:00:00,110.79888888888753 +2019-11-27 01:00:00,96.57977777777917 +2019-11-27 02:00:00,38.73288888888845 +2019-11-27 03:00:00,17.9462222222223 +2019-11-27 04:00:00,0.09722222222222222 +2019-11-27 05:00:00,0.0 +2019-11-27 06:00:00,0.0 +2019-11-27 07:00:00,0.0 +2019-11-27 08:00:00,0.0 +2019-11-27 09:00:00,0.0 +2019-11-27 10:00:00,0.0 +2019-11-27 11:00:00,0.0 +2019-11-27 12:00:00,0.0 +2019-11-27 13:00:00,0.0 +2019-11-27 14:00:00,0.0 +2019-11-27 15:00:00,14.50888888888903 +2019-11-27 16:00:00,70.40588888888924 +2019-11-27 17:00:00,106.86333333333333 +2019-11-27 18:00:00,111.78666666666666 +2019-11-27 19:00:00,108.1363333333329 +2019-11-27 20:00:00,95.04099999999968 +2019-11-27 21:00:00,109.75155555555642 +2019-11-27 22:00:00,110.69011111110943 +2019-11-27 23:00:00,110.39111111110955 +2019-11-28 00:00:00,105.41355555555417 +2019-11-28 01:00:00,70.52799999999999 +2019-11-28 02:00:00,15.976666666666803 +2019-11-28 03:00:00,15.190222222222191 +2019-11-28 04:00:00,0.0 +2019-11-28 05:00:00,0.0 +2019-11-28 06:00:00,0.0 +2019-11-28 07:00:00,0.0 +2019-11-28 08:00:00,0.0 +2019-11-28 09:00:00,0.0 +2019-11-28 10:00:00,0.0 +2019-11-28 11:00:00,0.0 +2019-11-28 12:00:00,0.0 +2019-11-28 13:00:00,0.0 +2019-11-28 14:00:00,0.0 +2019-11-28 15:00:00,6.703555555555587 +2019-11-28 16:00:00,68.44877777777802 +2019-11-28 17:00:00,107.90588888889005 +2019-11-28 18:00:00,111.95000000000138 +2019-11-28 19:00:00,112.10000000000137 +2019-11-28 20:00:00,112.10000000000137 +2019-11-28 21:00:00,112.10000000000137 +2019-11-28 22:00:00,112.10000000000137 +2019-11-28 23:00:00,112.02000000000137 +2019-11-29 00:00:00,111.61000000000138 +2019-11-29 01:00:00,102.18111111111145 +2019-11-29 02:00:00,63.98533333333458 +2019-11-29 03:00:00,14.68944444444475 +2019-11-29 04:00:00,0.0 +2019-11-29 05:00:00,0.0 +2019-11-29 06:00:00,0.0 +2019-11-29 07:00:00,0.0 +2019-11-29 08:00:00,0.0 +2019-11-29 09:00:00,0.0 +2019-11-29 10:00:00,0.0 +2019-11-29 11:00:00,0.0 +2019-11-29 12:00:00,0.0 +2019-11-29 13:00:00,0.0 +2019-11-29 14:00:00,0.0 +2019-11-29 15:00:00,16.244888888888973 +2019-11-29 16:00:00,52.47477777777755 +2019-11-29 17:00:00,57.202666666667014 +2019-11-29 18:00:00,99.83111111111182 +2019-11-29 19:00:00,104.97033333333336 +2019-11-29 20:00:00,104.08699999999989 +2019-11-29 21:00:00,107.5339999999994 +2019-11-29 22:00:00,111.60000000000136 +2019-11-29 23:00:00,111.60000000000136 +2019-11-30 00:00:00,111.60000000000136 +2019-11-30 01:00:00,101.48511111111145 +2019-11-30 02:00:00,40.67133333333367 +2019-11-30 03:00:00,13.198777777777567 +2019-11-30 04:00:00,0.0 +2019-11-30 05:00:00,0.0 +2019-11-30 06:00:00,0.0 +2019-11-30 07:00:00,0.0 +2019-11-30 08:00:00,0.0 +2019-11-30 09:00:00,0.0 +2019-11-30 10:00:00,0.0 +2019-11-30 11:00:00,0.0 +2019-11-30 12:00:00,0.0 +2019-11-30 13:00:00,0.0 +2019-11-30 14:00:00,0.0 +2019-11-30 15:00:00,13.36722222222224 +2019-11-30 16:00:00,65.10622222222278 +2019-11-30 17:00:00,92.44555555555593 +2019-11-30 18:00:00,90.8477777777768 +2019-11-30 19:00:00,92.32388888888931 +2019-11-30 20:00:00,102.95344444444379 +2019-11-30 21:00:00,108.4114444444457 +2019-11-30 22:00:00,107.90533333333426 +2019-11-30 23:00:00,110.78122222222355 +2019-12-01 00:00:00,110.62200000000117 +2019-12-01 01:00:00,83.41088888888875 +2019-12-01 02:00:00,13.752444444444459 +2019-12-01 03:00:00,0.13333333333333333 +2019-12-01 04:00:00,0.0 +2019-12-01 05:00:00,0.0 +2019-12-01 06:00:00,0.0 +2019-12-01 07:00:00,0.0 +2019-12-01 08:00:00,0.0 +2019-12-01 09:00:00,0.0 +2019-12-01 10:00:00,0.0 +2019-12-01 11:00:00,0.0 +2019-12-01 12:00:00,0.0 +2019-12-01 13:00:00,0.0 +2019-12-01 14:00:00,0.0 +2019-12-01 15:00:00,5.822222222222222 +2019-12-01 16:00:00,22.8364444444445 +2019-12-01 17:00:00,92.83433333333286 +2019-12-01 18:00:00,83.71122222222206 +2019-12-01 19:00:00,109.35966666666664 +2019-12-01 20:00:00,111.79588888888745 +2019-12-01 21:00:00,111.00899999999918 +2019-12-01 22:00:00,111.92611111111114 +2019-12-01 23:00:00,112.0 +2019-12-02 00:00:00,110.11444444444332 +2019-12-02 01:00:00,100.90433333333287 +2019-12-02 02:00:00,64.2876666666655 +2019-12-02 03:00:00,14.537999999999556 +2019-12-02 04:00:00,0.0 +2019-12-02 05:00:00,0.0 +2019-12-02 06:00:00,0.0 +2019-12-02 07:00:00,0.0 +2019-12-02 08:00:00,0.0 +2019-12-02 09:00:00,0.0 +2019-12-02 10:00:00,0.0 +2019-12-02 11:00:00,0.0 +2019-12-02 12:00:00,0.0 +2019-12-02 13:00:00,0.0 +2019-12-02 14:00:00,0.0 +2019-12-02 15:00:00,0.0 +2019-12-02 16:00:00,0.0 +2019-12-02 17:00:00,0.5866666666666667 +2019-12-02 18:00:00,18.07444444444439 +2019-12-02 19:00:00,52.434333333333555 +2019-12-02 20:00:00,60.09888888888829 +2019-12-02 21:00:00,93.85544444444494 +2019-12-02 22:00:00,91.67744444444378 +2019-12-02 23:00:00,75.92255555555553 +2019-12-03 00:00:00,30.795444444444012 +2019-12-03 01:00:00,40.521444444444434 +2019-12-03 02:00:00,43.59422222222258 +2019-12-03 03:00:00,26.301777777777676 +2019-12-03 04:00:00,25.74044444444426 +2019-12-03 05:00:00,19.757555555555538 +2019-12-03 06:00:00,1.7478888888889013 +2019-12-03 07:00:00,0.0 +2019-12-03 08:00:00,0.0 +2019-12-03 09:00:00,0.0 +2019-12-03 10:00:00,0.0 +2019-12-03 11:00:00,0.0 +2019-12-03 12:00:00,0.0 +2019-12-03 13:00:00,0.0 +2019-12-03 14:00:00,0.0 +2019-12-03 15:00:00,0.0 +2019-12-03 16:00:00,0.0 +2019-12-03 17:00:00,0.7644444444444445 +2019-12-03 18:00:00,27.410777777777685 +2019-12-03 19:00:00,73.91755555555577 +2019-12-03 20:00:00,93.59977777777753 +2019-12-03 21:00:00,90.43899999999945 +2019-12-03 22:00:00,51.392222222222294 +2019-12-03 23:00:00,56.53411111111088 +2019-12-04 00:00:00,66.43066666666681 +2019-12-04 01:00:00,49.99722222222278 +2019-12-04 02:00:00,90.13833333333312 +2019-12-04 03:00:00,74.26288888888902 +2019-12-04 04:00:00,46.27344444444523 +2019-12-04 05:00:00,14.390111111110901 +2019-12-04 06:00:00,4.772555555555535 +2019-12-04 07:00:00,0.0 +2019-12-04 08:00:00,0.0 +2019-12-04 09:00:00,0.0 +2019-12-04 10:00:00,0.0 +2019-12-04 11:00:00,0.0 +2019-12-04 12:00:00,0.0 +2019-12-04 13:00:00,0.0 +2019-12-04 14:00:00,0.0 +2019-12-04 15:00:00,0.0 +2019-12-04 16:00:00,0.0 +2019-12-04 17:00:00,0.0 +2019-12-04 18:00:00,28.03466666666661 +2019-12-04 19:00:00,68.67766666666687 +2019-12-04 20:00:00,80.90400000000027 +2019-12-04 21:00:00,98.26633333333386 +2019-12-04 22:00:00,68.13866666666718 +2019-12-04 23:00:00,63.61255555555547 +2019-12-05 00:00:00,88.75155555555607 +2019-12-05 01:00:00,112.56222222222367 +2019-12-05 02:00:00,102.4658888888896 +2019-12-05 03:00:00,110.8106666666668 +2019-12-05 04:00:00,98.6237777777771 +2019-12-05 05:00:00,39.31477777777791 +2019-12-05 06:00:00,1.5833333333333333 +2019-12-05 07:00:00,0.0 +2019-12-05 08:00:00,0.0 +2019-12-05 09:00:00,0.0 +2019-12-05 10:00:00,0.0 +2019-12-05 11:00:00,0.0 +2019-12-05 12:00:00,0.0 +2019-12-05 13:00:00,0.0 +2019-12-05 14:00:00,0.0 +2019-12-05 15:00:00,0.0 +2019-12-05 16:00:00,0.0 +2019-12-05 17:00:00,0.12222222222222222 +2019-12-05 18:00:00,12.109888888888966 +2019-12-05 19:00:00,59.65055555555551 +2019-12-05 20:00:00,110.93955555555566 +2019-12-05 21:00:00,102.58111111111116 +2019-12-05 22:00:00,104.31166666666601 +2019-12-05 23:00:00,110.47877777777838 +2019-12-06 00:00:00,100.60355555555556 +2019-12-06 01:00:00,111.30355555555548 +2019-12-06 02:00:00,102.36233333333406 +2019-12-06 03:00:00,34.029111111111185 +2019-12-06 04:00:00,27.83755555555568 +2019-12-06 05:00:00,44.134111111112034 +2019-12-06 06:00:00,5.575888888888817 +2019-12-06 07:00:00,0.0 +2019-12-06 08:00:00,0.0 +2019-12-06 09:00:00,0.0 +2019-12-06 10:00:00,0.0 +2019-12-06 11:00:00,0.0 +2019-12-06 12:00:00,0.0 +2019-12-06 13:00:00,0.0 +2019-12-06 14:00:00,0.0 +2019-12-06 15:00:00,0.0 +2019-12-06 16:00:00,0.0 +2019-12-06 17:00:00,0.5044444444444445 +2019-12-06 18:00:00,31.57733333333368 +2019-12-06 19:00:00,91.04611111111134 +2019-12-06 20:00:00,110.37344444444432 +2019-12-06 21:00:00,114.89888888888889 +2019-12-06 22:00:00,90.92444444444415 +2019-12-06 23:00:00,92.01477777777738 +2019-12-07 00:00:00,95.66599999999838 +2019-12-07 01:00:00,108.90266666666538 +2019-12-07 02:00:00,107.95877777777909 +2019-12-07 03:00:00,108.0843333333321 +2019-12-07 04:00:00,96.93911111111015 +2019-12-07 05:00:00,52.14233333333224 +2019-12-07 06:00:00,6.081111111111207 +2019-12-07 07:00:00,0.0 +2019-12-07 08:00:00,0.0 +2019-12-07 09:00:00,0.0 +2019-12-07 10:00:00,0.0 +2019-12-07 11:00:00,0.0 +2019-12-07 12:00:00,0.0 +2019-12-07 13:00:00,0.0 +2019-12-07 14:00:00,0.0 +2019-12-07 15:00:00,0.0 +2019-12-07 16:00:00,0.0 +2019-12-07 17:00:00,0.4588888888888889 +2019-12-07 18:00:00,31.143222222222395 +2019-12-07 19:00:00,70.60500000000089 +2019-12-07 20:00:00,95.18544444444532 +2019-12-07 21:00:00,115.5700000000015 +2019-12-07 22:00:00,86.92177777777805 +2019-12-07 23:00:00,89.86133333333352 +2019-12-08 00:00:00,102.13544444444369 +2019-12-08 01:00:00,98.33511111111228 +2019-12-08 02:00:00,115.6000000000015 +2019-12-08 03:00:00,114.18000000000148 +2019-12-08 04:00:00,97.80388888888706 +2019-12-08 05:00:00,50.891999999998816 +2019-12-08 06:00:00,6.1332222222222725 +2019-12-08 07:00:00,0.0 +2019-12-08 08:00:00,0.0 +2019-12-08 09:00:00,0.0 +2019-12-08 10:00:00,0.0 +2019-12-08 11:00:00,0.0 +2019-12-08 12:00:00,0.0 +2019-12-08 13:00:00,0.0 +2019-12-08 14:00:00,0.0 +2019-12-08 15:00:00,0.0 +2019-12-08 16:00:00,0.0 +2019-12-08 17:00:00,0.4227777777777781 +2019-12-08 18:00:00,29.89133333333338 +2019-12-08 19:00:00,86.88788888888945 +2019-12-08 20:00:00,111.34222222222351 +2019-12-08 21:00:00,106.73777777777781 +2019-12-08 22:00:00,102.98077777777743 +2019-12-08 23:00:00,103.95277777777791 +2019-12-09 00:00:00,94.18588888888846 +2019-12-09 01:00:00,107.4170000000002 +2019-12-09 02:00:00,114.66077777777811 +2019-12-09 03:00:00,112.25255555555698 +2019-12-09 04:00:00,97.18788888888763 +2019-12-09 05:00:00,51.595333333332455 +2019-12-09 06:00:00,5.366999999999939 +2019-12-09 07:00:00,0.0 +2019-12-09 08:00:00,0.0 +2019-12-09 09:00:00,0.0 +2019-12-09 10:00:00,0.0 +2019-12-09 11:00:00,0.0 +2019-12-09 12:00:00,0.0 +2019-12-09 13:00:00,0.0 +2019-12-09 14:00:00,0.0 +2019-12-09 15:00:00,0.0 +2019-12-09 16:00:00,0.0 +2019-12-09 17:00:00,0.4088888888888889 +2019-12-09 18:00:00,30.034555555555826 +2019-12-09 19:00:00,86.56100000000018 +2019-12-09 20:00:00,110.43177777777649 +2019-12-09 21:00:00,106.84344444444356 +2019-12-09 22:00:00,113.89111111111228 +2019-12-09 23:00:00,99.53033333333399 +2019-12-10 00:00:00,109.85833333333174 +2019-12-10 01:00:00,92.48699999999974 +2019-12-10 02:00:00,92.16022222222246 +2019-12-10 03:00:00,78.83633333333266 +2019-12-10 04:00:00,93.52388888888807 +2019-12-10 05:00:00,51.41211111111083 +2019-12-10 06:00:00,4.519444444444496 +2019-12-10 07:00:00,0.0 +2019-12-10 08:00:00,0.0 +2019-12-10 09:00:00,0.0 +2019-12-10 10:00:00,0.0 +2019-12-10 11:00:00,0.0 +2019-12-10 12:00:00,0.0 +2019-12-10 13:00:00,0.0 +2019-12-10 14:00:00,0.0 +2019-12-10 15:00:00,0.0 +2019-12-10 16:00:00,0.0 +2019-12-10 17:00:00,1.0927777777777787 +2019-12-10 18:00:00,26.55344444444451 +2019-12-10 19:00:00,88.70544444444461 +2019-12-10 20:00:00,71.76088888888914 +2019-12-10 21:00:00,77.96577777777757 +2019-12-10 22:00:00,88.57500000000071 +2019-12-10 23:00:00,77.4144444444452 +2019-12-11 00:00:00,85.24977777777741 +2019-12-11 01:00:00,70.23300000000047 +2019-12-11 02:00:00,82.04299999999962 +2019-12-11 03:00:00,70.18055555555567 +2019-12-11 04:00:00,58.146555555555864 +2019-12-11 05:00:00,43.267555555556555 +2019-12-11 06:00:00,4.49266666666675 +2019-12-11 07:00:00,0.0 +2019-12-11 08:00:00,0.0 +2019-12-11 09:00:00,0.0 +2019-12-11 10:00:00,0.0 +2019-12-11 11:00:00,0.0 +2019-12-11 12:00:00,0.0 +2019-12-11 13:00:00,0.0 +2019-12-11 14:00:00,0.0 +2019-12-11 15:00:00,0.0 +2019-12-11 16:00:00,0.0 +2019-12-11 17:00:00,0.1198888888888888 +2019-12-11 18:00:00,9.947444444444418 +2019-12-11 19:00:00,68.92399999999967 +2019-12-11 20:00:00,56.06700000000017 +2019-12-11 21:00:00,60.978777777777665 +2019-12-11 22:00:00,72.5446666666667 +2019-12-11 23:00:00,58.68888888888888 +2019-12-12 00:00:00,82.28733333333241 +2019-12-12 01:00:00,71.70444444444438 +2019-12-12 02:00:00,110.33377777777645 +2019-12-12 03:00:00,93.34188888888907 +2019-12-12 04:00:00,94.48733333333318 +2019-12-12 05:00:00,37.16100000000006 +2019-12-12 06:00:00,5.843999999999905 +2019-12-12 07:00:00,0.0 +2019-12-12 08:00:00,0.0 +2019-12-12 09:00:00,0.0 +2019-12-12 10:00:00,0.0 +2019-12-12 11:00:00,0.0 +2019-12-12 12:00:00,0.0 +2019-12-12 13:00:00,0.0 +2019-12-12 14:00:00,0.0 +2019-12-12 15:00:00,0.0 +2019-12-12 16:00:00,0.0 +2019-12-12 17:00:00,0.1573333333333335 +2019-12-12 18:00:00,28.842777777777666 +2019-12-12 19:00:00,88.0803333333331 +2019-12-12 20:00:00,87.59911111111116 +2019-12-12 21:00:00,92.4566666666669 +2019-12-12 22:00:00,86.82977777777795 +2019-12-12 23:00:00,108.52777777777811 +2019-12-13 00:00:00,98.20199999999937 +2019-12-13 01:00:00,96.47800000000022 +2019-12-13 02:00:00,65.50955555555565 +2019-12-13 03:00:00,25.162666666666954 +2019-12-13 04:00:00,78.07222222222197 +2019-12-13 05:00:00,48.909000000000596 +2019-12-13 06:00:00,6.39300000000009 +2019-12-13 07:00:00,0.0 +2019-12-13 08:00:00,0.0 +2019-12-13 09:00:00,0.0 +2019-12-13 10:00:00,0.0 +2019-12-13 11:00:00,0.0 +2019-12-13 12:00:00,0.0 +2019-12-13 13:00:00,0.0 +2019-12-13 14:00:00,0.0 +2019-12-13 15:00:00,0.0 +2019-12-13 16:00:00,0.0 +2019-12-13 17:00:00,0.024444444444444446 +2019-12-13 18:00:00,27.513222222222407 +2019-12-13 19:00:00,86.24422222222272 +2019-12-13 20:00:00,113.54444444444445 +2019-12-13 21:00:00,75.11300000000011 +2019-12-13 22:00:00,47.806333333333555 +2019-12-13 23:00:00,47.96422222222254 +2019-12-14 00:00:00,84.35833333333342 +2019-12-14 01:00:00,65.87755555555567 +2019-12-14 02:00:00,67.94544444444432 +2019-12-14 03:00:00,76.0477777777775 +2019-12-14 04:00:00,101.32322222222048 +2019-12-14 05:00:00,48.78533333333382 +2019-12-14 06:00:00,1.0573333333333266 +2019-12-14 07:00:00,0.0 +2019-12-14 08:00:00,0.0 +2019-12-14 09:00:00,0.0 +2019-12-14 10:00:00,0.0 +2019-12-14 11:00:00,0.0 +2019-12-14 12:00:00,0.0 +2019-12-14 13:00:00,0.0 +2019-12-14 14:00:00,0.0 +2019-12-14 15:00:00,0.0 +2019-12-14 16:00:00,0.0 +2019-12-14 17:00:00,0.0 +2019-12-14 18:00:00,14.663222222222352 +2019-12-14 19:00:00,60.22622222222223 +2019-12-14 20:00:00,62.64677777777824 +2019-12-14 21:00:00,51.17588888888899 +2019-12-14 22:00:00,69.29711111111124 +2019-12-14 23:00:00,69.95988888888952 +2019-12-15 00:00:00,58.82288888888848 +2019-12-15 01:00:00,69.59155555555519 +2019-12-15 02:00:00,71.44299999999963 +2019-12-15 03:00:00,39.57666666666685 +2019-12-15 04:00:00,31.761222222222123 +2019-12-15 05:00:00,9.937777777777777 +2019-12-15 06:00:00,4.013777777777795 +2019-12-15 07:00:00,0.0 +2019-12-15 08:00:00,0.0 +2019-12-15 09:00:00,0.0 +2019-12-15 10:00:00,0.0 +2019-12-15 11:00:00,0.0 +2019-12-15 12:00:00,0.0 +2019-12-15 13:00:00,0.0 +2019-12-15 14:00:00,0.0 +2019-12-15 15:00:00,0.0 +2019-12-15 16:00:00,0.0 +2019-12-15 17:00:00,0.08888888888888889 +2019-12-15 18:00:00,25.45244444444438 +2019-12-15 19:00:00,71.53366666666652 +2019-12-15 20:00:00,78.94944444444447 +2019-12-15 21:00:00,97.54522222222197 +2019-12-15 22:00:00,98.67300000000037 +2019-12-15 23:00:00,63.65122222222281 +2019-12-16 00:00:00,91.38455555555421 +2019-12-16 01:00:00,105.18822222222363 +2019-12-16 02:00:00,111.0720000000004 +2019-12-16 03:00:00,107.56466666666644 +2019-12-16 04:00:00,92.37988888888833 +2019-12-16 05:00:00,45.50711111111061 +2019-12-16 06:00:00,5.710888888888889 +2019-12-16 07:00:00,0.0 +2019-12-16 08:00:00,0.0 +2019-12-16 09:00:00,0.0 +2019-12-16 10:00:00,0.0 +2019-12-16 11:00:00,0.0 +2019-12-16 12:00:00,0.0 +2019-12-16 13:00:00,0.0 +2019-12-16 14:00:00,0.0 +2019-12-16 15:00:00,0.0 +2019-12-16 16:00:00,0.0 +2019-12-16 17:00:00,0.042222222222222223 +2019-12-16 18:00:00,25.095444444444702 +2019-12-16 19:00:00,81.49166666666704 +2019-12-16 20:00:00,109.37555555555555 +2019-12-16 21:00:00,111.5 +2019-12-16 22:00:00,111.5 +2019-12-16 23:00:00,110.7655555555555 +2019-12-17 00:00:00,97.78266666666691 +2019-12-17 01:00:00,99.71355555555678 +2019-12-17 02:00:00,111.56444444444264 +2019-12-17 03:00:00,111.17777777777599 +2019-12-17 04:00:00,76.3212222222225 +2019-12-17 05:00:00,37.567555555555515 +2019-12-17 06:00:00,5.063999999999968 +2019-12-17 07:00:00,0.0 +2019-12-17 08:00:00,0.0 +2019-12-17 09:00:00,0.0 +2019-12-17 10:00:00,0.0 +2019-12-17 11:00:00,0.0 +2019-12-17 12:00:00,0.0 +2019-12-17 13:00:00,0.0 +2019-12-17 14:00:00,0.0 +2019-12-17 15:00:00,0.0 +2019-12-17 16:00:00,0.0 +2019-12-17 17:00:00,0.14888888888888888 +2019-12-17 18:00:00,21.03311111111136 +2019-12-17 19:00:00,74.19100000000054 +2019-12-17 20:00:00,105.44444444444548 +2019-12-17 21:00:00,110.7944444444458 +2019-12-17 22:00:00,102.43055555555647 +2019-12-17 23:00:00,98.21866666666587 +2019-12-18 00:00:00,75.64311111111036 +2019-12-18 01:00:00,111.06988888889005 +2019-12-18 02:00:00,105.47855555555662 +2019-12-18 03:00:00,104.53233333333264 +2019-12-18 04:00:00,57.10444444444518 +2019-12-18 05:00:00,36.99944444444496 +2019-12-18 06:00:00,5.672666666666601 +2019-12-18 07:00:00,0.0 +2019-12-18 08:00:00,0.0 +2019-12-18 09:00:00,0.0 +2019-12-18 10:00:00,0.0 +2019-12-18 11:00:00,0.0 +2019-12-18 12:00:00,0.0 +2019-12-18 13:00:00,0.0 +2019-12-18 14:00:00,0.0 +2019-12-18 15:00:00,0.0 +2019-12-18 16:00:00,0.0 +2019-12-18 17:00:00,0.09333333333333334 +2019-12-18 18:00:00,8.059000000000054 +2019-12-18 19:00:00,41.25311111111101 +2019-12-18 20:00:00,90.53133333333348 +2019-12-18 21:00:00,74.6307777777775 +2019-12-18 22:00:00,94.22222222222305 +2019-12-18 23:00:00,108.158000000001 +2019-12-19 00:00:00,97.92455555555651 +2019-12-19 01:00:00,96.873000000001 +2019-12-19 02:00:00,110.37600000000134 +2019-12-19 03:00:00,109.3477777777792 +2019-12-19 04:00:00,90.4724444444434 +2019-12-19 05:00:00,44.26111111111032 +2019-12-19 06:00:00,4.420222222222217 +2019-12-19 07:00:00,0.0 +2019-12-19 08:00:00,0.0 +2019-12-19 09:00:00,0.0 +2019-12-19 10:00:00,0.0 +2019-12-19 11:00:00,0.0 +2019-12-19 12:00:00,0.0 +2019-12-19 13:00:00,0.0 +2019-12-19 14:00:00,0.0 +2019-12-19 15:00:00,0.0 +2019-12-19 16:00:00,0.0 +2019-12-19 17:00:00,0.0 +2019-12-19 18:00:00,17.559000000000207 +2019-12-19 19:00:00,66.64966666666687 +2019-12-19 20:00:00,96.40500000000084 +2019-12-19 21:00:00,106.25222222222331 +2019-12-19 22:00:00,110.39688888888686 +2019-12-19 23:00:00,110.69999999999823 +2019-12-20 00:00:00,111.31977777777621 +2019-12-20 01:00:00,108.90644444444574 +2019-12-20 02:00:00,107.216777777776 +2019-12-20 03:00:00,99.0652222222206 +2019-12-20 04:00:00,81.69677777777717 +2019-12-20 05:00:00,49.443444444445085 +2019-12-20 06:00:00,7.181111111111255 +2019-12-20 07:00:00,0.0 +2019-12-20 08:00:00,0.0 +2019-12-20 09:00:00,0.0 +2019-12-20 10:00:00,0.0 +2019-12-20 11:00:00,0.0 +2019-12-20 12:00:00,0.0 +2019-12-20 13:00:00,0.0 +2019-12-20 14:00:00,0.0 +2019-12-20 15:00:00,0.0 +2019-12-20 16:00:00,0.0 +2019-12-20 17:00:00,0.0 +2019-12-20 18:00:00,6.222333333333366 +2019-12-20 19:00:00,68.58522222222096 +2019-12-20 20:00:00,102.15799999999932 +2019-12-20 21:00:00,110.9098888888896 +2019-12-20 22:00:00,110.83966666666659 +2019-12-20 23:00:00,110.91833333333288 +2019-12-21 00:00:00,105.36355555555507 +2019-12-21 01:00:00,100.69633333333223 +2019-12-21 02:00:00,96.72588888888876 +2019-12-21 03:00:00,71.92211111111094 +2019-12-21 04:00:00,76.27433333333305 +2019-12-21 05:00:00,46.35177777777717 +2019-12-21 06:00:00,2.4874444444444443 +2019-12-21 07:00:00,0.0 +2019-12-21 08:00:00,0.0 +2019-12-21 09:00:00,0.0 +2019-12-21 10:00:00,0.0 +2019-12-21 11:00:00,0.0 +2019-12-21 12:00:00,0.0 +2019-12-21 13:00:00,0.0 +2019-12-21 14:00:00,0.0 +2019-12-21 15:00:00,0.0 +2019-12-21 16:00:00,0.0 +2019-12-21 17:00:00,0.0044444444444444444 +2019-12-21 18:00:00,20.145222222222277 +2019-12-21 19:00:00,74.96766666666684 +2019-12-21 20:00:00,95.41500000000026 +2019-12-21 21:00:00,115.28333333333183 +2019-12-21 22:00:00,115.28666666666518 +2019-12-21 23:00:00,115.70800000000013 +2019-12-22 00:00:00,115.7 +2019-12-22 01:00:00,113.34755555555694 +2019-12-22 02:00:00,97.31377777777769 +2019-12-22 03:00:00,97.68299999999988 +2019-12-22 04:00:00,98.08511111111241 +2019-12-22 05:00:00,53.70699999999961 +2019-12-22 06:00:00,5.671777777777672 +2019-12-22 07:00:00,0.0 +2019-12-22 08:00:00,0.0 +2019-12-22 09:00:00,0.0 +2019-12-22 10:00:00,0.0 +2019-12-22 11:00:00,0.0 +2019-12-22 12:00:00,0.0 +2019-12-22 13:00:00,0.0 +2019-12-22 14:00:00,0.0 +2019-12-22 15:00:00,0.0 +2019-12-22 16:00:00,0.0 +2019-12-22 17:00:00,0.07777777777777778 +2019-12-22 18:00:00,23.23133333333347 +2019-12-22 19:00:00,80.36266666666722 +2019-12-22 20:00:00,110.27444444444573 +2019-12-22 21:00:00,86.40444444444448 +2019-12-22 22:00:00,90.41933333333395 +2019-12-22 23:00:00,107.59233333333282 +2019-12-23 00:00:00,109.60133333333305 +2019-12-23 01:00:00,113.19444444444596 +2019-12-23 02:00:00,94.98233333333319 +2019-12-23 03:00:00,92.55899999999959 +2019-12-23 04:00:00,96.65800000000046 +2019-12-23 05:00:00,50.84422222222211 +2019-12-23 06:00:00,5.546888888888956 +2019-12-23 07:00:00,0.0 +2019-12-23 08:00:00,0.0 +2019-12-23 09:00:00,0.0 +2019-12-23 10:00:00,0.0 +2019-12-23 11:00:00,0.0 +2019-12-23 12:00:00,0.0 +2019-12-23 13:00:00,0.0 +2019-12-23 14:00:00,0.0 +2019-12-23 15:00:00,0.0 +2019-12-23 16:00:00,0.0 +2019-12-23 17:00:00,0.0 +2019-12-23 18:00:00,11.934333333333196 +2019-12-23 19:00:00,43.40522222222198 +2019-12-23 20:00:00,83.15633333333263 +2019-12-23 21:00:00,87.6344444444447 +2019-12-23 22:00:00,104.54511111111151 +2019-12-23 23:00:00,113.8666666666667 +2019-12-24 00:00:00,115.10333333333334 +2019-12-24 01:00:00,113.89266666666701 +2019-12-24 02:00:00,115.61555555555626 +2019-12-24 03:00:00,107.19911111111091 +2019-12-24 04:00:00,89.28122222222284 +2019-12-24 05:00:00,43.391666666667014 +2019-12-24 06:00:00,0.7226666666666685 +2019-12-24 07:00:00,0.0 +2019-12-24 08:00:00,0.0 +2019-12-24 09:00:00,0.0 +2019-12-24 10:00:00,0.0 +2019-12-24 11:00:00,0.0 +2019-12-24 12:00:00,0.0 +2019-12-24 13:00:00,0.0 +2019-12-24 14:00:00,0.0 +2019-12-24 15:00:00,0.0 +2019-12-24 16:00:00,0.0 +2019-12-24 17:00:00,0.0 +2019-12-24 18:00:00,6.267777777777809 +2019-12-24 19:00:00,57.59800000000015 +2019-12-24 20:00:00,99.45422222222305 +2019-12-24 21:00:00,107.94822222222336 +2019-12-24 22:00:00,108.72177777777874 +2019-12-24 23:00:00,105.74366666666478 +2019-12-25 00:00:00,102.94844444444298 +2019-12-25 01:00:00,76.61266666666653 +2019-12-25 02:00:00,87.91722222222309 +2019-12-25 03:00:00,72.20111111111156 +2019-12-25 04:00:00,69.88011111111182 +2019-12-25 05:00:00,29.90133333333373 +2019-12-25 06:00:00,3.180444444444476 +2019-12-25 07:00:00,0.0 +2019-12-25 08:00:00,0.0 +2019-12-25 09:00:00,0.0 +2019-12-25 10:00:00,0.0 +2019-12-25 11:00:00,0.0 +2019-12-25 12:00:00,0.0 +2019-12-25 13:00:00,0.0 +2019-12-25 14:00:00,0.0 +2019-12-25 15:00:00,0.0 +2019-12-25 16:00:00,0.0 +2019-12-25 17:00:00,0.017111111111111108 +2019-12-25 18:00:00,19.792999999999928 +2019-12-25 19:00:00,74.41077777777728 +2019-12-25 20:00:00,106.32133333333128 +2019-12-25 21:00:00,113.75344444444634 +2019-12-25 22:00:00,113.96000000000124 +2019-12-25 23:00:00,113.67399999999868 +2019-12-26 00:00:00,79.13822222222218 +2019-12-26 01:00:00,71.56022222222205 +2019-12-26 02:00:00,75.92100000000057 +2019-12-26 03:00:00,96.07222222222308 +2019-12-26 04:00:00,79.97688888888976 +2019-12-26 05:00:00,45.172222222222416 +2019-12-26 06:00:00,4.990555555555605 +2019-12-26 07:00:00,0.0 +2019-12-26 08:00:00,0.0 +2019-12-26 09:00:00,0.0 +2019-12-26 10:00:00,0.0 +2019-12-26 11:00:00,0.0 +2019-12-26 12:00:00,0.0 +2019-12-26 13:00:00,0.0 +2019-12-26 14:00:00,0.0 +2019-12-26 15:00:00,0.0 +2019-12-26 16:00:00,0.0 +2019-12-26 17:00:00,0.0 +2019-12-26 18:00:00,19.929222222222396 +2019-12-26 19:00:00,71.25444444444474 +2019-12-26 20:00:00,108.30533333333463 +2019-12-26 21:00:00,112.77777777777666 +2019-12-26 22:00:00,113.0606666666652 +2019-12-26 23:00:00,115.17444444444297 +2019-12-27 00:00:00,115.89999999999849 +2019-12-27 01:00:00,115.89999999999849 +2019-12-27 02:00:00,115.19988888888757 +2019-12-27 03:00:00,78.36833333333324 +2019-12-27 04:00:00,95.56555555555404 +2019-12-27 05:00:00,47.14977777777749 +2019-12-27 06:00:00,5.492888888888822 +2019-12-27 07:00:00,0.0 +2019-12-27 08:00:00,0.0 +2019-12-27 09:00:00,0.0 +2019-12-27 10:00:00,0.0 +2019-12-27 11:00:00,0.0 +2019-12-27 12:00:00,0.0 +2019-12-27 13:00:00,0.0 +2019-12-27 14:00:00,0.0 +2019-12-27 15:00:00,0.0 +2019-12-27 16:00:00,0.0 +2019-12-27 17:00:00,0.09333333333333337 +2019-12-27 18:00:00,24.221777777777884 +2019-12-27 19:00:00,42.23133333333272 +2019-12-27 20:00:00,87.18377777777867 +2019-12-27 21:00:00,91.74033333333335 +2019-12-27 22:00:00,109.41600000000028 +2019-12-27 23:00:00,102.95499999999998 +2019-12-28 00:00:00,112.87288888889016 +2019-12-28 01:00:00,41.22033333333379 +2019-12-28 02:00:00,1.2914444444444424 +2019-12-28 03:00:00,40.780888888888825 +2019-12-28 04:00:00,48.03344444444457 +2019-12-28 05:00:00,16.2743333333334 +2019-12-28 06:00:00,0.6144444444444445 +2019-12-28 07:00:00,0.0 +2019-12-28 08:00:00,0.0 +2019-12-28 09:00:00,0.0 +2019-12-28 10:00:00,0.0 +2019-12-28 11:00:00,0.0 +2019-12-28 12:00:00,0.0 +2019-12-28 13:00:00,0.0 +2019-12-28 14:00:00,0.0 +2019-12-28 15:00:00,0.0 +2019-12-28 16:00:00,0.0 +2019-12-28 17:00:00,0.0 +2019-12-28 18:00:00,0.7822222222222223 +2019-12-28 19:00:00,5.87766666666667 +2019-12-28 20:00:00,96.41144444444461 +2019-12-28 21:00:00,99.5625555555549 +2019-12-28 22:00:00,72.58311111111169 +2019-12-28 23:00:00,49.5408888888899 +2019-12-29 00:00:00,12.099111111111329 +2019-12-29 01:00:00,5.034444444444379 +2019-12-29 02:00:00,39.72922222222236 +2019-12-29 03:00:00,34.87988888888895 +2019-12-29 04:00:00,48.235111111111095 +2019-12-29 05:00:00,37.677222222221786 +2019-12-29 06:00:00,3.966777777777779 +2019-12-29 07:00:00,0.0 +2019-12-29 08:00:00,0.0 +2019-12-29 09:00:00,0.0 +2019-12-29 10:00:00,0.0 +2019-12-29 11:00:00,0.0 +2019-12-29 12:00:00,0.0 +2019-12-29 13:00:00,0.0 +2019-12-29 14:00:00,0.0 +2019-12-29 15:00:00,0.0 +2019-12-29 16:00:00,0.0 +2019-12-29 17:00:00,0.0 +2019-12-29 18:00:00,0.29777777777777775 +2019-12-29 19:00:00,7.842555555555561 +2019-12-29 20:00:00,45.07088888888917 +2019-12-29 21:00:00,94.87311111111052 +2019-12-29 22:00:00,110.34955555555534 +2019-12-29 23:00:00,111.16366666666502 +2019-12-30 00:00:00,80.81655555555507 +2019-12-30 01:00:00,25.94944444444428 +2019-12-30 02:00:00,14.592222222222222 +2019-12-30 03:00:00,20.844444444444562 +2019-12-30 04:00:00,45.29866666666642 +2019-12-30 05:00:00,17.15322222222251 +2019-12-30 06:00:00,7.147888888888875 +2019-12-30 07:00:00,0.0 +2019-12-30 08:00:00,0.0 +2019-12-30 09:00:00,0.0 +2019-12-30 10:00:00,0.0 +2019-12-30 11:00:00,0.0 +2019-12-30 12:00:00,0.0 +2019-12-30 13:00:00,0.0 +2019-12-30 14:00:00,0.0 +2019-12-30 15:00:00,0.0 +2019-12-30 16:00:00,0.0 +2019-12-30 17:00:00,0.0 +2019-12-30 18:00:00,1.458888888888889 +2019-12-30 19:00:00,11.03533333333343 +2019-12-30 20:00:00,37.0054444444444 +2019-12-30 21:00:00,20.813888888889135 +2019-12-30 22:00:00,41.02033333333313 +2019-12-30 23:00:00,75.01755555555606 +2019-12-31 00:00:00,74.5104444444449 +2019-12-31 01:00:00,69.24988888888873 +2019-12-31 02:00:00,81.50711111111119 +2019-12-31 03:00:00,27.043777777777265 +2019-12-31 04:00:00,20.398111111111188 +2019-12-31 05:00:00,10.89 +2019-12-31 06:00:00,0.18666666666666668 +2019-12-31 07:00:00,0.0 +2019-12-31 08:00:00,0.0 +2019-12-31 09:00:00,0.0 +2019-12-31 10:00:00,0.0 +2019-12-31 11:00:00,0.0 +2019-12-31 12:00:00,0.0 +2019-12-31 13:00:00,0.0 +2019-12-31 14:00:00,0.0 +2019-12-31 15:00:00,0.0 +2019-12-31 16:00:00,0.0 +2019-12-31 17:00:00,0.0 +2019-12-31 18:00:00,9.93277777777778 +2019-12-31 19:00:00,67.75700000000009 +2019-12-31 20:00:00,108.59555555555478 +2019-12-31 21:00:00,112.89600000000137 +2019-12-31 22:00:00,100.50466666666715 +2019-12-31 23:00:00,77.9016666666665 +2020-01-01 00:00:00,100.2197777777795 +2020-01-01 01:00:00,113.3472222222237 +2020-01-01 02:00:00,108.63255555555516 +2020-01-01 03:00:00,84.71333333333357 +2020-01-01 04:00:00,27.75544444444503 +2020-01-01 05:00:00,8.30444444444436 +2020-01-01 06:00:00,0.5164444444444458 +2020-01-01 07:00:00,0.0 +2020-01-01 08:00:00,0.0 +2020-01-01 09:00:00,0.0 +2020-01-01 10:00:00,0.0 +2020-01-01 11:00:00,0.0 +2020-01-01 12:00:00,0.0 +2020-01-01 13:00:00,0.0 +2020-01-01 14:00:00,0.0 +2020-01-01 15:00:00,0.0 +2020-01-01 16:00:00,0.0 +2020-01-01 17:00:00,0.0 +2020-01-01 18:00:00,4.601111111111111 +2020-01-01 19:00:00,17.6600000000002 +2020-01-01 20:00:00,50.98399999999992 +2020-01-01 21:00:00,81.33133333333363 +2020-01-01 22:00:00,49.44988888888775 +2020-01-01 23:00:00,85.7546666666667 +2020-01-02 00:00:00,60.13111111111001 +2020-01-02 01:00:00,25.963000000000637 +2020-01-02 02:00:00,23.075111111111127 +2020-01-02 03:00:00,40.88233333333317 +2020-01-02 04:00:00,37.94377777777803 +2020-01-02 05:00:00,12.918999999999695 +2020-01-02 06:00:00,3.2684444444444853 +2020-01-02 07:00:00,0.0 +2020-01-02 08:00:00,0.0 +2020-01-02 09:00:00,0.0 +2020-01-02 10:00:00,0.0 +2020-01-02 11:00:00,0.0 +2020-01-02 12:00:00,0.0 +2020-01-02 13:00:00,0.0 +2020-01-02 14:00:00,0.0 +2020-01-02 15:00:00,0.0 +2020-01-02 16:00:00,0.0 +2020-01-02 17:00:00,0.0 +2020-01-02 18:00:00,2.7171111111111106 +2020-01-02 19:00:00,7.292222222222319 +2020-01-02 20:00:00,20.933111111110758 +2020-01-02 21:00:00,30.536000000000435 +2020-01-02 22:00:00,28.721666666667105 +2020-01-02 23:00:00,56.129888888888345 +2020-01-03 00:00:00,53.627222222222905 +2020-01-03 01:00:00,74.93722222222235 +2020-01-03 02:00:00,97.66522222222285 +2020-01-03 03:00:00,55.96611111111167 +2020-01-03 04:00:00,29.91322222222224 +2020-01-03 05:00:00,14.361333333333759 +2020-01-03 06:00:00,0.0 +2020-01-03 07:00:00,0.0 +2020-01-03 08:00:00,0.0 +2020-01-03 09:00:00,0.0 +2020-01-03 10:00:00,0.0 +2020-01-03 11:00:00,0.0 +2020-01-03 12:00:00,0.0 +2020-01-03 13:00:00,0.0 +2020-01-03 14:00:00,0.0 +2020-01-03 15:00:00,0.0 +2020-01-03 16:00:00,0.0 +2020-01-03 17:00:00,0.0 +2020-01-03 18:00:00,1.4111111111111112 +2020-01-03 19:00:00,5.1866666666666665 +2020-01-03 20:00:00,8.45888888888889 +2020-01-03 21:00:00,7.134444444444444 +2020-01-03 22:00:00,25.381777777778094 +2020-01-03 23:00:00,57.06088888888936 +2020-01-04 00:00:00,73.72666666666717 +2020-01-04 01:00:00,68.43111111111202 +2020-01-04 02:00:00,67.34055555555537 +2020-01-04 03:00:00,29.938222222222134 +2020-01-04 04:00:00,23.13088888888913 +2020-01-04 05:00:00,1.1513333333333438 +2020-01-04 06:00:00,0.0 +2020-01-04 07:00:00,0.0 +2020-01-04 08:00:00,0.0 +2020-01-04 09:00:00,0.0 +2020-01-04 10:00:00,0.0 +2020-01-04 11:00:00,0.0 +2020-01-04 12:00:00,0.0 +2020-01-04 13:00:00,0.0 +2020-01-04 14:00:00,0.0 +2020-01-04 15:00:00,0.0 +2020-01-04 16:00:00,0.0 +2020-01-04 17:00:00,0.0 +2020-01-04 18:00:00,1.9546666666666783 +2020-01-04 19:00:00,7.947777777777842 +2020-01-04 20:00:00,12.007111111111348 +2020-01-04 21:00:00,41.451666666666476 +2020-01-04 22:00:00,49.94633333333418 +2020-01-04 23:00:00,82.99211111111168 +2020-01-05 00:00:00,68.61555555555547 +2020-01-05 01:00:00,57.05066666666644 +2020-01-05 02:00:00,33.89866666666607 +2020-01-05 03:00:00,25.730111111110823 +2020-01-05 04:00:00,24.65911111111097 +2020-01-05 05:00:00,14.16 +2020-01-05 06:00:00,1.5266666666666666 +2020-01-05 07:00:00,0.0 +2020-01-05 08:00:00,0.0 +2020-01-05 09:00:00,0.0 +2020-01-05 10:00:00,0.0 +2020-01-05 11:00:00,0.0 +2020-01-05 12:00:00,0.0 +2020-01-05 13:00:00,0.0 +2020-01-05 14:00:00,0.0 +2020-01-05 15:00:00,0.0 +2020-01-05 16:00:00,0.0 +2020-01-05 17:00:00,0.0 +2020-01-05 18:00:00,0.0 +2020-01-05 19:00:00,0.0 +2020-01-05 20:00:00,4.001111111111111 +2020-01-05 21:00:00,10.785222222222224 +2020-01-05 22:00:00,30.36333333333305 +2020-01-05 23:00:00,11.659333333333175 +2020-01-06 00:00:00,2.599777777777819 +2020-01-06 01:00:00,0.0 +2020-01-06 02:00:00,0.8543333333333308 +2020-01-06 03:00:00,3.84888888888894 +2020-01-06 04:00:00,3.502222222222267 +2020-01-06 05:00:00,1.7066666666666481 +2020-01-06 06:00:00,0.0 +2020-01-06 07:00:00,0.0 +2020-01-06 08:00:00,0.0 +2020-01-06 09:00:00,0.0 +2020-01-06 10:00:00,0.0 +2020-01-06 11:00:00,0.0 +2020-01-06 12:00:00,0.0 +2020-01-06 13:00:00,0.0 +2020-01-06 14:00:00,0.0 +2020-01-06 15:00:00,0.0 +2020-01-06 16:00:00,0.0 +2020-01-06 17:00:00,0.0 +2020-01-06 18:00:00,7.720000000000055 +2020-01-06 19:00:00,30.797333333333587 +2020-01-06 20:00:00,49.54088888888955 +2020-01-06 21:00:00,68.58899999999937 +2020-01-06 22:00:00,66.21000000000069 +2020-01-06 23:00:00,75.77544444444477 +2020-01-07 00:00:00,69.95977777777698 +2020-01-07 01:00:00,15.455777777777287 +2020-01-07 02:00:00,10.922222222222253 +2020-01-07 03:00:00,29.65411111111107 +2020-01-07 04:00:00,84.88600000000015 +2020-01-07 05:00:00,25.525666666666915 +2020-01-07 06:00:00,3.216222222222197 +2020-01-07 07:00:00,0.0 +2020-01-07 08:00:00,0.0 +2020-01-07 09:00:00,0.0 +2020-01-07 10:00:00,0.0 +2020-01-07 11:00:00,0.0 +2020-01-07 12:00:00,0.0 +2020-01-07 13:00:00,0.0 +2020-01-07 14:00:00,0.0 +2020-01-07 15:00:00,0.0 +2020-01-07 16:00:00,0.0 +2020-01-07 17:00:00,0.0 +2020-01-07 18:00:00,16.36655555555571 +2020-01-07 19:00:00,67.46422222222198 +2020-01-07 20:00:00,101.55966666666579 +2020-01-07 21:00:00,104.24000000000018 +2020-01-07 22:00:00,100.75600000000016 +2020-01-07 23:00:00,103.78933333333435 +2020-01-08 00:00:00,75.84277777777748 +2020-01-08 01:00:00,72.9487777777776 +2020-01-08 02:00:00,47.4107777777779 +2020-01-08 03:00:00,76.483000000001 +2020-01-08 04:00:00,31.611444444444448 +2020-01-08 05:00:00,8.09000000000014 +2020-01-08 06:00:00,0.7279999999999984 +2020-01-08 07:00:00,0.0 +2020-01-08 08:00:00,0.0 +2020-01-08 09:00:00,0.0 +2020-01-08 10:00:00,0.0 +2020-01-08 11:00:00,0.0 +2020-01-08 12:00:00,0.0 +2020-01-08 13:00:00,0.0 +2020-01-08 14:00:00,0.0 +2020-01-08 15:00:00,0.0 +2020-01-08 16:00:00,0.0 +2020-01-08 17:00:00,0.0 +2020-01-08 18:00:00,4.876666666666667 +2020-01-08 19:00:00,18.27188888888886 +2020-01-08 20:00:00,63.80855555555573 +2020-01-08 21:00:00,73.68777777777747 +2020-01-08 22:00:00,77.69599999999953 +2020-01-08 23:00:00,77.86533333333317 +2020-01-09 00:00:00,38.0298888888892 +2020-01-09 01:00:00,51.89000000000081 +2020-01-09 02:00:00,55.12288888888994 +2020-01-09 03:00:00,51.73100000000014 +2020-01-09 04:00:00,11.25588888888905 +2020-01-09 05:00:00,9.005222222222313 +2020-01-09 06:00:00,1.5422222222222222 +2020-01-09 07:00:00,0.0 +2020-01-09 08:00:00,0.0 +2020-01-09 09:00:00,0.0 +2020-01-09 10:00:00,0.0 +2020-01-09 11:00:00,0.0 +2020-01-09 12:00:00,0.0 +2020-01-09 13:00:00,0.0 +2020-01-09 14:00:00,0.0 +2020-01-09 15:00:00,0.0 +2020-01-09 16:00:00,0.0 +2020-01-09 17:00:00,0.0 +2020-01-09 18:00:00,17.353444444444623 +2020-01-09 19:00:00,74.78333333333372 +2020-01-09 20:00:00,108.84777777777778 +2020-01-09 21:00:00,111.45666666666666 +2020-01-09 22:00:00,109.55944444444454 +2020-01-09 23:00:00,102.66011111111025 +2020-01-10 00:00:00,109.40622222222076 +2020-01-10 01:00:00,108.3511111111125 +2020-01-10 02:00:00,94.92599999999896 +2020-01-10 03:00:00,104.17977777777823 +2020-01-10 04:00:00,88.08533333333312 +2020-01-10 05:00:00,48.27211111111079 +2020-01-10 06:00:00,2.4636666666666986 +2020-01-10 07:00:00,0.0 +2020-01-10 08:00:00,0.0 +2020-01-10 09:00:00,0.0 +2020-01-10 10:00:00,0.0 +2020-01-10 11:00:00,0.0 +2020-01-10 12:00:00,0.0 +2020-01-10 13:00:00,0.0 +2020-01-10 14:00:00,0.0 +2020-01-10 15:00:00,0.0 +2020-01-10 16:00:00,0.0 +2020-01-10 17:00:00,0.0 +2020-01-10 18:00:00,9.595111111111063 +2020-01-10 19:00:00,48.46555555555595 +2020-01-10 20:00:00,99.55511111111119 +2020-01-10 21:00:00,90.257888888889 +2020-01-10 22:00:00,97.54777777777902 +2020-01-10 23:00:00,111.00888888889034 +2020-01-11 00:00:00,112.10000000000137 +2020-01-11 01:00:00,113.90222222222364 +2020-01-11 02:00:00,95.12022222222261 +2020-01-11 03:00:00,95.07722222222235 +2020-01-11 04:00:00,54.99244444444459 +2020-01-11 05:00:00,45.50177777777783 +2020-01-11 06:00:00,4.4717777777777385 +2020-01-11 07:00:00,0.0 +2020-01-11 08:00:00,0.0 +2020-01-11 09:00:00,0.0 +2020-01-11 10:00:00,0.0 +2020-01-11 11:00:00,0.0 +2020-01-11 12:00:00,0.0 +2020-01-11 13:00:00,0.0 +2020-01-11 14:00:00,0.0 +2020-01-11 15:00:00,0.0 +2020-01-11 16:00:00,0.0 +2020-01-11 17:00:00,0.0 +2020-01-11 18:00:00,16.555777777777944 +2020-01-11 19:00:00,72.00400000000072 +2020-01-11 20:00:00,96.77099999999903 +2020-01-11 21:00:00,85.55855555555593 +2020-01-11 22:00:00,94.33544444444459 +2020-01-11 23:00:00,102.16822222222328 +2020-01-12 00:00:00,101.06366666666676 +2020-01-12 01:00:00,75.23644444444419 +2020-01-12 02:00:00,99.96755555555465 +2020-01-12 03:00:00,105.23377777777772 +2020-01-12 04:00:00,94.87788888888747 +2020-01-12 05:00:00,46.157777777776985 +2020-01-12 06:00:00,3.986888888888889 +2020-01-12 07:00:00,0.0 +2020-01-12 08:00:00,0.0 +2020-01-12 09:00:00,0.0 +2020-01-12 10:00:00,0.0 +2020-01-12 11:00:00,0.0 +2020-01-12 12:00:00,0.0 +2020-01-12 13:00:00,0.0 +2020-01-12 14:00:00,0.0 +2020-01-12 15:00:00,0.0 +2020-01-12 16:00:00,0.0 +2020-01-12 17:00:00,0.0 +2020-01-12 18:00:00,19.862111111111375 +2020-01-12 19:00:00,56.00300000000018 +2020-01-12 20:00:00,77.43255555555534 +2020-01-12 21:00:00,84.25366666666628 +2020-01-12 22:00:00,79.4318888888888 +2020-01-12 23:00:00,98.96655555555593 +2020-01-13 00:00:00,99.65600000000049 +2020-01-13 01:00:00,98.13833333333322 +2020-01-13 02:00:00,90.52200000000086 +2020-01-13 03:00:00,77.8058888888892 +2020-01-13 04:00:00,57.150333333333315 +2020-01-13 05:00:00,16.6286666666668 +2020-01-13 06:00:00,2.591333333333313 +2020-01-13 07:00:00,0.0 +2020-01-13 08:00:00,0.0 +2020-01-13 09:00:00,0.0 +2020-01-13 10:00:00,0.0 +2020-01-13 11:00:00,0.0 +2020-01-13 12:00:00,0.0 +2020-01-13 13:00:00,0.0 +2020-01-13 14:00:00,0.0 +2020-01-13 15:00:00,0.0 +2020-01-13 16:00:00,0.0 +2020-01-13 17:00:00,0.0 +2020-01-13 18:00:00,14.315555555555699 +2020-01-13 19:00:00,68.45366666666673 +2020-01-13 20:00:00,100.49100000000011 +2020-01-13 21:00:00,100.0590000000011 +2020-01-13 22:00:00,108.55277777777691 +2020-01-13 23:00:00,88.2402222222218 +2020-01-14 00:00:00,79.56922222222248 +2020-01-14 01:00:00,102.15899999999961 +2020-01-14 02:00:00,80.45455555555625 +2020-01-14 03:00:00,51.29155555555525 +2020-01-14 04:00:00,92.09799999999964 +2020-01-14 05:00:00,44.90188888888841 +2020-01-14 06:00:00,3.2831111111111113 +2020-01-14 07:00:00,0.0 +2020-01-14 08:00:00,0.0 +2020-01-14 09:00:00,0.0 +2020-01-14 10:00:00,0.0 +2020-01-14 11:00:00,0.0 +2020-01-14 12:00:00,0.0 +2020-01-14 13:00:00,0.0 +2020-01-14 14:00:00,0.0 +2020-01-14 15:00:00,0.0 +2020-01-14 16:00:00,0.0 +2020-01-14 17:00:00,0.0 +2020-01-14 18:00:00,5.584444444444445 +2020-01-14 19:00:00,69.32333333333375 +2020-01-14 20:00:00,95.65122222222104 +2020-01-14 21:00:00,89.65588888888936 +2020-01-14 22:00:00,105.39288888889047 +2020-01-14 23:00:00,100.22222222222157 +2020-01-15 00:00:00,99.10044444444492 +2020-01-15 01:00:00,51.51588888888921 +2020-01-15 02:00:00,23.91988888888937 +2020-01-15 03:00:00,98.9784444444448 +2020-01-15 04:00:00,87.207555555556 +2020-01-15 05:00:00,46.42811111111083 +2020-01-15 06:00:00,2.0600000000000187 +2020-01-15 07:00:00,0.0 +2020-01-15 08:00:00,0.0 +2020-01-15 09:00:00,0.0 +2020-01-15 10:00:00,0.0 +2020-01-15 11:00:00,0.0 +2020-01-15 12:00:00,0.0 +2020-01-15 13:00:00,0.0 +2020-01-15 14:00:00,0.0 +2020-01-15 15:00:00,0.0 +2020-01-15 16:00:00,0.0 +2020-01-15 17:00:00,0.0 +2020-01-15 18:00:00,14.693666666666667 +2020-01-15 19:00:00,70.98833333333414 +2020-01-15 20:00:00,102.99944444444374 +2020-01-15 21:00:00,109.91222222222089 +2020-01-15 22:00:00,109.25555555555434 +2020-01-15 23:00:00,110.84222222222088 +2020-01-16 00:00:00,110.05088888888773 +2020-01-16 01:00:00,110.30555555555476 +2020-01-16 02:00:00,95.22744444444568 +2020-01-16 03:00:00,104.25022222222061 +2020-01-16 04:00:00,93.22933333333397 +2020-01-16 05:00:00,45.45177777777851 +2020-01-16 06:00:00,3.8291111111111595 +2020-01-16 07:00:00,0.0 +2020-01-16 08:00:00,0.0 +2020-01-16 09:00:00,0.0 +2020-01-16 10:00:00,0.0 +2020-01-16 11:00:00,0.0 +2020-01-16 12:00:00,0.0 +2020-01-16 13:00:00,0.0 +2020-01-16 14:00:00,0.0 +2020-01-16 15:00:00,0.0 +2020-01-16 16:00:00,0.0 +2020-01-16 17:00:00,0.0 +2020-01-16 18:00:00,14.964888888889002 +2020-01-16 19:00:00,64.14066666666672 +2020-01-16 20:00:00,86.65444444444424 +2020-01-16 21:00:00,95.6563333333337 +2020-01-16 22:00:00,92.95611111111216 +2020-01-16 23:00:00,96.65577777777709 +2020-01-17 00:00:00,88.26744444444417 +2020-01-17 01:00:00,89.18011111111123 +2020-01-17 02:00:00,31.980666666666597 +2020-01-17 03:00:00,26.25088888888839 +2020-01-17 04:00:00,14.77966666666667 +2020-01-17 05:00:00,54.66544444444412 +2020-01-17 06:00:00,5.647444444444526 +2020-01-17 07:00:00,0.0 +2020-01-17 08:00:00,0.0 +2020-01-17 09:00:00,0.0 +2020-01-17 10:00:00,0.0 +2020-01-17 11:00:00,0.0 +2020-01-17 12:00:00,0.0 +2020-01-17 13:00:00,0.0 +2020-01-17 14:00:00,0.0 +2020-01-17 15:00:00,0.0 +2020-01-17 16:00:00,0.0 +2020-01-17 17:00:00,0.0 +2020-01-17 18:00:00,9.905666666666708 +2020-01-17 19:00:00,25.76033333333314 +2020-01-17 20:00:00,105.55466666666833 +2020-01-17 21:00:00,111.01888888889022 +2020-01-17 22:00:00,111.60000000000136 +2020-01-17 23:00:00,111.44166666666803 +2020-01-18 00:00:00,111.15188888889064 +2020-01-18 01:00:00,105.58833333333159 +2020-01-18 02:00:00,111.93611111111129 +2020-01-18 03:00:00,111.95555555555735 +2020-01-18 04:00:00,79.76288888888806 +2020-01-18 05:00:00,2.295555555555566 +2020-01-18 06:00:00,3.902222222222272 +2020-01-18 07:00:00,0.0 +2020-01-18 08:00:00,0.0 +2020-01-18 09:00:00,0.0 +2020-01-18 10:00:00,0.0 +2020-01-18 11:00:00,0.0 +2020-01-18 12:00:00,0.0 +2020-01-18 13:00:00,0.0 +2020-01-18 14:00:00,0.0 +2020-01-18 15:00:00,0.0 +2020-01-18 16:00:00,0.0 +2020-01-18 17:00:00,0.0 +2020-01-18 18:00:00,8.602999999999977 +2020-01-18 19:00:00,63.82511111111136 +2020-01-18 20:00:00,87.885333333334 +2020-01-18 21:00:00,100.66644444444573 +2020-01-18 22:00:00,110.993333333332 +2020-01-18 23:00:00,109.75288888888849 +2020-01-19 00:00:00,107.38233333333423 +2020-01-19 01:00:00,96.65066666666758 +2020-01-19 02:00:00,100.90766666666666 +2020-01-19 03:00:00,69.51155555555525 +2020-01-19 04:00:00,69.07333333333288 +2020-01-19 05:00:00,34.072777777777304 +2020-01-19 06:00:00,2.5766666666666636 +2020-01-19 07:00:00,0.0 +2020-01-19 08:00:00,0.0 +2020-01-19 09:00:00,0.0 +2020-01-19 10:00:00,0.0 +2020-01-19 11:00:00,0.0 +2020-01-19 12:00:00,0.0 +2020-01-19 13:00:00,0.0 +2020-01-19 14:00:00,0.0 +2020-01-19 15:00:00,0.0 +2020-01-19 16:00:00,0.0 +2020-01-19 17:00:00,0.0 +2020-01-19 18:00:00,12.662444444444573 +2020-01-19 19:00:00,68.07066666666701 +2020-01-19 20:00:00,102.86466666666433 +2020-01-19 21:00:00,108.72333333333214 +2020-01-19 22:00:00,111.39999999999866 +2020-01-19 23:00:00,111.39999999999866 +2020-01-20 00:00:00,111.39999999999866 +2020-01-20 01:00:00,111.39999999999866 +2020-01-20 02:00:00,111.13466666666547 +2020-01-20 03:00:00,109.95199999999993 +2020-01-20 04:00:00,73.89900000000023 +2020-01-20 05:00:00,26.191666666666645 +2020-01-20 06:00:00,3.7372222222222558 +2020-01-20 07:00:00,0.0 +2020-01-20 08:00:00,0.0 +2020-01-20 09:00:00,0.0 +2020-01-20 10:00:00,0.0 +2020-01-20 11:00:00,0.0 +2020-01-20 12:00:00,0.0 +2020-01-20 13:00:00,0.0 +2020-01-20 14:00:00,0.0 +2020-01-20 15:00:00,0.0 +2020-01-20 16:00:00,0.0 +2020-01-20 17:00:00,0.0 +2020-01-20 18:00:00,13.089444444444535 +2020-01-20 19:00:00,69.26022222222315 +2020-01-20 20:00:00,105.88766666666717 +2020-01-20 21:00:00,111.1 +2020-01-20 22:00:00,111.5 +2020-01-20 23:00:00,111.5 +2020-01-21 00:00:00,111.05333333333333 +2020-01-21 01:00:00,111.08688888888858 +2020-01-21 02:00:00,101.11733333333287 +2020-01-21 03:00:00,95.74522222222274 +2020-01-21 04:00:00,75.74699999999957 +2020-01-21 05:00:00,23.636111111111276 +2020-01-21 06:00:00,2.0955555555555576 +2020-01-21 07:00:00,0.0 +2020-01-21 08:00:00,0.0 +2020-01-21 09:00:00,0.0 +2020-01-21 10:00:00,0.0 +2020-01-21 11:00:00,0.0 +2020-01-21 12:00:00,0.0 +2020-01-21 13:00:00,0.0 +2020-01-21 14:00:00,0.0 +2020-01-21 15:00:00,0.0 +2020-01-21 16:00:00,0.0 +2020-01-21 17:00:00,0.0 +2020-01-21 18:00:00,15.225777777777926 +2020-01-21 19:00:00,69.42444444444484 +2020-01-21 20:00:00,102.91777777777868 +2020-01-21 21:00:00,109.26444444444569 +2020-01-21 22:00:00,110.60000000000132 +2020-01-21 23:00:00,106.44722222222246 +2020-01-22 00:00:00,102.38866666666569 +2020-01-22 01:00:00,104.91344444444431 +2020-01-22 02:00:00,103.89666666666618 +2020-01-22 03:00:00,66.2225555555547 +2020-01-22 04:00:00,61.46211111111089 +2020-01-22 05:00:00,39.3597777777776 +2020-01-22 06:00:00,1.9186666666666505 +2020-01-22 07:00:00,0.0 +2020-01-22 08:00:00,0.0 +2020-01-22 09:00:00,0.0 +2020-01-22 10:00:00,0.0 +2020-01-22 11:00:00,0.0 +2020-01-22 12:00:00,0.0 +2020-01-22 13:00:00,0.0 +2020-01-22 14:00:00,0.0 +2020-01-22 15:00:00,0.0 +2020-01-22 16:00:00,0.0 +2020-01-22 17:00:00,0.0 +2020-01-22 18:00:00,12.696444444444547 +2020-01-22 19:00:00,67.51922222222225 +2020-01-22 20:00:00,102.82244444444274 +2020-01-22 21:00:00,96.48811111110932 +2020-01-22 22:00:00,98.11188888888918 +2020-01-22 23:00:00,75.22288888888889 +2020-01-23 00:00:00,90.78688888888932 +2020-01-23 01:00:00,95.56433333333305 +2020-01-23 02:00:00,77.55355555555552 +2020-01-23 03:00:00,65.69822222222211 +2020-01-23 04:00:00,51.96611111111057 +2020-01-23 05:00:00,12.656333333333473 +2020-01-23 06:00:00,1.979777777777757 +2020-01-23 07:00:00,0.0 +2020-01-23 08:00:00,0.0 +2020-01-23 09:00:00,0.0 +2020-01-23 10:00:00,0.0 +2020-01-23 11:00:00,0.0 +2020-01-23 12:00:00,0.0 +2020-01-23 13:00:00,0.0 +2020-01-23 14:00:00,0.0 +2020-01-23 15:00:00,0.0 +2020-01-23 16:00:00,0.0 +2020-01-23 17:00:00,0.0 +2020-01-23 18:00:00,11.466333333333422 +2020-01-23 19:00:00,58.58677777777811 +2020-01-23 20:00:00,102.60966666666722 +2020-01-23 21:00:00,102.71322222222186 +2020-01-23 22:00:00,63.481000000000165 +2020-01-23 23:00:00,89.54233333333258 +2020-01-24 00:00:00,62.5006666666675 +2020-01-24 01:00:00,11.941555555555903 +2020-01-24 02:00:00,9.47333333333325 +2020-01-24 03:00:00,50.20955555555568 +2020-01-24 04:00:00,26.33933333333398 +2020-01-24 05:00:00,2.5516666666666588 +2020-01-24 06:00:00,1.4822222222222097 +2020-01-24 07:00:00,0.0 +2020-01-24 08:00:00,0.0 +2020-01-24 09:00:00,0.0 +2020-01-24 10:00:00,0.0 +2020-01-24 11:00:00,0.0 +2020-01-24 12:00:00,0.0 +2020-01-24 13:00:00,0.0 +2020-01-24 14:00:00,0.0 +2020-01-24 15:00:00,0.0 +2020-01-24 16:00:00,0.0 +2020-01-24 17:00:00,0.0 +2020-01-24 18:00:00,12.697555555555663 +2020-01-24 19:00:00,67.35966666666712 +2020-01-24 20:00:00,105.03111111111112 +2020-01-24 21:00:00,109.29177777777728 +2020-01-24 22:00:00,111.08933333333297 +2020-01-24 23:00:00,93.95999999999891 +2020-01-25 00:00:00,91.48277777777734 +2020-01-25 01:00:00,97.68655555555537 +2020-01-25 02:00:00,83.46011111111092 +2020-01-25 03:00:00,100.61933333333437 +2020-01-25 04:00:00,56.53433333333436 +2020-01-25 05:00:00,10.54711111111115 +2020-01-25 06:00:00,2.442777777777775 +2020-01-25 07:00:00,0.0 +2020-01-25 08:00:00,0.0 +2020-01-25 09:00:00,0.0 +2020-01-25 10:00:00,0.0 +2020-01-25 11:00:00,0.0 +2020-01-25 12:00:00,0.0 +2020-01-25 13:00:00,0.0 +2020-01-25 14:00:00,0.0 +2020-01-25 15:00:00,0.0 +2020-01-25 16:00:00,0.0 +2020-01-25 17:00:00,0.0 +2020-01-25 18:00:00,8.106555555555564 +2020-01-25 19:00:00,63.90377777777842 +2020-01-25 20:00:00,93.81544444444522 +2020-01-25 21:00:00,111.82822222222048 +2020-01-25 22:00:00,112.58333333333164 +2020-01-25 23:00:00,110.71499999999928 +2020-01-26 00:00:00,85.99077777777771 +2020-01-26 01:00:00,80.78800000000045 +2020-01-26 02:00:00,95.28766666666674 +2020-01-26 03:00:00,33.52622222222188 +2020-01-26 04:00:00,54.33788888888854 +2020-01-26 05:00:00,43.557555555555844 +2020-01-26 06:00:00,2.413999999999995 +2020-01-26 07:00:00,0.0 +2020-01-26 08:00:00,0.0 +2020-01-26 09:00:00,0.0 +2020-01-26 10:00:00,0.0 +2020-01-26 11:00:00,0.0 +2020-01-26 12:00:00,0.0 +2020-01-26 13:00:00,0.0 +2020-01-26 14:00:00,0.0 +2020-01-26 15:00:00,0.0 +2020-01-26 16:00:00,0.0 +2020-01-26 17:00:00,0.0 +2020-01-26 18:00:00,12.90400000000011 +2020-01-26 19:00:00,66.61722222222265 +2020-01-26 20:00:00,107.63333333333334 +2020-01-26 21:00:00,114.37566666666844 +2020-01-26 22:00:00,110.34822222222128 +2020-01-26 23:00:00,78.26622222222258 +2020-01-27 00:00:00,66.58355555555568 +2020-01-27 01:00:00,74.61144444444415 +2020-01-27 02:00:00,97.81711111111169 +2020-01-27 03:00:00,74.10844444444443 +2020-01-27 04:00:00,91.01799999999908 +2020-01-27 05:00:00,42.922222222221954 +2020-01-27 06:00:00,1.8911111111111112 +2020-01-27 07:00:00,0.0 +2020-01-27 08:00:00,0.0 +2020-01-27 09:00:00,0.0 +2020-01-27 10:00:00,0.0 +2020-01-27 11:00:00,0.0 +2020-01-27 12:00:00,0.0 +2020-01-27 13:00:00,0.0 +2020-01-27 14:00:00,0.0 +2020-01-27 15:00:00,0.0 +2020-01-27 16:00:00,0.0 +2020-01-27 17:00:00,0.0 +2020-01-27 18:00:00,7.543999999999966 +2020-01-27 19:00:00,56.44188888888797 +2020-01-27 20:00:00,63.412222222222304 +2020-01-27 21:00:00,76.2255555555551 +2020-01-27 22:00:00,83.08788888888877 +2020-01-27 23:00:00,74.45722222222199 +2020-01-28 00:00:00,84.04133333333272 +2020-01-28 01:00:00,112.28522222222122 +2020-01-28 02:00:00,97.47100000000144 +2020-01-28 03:00:00,71.65211111111105 +2020-01-28 04:00:00,30.327222222221963 +2020-01-28 05:00:00,7.028888888889045 +2020-01-28 06:00:00,0.6054444444444469 +2020-01-28 07:00:00,0.0 +2020-01-28 08:00:00,0.0 +2020-01-28 09:00:00,0.0 +2020-01-28 10:00:00,0.0 +2020-01-28 11:00:00,0.0 +2020-01-28 12:00:00,0.0 +2020-01-28 13:00:00,0.0 +2020-01-28 14:00:00,0.0 +2020-01-28 15:00:00,0.0 +2020-01-28 16:00:00,0.0 +2020-01-28 17:00:00,0.0 +2020-01-28 18:00:00,13.321666666666543 +2020-01-28 19:00:00,60.40911111111123 +2020-01-28 20:00:00,102.32922222222197 +2020-01-28 21:00:00,110.84466666666516 +2020-01-28 22:00:00,92.1707777777778 +2020-01-28 23:00:00,71.69177777777776 +2020-01-29 00:00:00,103.17155555555546 +2020-01-29 01:00:00,115.61822222222206 +2020-01-29 02:00:00,91.87511111111081 +2020-01-29 03:00:00,101.31755555555557 +2020-01-29 04:00:00,87.60777777777759 +2020-01-29 05:00:00,36.235888888888745 +2020-01-29 06:00:00,0.4913333333333317 +2020-01-29 07:00:00,0.0 +2020-01-29 08:00:00,0.0 +2020-01-29 09:00:00,0.0 +2020-01-29 10:00:00,0.0 +2020-01-29 11:00:00,0.0 +2020-01-29 12:00:00,0.0 +2020-01-29 13:00:00,0.0 +2020-01-29 14:00:00,0.0 +2020-01-29 15:00:00,0.0 +2020-01-29 16:00:00,0.0 +2020-01-29 17:00:00,0.0 +2020-01-29 18:00:00,3.601111111111111 +2020-01-29 19:00:00,7.03 +2020-01-29 20:00:00,4.335555555555556 +2020-01-29 21:00:00,25.540222222222297 +2020-01-29 22:00:00,38.698555555555764 +2020-01-29 23:00:00,5.585888888888864 +2020-01-30 00:00:00,7.318888888888768 +2020-01-30 01:00:00,7.18333333333322 +2020-01-30 02:00:00,12.066666666666459 +2020-01-30 03:00:00,8.088888888888741 +2020-01-30 04:00:00,11.598777777777626 +2020-01-30 05:00:00,12.460444444444164 +2020-01-30 06:00:00,0.6782222222222195 +2020-01-30 07:00:00,0.0 +2020-01-30 08:00:00,0.0 +2020-01-30 09:00:00,0.0 +2020-01-30 10:00:00,0.0 +2020-01-30 11:00:00,0.0 +2020-01-30 12:00:00,0.0 +2020-01-30 13:00:00,0.0 +2020-01-30 14:00:00,0.0 +2020-01-30 15:00:00,0.0 +2020-01-30 16:00:00,0.0 +2020-01-30 17:00:00,0.0 +2020-01-30 18:00:00,4.999777777777773 +2020-01-30 19:00:00,18.914888888889077 +2020-01-30 20:00:00,23.240333333333233 +2020-01-30 21:00:00,21.52044444444478 +2020-01-30 22:00:00,4.239888888888947 +2020-01-30 23:00:00,4.060000000000051 +2020-01-31 00:00:00,10.88988888888872 +2020-01-31 01:00:00,16.53722222222191 +2020-01-31 02:00:00,43.23588888888856 +2020-01-31 03:00:00,36.223555555555855 +2020-01-31 04:00:00,43.51222222222222 +2020-01-31 05:00:00,14.347111111111298 +2020-01-31 06:00:00,0.7713333333333366 +2020-01-31 07:00:00,0.0 +2020-01-31 08:00:00,0.0 +2020-01-31 09:00:00,0.0 +2020-01-31 10:00:00,0.0 +2020-01-31 11:00:00,0.0 +2020-01-31 12:00:00,0.0 +2020-01-31 13:00:00,0.0 +2020-01-31 14:00:00,0.0 +2020-01-31 15:00:00,0.0 +2020-01-31 16:00:00,0.0 +2020-01-31 17:00:00,0.0 +2020-01-31 18:00:00,2.26 +2020-01-31 19:00:00,13.346555555555637 +2020-01-31 20:00:00,0.44666666666666666 +2020-01-31 21:00:00,0.0 +2020-01-31 22:00:00,29.20566666666671 +2020-01-31 23:00:00,74.09888888888882 +2020-02-01 00:00:00,53.91400000000025 +2020-02-01 01:00:00,46.6992222222221 +2020-02-01 02:00:00,56.016111111111385 +2020-02-01 03:00:00,42.39811111111136 +2020-02-01 04:00:00,15.101888888889054 +2020-02-01 05:00:00,3.287777777777778 +2020-02-01 06:00:00,0.0 +2020-02-01 07:00:00,0.0 +2020-02-01 08:00:00,0.0 +2020-02-01 09:00:00,0.0 +2020-02-01 10:00:00,0.0 +2020-02-01 11:00:00,0.0 +2020-02-01 12:00:00,0.0 +2020-02-01 13:00:00,0.0 +2020-02-01 14:00:00,0.0 +2020-02-01 15:00:00,0.0 +2020-02-01 16:00:00,0.0 +2020-02-01 17:00:00,0.0 +2020-02-01 18:00:00,1.4188888888888889 +2020-02-01 19:00:00,17.86044444444471 +2020-02-01 20:00:00,45.153222222222 +2020-02-01 21:00:00,87.03644444444369 +2020-02-01 22:00:00,85.00455555555494 +2020-02-01 23:00:00,100.95844444444326 +2020-02-02 00:00:00,79.66955555555553 +2020-02-02 01:00:00,86.54299999999957 +2020-02-02 02:00:00,84.3515555555554 +2020-02-02 03:00:00,30.61566666666672 +2020-02-02 04:00:00,8.82500000000015 +2020-02-02 05:00:00,2.4339999999999806 +2020-02-02 06:00:00,0.0 +2020-02-02 07:00:00,0.0 +2020-02-02 08:00:00,0.0 +2020-02-02 09:00:00,0.0 +2020-02-02 10:00:00,0.0 +2020-02-02 11:00:00,0.0 +2020-02-02 12:00:00,0.0 +2020-02-02 13:00:00,0.0 +2020-02-02 14:00:00,0.0 +2020-02-02 15:00:00,0.0 +2020-02-02 16:00:00,0.0 +2020-02-02 17:00:00,0.0 +2020-02-02 18:00:00,1.9173333333333251 +2020-02-02 19:00:00,18.620111111110983 +2020-02-02 20:00:00,79.10077777777732 +2020-02-02 21:00:00,87.4268888888884 +2020-02-02 22:00:00,102.38633333333334 +2020-02-02 23:00:00,111.31266666666568 +2020-02-03 00:00:00,97.1947777777781 +2020-02-03 01:00:00,61.19788888888833 +2020-02-03 02:00:00,10.895666666666775 +2020-02-03 03:00:00,77.92011111111097 +2020-02-03 04:00:00,88.67388888888833 +2020-02-03 05:00:00,32.660444444444444 +2020-02-03 06:00:00,0.7017777777777789 +2020-02-03 07:00:00,0.0 +2020-02-03 08:00:00,0.0 +2020-02-03 09:00:00,0.0 +2020-02-03 10:00:00,0.0 +2020-02-03 11:00:00,0.0 +2020-02-03 12:00:00,0.0 +2020-02-03 13:00:00,0.0 +2020-02-03 14:00:00,0.0 +2020-02-03 15:00:00,0.0 +2020-02-03 16:00:00,0.0 +2020-02-03 17:00:00,0.0 +2020-02-03 18:00:00,10.819222222222168 +2020-02-03 19:00:00,68.697222222222 +2020-02-03 20:00:00,104.57077777777862 +2020-02-03 21:00:00,111.35255555555514 +2020-02-03 22:00:00,96.54833333333353 +2020-02-03 23:00:00,104.86344444444588 +2020-02-04 00:00:00,96.50022222222199 +2020-02-04 01:00:00,21.67566666666651 +2020-02-04 02:00:00,21.512777777777103 +2020-02-04 03:00:00,10.125444444444456 +2020-02-04 04:00:00,64.12466666666667 +2020-02-04 05:00:00,9.214333333333391 +2020-02-04 06:00:00,0.0 +2020-02-04 07:00:00,0.0 +2020-02-04 08:00:00,0.0 +2020-02-04 09:00:00,0.0 +2020-02-04 10:00:00,0.0 +2020-02-04 11:00:00,0.0 +2020-02-04 12:00:00,0.0 +2020-02-04 13:00:00,0.0 +2020-02-04 14:00:00,0.0 +2020-02-04 15:00:00,0.0 +2020-02-04 16:00:00,0.0 +2020-02-04 17:00:00,0.0 +2020-02-04 18:00:00,11.842555555555611 +2020-02-04 19:00:00,62.541333333333554 +2020-02-04 20:00:00,106.58277777777775 +2020-02-04 21:00:00,112.37911111110976 +2020-02-04 22:00:00,113.84777777777634 +2020-02-04 23:00:00,114.86444444444295 +2020-02-05 00:00:00,114.89999999999851 +2020-02-05 01:00:00,114.5985555555539 +2020-02-05 02:00:00,109.08888888888957 +2020-02-05 03:00:00,66.56977777777838 +2020-02-05 04:00:00,40.364111111111974 +2020-02-05 05:00:00,18.99255555555582 +2020-02-05 06:00:00,0.7695555555555529 +2020-02-05 07:00:00,0.0 +2020-02-05 08:00:00,0.0 +2020-02-05 09:00:00,0.0 +2020-02-05 10:00:00,0.0 +2020-02-05 11:00:00,0.0 +2020-02-05 12:00:00,0.0 +2020-02-05 13:00:00,0.0 +2020-02-05 14:00:00,0.0 +2020-02-05 15:00:00,0.0 +2020-02-05 16:00:00,0.0 +2020-02-05 17:00:00,0.0 +2020-02-05 18:00:00,12.610000000000117 +2020-02-05 19:00:00,74.28366666666665 +2020-02-05 20:00:00,111.71366666666815 +2020-02-05 21:00:00,110.33688888888989 +2020-02-05 22:00:00,95.24422222222186 +2020-02-05 23:00:00,115.16777777777818 +2020-02-06 00:00:00,61.46022222222268 +2020-02-06 01:00:00,88.20111111111144 +2020-02-06 02:00:00,115.21888888889038 +2020-02-06 03:00:00,76.65744444444395 +2020-02-06 04:00:00,43.62166666666696 +2020-02-06 05:00:00,14.15588888888868 +2020-02-06 06:00:00,0.4449999999999991 +2020-02-06 07:00:00,0.0 +2020-02-06 08:00:00,0.0 +2020-02-06 09:00:00,0.0 +2020-02-06 10:00:00,0.0 +2020-02-06 11:00:00,0.0 +2020-02-06 12:00:00,0.0 +2020-02-06 13:00:00,0.0 +2020-02-06 14:00:00,0.0 +2020-02-06 15:00:00,0.0 +2020-02-06 16:00:00,0.0 +2020-02-06 17:00:00,0.0 +2020-02-06 18:00:00,12.515111111111208 +2020-02-06 19:00:00,54.053333333333505 +2020-02-06 20:00:00,108.63333333333334 +2020-02-06 21:00:00,114.56222222222222 +2020-02-06 22:00:00,115.45444444444445 +2020-02-06 23:00:00,115.90666666666667 +2020-02-07 00:00:00,116.0 +2020-02-07 01:00:00,110.98077777777968 +2020-02-07 02:00:00,71.4148888888886 +2020-02-07 03:00:00,36.69611111111078 +2020-02-07 04:00:00,53.98111111111124 +2020-02-07 05:00:00,37.55099999999973 +2020-02-07 06:00:00,0.9775555555555595 +2020-02-07 07:00:00,0.0 +2020-02-07 08:00:00,0.0 +2020-02-07 09:00:00,0.0 +2020-02-07 10:00:00,0.0 +2020-02-07 11:00:00,0.0 +2020-02-07 12:00:00,0.0 +2020-02-07 13:00:00,0.0 +2020-02-07 14:00:00,0.0 +2020-02-07 15:00:00,0.0 +2020-02-07 16:00:00,0.0 +2020-02-07 17:00:00,0.0 +2020-02-07 18:00:00,11.460333333333363 +2020-02-07 19:00:00,71.1214444444455 +2020-02-07 20:00:00,108.22688888888999 +2020-02-07 21:00:00,113.64233333333254 +2020-02-07 22:00:00,115.32177777777632 +2020-02-07 23:00:00,114.3869999999988 +2020-02-08 00:00:00,115.75666666666514 +2020-02-08 01:00:00,112.20600000000103 +2020-02-08 02:00:00,104.49077777777637 +2020-02-08 03:00:00,77.40599999999978 +2020-02-08 04:00:00,44.27766666666573 +2020-02-08 05:00:00,6.92777777777772 +2020-02-08 06:00:00,0.9260000000000014 +2020-02-08 07:00:00,0.0 +2020-02-08 08:00:00,0.0 +2020-02-08 09:00:00,0.0 +2020-02-08 10:00:00,0.0 +2020-02-08 11:00:00,0.0 +2020-02-08 12:00:00,0.0 +2020-02-08 13:00:00,0.0 +2020-02-08 14:00:00,0.0 +2020-02-08 15:00:00,0.0 +2020-02-08 16:00:00,0.0 +2020-02-08 17:00:00,0.0 +2020-02-08 18:00:00,10.784444444444432 +2020-02-08 19:00:00,72.34322222222198 +2020-02-08 20:00:00,108.7022222222234 +2020-02-08 21:00:00,111.00788888888769 +2020-02-08 22:00:00,115.25844444444616 +2020-02-08 23:00:00,114.47466666666651 +2020-02-09 00:00:00,113.3255555555555 +2020-02-09 01:00:00,89.3550000000001 +2020-02-09 02:00:00,78.41155555555565 +2020-02-09 03:00:00,22.11888888888913 +2020-02-09 04:00:00,29.386333333333518 +2020-02-09 05:00:00,15.732333333333631 +2020-02-09 06:00:00,1.5153333333333254 +2020-02-09 07:00:00,0.0 +2020-02-09 08:00:00,0.0 +2020-02-09 09:00:00,0.0 +2020-02-09 10:00:00,0.0 +2020-02-09 11:00:00,0.0 +2020-02-09 12:00:00,0.0 +2020-02-09 13:00:00,0.0 +2020-02-09 14:00:00,0.0 +2020-02-09 15:00:00,0.0 +2020-02-09 16:00:00,0.0 +2020-02-09 17:00:00,0.0 +2020-02-09 18:00:00,8.678999999999936 +2020-02-09 19:00:00,55.5293333333335 +2020-02-09 20:00:00,79.23355555555557 +2020-02-09 21:00:00,110.2426666666667 +2020-02-09 22:00:00,84.95877777777774 +2020-02-09 23:00:00,51.85055555555553 +2020-02-10 00:00:00,64.54099999999984 +2020-02-10 01:00:00,107.593999999999 +2020-02-10 02:00:00,113.92422222222469 +2020-02-10 03:00:00,114.66555555555705 +2020-02-10 04:00:00,83.94511111111261 +2020-02-10 05:00:00,25.438444444444933 +2020-02-10 06:00:00,0.12533333333333344 +2020-02-10 07:00:00,0.0 +2020-02-10 08:00:00,0.0 +2020-02-10 09:00:00,0.0 +2020-02-10 10:00:00,0.0 +2020-02-10 11:00:00,0.0 +2020-02-10 12:00:00,0.0 +2020-02-10 13:00:00,0.0 +2020-02-10 14:00:00,0.0 +2020-02-10 15:00:00,0.0 +2020-02-10 16:00:00,0.0 +2020-02-10 17:00:00,0.0 +2020-02-10 18:00:00,12.485444444444393 +2020-02-10 19:00:00,65.5352222222227 +2020-02-10 20:00:00,54.37933333333334 +2020-02-10 21:00:00,112.30655555555398 +2020-02-10 22:00:00,104.76444444444483 +2020-02-10 23:00:00,105.09322222222266 +2020-02-11 00:00:00,112.13133333333425 +2020-02-11 01:00:00,114.05844444444524 +2020-02-11 02:00:00,109.60988888888951 +2020-02-11 03:00:00,106.45499999999916 +2020-02-11 04:00:00,2.9355555555555912 +2020-02-11 05:00:00,0.3175555555555556 +2020-02-11 06:00:00,0.0 +2020-02-11 07:00:00,0.0 +2020-02-11 08:00:00,0.0 +2020-02-11 09:00:00,0.0 +2020-02-11 10:00:00,0.0 +2020-02-11 11:00:00,0.0 +2020-02-11 12:00:00,0.0 +2020-02-11 13:00:00,0.0 +2020-02-11 14:00:00,0.0 +2020-02-11 15:00:00,0.0 +2020-02-11 16:00:00,0.0 +2020-02-11 17:00:00,0.0 +2020-02-11 18:00:00,0.0 +2020-02-11 19:00:00,3.2255555555555375 +2020-02-11 20:00:00,13.620333333333546 +2020-02-11 21:00:00,65.91166666666687 +2020-02-11 22:00:00,89.52555555555551 +2020-02-11 23:00:00,103.81255555555674 +2020-02-12 00:00:00,114.16344444444408 +2020-02-12 01:00:00,114.18611111111186 +2020-02-12 02:00:00,102.88211111111097 +2020-02-12 03:00:00,72.33211111111052 +2020-02-12 04:00:00,32.21200000000002 +2020-02-12 05:00:00,0.7333333333333333 +2020-02-12 06:00:00,0.0 +2020-02-12 07:00:00,0.0 +2020-02-12 08:00:00,0.0 +2020-02-12 09:00:00,0.0 +2020-02-12 10:00:00,0.0 +2020-02-12 11:00:00,0.0 +2020-02-12 12:00:00,0.0 +2020-02-12 13:00:00,0.0 +2020-02-12 14:00:00,0.0 +2020-02-12 15:00:00,0.0 +2020-02-12 16:00:00,0.0 +2020-02-12 17:00:00,0.0 +2020-02-12 18:00:00,6.077777777777799 +2020-02-12 19:00:00,13.618666666666666 +2020-02-12 20:00:00,36.1965555555557 +2020-02-12 21:00:00,98.32599999999933 +2020-02-12 22:00:00,112.36888888888988 +2020-02-12 23:00:00,114.99588888888852 +2020-02-13 00:00:00,110.19233333333497 +2020-02-13 01:00:00,112.52577777777641 +2020-02-13 02:00:00,101.57688888888916 +2020-02-13 03:00:00,21.39566666666612 +2020-02-13 04:00:00,31.242666666666835 +2020-02-13 05:00:00,23.272000000000027 +2020-02-13 06:00:00,0.012444444444444444 +2020-02-13 07:00:00,0.0 +2020-02-13 08:00:00,0.0 +2020-02-13 09:00:00,0.0 +2020-02-13 10:00:00,0.0 +2020-02-13 11:00:00,0.0 +2020-02-13 12:00:00,0.0 +2020-02-13 13:00:00,0.0 +2020-02-13 14:00:00,0.0 +2020-02-13 15:00:00,0.0 +2020-02-13 16:00:00,0.0 +2020-02-13 17:00:00,0.0 +2020-02-13 18:00:00,4.916666666666663 +2020-02-13 19:00:00,31.707555555555444 +2020-02-13 20:00:00,58.75244444444463 +2020-02-13 21:00:00,73.21699999999983 +2020-02-13 22:00:00,100.87722222222303 +2020-02-13 23:00:00,77.68277777777682 +2020-02-14 00:00:00,38.266000000000226 +2020-02-14 01:00:00,69.11466666666752 +2020-02-14 02:00:00,40.08588888888857 +2020-02-14 03:00:00,6.648888888888956 +2020-02-14 04:00:00,15.240555555555392 +2020-02-14 05:00:00,11.526333333333515 +2020-02-14 06:00:00,0.08166666666666667 +2020-02-14 07:00:00,0.0 +2020-02-14 08:00:00,0.0 +2020-02-14 09:00:00,0.0 +2020-02-14 10:00:00,0.0 +2020-02-14 11:00:00,0.0 +2020-02-14 12:00:00,0.0 +2020-02-14 13:00:00,0.0 +2020-02-14 14:00:00,0.0 +2020-02-14 15:00:00,0.0 +2020-02-14 16:00:00,0.0 +2020-02-14 17:00:00,0.0 +2020-02-14 18:00:00,8.39055555555554 +2020-02-14 19:00:00,42.07644444444412 +2020-02-14 20:00:00,80.42011111111196 +2020-02-14 21:00:00,90.85755555555535 +2020-02-14 22:00:00,103.57511111111083 +2020-02-14 23:00:00,93.8142222222215 +2020-02-15 00:00:00,92.15444444444489 +2020-02-15 01:00:00,73.03633333333322 +2020-02-15 02:00:00,84.94755555555518 +2020-02-15 03:00:00,59.64233333333332 +2020-02-15 04:00:00,25.973888888888418 +2020-02-15 05:00:00,4.619222222222197 +2020-02-15 06:00:00,0.0 +2020-02-15 07:00:00,0.0 +2020-02-15 08:00:00,0.0 +2020-02-15 09:00:00,0.0 +2020-02-15 10:00:00,0.0 +2020-02-15 11:00:00,0.0 +2020-02-15 12:00:00,0.0 +2020-02-15 13:00:00,0.0 +2020-02-15 14:00:00,0.0 +2020-02-15 15:00:00,0.0 +2020-02-15 16:00:00,0.0 +2020-02-15 17:00:00,0.0 +2020-02-15 18:00:00,9.852666666666611 +2020-02-15 19:00:00,29.053888888888945 +2020-02-15 20:00:00,33.68588888888901 +2020-02-15 21:00:00,50.42900000000038 +2020-02-15 22:00:00,87.0882222222216 +2020-02-15 23:00:00,99.81211111111145 +2020-02-16 00:00:00,66.41733333333272 +2020-02-16 01:00:00,45.52488888888854 +2020-02-16 02:00:00,32.366444444444575 +2020-02-16 03:00:00,8.95766666666657 +2020-02-16 04:00:00,0.0 +2020-02-16 05:00:00,0.0 +2020-02-16 06:00:00,0.0 +2020-02-16 07:00:00,0.0 +2020-02-16 08:00:00,0.0 +2020-02-16 09:00:00,0.0 +2020-02-16 10:00:00,0.0 +2020-02-16 11:00:00,0.0 +2020-02-16 12:00:00,0.0 +2020-02-16 13:00:00,0.0 +2020-02-16 14:00:00,0.0 +2020-02-16 15:00:00,0.0 +2020-02-16 16:00:00,0.0 +2020-02-16 17:00:00,0.0 +2020-02-16 18:00:00,0.0 +2020-02-16 19:00:00,0.0 +2020-02-16 20:00:00,1.251111111111111 +2020-02-16 21:00:00,8.07777777777785 +2020-02-16 22:00:00,28.248888888889145 +2020-02-16 23:00:00,45.304999999999424 +2020-02-17 00:00:00,56.31400000000089 +2020-02-17 01:00:00,63.05422222222273 +2020-02-17 02:00:00,68.60455555555505 +2020-02-17 03:00:00,31.326111111110656 +2020-02-17 04:00:00,29.09955555555497 +2020-02-17 05:00:00,10.535666666666675 +2020-02-17 06:00:00,0.29444444444444445 +2020-02-17 07:00:00,0.0 +2020-02-17 08:00:00,0.0 +2020-02-17 09:00:00,0.0 +2020-02-17 10:00:00,0.0 +2020-02-17 11:00:00,0.0 +2020-02-17 12:00:00,0.0 +2020-02-17 13:00:00,0.0 +2020-02-17 14:00:00,0.0 +2020-02-17 15:00:00,0.0 +2020-02-17 16:00:00,0.0 +2020-02-17 17:00:00,0.0 +2020-02-17 18:00:00,0.5067777777777784 +2020-02-17 19:00:00,15.068222222222508 +2020-02-17 20:00:00,29.392222222222603 +2020-02-17 21:00:00,48.577000000000666 +2020-02-17 22:00:00,57.849555555556194 +2020-02-17 23:00:00,78.26644444444453 +2020-02-18 00:00:00,62.81411111111116 +2020-02-18 01:00:00,68.88222222222257 +2020-02-18 02:00:00,57.03777777777709 +2020-02-18 03:00:00,67.0564444444443 +2020-02-18 04:00:00,49.9157777777783 +2020-02-18 05:00:00,5.198111111111234 +2020-02-18 06:00:00,0.0 +2020-02-18 07:00:00,0.0 +2020-02-18 08:00:00,0.0 +2020-02-18 09:00:00,0.0 +2020-02-18 10:00:00,0.0 +2020-02-18 11:00:00,0.0 +2020-02-18 12:00:00,0.0 +2020-02-18 13:00:00,0.0 +2020-02-18 14:00:00,0.0 +2020-02-18 15:00:00,0.0 +2020-02-18 16:00:00,0.0 +2020-02-18 17:00:00,0.0 +2020-02-18 18:00:00,8.516444444444488 +2020-02-18 19:00:00,49.22188888888889 +2020-02-18 20:00:00,61.77311111111095 +2020-02-18 21:00:00,74.65644444444337 +2020-02-18 22:00:00,89.28544444444327 +2020-02-18 23:00:00,100.4089999999998 +2020-02-19 00:00:00,99.71011111111038 +2020-02-19 01:00:00,107.78577777777731 +2020-02-19 02:00:00,100.60388888888916 +2020-02-19 03:00:00,102.24133333333336 +2020-02-19 04:00:00,69.22522222222184 +2020-02-19 05:00:00,10.424444444444568 +2020-02-19 06:00:00,0.09900000000000006 +2020-02-19 07:00:00,0.0 +2020-02-19 08:00:00,0.0 +2020-02-19 09:00:00,0.0 +2020-02-19 10:00:00,0.0 +2020-02-19 11:00:00,0.0 +2020-02-19 12:00:00,0.0 +2020-02-19 13:00:00,0.0 +2020-02-19 14:00:00,0.0 +2020-02-19 15:00:00,0.0 +2020-02-19 16:00:00,0.0 +2020-02-19 17:00:00,0.0 +2020-02-19 18:00:00,6.5193333333333765 +2020-02-19 19:00:00,26.872666666666817 +2020-02-19 20:00:00,77.32622222222162 +2020-02-19 21:00:00,107.6398888888875 +2020-02-19 22:00:00,114.99666666666484 +2020-02-19 23:00:00,115.28266666666498 +2020-02-20 00:00:00,104.94488888888812 +2020-02-20 01:00:00,106.6360000000002 +2020-02-20 02:00:00,92.4934444444456 +2020-02-20 03:00:00,106.88022222222273 +2020-02-20 04:00:00,77.98588888888963 +2020-02-20 05:00:00,27.422888888889176 +2020-02-20 06:00:00,0.28244444444444383 +2020-02-20 07:00:00,0.0 +2020-02-20 08:00:00,0.0 +2020-02-20 09:00:00,0.0 +2020-02-20 10:00:00,0.0 +2020-02-20 11:00:00,0.0 +2020-02-20 12:00:00,0.0 +2020-02-20 13:00:00,0.0 +2020-02-20 14:00:00,0.0 +2020-02-20 15:00:00,0.0 +2020-02-20 16:00:00,0.0 +2020-02-20 17:00:00,0.0 +2020-02-20 18:00:00,9.889666666666619 +2020-02-20 19:00:00,69.7466666666656 +2020-02-20 20:00:00,108.99511111111278 +2020-02-20 21:00:00,114.71255555555726 +2020-02-20 22:00:00,115.54922222222355 +2020-02-20 23:00:00,111.80922222222306 +2020-02-21 00:00:00,113.1732222222236 +2020-02-21 01:00:00,115.6000000000015 +2020-02-21 02:00:00,114.72655555555664 +2020-02-21 03:00:00,112.99544444444356 +2020-02-21 04:00:00,81.93066666666547 +2020-02-21 05:00:00,26.160555555555607 +2020-02-21 06:00:00,0.0 +2020-02-21 07:00:00,0.0 +2020-02-21 08:00:00,0.0 +2020-02-21 09:00:00,0.0 +2020-02-21 10:00:00,0.0 +2020-02-21 11:00:00,0.0 +2020-02-21 12:00:00,0.0 +2020-02-21 13:00:00,0.0 +2020-02-21 14:00:00,0.0 +2020-02-21 15:00:00,0.0 +2020-02-21 16:00:00,0.0 +2020-02-21 17:00:00,0.0 +2020-02-21 18:00:00,10.421777777777763 +2020-02-21 19:00:00,68.67099999999985 +2020-02-21 20:00:00,107.69000000000115 +2020-02-21 21:00:00,112.8900000000014 +2020-02-21 22:00:00,114.60000000000147 +2020-02-21 23:00:00,114.57555555555703 +2020-02-22 00:00:00,114.65844444444252 +2020-02-22 01:00:00,115.69999999999817 +2020-02-22 02:00:00,115.69999999999817 +2020-02-22 03:00:00,111.93988888888907 +2020-02-22 04:00:00,61.06766666666654 +2020-02-22 05:00:00,18.510888888888985 +2020-02-22 06:00:00,0.0 +2020-02-22 07:00:00,0.0 +2020-02-22 08:00:00,0.0 +2020-02-22 09:00:00,0.0 +2020-02-22 10:00:00,0.0 +2020-02-22 11:00:00,0.0 +2020-02-22 12:00:00,0.0 +2020-02-22 13:00:00,0.0 +2020-02-22 14:00:00,0.0 +2020-02-22 15:00:00,0.0 +2020-02-22 16:00:00,0.0 +2020-02-22 17:00:00,0.0 +2020-02-22 18:00:00,9.383888888888944 +2020-02-22 19:00:00,62.65577777777775 +2020-02-22 20:00:00,102.68688888888757 +2020-02-22 21:00:00,97.47855555555675 +2020-02-22 22:00:00,111.86444444444628 +2020-02-22 23:00:00,112.77400000000159 +2020-02-23 00:00:00,101.06588888888744 +2020-02-23 01:00:00,77.49922222222139 +2020-02-23 02:00:00,48.661333333333715 +2020-02-23 03:00:00,79.31111111111187 +2020-02-23 04:00:00,73.96311111111086 +2020-02-23 05:00:00,16.537444444444947 +2020-02-23 06:00:00,0.06355555555555559 +2020-02-23 07:00:00,0.0 +2020-02-23 08:00:00,0.0 +2020-02-23 09:00:00,0.0 +2020-02-23 10:00:00,0.0 +2020-02-23 11:00:00,0.0 +2020-02-23 12:00:00,0.0 +2020-02-23 13:00:00,0.0 +2020-02-23 14:00:00,0.0 +2020-02-23 15:00:00,0.0 +2020-02-23 16:00:00,0.0 +2020-02-23 17:00:00,0.0 +2020-02-23 18:00:00,9.893555555555542 +2020-02-23 19:00:00,65.45499999999942 +2020-02-23 20:00:00,108.96666666666867 +2020-02-23 21:00:00,115.22666666666848 +2020-02-23 22:00:00,115.79000000000183 +2020-02-23 23:00:00,110.88611111111123 +2020-02-24 00:00:00,102.67433333333368 +2020-02-24 01:00:00,100.74522222222254 +2020-02-24 02:00:00,115.30000000000183 +2020-02-24 03:00:00,110.8825555555574 +2020-02-24 04:00:00,57.605000000000494 +2020-02-24 05:00:00,17.2438888888892 +2020-02-24 06:00:00,0.0 +2020-02-24 07:00:00,0.0 +2020-02-24 08:00:00,0.0 +2020-02-24 09:00:00,0.0 +2020-02-24 10:00:00,0.0 +2020-02-24 11:00:00,0.0 +2020-02-24 12:00:00,0.0 +2020-02-24 13:00:00,0.0 +2020-02-24 14:00:00,0.0 +2020-02-24 15:00:00,0.0 +2020-02-24 16:00:00,0.0 +2020-02-24 17:00:00,0.0 +2020-02-24 18:00:00,8.76777777777782 +2020-02-24 19:00:00,66.24888888888918 +2020-02-24 20:00:00,108.49455555555537 +2020-02-24 21:00:00,112.41100000000195 +2020-02-24 22:00:00,94.59988888888809 +2020-02-24 23:00:00,103.218555555555 +2020-02-25 00:00:00,111.3335555555552 +2020-02-25 01:00:00,62.33011111111078 +2020-02-25 02:00:00,71.89977777777771 +2020-02-25 03:00:00,49.715333333333774 +2020-02-25 04:00:00,25.63822222222245 +2020-02-25 05:00:00,4.574444444444446 +2020-02-25 06:00:00,0.0 +2020-02-25 07:00:00,0.0 +2020-02-25 08:00:00,0.0 +2020-02-25 09:00:00,0.0 +2020-02-25 10:00:00,0.0 +2020-02-25 11:00:00,0.0 +2020-02-25 12:00:00,0.0 +2020-02-25 13:00:00,0.0 +2020-02-25 14:00:00,0.0 +2020-02-25 15:00:00,0.0 +2020-02-25 16:00:00,0.0 +2020-02-25 17:00:00,0.0 +2020-02-25 18:00:00,6.498000000000019 +2020-02-25 19:00:00,39.0684444444445 +2020-02-25 20:00:00,93.79222222222172 +2020-02-25 21:00:00,102.97455555555442 +2020-02-25 22:00:00,111.32944444444378 +2020-02-25 23:00:00,100.02644444444368 +2020-02-26 00:00:00,67.67299999999955 +2020-02-26 01:00:00,52.48844444444502 +2020-02-26 02:00:00,69.90455555555505 +2020-02-26 03:00:00,29.94077777777771 +2020-02-26 04:00:00,44.55488888888931 +2020-02-26 05:00:00,15.23700000000007 +2020-02-26 06:00:00,0.1 +2020-02-26 07:00:00,0.0 +2020-02-26 08:00:00,0.0 +2020-02-26 09:00:00,0.0 +2020-02-26 10:00:00,0.0 +2020-02-26 11:00:00,0.0 +2020-02-26 12:00:00,0.0 +2020-02-26 13:00:00,0.0 +2020-02-26 14:00:00,0.0 +2020-02-26 15:00:00,0.0 +2020-02-26 16:00:00,0.0 +2020-02-26 17:00:00,0.0 +2020-02-26 18:00:00,11.63066666666676 +2020-02-26 19:00:00,71.8498888888892 +2020-02-26 20:00:00,108.60777777777778 +2020-02-26 21:00:00,112.67444444444445 +2020-02-26 22:00:00,114.29933333333491 +2020-02-26 23:00:00,114.65755555555687 +2020-02-27 00:00:00,98.08866666666744 +2020-02-27 01:00:00,89.80322222222266 +2020-02-27 02:00:00,82.73844444444391 +2020-02-27 03:00:00,31.523666666666827 +2020-02-27 04:00:00,60.019444444443714 +2020-02-27 05:00:00,13.737666666666394 +2020-02-27 06:00:00,0.0 +2020-02-27 07:00:00,0.0 +2020-02-27 08:00:00,0.0 +2020-02-27 09:00:00,0.0 +2020-02-27 10:00:00,0.0 +2020-02-27 11:00:00,0.0 +2020-02-27 12:00:00,0.0 +2020-02-27 13:00:00,0.0 +2020-02-27 14:00:00,0.0 +2020-02-27 15:00:00,0.0 +2020-02-27 16:00:00,0.0 +2020-02-27 17:00:00,0.0 +2020-02-27 18:00:00,6.077777777777767 +2020-02-27 19:00:00,61.553777777777086 +2020-02-27 20:00:00,101.76122222222224 +2020-02-27 21:00:00,60.87733333333382 +2020-02-27 22:00:00,84.72288888888967 +2020-02-27 23:00:00,108.35622222222293 +2020-02-28 00:00:00,40.28999999999948 +2020-02-28 01:00:00,34.129666666666175 +2020-02-28 02:00:00,24.836555555555318 +2020-02-28 03:00:00,17.50422222222245 +2020-02-28 04:00:00,20.91833333333343 +2020-02-28 05:00:00,3.0545555555556048 +2020-02-28 06:00:00,0.0 +2020-02-28 07:00:00,0.0 +2020-02-28 08:00:00,0.0 +2020-02-28 09:00:00,0.0 +2020-02-28 10:00:00,0.0 +2020-02-28 11:00:00,0.0 +2020-02-28 12:00:00,0.0 +2020-02-28 13:00:00,0.0 +2020-02-28 14:00:00,0.0 +2020-02-28 15:00:00,0.0 +2020-02-28 16:00:00,0.0 +2020-02-28 17:00:00,0.0 +2020-02-28 18:00:00,4.541111111111111 +2020-02-28 19:00:00,20.578222222222323 +2020-02-28 20:00:00,54.64533333333372 +2020-02-28 21:00:00,52.92399999999914 +2020-02-28 22:00:00,89.12144444444425 +2020-02-28 23:00:00,71.87811111111152 +2020-02-29 00:00:00,48.48588888888878 +2020-02-29 01:00:00,79.06511111111102 +2020-02-29 02:00:00,73.64488888888951 +2020-02-29 03:00:00,86.96622222222221 +2020-02-29 04:00:00,17.079444444444654 +2020-02-29 05:00:00,16.224444444444483 +2020-02-29 06:00:00,0.0 +2020-02-29 07:00:00,0.0 +2020-02-29 08:00:00,0.0 +2020-02-29 09:00:00,0.0 +2020-02-29 10:00:00,0.0 +2020-02-29 11:00:00,0.0 +2020-02-29 12:00:00,0.0 +2020-02-29 13:00:00,0.0 +2020-02-29 14:00:00,0.0 +2020-02-29 15:00:00,0.0 +2020-02-29 16:00:00,0.0 +2020-02-29 17:00:00,0.0 +2020-02-29 18:00:00,8.330222222222215 +2020-02-29 19:00:00,25.345222222222436 +2020-02-29 20:00:00,98.41255555555615 +2020-02-29 21:00:00,106.15211111110995 +2020-02-29 22:00:00,90.58611111111017 +2020-02-29 23:00:00,88.8042222222229 +2020-03-01 00:00:00,107.86655555555372 +2020-03-01 01:00:00,94.34033333333305 +2020-03-01 02:00:00,115.62277777777638 +2020-03-01 03:00:00,103.51988888888945 +2020-03-01 04:00:00,61.255444444444585 +2020-03-01 05:00:00,11.934555555555827 +2020-03-01 06:00:00,0.0 +2020-03-01 07:00:00,0.0 +2020-03-01 08:00:00,0.0 +2020-03-01 09:00:00,0.0 +2020-03-01 10:00:00,0.0 +2020-03-01 11:00:00,0.0 +2020-03-01 12:00:00,0.0 +2020-03-01 13:00:00,0.0 +2020-03-01 14:00:00,0.0 +2020-03-01 15:00:00,0.0 +2020-03-01 16:00:00,0.0 +2020-03-01 17:00:00,0.0 +2020-03-01 18:00:00,1.0845555555555582 +2020-03-01 19:00:00,22.445111111111007 +2020-03-01 20:00:00,16.29900000000001 +2020-03-01 21:00:00,33.0600000000001 +2020-03-01 22:00:00,53.134333333333466 +2020-03-01 23:00:00,53.213666666666406 +2020-03-02 00:00:00,59.80100000000013 +2020-03-02 01:00:00,98.59422222222224 +2020-03-02 02:00:00,105.98311111111008 +2020-03-02 03:00:00,91.4006666666667 +2020-03-02 04:00:00,45.68344444444393 +2020-03-02 05:00:00,7.050222222222233 +2020-03-02 06:00:00,0.0 +2020-03-02 07:00:00,0.0 +2020-03-02 08:00:00,0.0 +2020-03-02 09:00:00,0.0 +2020-03-02 10:00:00,0.0 +2020-03-02 11:00:00,0.0 +2020-03-02 12:00:00,0.0 +2020-03-02 13:00:00,0.0 +2020-03-02 14:00:00,0.0 +2020-03-02 15:00:00,0.0 +2020-03-02 16:00:00,0.0 +2020-03-02 17:00:00,0.0 +2020-03-02 18:00:00,4.237777777777778 +2020-03-02 19:00:00,27.86811111111132 +2020-03-02 20:00:00,53.40466666666632 +2020-03-02 21:00:00,80.64855555555529 +2020-03-02 22:00:00,95.56366666666663 +2020-03-02 23:00:00,92.01300000000056 +2020-03-03 00:00:00,81.65066666666763 +2020-03-03 01:00:00,77.79811111111023 +2020-03-03 02:00:00,84.41755555555473 +2020-03-03 03:00:00,74.21866666666646 +2020-03-03 04:00:00,25.760777777777992 +2020-03-03 05:00:00,2.6311111111111494 +2020-03-03 06:00:00,0.0 +2020-03-03 07:00:00,0.0 +2020-03-03 08:00:00,0.0 +2020-03-03 09:00:00,0.0 +2020-03-03 10:00:00,0.0 +2020-03-03 11:00:00,0.0 +2020-03-03 12:00:00,0.0 +2020-03-03 13:00:00,0.0 +2020-03-03 14:00:00,0.0 +2020-03-03 15:00:00,0.0 +2020-03-03 16:00:00,0.0 +2020-03-03 17:00:00,0.0 +2020-03-03 18:00:00,4.838999999999986 +2020-03-03 19:00:00,33.511555555555624 +2020-03-03 20:00:00,68.99433333333415 +2020-03-03 21:00:00,107.48266666666716 +2020-03-03 22:00:00,108.30111111111299 +2020-03-03 23:00:00,111.57522222222222 +2020-03-04 00:00:00,94.0796666666668 +2020-03-04 01:00:00,80.22600000000007 +2020-03-04 02:00:00,79.35388888888781 +2020-03-04 03:00:00,70.83800000000029 +2020-03-04 04:00:00,27.330333333333236 +2020-03-04 05:00:00,5.860000000000009 +2020-03-04 06:00:00,0.0 +2020-03-04 07:00:00,0.0 +2020-03-04 08:00:00,0.0 +2020-03-04 09:00:00,0.0 +2020-03-04 10:00:00,0.0 +2020-03-04 11:00:00,0.0 +2020-03-04 12:00:00,0.0 +2020-03-04 13:00:00,0.0 +2020-03-04 14:00:00,0.0 +2020-03-04 15:00:00,0.0 +2020-03-04 16:00:00,0.0 +2020-03-04 17:00:00,0.0 +2020-03-04 18:00:00,3.7567777777777738 +2020-03-04 19:00:00,15.261555555555747 +2020-03-04 20:00:00,52.78399999999953 +2020-03-04 21:00:00,67.04600000000019 +2020-03-04 22:00:00,42.96533333333256 +2020-03-04 23:00:00,37.508222222221995 +2020-03-05 00:00:00,37.31611111111107 +2020-03-05 01:00:00,49.139666666666955 +2020-03-05 02:00:00,39.166666666667304 +2020-03-05 03:00:00,36.10388888888859 +2020-03-05 04:00:00,18.689222222222625 +2020-03-05 05:00:00,2.2115555555555235 +2020-03-05 06:00:00,0.0 +2020-03-05 07:00:00,0.0 +2020-03-05 08:00:00,0.0 +2020-03-05 09:00:00,0.0 +2020-03-05 10:00:00,0.0 +2020-03-05 11:00:00,0.0 +2020-03-05 12:00:00,0.0 +2020-03-05 13:00:00,0.0 +2020-03-05 14:00:00,0.0 +2020-03-05 15:00:00,0.0 +2020-03-05 16:00:00,0.0 +2020-03-05 17:00:00,0.0 +2020-03-05 18:00:00,2.1966666666666668 +2020-03-05 19:00:00,25.533222222222207 +2020-03-05 20:00:00,57.43377777777755 +2020-03-05 21:00:00,102.8251111111114 +2020-03-05 22:00:00,50.373555555554766 +2020-03-05 23:00:00,74.16900000000052 +2020-03-06 00:00:00,101.32133333333344 +2020-03-06 01:00:00,93.0658888888886 +2020-03-06 02:00:00,91.61155555555524 +2020-03-06 03:00:00,94.28099999999999 +2020-03-06 04:00:00,65.76833333333245 +2020-03-06 05:00:00,8.305999999999981 +2020-03-06 06:00:00,0.0 +2020-03-06 07:00:00,0.0 +2020-03-06 08:00:00,0.0 +2020-03-06 09:00:00,0.0 +2020-03-06 10:00:00,0.0 +2020-03-06 11:00:00,0.0 +2020-03-06 12:00:00,0.0 +2020-03-06 13:00:00,0.0 +2020-03-06 14:00:00,0.0 +2020-03-06 15:00:00,0.0 +2020-03-06 16:00:00,0.0 +2020-03-06 17:00:00,0.0 +2020-03-06 18:00:00,9.479777777777787 +2020-03-06 19:00:00,64.19033333333368 +2020-03-06 20:00:00,103.15222222222222 +2020-03-06 21:00:00,107.92966666666692 +2020-03-06 22:00:00,94.32355555555533 +2020-03-06 23:00:00,98.70255555555666 +2020-03-07 00:00:00,110.59099999999886 +2020-03-07 01:00:00,95.89755555555557 +2020-03-07 02:00:00,111.6531111111111 +2020-03-07 03:00:00,103.38755555555386 +2020-03-07 04:00:00,55.9884444444435 +2020-03-07 05:00:00,12.088444444444503 +2020-03-07 06:00:00,0.0 +2020-03-07 07:00:00,0.0 +2020-03-07 08:00:00,0.0 +2020-03-07 09:00:00,0.0 +2020-03-07 10:00:00,0.0 +2020-03-07 11:00:00,0.0 +2020-03-07 12:00:00,0.0 +2020-03-07 13:00:00,0.0 +2020-03-07 14:00:00,0.0 +2020-03-07 15:00:00,0.0 +2020-03-07 16:00:00,0.0 +2020-03-07 17:00:00,0.0 +2020-03-07 18:00:00,9.683777777777822 +2020-03-07 19:00:00,65.45177777777818 +2020-03-07 20:00:00,103.05111111111111 +2020-03-07 21:00:00,106.8206666666676 +2020-03-07 22:00:00,111.21000000000133 +2020-03-07 23:00:00,111.61222222222358 +2020-03-08 00:00:00,114.34777777777862 +2020-03-08 01:00:00,111.609444444443 +2020-03-08 02:00:00,93.51122222222259 +2020-03-08 03:00:00,76.23911111111089 +2020-03-08 04:00:00,59.682222222221455 +2020-03-08 05:00:00,12.500999999999674 +2020-03-08 06:00:00,0.0 +2020-03-08 07:00:00,0.0 +2020-03-08 08:00:00,0.0 +2020-03-08 09:00:00,0.0 +2020-03-08 10:00:00,0.0 +2020-03-08 11:00:00,0.0 +2020-03-08 12:00:00,0.0 +2020-03-08 13:00:00,0.0 +2020-03-08 14:00:00,0.0 +2020-03-08 15:00:00,0.0 +2020-03-08 16:00:00,0.0 +2020-03-08 17:00:00,0.0 +2020-03-08 18:00:00,9.72477777777775 +2020-03-08 19:00:00,67.30844444444408 +2020-03-08 20:00:00,104.28666666666835 +2020-03-08 21:00:00,108.74777777777952 +2020-03-08 22:00:00,105.9609999999997 +2020-03-08 23:00:00,98.0758888888882 +2020-03-09 00:00:00,110.20177777777764 +2020-03-09 01:00:00,93.24944444444468 +2020-03-09 02:00:00,91.13255555555621 +2020-03-09 03:00:00,105.8778888888871 +2020-03-09 04:00:00,63.1002222222213 +2020-03-09 05:00:00,10.583666666666696 +2020-03-09 06:00:00,0.0 +2020-03-09 07:00:00,0.0 +2020-03-09 08:00:00,0.0 +2020-03-09 09:00:00,0.0 +2020-03-09 10:00:00,0.0 +2020-03-09 11:00:00,0.0 +2020-03-09 12:00:00,0.0 +2020-03-09 13:00:00,0.0 +2020-03-09 14:00:00,0.0 +2020-03-09 15:00:00,0.0 +2020-03-09 16:00:00,0.0 +2020-03-09 17:00:00,0.0 +2020-03-09 18:00:00,9.953777777777836 +2020-03-09 19:00:00,67.06422222222255 +2020-03-09 20:00:00,103.59333333333333 +2020-03-09 21:00:00,108.55166666666781 +2020-03-09 22:00:00,110.16277777777726 +2020-03-09 23:00:00,110.10111111111111 +2020-03-10 00:00:00,111.16166666666665 +2020-03-10 01:00:00,99.85466666666645 +2020-03-10 02:00:00,74.45411111111133 +2020-03-10 03:00:00,51.79444444444441 +2020-03-10 04:00:00,54.53166666666777 +2020-03-10 05:00:00,9.228222222222236 +2020-03-10 06:00:00,0.0 +2020-03-10 07:00:00,0.0 +2020-03-10 08:00:00,0.0 +2020-03-10 09:00:00,0.0 +2020-03-10 10:00:00,0.0 +2020-03-10 11:00:00,0.0 +2020-03-10 12:00:00,0.0 +2020-03-10 13:00:00,0.0 +2020-03-10 14:00:00,0.0 +2020-03-10 15:00:00,0.0 +2020-03-10 16:00:00,0.0 +2020-03-10 17:00:00,0.0 +2020-03-10 18:00:00,8.512666666666654 +2020-03-10 19:00:00,66.46333333333301 +2020-03-10 20:00:00,102.4952222222227 +2020-03-10 21:00:00,106.9833333333316 +2020-03-10 22:00:00,109.40222222222046 +2020-03-10 23:00:00,110.41444444444267 +2020-03-11 00:00:00,105.1162222222217 +2020-03-11 01:00:00,95.00788888888925 +2020-03-11 02:00:00,52.064555555555934 +2020-03-11 03:00:00,42.31700000000021 +2020-03-11 04:00:00,43.574333333333286 +2020-03-11 05:00:00,9.074222222222248 +2020-03-11 06:00:00,0.0 +2020-03-11 07:00:00,0.0 +2020-03-11 08:00:00,0.0 +2020-03-11 09:00:00,0.0 +2020-03-11 10:00:00,0.0 +2020-03-11 11:00:00,0.0 +2020-03-11 12:00:00,0.0 +2020-03-11 13:00:00,0.0 +2020-03-11 14:00:00,0.0 +2020-03-11 15:00:00,0.0 +2020-03-11 16:00:00,0.0 +2020-03-11 17:00:00,0.0 +2020-03-11 18:00:00,2.6844444444444444 +2020-03-11 19:00:00,55.18644444444454 +2020-03-11 20:00:00,92.23622222222204 +2020-03-11 21:00:00,70.3700000000004 +2020-03-11 22:00:00,96.25122222222299 +2020-03-11 23:00:00,92.3634444444446 +2020-03-12 00:00:00,101.78688888888824 +2020-03-12 01:00:00,103.58422222222158 +2020-03-12 02:00:00,109.49955555555647 +2020-03-12 03:00:00,97.87622222222177 +2020-03-12 04:00:00,52.84122222222258 +2020-03-12 05:00:00,2.497777777777778 +2020-03-12 06:00:00,0.0 +2020-03-12 07:00:00,0.0 +2020-03-12 08:00:00,0.0 +2020-03-12 09:00:00,0.0 +2020-03-12 10:00:00,0.0 +2020-03-12 11:00:00,0.0 +2020-03-12 12:00:00,0.0 +2020-03-12 13:00:00,0.0 +2020-03-12 14:00:00,0.0 +2020-03-12 15:00:00,0.0 +2020-03-12 16:00:00,0.0 +2020-03-12 17:00:00,0.0 +2020-03-12 18:00:00,2.760666666666662 +2020-03-12 19:00:00,22.030111111111204 +2020-03-12 20:00:00,25.909333333333656 +2020-03-12 21:00:00,66.34344444444389 +2020-03-12 22:00:00,86.8468888888878 +2020-03-12 23:00:00,90.58033333333324 +2020-03-13 00:00:00,110.19788888888989 +2020-03-13 01:00:00,90.91799999999976 +2020-03-13 02:00:00,34.71533333333376 +2020-03-13 03:00:00,87.90466666666644 +2020-03-13 04:00:00,10.906777777777648 +2020-03-13 05:00:00,3.446444444444486 +2020-03-13 06:00:00,0.0 +2020-03-13 07:00:00,0.0 +2020-03-13 08:00:00,0.0 +2020-03-13 09:00:00,0.0 +2020-03-13 10:00:00,0.0 +2020-03-13 11:00:00,0.0 +2020-03-13 12:00:00,0.0 +2020-03-13 13:00:00,0.0 +2020-03-13 14:00:00,0.0 +2020-03-13 15:00:00,0.0 +2020-03-13 16:00:00,0.0 +2020-03-13 17:00:00,0.0 +2020-03-13 18:00:00,9.315444444444472 +2020-03-13 19:00:00,54.87244444444453 +2020-03-13 20:00:00,89.7203333333328 +2020-03-13 21:00:00,101.86222222222054 +2020-03-13 22:00:00,107.44555555555381 +2020-03-13 23:00:00,109.39555555555381 +2020-03-14 00:00:00,104.63722222222263 +2020-03-14 01:00:00,65.0996666666659 +2020-03-14 02:00:00,69.60999999999994 +2020-03-14 03:00:00,83.28766666666574 +2020-03-14 04:00:00,33.149555555555374 +2020-03-14 05:00:00,4.073888888888889 +2020-03-14 06:00:00,0.0 +2020-03-14 07:00:00,0.0 +2020-03-14 08:00:00,0.0 +2020-03-14 09:00:00,0.0 +2020-03-14 10:00:00,0.0 +2020-03-14 11:00:00,0.0 +2020-03-14 12:00:00,0.0 +2020-03-14 13:00:00,0.0 +2020-03-14 14:00:00,0.0 +2020-03-14 15:00:00,0.0 +2020-03-14 16:00:00,0.0 +2020-03-14 17:00:00,0.0 +2020-03-14 18:00:00,7.159333333333342 +2020-03-14 19:00:00,62.02300000000021 +2020-03-14 20:00:00,96.2 +2020-03-14 21:00:00,103.66555555555556 +2020-03-14 22:00:00,108.77122222222374 +2020-03-14 23:00:00,108.87566666666606 +2020-03-15 00:00:00,113.06966666666492 +2020-03-15 01:00:00,114.63222222222039 +2020-03-15 02:00:00,100.71811111111103 +2020-03-15 03:00:00,65.0272222222224 +2020-03-15 04:00:00,35.15388888888859 +2020-03-15 05:00:00,4.500999999999991 +2020-03-15 06:00:00,0.0 +2020-03-15 07:00:00,0.0 +2020-03-15 08:00:00,0.0 +2020-03-15 09:00:00,0.0 +2020-03-15 10:00:00,0.0 +2020-03-15 11:00:00,0.0 +2020-03-15 12:00:00,0.0 +2020-03-15 13:00:00,0.0 +2020-03-15 14:00:00,0.0 +2020-03-15 15:00:00,0.0 +2020-03-15 16:00:00,0.0 +2020-03-15 17:00:00,0.0 +2020-03-15 18:00:00,10.230777777777837 +2020-03-15 19:00:00,66.38788888888928 +2020-03-15 20:00:00,101.12444444444358 +2020-03-15 21:00:00,105.83066666666664 +2020-03-15 22:00:00,107.2411111111113 +2020-03-15 23:00:00,108.82777777777778 +2020-03-16 00:00:00,111.98211111110936 +2020-03-16 01:00:00,110.65011111111103 +2020-03-16 02:00:00,114.08088888889066 +2020-03-16 03:00:00,93.30388888888919 +2020-03-16 04:00:00,33.217888888889114 +2020-03-16 05:00:00,7.705111111111004 +2020-03-16 06:00:00,0.0 +2020-03-16 07:00:00,0.0 +2020-03-16 08:00:00,0.0 +2020-03-16 09:00:00,0.0 +2020-03-16 10:00:00,0.0 +2020-03-16 11:00:00,0.0 +2020-03-16 12:00:00,0.0 +2020-03-16 13:00:00,0.0 +2020-03-16 14:00:00,0.0 +2020-03-16 15:00:00,0.0 +2020-03-16 16:00:00,0.0 +2020-03-16 17:00:00,0.0 +2020-03-16 18:00:00,10.188444444444412 +2020-03-16 19:00:00,65.39833333333237 +2020-03-16 20:00:00,99.27777777777617 +2020-03-16 21:00:00,104.5511111111094 +2020-03-16 22:00:00,106.36444444444322 +2020-03-16 23:00:00,108.6737777777761 +2020-03-17 00:00:00,107.19388888888813 +2020-03-17 01:00:00,98.91133333333323 +2020-03-17 02:00:00,105.06633333333262 +2020-03-17 03:00:00,37.58077777777796 +2020-03-17 04:00:00,17.663333333333128 +2020-03-17 05:00:00,1.9572222222222415 +2020-03-17 06:00:00,0.0 +2020-03-17 07:00:00,0.0 +2020-03-17 08:00:00,0.0 +2020-03-17 09:00:00,0.0 +2020-03-17 10:00:00,0.0 +2020-03-17 11:00:00,0.0 +2020-03-17 12:00:00,0.0 +2020-03-17 13:00:00,0.0 +2020-03-17 14:00:00,0.0 +2020-03-17 15:00:00,0.0 +2020-03-17 16:00:00,0.0 +2020-03-17 17:00:00,0.0 +2020-03-17 18:00:00,9.682444444444409 +2020-03-17 19:00:00,52.27777777777781 +2020-03-17 20:00:00,65.52877777777836 +2020-03-17 21:00:00,90.34588888888786 +2020-03-17 22:00:00,107.42299999999871 +2020-03-17 23:00:00,109.40511111110942 +2020-03-18 00:00:00,113.02722222222046 +2020-03-18 01:00:00,113.03444444444263 +2020-03-18 02:00:00,100.84155555555652 +2020-03-18 03:00:00,24.61666666666694 +2020-03-18 04:00:00,31.01322222222192 +2020-03-18 05:00:00,2.8817777777777684 +2020-03-18 06:00:00,0.0 +2020-03-18 07:00:00,0.0 +2020-03-18 08:00:00,0.0 +2020-03-18 09:00:00,0.0 +2020-03-18 10:00:00,0.0 +2020-03-18 11:00:00,0.0 +2020-03-18 12:00:00,0.0 +2020-03-18 13:00:00,0.0 +2020-03-18 14:00:00,0.0 +2020-03-18 15:00:00,0.0 +2020-03-18 16:00:00,0.0 +2020-03-18 17:00:00,0.0 +2020-03-18 18:00:00,9.39577777777782 +2020-03-18 19:00:00,62.02722222222233 +2020-03-18 20:00:00,96.63366666666728 +2020-03-18 21:00:00,80.7513333333337 +2020-03-18 22:00:00,87.12166666666747 +2020-03-18 23:00:00,78.10122222222337 +2020-03-19 00:00:00,87.10822222222266 +2020-03-19 01:00:00,104.8197777777767 +2020-03-19 02:00:00,107.8101111111095 +2020-03-19 03:00:00,95.40811111111171 +2020-03-19 04:00:00,49.39100000000066 +2020-03-19 05:00:00,4.15533333333329 +2020-03-19 06:00:00,0.0 +2020-03-19 07:00:00,0.0 +2020-03-19 08:00:00,0.0 +2020-03-19 09:00:00,0.0 +2020-03-19 10:00:00,0.0 +2020-03-19 11:00:00,0.0 +2020-03-19 12:00:00,0.0 +2020-03-19 13:00:00,0.0 +2020-03-19 14:00:00,0.0 +2020-03-19 15:00:00,0.0 +2020-03-19 16:00:00,0.0 +2020-03-19 17:00:00,0.0 +2020-03-19 18:00:00,5.244333333333383 +2020-03-19 19:00:00,32.776333333333014 +2020-03-19 20:00:00,65.34933333333333 +2020-03-19 21:00:00,98.01922222222183 +2020-03-19 22:00:00,104.94444444444444 +2020-03-19 23:00:00,106.20044444444551 +2020-03-20 00:00:00,108.16777777777898 +2020-03-20 01:00:00,109.93777777777906 +2020-03-20 02:00:00,108.6255555555568 +2020-03-20 03:00:00,94.60144444444495 +2020-03-20 04:00:00,52.229777777778544 +2020-03-20 05:00:00,4.467222222222274 +2020-03-20 06:00:00,0.0 +2020-03-20 07:00:00,0.0 +2020-03-20 08:00:00,0.0 +2020-03-20 09:00:00,0.0 +2020-03-20 10:00:00,0.0 +2020-03-20 11:00:00,0.0 +2020-03-20 12:00:00,0.0 +2020-03-20 13:00:00,0.0 +2020-03-20 14:00:00,0.0 +2020-03-20 15:00:00,0.0 +2020-03-20 16:00:00,0.0 +2020-03-20 17:00:00,0.0 +2020-03-20 18:00:00,2.7733333333333334 +2020-03-20 19:00:00,61.2758888888882 +2020-03-20 20:00:00,93.15022222222181 +2020-03-20 21:00:00,50.12922222222192 +2020-03-20 22:00:00,103.43655555555384 +2020-03-20 23:00:00,103.2544444444439 +2020-03-21 00:00:00,110.95966666666655 +2020-03-21 01:00:00,108.60877777777772 +2020-03-21 02:00:00,63.24722222222233 +2020-03-21 03:00:00,43.46100000000031 +2020-03-21 04:00:00,37.95911111111162 +2020-03-21 05:00:00,3.880777777777757 +2020-03-21 06:00:00,0.0 +2020-03-21 07:00:00,0.0 +2020-03-21 08:00:00,0.0 +2020-03-21 09:00:00,0.0 +2020-03-21 10:00:00,0.0 +2020-03-21 11:00:00,0.0 +2020-03-21 12:00:00,0.0 +2020-03-21 13:00:00,0.0 +2020-03-21 14:00:00,0.0 +2020-03-21 15:00:00,0.0 +2020-03-21 16:00:00,0.0 +2020-03-21 17:00:00,0.0 +2020-03-21 18:00:00,4.3774444444444285 +2020-03-21 19:00:00,18.580666666666726 +2020-03-21 20:00:00,72.07211111111131 +2020-03-21 21:00:00,85.21466666666637 +2020-03-21 22:00:00,90.24566666666763 +2020-03-21 23:00:00,88.39555555555559 +2020-03-22 00:00:00,66.53511111111257 +2020-03-22 01:00:00,90.36966666666702 +2020-03-22 02:00:00,104.1678888888878 +2020-03-22 03:00:00,67.56677777777894 +2020-03-22 04:00:00,7.218888888889039 +2020-03-22 05:00:00,0.7896666666666643 +2020-03-22 06:00:00,0.0 +2020-03-22 07:00:00,0.0 +2020-03-22 08:00:00,0.0 +2020-03-22 09:00:00,0.0 +2020-03-22 10:00:00,0.0 +2020-03-22 11:00:00,0.0 +2020-03-22 12:00:00,0.0 +2020-03-22 13:00:00,0.0 +2020-03-22 14:00:00,0.0 +2020-03-22 15:00:00,0.0 +2020-03-22 16:00:00,0.0 +2020-03-22 17:00:00,0.0 +2020-03-22 18:00:00,9.471111111111135 +2020-03-22 19:00:00,63.57777777777793 +2020-03-22 20:00:00,99.02222222222223 +2020-03-22 21:00:00,103.37000000000063 +2020-03-22 22:00:00,102.78122222222099 +2020-03-22 23:00:00,108.38999999999825 +2020-03-23 00:00:00,108.01199999999953 +2020-03-23 01:00:00,101.45355555555578 +2020-03-23 02:00:00,69.05377777777804 +2020-03-23 03:00:00,72.74644444444407 +2020-03-23 04:00:00,10.209777777777825 +2020-03-23 05:00:00,1.231111111111111 +2020-03-23 06:00:00,0.0 +2020-03-23 07:00:00,0.0 +2020-03-23 08:00:00,0.0 +2020-03-23 09:00:00,0.0 +2020-03-23 10:00:00,0.0 +2020-03-23 11:00:00,0.0 +2020-03-23 12:00:00,0.0 +2020-03-23 13:00:00,0.0 +2020-03-23 14:00:00,0.0 +2020-03-23 15:00:00,0.0 +2020-03-23 16:00:00,0.0 +2020-03-23 17:00:00,0.0 +2020-03-23 18:00:00,8.926777777777817 +2020-03-23 19:00:00,62.22055555555596 +2020-03-23 20:00:00,95.95511111111112 +2020-03-23 21:00:00,100.23000000000083 +2020-03-23 22:00:00,101.81333333333424 +2020-03-23 23:00:00,96.2495555555559 +2020-03-24 00:00:00,86.05266666666598 +2020-03-24 01:00:00,66.17877777777734 +2020-03-24 02:00:00,47.334888888889374 +2020-03-24 03:00:00,69.78377777777752 +2020-03-24 04:00:00,33.398333333333106 +2020-03-24 05:00:00,0.8019999999999965 +2020-03-24 06:00:00,0.0 +2020-03-24 07:00:00,0.0 +2020-03-24 08:00:00,0.0 +2020-03-24 09:00:00,0.0 +2020-03-24 10:00:00,0.0 +2020-03-24 11:00:00,0.0 +2020-03-24 12:00:00,0.0 +2020-03-24 13:00:00,0.0 +2020-03-24 14:00:00,0.0 +2020-03-24 15:00:00,0.0 +2020-03-24 16:00:00,0.0 +2020-03-24 17:00:00,0.0 +2020-03-24 18:00:00,9.827222222222284 +2020-03-24 19:00:00,60.038000000000444 +2020-03-24 20:00:00,92.92011111111199 +2020-03-24 21:00:00,86.03744444444463 +2020-03-24 22:00:00,98.12344444444271 +2020-03-24 23:00:00,77.76888888888851 +2020-03-25 00:00:00,74.20022222222256 +2020-03-25 01:00:00,63.50588888888898 +2020-03-25 02:00:00,33.79777777777823 +2020-03-25 03:00:00,24.41988888888919 +2020-03-25 04:00:00,9.541111111111137 +2020-03-25 05:00:00,0.5880000000000013 +2020-03-25 06:00:00,0.0 +2020-03-25 07:00:00,0.0 +2020-03-25 08:00:00,0.0 +2020-03-25 09:00:00,0.0 +2020-03-25 10:00:00,0.0 +2020-03-25 11:00:00,0.0 +2020-03-25 12:00:00,0.0 +2020-03-25 13:00:00,0.0 +2020-03-25 14:00:00,0.0 +2020-03-25 15:00:00,0.0 +2020-03-25 16:00:00,0.0 +2020-03-25 17:00:00,0.0 +2020-03-25 18:00:00,4.10233333333333 +2020-03-25 19:00:00,35.87477777777779 +2020-03-25 20:00:00,90.97777777777775 +2020-03-25 21:00:00,70.92199999999923 +2020-03-25 22:00:00,74.6468888888893 +2020-03-25 23:00:00,90.41077777777826 +2020-03-26 00:00:00,104.73866666666645 +2020-03-26 01:00:00,46.772222222222545 +2020-03-26 02:00:00,1.7644444444444445 +2020-03-26 03:00:00,18.40455555555558 +2020-03-26 04:00:00,19.657111111110858 +2020-03-26 05:00:00,0.8686666666666634 +2020-03-26 06:00:00,0.0 +2020-03-26 07:00:00,0.0 +2020-03-26 08:00:00,0.0 +2020-03-26 09:00:00,0.0 +2020-03-26 10:00:00,0.0 +2020-03-26 11:00:00,0.0 +2020-03-26 12:00:00,0.0 +2020-03-26 13:00:00,0.0 +2020-03-26 14:00:00,0.0 +2020-03-26 15:00:00,0.0 +2020-03-26 16:00:00,0.0 +2020-03-26 17:00:00,0.0 +2020-03-26 18:00:00,6.153444444444458 +2020-03-26 19:00:00,23.983777777777615 +2020-03-26 20:00:00,75.43211111111164 +2020-03-26 21:00:00,79.62066666666728 +2020-03-26 22:00:00,76.8830000000005 +2020-03-26 23:00:00,99.18033333333294 +2020-03-27 00:00:00,97.79077777777827 +2020-03-27 01:00:00,95.84322222222293 +2020-03-27 02:00:00,97.63766666666666 +2020-03-27 03:00:00,86.68211111111107 +2020-03-27 04:00:00,26.304111111110853 +2020-03-27 05:00:00,2.6283333333333334 +2020-03-27 06:00:00,0.0 +2020-03-27 07:00:00,0.0 +2020-03-27 08:00:00,0.0 +2020-03-27 09:00:00,0.0 +2020-03-27 10:00:00,0.0 +2020-03-27 11:00:00,0.0 +2020-03-27 12:00:00,0.0 +2020-03-27 13:00:00,0.0 +2020-03-27 14:00:00,0.0 +2020-03-27 15:00:00,0.0 +2020-03-27 16:00:00,0.0 +2020-03-27 17:00:00,0.0 +2020-03-27 18:00:00,4.341666666666658 +2020-03-27 19:00:00,54.70888888888904 +2020-03-27 20:00:00,95.55133333333143 +2020-03-27 21:00:00,101.07011111111042 +2020-03-27 22:00:00,99.50544444444454 +2020-03-27 23:00:00,94.90955555555601 +2020-03-28 00:00:00,100.19999999999834 +2020-03-28 01:00:00,102.4564444444469 +2020-03-28 02:00:00,90.75877777777659 +2020-03-28 03:00:00,85.7673333333338 +2020-03-28 04:00:00,39.41399999999971 +2020-03-28 05:00:00,1.8727777777777599 +2020-03-28 06:00:00,0.0 +2020-03-28 07:00:00,0.0 +2020-03-28 08:00:00,0.0 +2020-03-28 09:00:00,0.0 +2020-03-28 10:00:00,0.0 +2020-03-28 11:00:00,0.0 +2020-03-28 12:00:00,0.0 +2020-03-28 13:00:00,0.0 +2020-03-28 14:00:00,0.0 +2020-03-28 15:00:00,0.0 +2020-03-28 16:00:00,0.0 +2020-03-28 17:00:00,0.0 +2020-03-28 18:00:00,6.355999999999974 +2020-03-28 19:00:00,54.957666666666704 +2020-03-28 20:00:00,94.06300000000097 +2020-03-28 21:00:00,99.30666666666745 +2020-03-28 22:00:00,100.43244444444522 +2020-03-28 23:00:00,99.65044444444537 +2020-03-29 00:00:00,83.55111111111073 +2020-03-29 01:00:00,88.89144444444342 +2020-03-29 02:00:00,83.75211111111001 +2020-03-29 03:00:00,83.12833333333272 +2020-03-29 04:00:00,30.525444444444652 +2020-03-29 05:00:00,1.776222222222208 +2020-03-29 06:00:00,0.0 +2020-03-29 07:00:00,0.0 +2020-03-29 08:00:00,0.0 +2020-03-29 09:00:00,0.0 +2020-03-29 10:00:00,0.0 +2020-03-29 11:00:00,0.0 +2020-03-29 12:00:00,0.0 +2020-03-29 13:00:00,0.0 +2020-03-29 14:00:00,0.0 +2020-03-29 15:00:00,0.0 +2020-03-29 16:00:00,0.0 +2020-03-29 17:00:00,0.0 +2020-03-29 18:00:00,9.342555555555546 +2020-03-29 19:00:00,61.626333333332994 +2020-03-29 20:00:00,95.16333333333388 +2020-03-29 21:00:00,97.61333333333187 +2020-03-29 22:00:00,101.87355555555389 +2020-03-29 23:00:00,103.79111111110942 +2020-03-30 00:00:00,106.61888888888716 +2020-03-30 01:00:00,108.98111111110934 +2020-03-30 02:00:00,109.13133333333458 +2020-03-30 03:00:00,89.01511111111027 +2020-03-30 04:00:00,40.1276666666661 +2020-03-30 05:00:00,1.4958888888888802 +2020-03-30 06:00:00,0.0 +2020-03-30 07:00:00,0.0 +2020-03-30 08:00:00,0.0 +2020-03-30 09:00:00,0.0 +2020-03-30 10:00:00,0.0 +2020-03-30 11:00:00,0.0 +2020-03-30 12:00:00,0.0 +2020-03-30 13:00:00,0.0 +2020-03-30 14:00:00,0.0 +2020-03-30 15:00:00,0.0 +2020-03-30 16:00:00,0.0 +2020-03-30 17:00:00,0.0 +2020-03-30 18:00:00,10.267777777777708 +2020-03-30 19:00:00,64.07266666666705 +2020-03-30 20:00:00,93.44088888888791 +2020-03-30 21:00:00,97.1238888888894 +2020-03-30 22:00:00,96.01688888888822 +2020-03-30 23:00:00,83.08299999999998 +2020-03-31 00:00:00,90.20033333333284 +2020-03-31 01:00:00,86.77888888888947 +2020-03-31 02:00:00,90.32044444444537 +2020-03-31 03:00:00,52.834555555555916 +2020-03-31 04:00:00,25.867222222222846 +2020-03-31 05:00:00,0.6655555555555532 +2020-03-31 06:00:00,0.0 +2020-03-31 07:00:00,0.0 +2020-03-31 08:00:00,0.0 +2020-03-31 09:00:00,0.0 +2020-03-31 10:00:00,0.0 +2020-03-31 11:00:00,0.0 +2020-03-31 12:00:00,0.0 +2020-03-31 13:00:00,0.0 +2020-03-31 14:00:00,0.0 +2020-03-31 15:00:00,0.0 +2020-03-31 16:00:00,0.0 +2020-03-31 17:00:00,0.0 +2020-03-31 18:00:00,11.910111111111156 +2020-03-31 19:00:00,66.63600000000001 +2020-03-31 20:00:00,94.40555555555555 +2020-03-31 21:00:00,95.23999999999992 +2020-03-31 22:00:00,95.6467777777782 +2020-03-31 23:00:00,105.60466666666494 +2020-04-01 00:00:00,104.89355555555495 +2020-04-01 01:00:00,105.8936666666658 +2020-04-01 02:00:00,108.27444444444268 +2020-04-01 03:00:00,82.97299999999956 +2020-04-01 04:00:00,33.025444444444254 +2020-04-01 05:00:00,0.6009999999999992 +2020-04-01 06:00:00,0.0 +2020-04-01 07:00:00,0.0 +2020-04-01 08:00:00,0.0 +2020-04-01 09:00:00,0.0 +2020-04-01 10:00:00,0.0 +2020-04-01 11:00:00,0.0 +2020-04-01 12:00:00,0.0 +2020-04-01 13:00:00,0.0 +2020-04-01 14:00:00,0.0 +2020-04-01 15:00:00,0.0 +2020-04-01 16:00:00,0.0 +2020-04-01 17:00:00,0.0 +2020-04-01 18:00:00,13.215111111111197 +2020-04-01 19:00:00,70.0996666666671 +2020-04-01 20:00:00,96.55333333333333 +2020-04-01 21:00:00,94.81155555555571 +2020-04-01 22:00:00,74.10400000000023 +2020-04-01 23:00:00,85.85166666666616 +2020-04-02 00:00:00,105.13822222222326 +2020-04-02 01:00:00,103.71766666666639 +2020-04-02 02:00:00,100.65766666666484 +2020-04-02 03:00:00,72.1296666666664 +2020-04-02 04:00:00,9.68733333333333 +2020-04-02 05:00:00,0.4420000000000013 +2020-04-02 06:00:00,0.0 +2020-04-02 07:00:00,0.0 +2020-04-02 08:00:00,0.0 +2020-04-02 09:00:00,0.0 +2020-04-02 10:00:00,0.0 +2020-04-02 11:00:00,0.0 +2020-04-02 12:00:00,0.0 +2020-04-02 13:00:00,0.0 +2020-04-02 14:00:00,0.0 +2020-04-02 15:00:00,0.0 +2020-04-02 16:00:00,0.0 +2020-04-02 17:00:00,0.0 +2020-04-02 18:00:00,5.998666666666682 +2020-04-02 19:00:00,27.826111111111036 +2020-04-02 20:00:00,38.523777777777426 +2020-04-02 21:00:00,89.43733333333313 +2020-04-02 22:00:00,96.58577777777755 +2020-04-02 23:00:00,71.4760000000006 +2020-04-03 00:00:00,57.77344444444439 +2020-04-03 01:00:00,34.526222222222486 +2020-04-03 02:00:00,53.508888888889054 +2020-04-03 03:00:00,67.2255555555558 +2020-04-03 04:00:00,28.065333333333115 +2020-04-03 05:00:00,0.39222222222222225 +2020-04-03 06:00:00,0.0 +2020-04-03 07:00:00,0.0 +2020-04-03 08:00:00,0.0 +2020-04-03 09:00:00,0.0 +2020-04-03 10:00:00,0.0 +2020-04-03 11:00:00,0.0 +2020-04-03 12:00:00,0.0 +2020-04-03 13:00:00,0.0 +2020-04-03 14:00:00,0.0 +2020-04-03 15:00:00,0.0 +2020-04-03 16:00:00,0.0 +2020-04-03 17:00:00,0.0 +2020-04-03 18:00:00,11.74633333333341 +2020-04-03 19:00:00,65.76466666666698 +2020-04-03 20:00:00,96.37222222222222 +2020-04-03 21:00:00,100.73422222222038 +2020-04-03 22:00:00,101.69999999999831 +2020-04-03 23:00:00,100.53666666666682 +2020-04-04 00:00:00,87.2727777777774 +2020-04-04 01:00:00,93.28833333333415 +2020-04-04 02:00:00,100.07877777777881 +2020-04-04 03:00:00,68.57166666666613 +2020-04-04 04:00:00,23.224111111111423 +2020-04-04 05:00:00,0.1737777777777778 +2020-04-04 06:00:00,0.0 +2020-04-04 07:00:00,0.0 +2020-04-04 08:00:00,0.0 +2020-04-04 09:00:00,0.0 +2020-04-04 10:00:00,0.0 +2020-04-04 11:00:00,0.0 +2020-04-04 12:00:00,0.0 +2020-04-04 13:00:00,0.0 +2020-04-04 14:00:00,0.0 +2020-04-04 15:00:00,0.0 +2020-04-04 16:00:00,0.0 +2020-04-04 17:00:00,0.0 +2020-04-04 18:00:00,9.614777777777785 +2020-04-04 19:00:00,47.7155555555555 +2020-04-04 20:00:00,97.6659999999984 +2020-04-04 21:00:00,100.46444444444279 +2020-04-04 22:00:00,101.721666666665 +2020-04-04 23:00:00,87.35300000000021 +2020-04-05 00:00:00,46.80822222222268 +2020-04-05 01:00:00,46.42977777777723 +2020-04-05 02:00:00,61.271666666666974 +2020-04-05 03:00:00,42.02944444444393 +2020-04-05 04:00:00,7.749444444444283 +2020-04-05 05:00:00,0.0 +2020-04-05 06:00:00,0.0 +2020-04-05 07:00:00,0.0 +2020-04-05 08:00:00,0.0 +2020-04-05 09:00:00,0.0 +2020-04-05 10:00:00,0.0 +2020-04-05 11:00:00,0.0 +2020-04-05 12:00:00,0.0 +2020-04-05 13:00:00,0.0 +2020-04-05 14:00:00,0.0 +2020-04-05 15:00:00,0.0 +2020-04-05 16:00:00,0.0 +2020-04-05 17:00:00,0.0 +2020-04-05 18:00:00,7.713555555555613 +2020-04-05 19:00:00,33.39644444444446 +2020-04-05 20:00:00,76.92466666666708 +2020-04-05 21:00:00,57.0240000000001 +2020-04-05 22:00:00,89.60666666666738 +2020-04-05 23:00:00,85.97755555555496 +2020-04-06 00:00:00,81.69466666666612 +2020-04-06 01:00:00,104.42866666666635 +2020-04-06 02:00:00,68.45955555555554 +2020-04-06 03:00:00,40.735111111111614 +2020-04-06 04:00:00,14.824666666666687 +2020-04-06 05:00:00,0.225 +2020-04-06 06:00:00,0.0 +2020-04-06 07:00:00,0.0 +2020-04-06 08:00:00,0.0 +2020-04-06 09:00:00,0.0 +2020-04-06 10:00:00,0.0 +2020-04-06 11:00:00,0.0 +2020-04-06 12:00:00,0.0 +2020-04-06 13:00:00,0.0 +2020-04-06 14:00:00,0.0 +2020-04-06 15:00:00,0.0 +2020-04-06 16:00:00,0.0 +2020-04-06 17:00:00,0.0 +2020-04-06 18:00:00,4.286666666666667 +2020-04-06 19:00:00,42.23477777777778 +2020-04-06 20:00:00,75.28300000000029 +2020-04-06 21:00:00,85.34377777777823 +2020-04-06 22:00:00,95.68211111111142 +2020-04-06 23:00:00,84.39288888888905 +2020-04-07 00:00:00,76.25244444444354 +2020-04-07 01:00:00,78.42100000000055 +2020-04-07 02:00:00,98.58177777777905 +2020-04-07 03:00:00,65.20833333333286 +2020-04-07 04:00:00,25.278555555555396 +2020-04-07 05:00:00,0.18666666666666676 +2020-04-07 06:00:00,0.0 +2020-04-07 07:00:00,0.0 +2020-04-07 08:00:00,0.0 +2020-04-07 09:00:00,0.0 +2020-04-07 10:00:00,0.0 +2020-04-07 11:00:00,0.0 +2020-04-07 12:00:00,0.0 +2020-04-07 13:00:00,0.0 +2020-04-07 14:00:00,0.0 +2020-04-07 15:00:00,0.0 +2020-04-07 16:00:00,0.0 +2020-04-07 17:00:00,0.0 +2020-04-07 18:00:00,12.387888888888963 +2020-04-07 19:00:00,68.84855555555596 +2020-04-07 20:00:00,97.90444444444445 +2020-04-07 21:00:00,100.95444444444445 +2020-04-07 22:00:00,58.303333333333335 +2020-04-07 23:00:00,47.41044444444435 +2020-04-08 00:00:00,99.44222222222321 +2020-04-08 01:00:00,105.2372222222237 +2020-04-08 02:00:00,102.40633333333388 +2020-04-08 03:00:00,71.42811111111037 +2020-04-08 04:00:00,24.216666666667237 +2020-04-08 05:00:00,0.36499999999999977 +2020-04-08 06:00:00,0.0 +2020-04-08 07:00:00,0.0 +2020-04-08 08:00:00,0.0 +2020-04-08 09:00:00,0.0 +2020-04-08 10:00:00,0.0 +2020-04-08 11:00:00,0.0 +2020-04-08 12:00:00,0.0 +2020-04-08 13:00:00,0.0 +2020-04-08 14:00:00,0.0 +2020-04-08 15:00:00,0.0 +2020-04-08 16:00:00,0.0 +2020-04-08 17:00:00,0.0 +2020-04-08 18:00:00,13.378444444444566 +2020-04-08 19:00:00,41.03388888888917 +2020-04-08 20:00:00,96.26399999999902 +2020-04-08 21:00:00,10.39066666666666 +2020-04-08 22:00:00,7.34688888888889 +2020-04-08 23:00:00,0.0 +2020-04-09 00:00:00,0.48866666666666664 +2020-04-09 01:00:00,6.340333333333331 +2020-04-09 02:00:00,102.53177777777724 +2020-04-09 03:00:00,73.25877777777826 +2020-04-09 04:00:00,22.943333333333346 +2020-04-09 05:00:00,0.3542222222222231 +2020-04-09 06:00:00,0.0 +2020-04-09 07:00:00,0.0 +2020-04-09 08:00:00,0.0 +2020-04-09 09:00:00,0.0 +2020-04-09 10:00:00,0.0 +2020-04-09 11:00:00,0.0 +2020-04-09 12:00:00,0.0 +2020-04-09 13:00:00,0.0 +2020-04-09 14:00:00,0.0 +2020-04-09 15:00:00,0.0 +2020-04-09 16:00:00,0.0 +2020-04-09 17:00:00,0.0 +2020-04-09 18:00:00,13.22966666666665 +2020-04-09 19:00:00,73.64022222222302 +2020-04-09 20:00:00,98.95111111111272 +2020-04-09 21:00:00,102.19888888889056 +2020-04-09 22:00:00,103.06555555555725 +2020-04-09 23:00:00,104.88444444444616 +2020-04-10 00:00:00,106.87088888888881 +2020-04-10 01:00:00,108.63 +2020-04-10 02:00:00,103.77444444444444 +2020-04-10 03:00:00,71.43933333333368 +2020-04-10 04:00:00,21.44311111111123 +2020-04-10 05:00:00,0.0 +2020-04-10 06:00:00,0.0 +2020-04-10 07:00:00,0.0 +2020-04-10 08:00:00,0.0 +2020-04-10 09:00:00,0.0 +2020-04-10 10:00:00,0.0 +2020-04-10 11:00:00,0.0 +2020-04-10 12:00:00,0.0 +2020-04-10 13:00:00,0.0 +2020-04-10 14:00:00,0.0 +2020-04-10 15:00:00,0.0 +2020-04-10 16:00:00,0.0 +2020-04-10 17:00:00,0.0 +2020-04-10 18:00:00,13.496111111111162 +2020-04-10 19:00:00,69.77388888888858 +2020-04-10 20:00:00,92.81777777777933 +2020-04-10 21:00:00,94.99777777777936 +2020-04-10 22:00:00,96.01222222222383 +2020-04-10 23:00:00,98.82555555555719 +2020-04-11 00:00:00,102.11000000000168 +2020-04-11 01:00:00,103.11666666666837 +2020-04-11 02:00:00,101.15311111111163 +2020-04-11 03:00:00,73.24455555555518 +2020-04-11 04:00:00,25.530111111111104 +2020-04-11 05:00:00,0.13444444444444456 +2020-04-11 06:00:00,0.0 +2020-04-11 07:00:00,0.0 +2020-04-11 08:00:00,0.0 +2020-04-11 09:00:00,0.0 +2020-04-11 10:00:00,0.0 +2020-04-11 11:00:00,0.0 +2020-04-11 12:00:00,0.0 +2020-04-11 13:00:00,0.0 +2020-04-11 14:00:00,0.0 +2020-04-11 15:00:00,0.0 +2020-04-11 16:00:00,0.0 +2020-04-11 17:00:00,0.0 +2020-04-11 18:00:00,6.125444444444437 +2020-04-11 19:00:00,58.56788888888835 +2020-04-11 20:00:00,79.51577777777824 +2020-04-11 21:00:00,93.74366666666675 +2020-04-11 22:00:00,95.0 +2020-04-11 23:00:00,96.81777777777778 +2020-04-12 00:00:00,100.3488888888889 +2020-04-12 01:00:00,98.91188888889013 +2020-04-12 02:00:00,95.67333333333394 +2020-04-12 03:00:00,71.47677777777656 +2020-04-12 04:00:00,25.229000000000593 +2020-04-12 05:00:00,0.12266666666666656 +2020-04-12 06:00:00,0.0 +2020-04-12 07:00:00,0.0 +2020-04-12 08:00:00,0.0 +2020-04-12 09:00:00,0.0 +2020-04-12 10:00:00,0.0 +2020-04-12 11:00:00,0.0 +2020-04-12 12:00:00,0.0 +2020-04-12 13:00:00,0.0 +2020-04-12 14:00:00,0.0 +2020-04-12 15:00:00,0.0 +2020-04-12 16:00:00,0.0 +2020-04-12 17:00:00,0.0 +2020-04-12 18:00:00,11.02744444444452 +2020-04-12 19:00:00,66.59466666666692 +2020-04-12 20:00:00,95.79777777777778 +2020-04-12 21:00:00,99.10400000000078 +2020-04-12 22:00:00,99.6877777777786 +2020-04-12 23:00:00,102.47255555555611 +2020-04-13 00:00:00,105.67888888888938 +2020-04-13 01:00:00,107.45566666666845 +2020-04-13 02:00:00,84.42300000000002 +2020-04-13 03:00:00,53.264444444443846 +2020-04-13 04:00:00,8.159777777777833 +2020-04-13 05:00:00,0.1111111111111111 +2020-04-13 06:00:00,0.0 +2020-04-13 07:00:00,0.0 +2020-04-13 08:00:00,0.0 +2020-04-13 09:00:00,0.0 +2020-04-13 10:00:00,0.0 +2020-04-13 11:00:00,0.0 +2020-04-13 12:00:00,0.0 +2020-04-13 13:00:00,0.0 +2020-04-13 14:00:00,0.0 +2020-04-13 15:00:00,0.0 +2020-04-13 16:00:00,0.0 +2020-04-13 17:00:00,0.0 +2020-04-13 18:00:00,10.682000000000034 +2020-04-13 19:00:00,49.71188888888922 +2020-04-13 20:00:00,38.464555555555584 +2020-04-13 21:00:00,71.63922222222237 +2020-04-13 22:00:00,52.91777777777733 +2020-04-13 23:00:00,74.74100000000047 +2020-04-14 00:00:00,33.042111111111545 +2020-04-14 01:00:00,47.76666666666672 +2020-04-14 02:00:00,22.095888888888844 +2020-04-14 03:00:00,25.14911111111148 +2020-04-14 04:00:00,3.100444444444478 +2020-04-14 05:00:00,0.0 +2020-04-14 06:00:00,0.0 +2020-04-14 07:00:00,0.0 +2020-04-14 08:00:00,0.0 +2020-04-14 09:00:00,0.0 +2020-04-14 10:00:00,0.0 +2020-04-14 11:00:00,0.0 +2020-04-14 12:00:00,0.0 +2020-04-14 13:00:00,0.0 +2020-04-14 14:00:00,0.0 +2020-04-14 15:00:00,0.0 +2020-04-14 16:00:00,0.0 +2020-04-14 17:00:00,0.0 +2020-04-14 18:00:00,5.843777777777765 +2020-04-14 19:00:00,58.31888888888952 +2020-04-14 20:00:00,69.3508888888888 +2020-04-14 21:00:00,92.52966666666805 +2020-04-14 22:00:00,66.07833333333326 +2020-04-14 23:00:00,100.66988888888899 +2020-04-15 00:00:00,96.64333333333381 +2020-04-15 01:00:00,37.57811111111126 +2020-04-15 02:00:00,32.29555555555524 +2020-04-15 03:00:00,20.390111111111224 +2020-04-15 04:00:00,16.560111111110903 +2020-04-15 05:00:00,0.3762222222222216 +2020-04-15 06:00:00,0.0 +2020-04-15 07:00:00,0.0 +2020-04-15 08:00:00,0.0 +2020-04-15 09:00:00,0.0 +2020-04-15 10:00:00,0.0 +2020-04-15 11:00:00,0.0 +2020-04-15 12:00:00,0.0 +2020-04-15 13:00:00,0.0 +2020-04-15 14:00:00,0.0 +2020-04-15 15:00:00,0.0 +2020-04-15 16:00:00,0.0 +2020-04-15 17:00:00,0.0 +2020-04-15 18:00:00,1.49 +2020-04-15 19:00:00,12.158888888888981 +2020-04-15 20:00:00,24.98444444444449 +2020-04-15 21:00:00,67.26188888888883 +2020-04-15 22:00:00,97.89077777777712 +2020-04-15 23:00:00,76.09699999999889 +2020-04-16 00:00:00,104.35311111111143 +2020-04-16 01:00:00,62.316111111110956 +2020-04-16 02:00:00,53.24066666666651 +2020-04-16 03:00:00,37.70177777777789 +2020-04-16 04:00:00,7.427777777777602 +2020-04-16 05:00:00,0.009666666666666665 +2020-04-16 06:00:00,0.0 +2020-04-16 07:00:00,0.0 +2020-04-16 08:00:00,0.0 +2020-04-16 09:00:00,0.0 +2020-04-16 10:00:00,0.0 +2020-04-16 11:00:00,0.0 +2020-04-16 12:00:00,0.0 +2020-04-16 13:00:00,0.0 +2020-04-16 14:00:00,0.0 +2020-04-16 15:00:00,0.0 +2020-04-16 16:00:00,0.0 +2020-04-16 17:00:00,0.0 +2020-04-16 18:00:00,10.915888888888954 +2020-04-16 19:00:00,65.02922222222266 +2020-04-16 20:00:00,91.82555555555555 +2020-04-16 21:00:00,95.21222222222222 +2020-04-16 22:00:00,95.57344444444328 +2020-04-16 23:00:00,98.26555555555484 +2020-04-17 00:00:00,101.88333333333243 +2020-04-17 01:00:00,76.47500000000024 +2020-04-17 02:00:00,92.7535555555569 +2020-04-17 03:00:00,73.14499999999923 +2020-04-17 04:00:00,22.69488888888839 +2020-04-17 05:00:00,0.08177777777777773 +2020-04-17 06:00:00,0.0 +2020-04-17 07:00:00,0.0 +2020-04-17 08:00:00,0.0 +2020-04-17 09:00:00,0.0 +2020-04-17 10:00:00,0.0 +2020-04-17 11:00:00,0.0 +2020-04-17 12:00:00,0.0 +2020-04-17 13:00:00,0.0 +2020-04-17 14:00:00,0.0 +2020-04-17 15:00:00,0.0 +2020-04-17 16:00:00,0.0 +2020-04-17 17:00:00,0.0 +2020-04-17 18:00:00,10.067555555555506 +2020-04-17 19:00:00,58.413222222221684 +2020-04-17 20:00:00,88.43333333333482 +2020-04-17 21:00:00,90.96555555555707 +2020-04-17 22:00:00,92.26333333333488 +2020-04-17 23:00:00,93.94222222222379 +2020-04-18 00:00:00,97.27333333333495 +2020-04-18 01:00:00,99.58711111111008 +2020-04-18 02:00:00,83.22277777777732 +2020-04-18 03:00:00,35.126111111110674 +2020-04-18 04:00:00,10.428888888889052 +2020-04-18 05:00:00,0.01955555555555555 +2020-04-18 06:00:00,0.0 +2020-04-18 07:00:00,0.0 +2020-04-18 08:00:00,0.0 +2020-04-18 09:00:00,0.0 +2020-04-18 10:00:00,0.0 +2020-04-18 11:00:00,0.0 +2020-04-18 12:00:00,0.0 +2020-04-18 13:00:00,0.0 +2020-04-18 14:00:00,0.0 +2020-04-18 15:00:00,0.0 +2020-04-18 16:00:00,0.0 +2020-04-18 17:00:00,0.0 +2020-04-18 18:00:00,9.768888888888908 +2020-04-18 19:00:00,61.18711111111107 +2020-04-18 20:00:00,87.33800000000028 +2020-04-18 21:00:00,89.84222222222247 +2020-04-18 22:00:00,90.80622222222179 +2020-04-18 23:00:00,99.52077777777852 +2020-04-19 00:00:00,93.81433333333374 +2020-04-19 01:00:00,93.37755555555624 +2020-04-19 02:00:00,59.64455555555522 +2020-04-19 03:00:00,38.094333333333886 +2020-04-19 04:00:00,14.608111111110803 +2020-04-19 05:00:00,0.0 +2020-04-19 06:00:00,0.0 +2020-04-19 07:00:00,0.0 +2020-04-19 08:00:00,0.0 +2020-04-19 09:00:00,0.0 +2020-04-19 10:00:00,0.0 +2020-04-19 11:00:00,0.0 +2020-04-19 12:00:00,0.0 +2020-04-19 13:00:00,0.0 +2020-04-19 14:00:00,0.0 +2020-04-19 15:00:00,0.0 +2020-04-19 16:00:00,0.0 +2020-04-19 17:00:00,0.0 +2020-04-19 18:00:00,9.020111111111145 +2020-04-19 19:00:00,43.66899999999982 +2020-04-19 20:00:00,75.36777777777783 +2020-04-19 21:00:00,89.74244444444449 +2020-04-19 22:00:00,73.9089999999989 +2020-04-19 23:00:00,75.8076666666662 +2020-04-20 00:00:00,35.01355555555613 +2020-04-20 01:00:00,34.971555555555724 +2020-04-20 02:00:00,19.37122222222242 +2020-04-20 03:00:00,13.647888888888936 +2020-04-20 04:00:00,4.996444444444391 +2020-04-20 05:00:00,0.0 +2020-04-20 06:00:00,0.0 +2020-04-20 07:00:00,0.0 +2020-04-20 08:00:00,0.0 +2020-04-20 09:00:00,0.0 +2020-04-20 10:00:00,0.0 +2020-04-20 11:00:00,0.0 +2020-04-20 12:00:00,0.0 +2020-04-20 13:00:00,0.0 +2020-04-20 14:00:00,0.0 +2020-04-20 15:00:00,0.0 +2020-04-20 16:00:00,0.0 +2020-04-20 17:00:00,0.0 +2020-04-20 18:00:00,2.6355555555555554 +2020-04-20 19:00:00,31.26111111111112 +2020-04-20 20:00:00,68.47866666666648 +2020-04-20 21:00:00,68.70544444444418 +2020-04-20 22:00:00,89.14211111111143 +2020-04-20 23:00:00,94.36544444444428 +2020-04-21 00:00:00,97.57266666666682 +2020-04-21 01:00:00,42.14577777777731 +2020-04-21 02:00:00,81.02177777777729 +2020-04-21 03:00:00,46.389000000000024 +2020-04-21 04:00:00,13.877888888888547 +2020-04-21 05:00:00,0.0 +2020-04-21 06:00:00,0.0 +2020-04-21 07:00:00,0.0 +2020-04-21 08:00:00,0.0 +2020-04-21 09:00:00,0.0 +2020-04-21 10:00:00,0.0 +2020-04-21 11:00:00,0.0 +2020-04-21 12:00:00,0.0 +2020-04-21 13:00:00,0.0 +2020-04-21 14:00:00,0.0 +2020-04-21 15:00:00,0.0 +2020-04-21 16:00:00,0.0 +2020-04-21 17:00:00,0.0 +2020-04-21 18:00:00,9.351333333333388 +2020-04-21 19:00:00,61.54566666666713 +2020-04-21 20:00:00,87.08944444444485 +2020-04-21 21:00:00,89.82333333333334 +2020-04-21 22:00:00,90.78666666666679 +2020-04-21 23:00:00,95.51555555555555 +2020-04-22 00:00:00,99.50577777777727 +2020-04-22 01:00:00,96.39011111111122 +2020-04-22 02:00:00,64.4733333333328 +2020-04-22 03:00:00,60.10388888888835 +2020-04-22 04:00:00,7.901111111111328 +2020-04-22 05:00:00,0.0 +2020-04-22 06:00:00,0.0 +2020-04-22 07:00:00,0.0 +2020-04-22 08:00:00,0.0 +2020-04-22 09:00:00,0.0 +2020-04-22 10:00:00,0.0 +2020-04-22 11:00:00,0.0 +2020-04-22 12:00:00,0.0 +2020-04-22 13:00:00,0.0 +2020-04-22 14:00:00,0.0 +2020-04-22 15:00:00,0.0 +2020-04-22 16:00:00,0.0 +2020-04-22 17:00:00,0.0 +2020-04-22 18:00:00,2.2109999999999843 +2020-04-22 19:00:00,20.327777777777644 +2020-04-22 20:00:00,48.659666666666524 +2020-04-22 21:00:00,72.48022222222198 +2020-04-22 22:00:00,86.60888888888896 +2020-04-22 23:00:00,59.94222222222161 +2020-04-23 00:00:00,23.166444444444977 +2020-04-23 01:00:00,34.12666666666655 +2020-04-23 02:00:00,29.351111111111972 +2020-04-23 03:00:00,31.092666666666613 +2020-04-23 04:00:00,8.952444444444282 +2020-04-23 05:00:00,0.0 +2020-04-23 06:00:00,0.0 +2020-04-23 07:00:00,0.0 +2020-04-23 08:00:00,0.0 +2020-04-23 09:00:00,0.0 +2020-04-23 10:00:00,0.0 +2020-04-23 11:00:00,0.0 +2020-04-23 12:00:00,0.0 +2020-04-23 13:00:00,0.0 +2020-04-23 14:00:00,0.0 +2020-04-23 15:00:00,0.0 +2020-04-23 16:00:00,0.0 +2020-04-23 17:00:00,0.0 +2020-04-23 18:00:00,8.399888888888931 +2020-04-23 19:00:00,57.55644444444545 +2020-04-23 20:00:00,70.20011111111123 +2020-04-23 21:00:00,52.97566666666676 +2020-04-23 22:00:00,72.25544444444449 +2020-04-23 23:00:00,85.5351111111118 +2020-04-24 00:00:00,95.38944444444424 +2020-04-24 01:00:00,77.73555555555566 +2020-04-24 02:00:00,94.05711111111037 +2020-04-24 03:00:00,36.73544444444402 +2020-04-24 04:00:00,6.781999999999997 +2020-04-24 05:00:00,0.0 +2020-04-24 06:00:00,0.0 +2020-04-24 07:00:00,0.0 +2020-04-24 08:00:00,0.0 +2020-04-24 09:00:00,0.0 +2020-04-24 10:00:00,0.0 +2020-04-24 11:00:00,0.0 +2020-04-24 12:00:00,0.0 +2020-04-24 13:00:00,0.0 +2020-04-24 14:00:00,0.0 +2020-04-24 15:00:00,0.0 +2020-04-24 16:00:00,0.0 +2020-04-24 17:00:00,0.0 +2020-04-24 18:00:00,1.4455555555555555 +2020-04-24 19:00:00,15.027666666666873 +2020-04-24 20:00:00,11.67177777777783 +2020-04-24 21:00:00,21.292000000000343 +2020-04-24 22:00:00,25.782555555555565 +2020-04-24 23:00:00,26.230555555555256 +2020-04-25 00:00:00,30.84099999999958 +2020-04-25 01:00:00,13.364777777777826 +2020-04-25 02:00:00,14.507555555555612 +2020-04-25 03:00:00,2.41211111111114 +2020-04-25 04:00:00,0.0 +2020-04-25 05:00:00,0.0 +2020-04-25 06:00:00,0.0 +2020-04-25 07:00:00,0.0 +2020-04-25 08:00:00,0.0 +2020-04-25 09:00:00,0.0 +2020-04-25 10:00:00,0.0 +2020-04-25 11:00:00,0.0 +2020-04-25 12:00:00,0.0 +2020-04-25 13:00:00,0.0 +2020-04-25 14:00:00,0.0 +2020-04-25 15:00:00,0.0 +2020-04-25 16:00:00,0.0 +2020-04-25 17:00:00,0.0 +2020-04-25 18:00:00,0.26555555555555554 +2020-04-25 19:00:00,15.44311111111115 +2020-04-25 20:00:00,14.664555555555635 +2020-04-25 21:00:00,32.55422222222213 +2020-04-25 22:00:00,27.67344444444445 +2020-04-25 23:00:00,29.386777777777702 +2020-04-26 00:00:00,29.127000000000134 +2020-04-26 01:00:00,25.296111111111387 +2020-04-26 02:00:00,13.186666666666907 +2020-04-26 03:00:00,8.284444444444565 +2020-04-26 04:00:00,1.9418888888888937 +2020-04-26 05:00:00,0.0 +2020-04-26 06:00:00,0.0 +2020-04-26 07:00:00,0.0 +2020-04-26 08:00:00,0.0 +2020-04-26 09:00:00,0.0 +2020-04-26 10:00:00,0.0 +2020-04-26 11:00:00,0.0 +2020-04-26 12:00:00,0.0 +2020-04-26 13:00:00,0.0 +2020-04-26 14:00:00,0.0 +2020-04-26 15:00:00,0.0 +2020-04-26 16:00:00,0.0 +2020-04-26 17:00:00,0.0 +2020-04-26 18:00:00,3.9 +2020-04-26 19:00:00,13.243444444444487 +2020-04-26 20:00:00,17.74900000000018 +2020-04-26 21:00:00,31.25122222222231 +2020-04-26 22:00:00,30.964222222222705 +2020-04-26 23:00:00,24.684777777778063 +2020-04-27 00:00:00,34.233000000000565 +2020-04-27 01:00:00,21.482888888888866 +2020-04-27 02:00:00,8.632222222222262 +2020-04-27 03:00:00,5.433333333333334 +2020-04-27 04:00:00,0.0 +2020-04-27 05:00:00,0.0 +2020-04-27 06:00:00,0.0 +2020-04-27 07:00:00,0.0 +2020-04-27 08:00:00,0.0 +2020-04-27 09:00:00,0.0 +2020-04-27 10:00:00,0.0 +2020-04-27 11:00:00,0.0 +2020-04-27 12:00:00,0.0 +2020-04-27 13:00:00,0.0 +2020-04-27 14:00:00,0.0 +2020-04-27 15:00:00,0.0 +2020-04-27 16:00:00,0.0 +2020-04-27 17:00:00,0.0 +2020-04-27 18:00:00,0.5577777777777778 +2020-04-27 19:00:00,6.801111111111006 +2020-04-27 20:00:00,12.405111111111042 +2020-04-27 21:00:00,24.82455555555561 +2020-04-27 22:00:00,30.388000000000396 +2020-04-27 23:00:00,27.364444444443986 +2020-04-28 00:00:00,20.377666666666762 +2020-04-28 01:00:00,27.52888888888868 +2020-04-28 02:00:00,19.13922222222191 +2020-04-28 03:00:00,10.082666666666643 +2020-04-28 04:00:00,5.192999999999909 +2020-04-28 05:00:00,0.0 +2020-04-28 06:00:00,0.0 +2020-04-28 07:00:00,0.0 +2020-04-28 08:00:00,0.0 +2020-04-28 09:00:00,0.0 +2020-04-28 10:00:00,0.0 +2020-04-28 11:00:00,0.0 +2020-04-28 12:00:00,0.0 +2020-04-28 13:00:00,0.0 +2020-04-28 14:00:00,0.0 +2020-04-28 15:00:00,0.0 +2020-04-28 16:00:00,0.0 +2020-04-28 17:00:00,0.0 +2020-04-28 18:00:00,1.6427777777777663 +2020-04-28 19:00:00,15.30399999999999 +2020-04-28 20:00:00,4.7007777777777 +2020-04-28 21:00:00,12.600000000000124 +2020-04-28 22:00:00,15.554444444444737 +2020-04-28 23:00:00,17.488333333333543 +2020-04-29 00:00:00,18.00877777777806 +2020-04-29 01:00:00,10.752444444444537 +2020-04-29 02:00:00,10.268888888888945 +2020-04-29 03:00:00,4.0088888888888885 +2020-04-29 04:00:00,1.0022222222222221 +2020-04-29 05:00:00,0.0 +2020-04-29 06:00:00,0.0 +2020-04-29 07:00:00,0.0 +2020-04-29 08:00:00,0.0 +2020-04-29 09:00:00,0.0 +2020-04-29 10:00:00,0.0 +2020-04-29 11:00:00,0.0 +2020-04-29 12:00:00,0.0 +2020-04-29 13:00:00,0.0 +2020-04-29 14:00:00,0.0 +2020-04-29 15:00:00,0.0 +2020-04-29 16:00:00,0.0 +2020-04-29 17:00:00,0.0 +2020-04-29 18:00:00,0.10888888888888888 +2020-04-29 19:00:00,3.53 +2020-04-29 20:00:00,4.9255555555555555 +2020-04-29 21:00:00,11.290333333333423 +2020-04-29 22:00:00,7.9448888888889 +2020-04-29 23:00:00,13.816888888888963 +2020-04-30 00:00:00,16.88188888888911 +2020-04-30 01:00:00,7.509111111111108 +2020-04-30 02:00:00,6.9852222222221085 +2020-04-30 03:00:00,4.332444444444519 +2020-04-30 04:00:00,0.07411111111111109 +2020-04-30 05:00:00,0.0 +2020-04-30 06:00:00,0.0 +2020-04-30 07:00:00,0.0 +2020-04-30 08:00:00,0.0 +2020-04-30 09:00:00,0.0 +2020-04-30 10:00:00,0.0 +2020-04-30 11:00:00,0.0 +2020-04-30 12:00:00,0.0 +2020-04-30 13:00:00,0.0 +2020-04-30 14:00:00,0.0 +2020-04-30 15:00:00,0.0 +2020-04-30 16:00:00,0.0 +2020-04-30 17:00:00,0.0 +2020-04-30 18:00:00,8.726777777777771 +2020-04-30 19:00:00,61.2002222222226 +2020-04-30 20:00:00,88.81333333333333 +2020-04-30 21:00:00,91.22888888888889 +2020-04-30 22:00:00,93.20111111111112 +2020-04-30 23:00:00,94.86 +2020-05-01 00:00:00,95.97333333333333 +2020-05-01 01:00:00,95.96933333333392 +2020-05-01 02:00:00,92.83544444444244 +2020-05-01 03:00:00,65.53155555555527 +2020-05-01 04:00:00,17.337666666666237 +2020-05-01 05:00:00,0.0 +2020-05-01 06:00:00,0.0 +2020-05-01 07:00:00,0.0 +2020-05-01 08:00:00,0.0 +2020-05-01 09:00:00,0.0 +2020-05-01 10:00:00,0.0 +2020-05-01 11:00:00,0.0 +2020-05-01 12:00:00,0.0 +2020-05-01 13:00:00,0.0 +2020-05-01 14:00:00,0.0 +2020-05-01 15:00:00,0.0 +2020-05-01 16:00:00,0.0 +2020-05-01 17:00:00,0.0 +2020-05-01 18:00:00,8.631666666666684 +2020-05-01 19:00:00,59.786888888888036 +2020-05-01 20:00:00,85.55999999999857 +2020-05-01 21:00:00,87.72011111111281 +2020-05-01 22:00:00,91.56333333333484 +2020-05-01 23:00:00,97.75666666666828 +2020-05-02 00:00:00,101.733333333335 +2020-05-02 01:00:00,102.8000000000017 +2020-05-02 02:00:00,99.90311111111203 +2020-05-02 03:00:00,64.92722222222201 +2020-05-02 04:00:00,17.2275555555553 +2020-05-02 05:00:00,0.0 +2020-05-02 06:00:00,0.0 +2020-05-02 07:00:00,0.0 +2020-05-02 08:00:00,0.0 +2020-05-02 09:00:00,0.0 +2020-05-02 10:00:00,0.0 +2020-05-02 11:00:00,0.0 +2020-05-02 12:00:00,0.0 +2020-05-02 13:00:00,0.0 +2020-05-02 14:00:00,0.0 +2020-05-02 15:00:00,0.0 +2020-05-02 16:00:00,0.0 +2020-05-02 17:00:00,0.0 +2020-05-02 18:00:00,8.085333333333288 +2020-05-02 19:00:00,58.1677777777783 +2020-05-02 20:00:00,84.66555555555556 +2020-05-02 21:00:00,86.85222222222222 +2020-05-02 22:00:00,88.932777777778 +2020-05-02 23:00:00,90.57122222222262 +2020-05-03 00:00:00,95.78444444444506 +2020-05-03 01:00:00,96.04344444444504 +2020-05-03 02:00:00,95.30622222222252 +2020-05-03 03:00:00,64.70400000000127 +2020-05-03 04:00:00,18.151000000000398 +2020-05-03 05:00:00,0.0 +2020-05-03 06:00:00,0.0 +2020-05-03 07:00:00,0.0 +2020-05-03 08:00:00,0.0 +2020-05-03 09:00:00,0.0 +2020-05-03 10:00:00,0.0 +2020-05-03 11:00:00,0.0 +2020-05-03 12:00:00,0.0 +2020-05-03 13:00:00,0.0 +2020-05-03 14:00:00,0.0 +2020-05-03 15:00:00,0.0 +2020-05-03 16:00:00,0.0 +2020-05-03 17:00:00,0.0 +2020-05-03 18:00:00,6.8309999999999595 +2020-05-03 19:00:00,57.43944444444437 +2020-05-03 20:00:00,85.38111111111108 +2020-05-03 21:00:00,87.56111111111125 +2020-05-03 22:00:00,88.94111111111133 +2020-05-03 23:00:00,92.5377777777782 +2020-05-04 00:00:00,95.20655555555557 +2020-05-04 01:00:00,97.66888888888725 +2020-05-04 02:00:00,94.29388888888985 +2020-05-04 03:00:00,63.143111111111274 +2020-05-04 04:00:00,15.682000000000196 +2020-05-04 05:00:00,0.0 +2020-05-04 06:00:00,0.0 +2020-05-04 07:00:00,0.0 +2020-05-04 08:00:00,0.0 +2020-05-04 09:00:00,0.0 +2020-05-04 10:00:00,0.0 +2020-05-04 11:00:00,0.0 +2020-05-04 12:00:00,0.0 +2020-05-04 13:00:00,0.0 +2020-05-04 14:00:00,0.0 +2020-05-04 15:00:00,0.0 +2020-05-04 16:00:00,0.0 +2020-05-04 17:00:00,0.0 +2020-05-04 18:00:00,7.225777777777798 +2020-05-04 19:00:00,53.818555555556316 +2020-05-04 20:00:00,63.835444444443894 +2020-05-04 21:00:00,9.283666666666658 +2020-05-04 22:00:00,44.60544444444438 +2020-05-04 23:00:00,87.25888888888744 +2020-05-05 00:00:00,89.55022222222222 +2020-05-05 01:00:00,91.76444444444445 +2020-05-05 02:00:00,89.68777777777778 +2020-05-05 03:00:00,59.53766666666795 +2020-05-05 04:00:00,14.560777777777936 +2020-05-05 05:00:00,0.0 +2020-05-05 06:00:00,0.0 +2020-05-05 07:00:00,0.0 +2020-05-05 08:00:00,0.0 +2020-05-05 09:00:00,0.0 +2020-05-05 10:00:00,0.0 +2020-05-05 11:00:00,0.0 +2020-05-05 12:00:00,0.0 +2020-05-05 13:00:00,0.0 +2020-05-05 14:00:00,0.0 +2020-05-05 15:00:00,0.0 +2020-05-05 16:00:00,0.0 +2020-05-05 17:00:00,0.0 +2020-05-05 18:00:00,7.863777777777806 +2020-05-05 19:00:00,54.88211111111155 +2020-05-05 20:00:00,81.4988888888892 +2020-05-05 21:00:00,85.18422222222279 +2020-05-05 22:00:00,86.8430000000001 +2020-05-05 23:00:00,90.41888888888919 +2020-05-06 00:00:00,93.71222222222269 +2020-05-06 01:00:00,91.46677777777747 +2020-05-06 02:00:00,55.921444444444205 +2020-05-06 03:00:00,47.83011111111112 +2020-05-06 04:00:00,9.352555555555512 +2020-05-06 05:00:00,0.0 +2020-05-06 06:00:00,0.0 +2020-05-06 07:00:00,0.0 +2020-05-06 08:00:00,0.0 +2020-05-06 09:00:00,0.0 +2020-05-06 10:00:00,0.0 +2020-05-06 11:00:00,0.0 +2020-05-06 12:00:00,0.0 +2020-05-06 13:00:00,0.0 +2020-05-06 14:00:00,0.0 +2020-05-06 15:00:00,0.0 +2020-05-06 16:00:00,0.0 +2020-05-06 17:00:00,0.0 +2020-05-06 18:00:00,8.017777777777827 +2020-05-06 19:00:00,58.420888888889145 +2020-05-06 20:00:00,80.60977777777775 +2020-05-06 21:00:00,80.98399999999981 +2020-05-06 22:00:00,84.53177777777769 +2020-05-06 23:00:00,72.54088888888964 +2020-05-07 00:00:00,77.54011111111119 +2020-05-07 01:00:00,86.79133333333272 +2020-05-07 02:00:00,75.74477777777754 +2020-05-07 03:00:00,49.55511111111094 +2020-05-07 04:00:00,13.112111111111139 +2020-05-07 05:00:00,0.0 +2020-05-07 06:00:00,0.0 +2020-05-07 07:00:00,0.0 +2020-05-07 08:00:00,0.0 +2020-05-07 09:00:00,0.0 +2020-05-07 10:00:00,0.0 +2020-05-07 11:00:00,0.0 +2020-05-07 12:00:00,0.0 +2020-05-07 13:00:00,0.0 +2020-05-07 14:00:00,0.0 +2020-05-07 15:00:00,0.0 +2020-05-07 16:00:00,0.0 +2020-05-07 17:00:00,0.0 +2020-05-07 18:00:00,8.825888888888919 +2020-05-07 19:00:00,51.379444444444644 +2020-05-07 20:00:00,44.20366666666672 +2020-05-07 21:00:00,63.69966666666689 +2020-05-07 22:00:00,56.869555555554875 +2020-05-07 23:00:00,59.048111111110764 +2020-05-08 00:00:00,72.72711111111111 +2020-05-08 01:00:00,84.57133333333272 +2020-05-08 02:00:00,71.58866666666573 +2020-05-08 03:00:00,38.02755555555563 +2020-05-08 04:00:00,8.278555555555698 +2020-05-08 05:00:00,0.0 +2020-05-08 06:00:00,0.0 +2020-05-08 07:00:00,0.0 +2020-05-08 08:00:00,0.0 +2020-05-08 09:00:00,0.0 +2020-05-08 10:00:00,0.0 +2020-05-08 11:00:00,0.0 +2020-05-08 12:00:00,0.0 +2020-05-08 13:00:00,0.0 +2020-05-08 14:00:00,0.0 +2020-05-08 15:00:00,0.0 +2020-05-08 16:00:00,0.0 +2020-05-08 17:00:00,0.0 +2020-05-08 18:00:00,7.216111111111084 +2020-05-08 19:00:00,43.04199999999974 +2020-05-08 20:00:00,81.18522222222155 +2020-05-08 21:00:00,84.06155555555507 +2020-05-08 22:00:00,82.8291111111121 +2020-05-08 23:00:00,86.59600000000039 +2020-05-09 00:00:00,90.45322222222362 +2020-05-09 01:00:00,79.18500000000027 +2020-05-09 02:00:00,71.42955555555604 +2020-05-09 03:00:00,50.73277777777891 +2020-05-09 04:00:00,9.4850000000002 +2020-05-09 05:00:00,0.0 +2020-05-09 06:00:00,0.0 +2020-05-09 07:00:00,0.0 +2020-05-09 08:00:00,0.0 +2020-05-09 09:00:00,0.0 +2020-05-09 10:00:00,0.0 +2020-05-09 11:00:00,0.0 +2020-05-09 12:00:00,0.0 +2020-05-09 13:00:00,0.0 +2020-05-09 14:00:00,0.0 +2020-05-09 15:00:00,0.0 +2020-05-09 16:00:00,0.0 +2020-05-09 17:00:00,0.0 +2020-05-09 18:00:00,1.6122222222222222 +2020-05-09 19:00:00,22.486000000000026 +2020-05-09 20:00:00,73.59888888888877 +2020-05-09 21:00:00,84.73244444444535 +2020-05-09 22:00:00,87.35444444444592 +2020-05-09 23:00:00,90.45999999999829 +2020-05-10 00:00:00,92.22777777777624 +2020-05-10 01:00:00,93.83666666666508 +2020-05-10 02:00:00,90.58666666666508 +2020-05-10 03:00:00,59.68655555555503 +2020-05-10 04:00:00,14.110999999999581 +2020-05-10 05:00:00,0.0 +2020-05-10 06:00:00,0.0 +2020-05-10 07:00:00,0.0 +2020-05-10 08:00:00,0.0 +2020-05-10 09:00:00,0.0 +2020-05-10 10:00:00,0.0 +2020-05-10 11:00:00,0.0 +2020-05-10 12:00:00,0.0 +2020-05-10 13:00:00,0.0 +2020-05-10 14:00:00,0.0 +2020-05-10 15:00:00,0.0 +2020-05-10 16:00:00,0.0 +2020-05-10 17:00:00,0.0 +2020-05-10 18:00:00,8.118888888888852 +2020-05-10 19:00:00,58.76144444444331 +2020-05-10 20:00:00,86.37633333333478 +2020-05-10 21:00:00,90.08333333333483 +2020-05-10 22:00:00,91.30555555555709 +2020-05-10 23:00:00,94.49111111111267 +2020-05-11 00:00:00,99.43555555555719 +2020-05-11 01:00:00,102.44555555555723 +2020-05-11 02:00:00,99.73744444444613 +2020-05-11 03:00:00,64.80144444444376 +2020-05-11 04:00:00,14.822444444444217 +2020-05-11 05:00:00,0.0 +2020-05-11 06:00:00,0.0 +2020-05-11 07:00:00,0.0 +2020-05-11 08:00:00,0.0 +2020-05-11 09:00:00,0.0 +2020-05-11 10:00:00,0.0 +2020-05-11 11:00:00,0.0 +2020-05-11 12:00:00,0.0 +2020-05-11 13:00:00,0.0 +2020-05-11 14:00:00,0.0 +2020-05-11 15:00:00,0.0 +2020-05-11 16:00:00,0.0 +2020-05-11 17:00:00,0.0 +2020-05-11 18:00:00,8.409555555555572 +2020-05-11 19:00:00,62.552444444445115 +2020-05-11 20:00:00,89.04544444444474 +2020-05-11 21:00:00,91.93333333333334 +2020-05-11 22:00:00,92.1211111111111 +2020-05-11 23:00:00,94.57555555555555 +2020-05-12 00:00:00,97.42222222222222 +2020-05-12 01:00:00,99.6511111111111 +2020-05-12 02:00:00,64.06622222222195 +2020-05-12 03:00:00,57.42733333333234 +2020-05-12 04:00:00,7.154222222222101 +2020-05-12 05:00:00,0.0 +2020-05-12 06:00:00,0.0 +2020-05-12 07:00:00,0.0 +2020-05-12 08:00:00,0.0 +2020-05-12 09:00:00,0.0 +2020-05-12 10:00:00,0.0 +2020-05-12 11:00:00,0.0 +2020-05-12 12:00:00,0.0 +2020-05-12 13:00:00,0.0 +2020-05-12 14:00:00,0.0 +2020-05-12 15:00:00,0.0 +2020-05-12 16:00:00,0.0 +2020-05-12 17:00:00,0.0 +2020-05-12 18:00:00,0.39111111111111113 +2020-05-12 19:00:00,32.291999999999824 +2020-05-12 20:00:00,70.89777777777809 +2020-05-12 21:00:00,86.39999999999995 +2020-05-12 22:00:00,85.16944444444516 +2020-05-12 23:00:00,71.85388888888852 +2020-05-13 00:00:00,26.13044444444402 +2020-05-13 01:00:00,8.199777777777634 +2020-05-13 02:00:00,13.461666666666515 +2020-05-13 03:00:00,10.634333333333325 +2020-05-13 04:00:00,3.6887777777777155 +2020-05-13 05:00:00,0.0 +2020-05-13 06:00:00,0.0 +2020-05-13 07:00:00,0.0 +2020-05-13 08:00:00,0.0 +2020-05-13 09:00:00,0.0 +2020-05-13 10:00:00,0.0 +2020-05-13 11:00:00,0.0 +2020-05-13 12:00:00,0.0 +2020-05-13 13:00:00,0.0 +2020-05-13 14:00:00,0.0 +2020-05-13 15:00:00,0.0 +2020-05-13 16:00:00,0.0 +2020-05-13 17:00:00,0.0 +2020-05-13 18:00:00,4.447111111111111 +2020-05-13 19:00:00,52.44144444444518 +2020-05-13 20:00:00,80.98511111110979 +2020-05-13 21:00:00,68.2279999999997 +2020-05-13 22:00:00,55.5126666666665 +2020-05-13 23:00:00,57.656444444443665 +2020-05-14 00:00:00,51.1176666666674 +2020-05-14 01:00:00,35.72255555555568 +2020-05-14 02:00:00,11.55777777777796 +2020-05-14 03:00:00,9.42433333333352 +2020-05-14 04:00:00,4.398888888888825 +2020-05-14 05:00:00,0.0 +2020-05-14 06:00:00,0.0 +2020-05-14 07:00:00,0.0 +2020-05-14 08:00:00,0.0 +2020-05-14 09:00:00,0.0 +2020-05-14 10:00:00,0.0 +2020-05-14 11:00:00,0.0 +2020-05-14 12:00:00,0.0 +2020-05-14 13:00:00,0.0 +2020-05-14 14:00:00,0.0 +2020-05-14 15:00:00,0.0 +2020-05-14 16:00:00,0.0 +2020-05-14 17:00:00,0.0 +2020-05-14 18:00:00,1.1617777777777838 +2020-05-14 19:00:00,18.120222222222083 +2020-05-14 20:00:00,14.399000000000155 +2020-05-14 21:00:00,51.231666666666875 +2020-05-14 22:00:00,60.45055555555638 +2020-05-14 23:00:00,58.41555555555494 +2020-05-15 00:00:00,30.47855555555606 +2020-05-15 01:00:00,29.32411111111068 +2020-05-15 02:00:00,20.5433333333335 +2020-05-15 03:00:00,5.710000000000028 +2020-05-15 04:00:00,1.5483333333333225 +2020-05-15 05:00:00,0.0 +2020-05-15 06:00:00,0.0 +2020-05-15 07:00:00,0.0 +2020-05-15 08:00:00,0.0 +2020-05-15 09:00:00,0.0 +2020-05-15 10:00:00,0.0 +2020-05-15 11:00:00,0.0 +2020-05-15 12:00:00,0.0 +2020-05-15 13:00:00,0.0 +2020-05-15 14:00:00,0.0 +2020-05-15 15:00:00,0.0 +2020-05-15 16:00:00,0.0 +2020-05-15 17:00:00,0.0 +2020-05-15 18:00:00,7.582888888888892 +2020-05-15 19:00:00,55.73566666666687 +2020-05-15 20:00:00,82.84222222222222 +2020-05-15 21:00:00,86.54777777777778 +2020-05-15 22:00:00,87.4588888888889 +2020-05-15 23:00:00,90.34777777777839 +2020-05-16 00:00:00,95.37222222222279 +2020-05-16 01:00:00,95.27633333333355 +2020-05-16 02:00:00,62.59766666666613 +2020-05-16 03:00:00,59.48966666666798 +2020-05-16 04:00:00,9.425888888889038 +2020-05-16 05:00:00,0.0 +2020-05-16 06:00:00,0.0 +2020-05-16 07:00:00,0.0 +2020-05-16 08:00:00,0.0 +2020-05-16 09:00:00,0.0 +2020-05-16 10:00:00,0.0 +2020-05-16 11:00:00,0.0 +2020-05-16 12:00:00,0.0 +2020-05-16 13:00:00,0.0 +2020-05-16 14:00:00,0.0 +2020-05-16 15:00:00,0.0 +2020-05-16 16:00:00,0.0 +2020-05-16 17:00:00,0.0 +2020-05-16 18:00:00,2.1828888888888636 +2020-05-16 19:00:00,54.02077777777675 +2020-05-16 20:00:00,81.98555555555426 +2020-05-16 21:00:00,81.29122222222126 +2020-05-16 22:00:00,64.20599999999972 +2020-05-16 23:00:00,47.27855555555552 +2020-05-17 00:00:00,70.92844444444381 +2020-05-17 01:00:00,56.034888888888155 +2020-05-17 02:00:00,64.86622222222265 +2020-05-17 03:00:00,42.67877777777805 +2020-05-17 04:00:00,11.189999999999698 +2020-05-17 05:00:00,0.0 +2020-05-17 06:00:00,0.0 +2020-05-17 07:00:00,0.0 +2020-05-17 08:00:00,0.0 +2020-05-17 09:00:00,0.0 +2020-05-17 10:00:00,0.0 +2020-05-17 11:00:00,0.0 +2020-05-17 12:00:00,0.0 +2020-05-17 13:00:00,0.0 +2020-05-17 14:00:00,0.0 +2020-05-17 15:00:00,0.0 +2020-05-17 16:00:00,0.0 +2020-05-17 17:00:00,0.0 +2020-05-17 18:00:00,7.002666666666642 +2020-05-17 19:00:00,32.427999999999805 +2020-05-17 20:00:00,43.992777777777754 +2020-05-17 21:00:00,80.35188888888965 +2020-05-17 22:00:00,80.20577777777788 +2020-05-17 23:00:00,59.281777777776824 +2020-05-18 00:00:00,73.46877777777745 +2020-05-18 01:00:00,63.394888888888254 +2020-05-18 02:00:00,32.9955555555551 +2020-05-18 03:00:00,16.62777777777805 +2020-05-18 04:00:00,11.718333333333215 +2020-05-18 05:00:00,0.0 +2020-05-18 06:00:00,0.0 +2020-05-18 07:00:00,0.0 +2020-05-18 08:00:00,0.0 +2020-05-18 09:00:00,0.0 +2020-05-18 10:00:00,0.0 +2020-05-18 11:00:00,0.0 +2020-05-18 12:00:00,0.0 +2020-05-18 13:00:00,0.0 +2020-05-18 14:00:00,0.0 +2020-05-18 15:00:00,0.0 +2020-05-18 16:00:00,0.0 +2020-05-18 17:00:00,0.0 +2020-05-18 18:00:00,7.4146666666666725 +2020-05-18 19:00:00,55.068111111110355 +2020-05-18 20:00:00,75.94966666666583 +2020-05-18 21:00:00,60.33577777777826 +2020-05-18 22:00:00,74.27444444444406 +2020-05-18 23:00:00,92.47333333333181 +2020-05-19 00:00:00,96.32866666666604 +2020-05-19 01:00:00,97.76999999999836 +2020-05-19 02:00:00,90.78999999999961 +2020-05-19 03:00:00,59.103444444445415 +2020-05-19 04:00:00,12.373000000000259 +2020-05-19 05:00:00,0.0 +2020-05-19 06:00:00,0.0 +2020-05-19 07:00:00,0.0 +2020-05-19 08:00:00,0.0 +2020-05-19 09:00:00,0.0 +2020-05-19 10:00:00,0.0 +2020-05-19 11:00:00,0.0 +2020-05-19 12:00:00,0.0 +2020-05-19 13:00:00,0.0 +2020-05-19 14:00:00,0.0 +2020-05-19 15:00:00,0.0 +2020-05-19 16:00:00,0.0 +2020-05-19 17:00:00,0.0 +2020-05-19 18:00:00,8.26233333333329 +2020-05-19 19:00:00,54.0386666666667 +2020-05-19 20:00:00,81.86555555555556 +2020-05-19 21:00:00,84.68777777777778 +2020-05-19 22:00:00,86.36322222222225 +2020-05-19 23:00:00,63.0972222222224 +2020-05-20 00:00:00,45.99799999999948 +2020-05-20 01:00:00,17.972666666666665 +2020-05-20 02:00:00,10.278333333333334 +2020-05-20 03:00:00,3.6166666666666667 +2020-05-20 04:00:00,1.5633333333333332 +2020-05-20 05:00:00,0.0 +2020-05-20 06:00:00,0.0 +2020-05-20 07:00:00,0.0 +2020-05-20 08:00:00,0.0 +2020-05-20 09:00:00,0.0 +2020-05-20 10:00:00,0.0 +2020-05-20 11:00:00,0.0 +2020-05-20 12:00:00,0.0 +2020-05-20 13:00:00,0.0 +2020-05-20 14:00:00,0.0 +2020-05-20 15:00:00,0.0 +2020-05-20 16:00:00,0.0 +2020-05-20 17:00:00,0.0 +2020-05-20 18:00:00,0.0 +2020-05-20 19:00:00,0.0 +2020-05-20 20:00:00,0.0 +2020-05-20 21:00:00,0.0 +2020-05-20 22:00:00,46.16122222222184 +2020-05-20 23:00:00,49.40377777777728 +2020-05-21 00:00:00,30.296222222222614 +2020-05-21 01:00:00,16.34222222222249 +2020-05-21 02:00:00,12.028888888889034 +2020-05-21 03:00:00,4.223888888888889 +2020-05-21 04:00:00,0.3411111111111111 +2020-05-21 05:00:00,0.0 +2020-05-21 06:00:00,0.0 +2020-05-21 07:00:00,0.0 +2020-05-21 08:00:00,0.0 +2020-05-21 09:00:00,0.0 +2020-05-21 10:00:00,0.0 +2020-05-21 11:00:00,0.0 +2020-05-21 12:00:00,0.0 +2020-05-21 13:00:00,0.0 +2020-05-21 14:00:00,0.0 +2020-05-21 15:00:00,0.0 +2020-05-21 16:00:00,0.0 +2020-05-21 17:00:00,0.0 +2020-05-21 18:00:00,0.0 +2020-05-21 19:00:00,4.322222222222222 +2020-05-21 20:00:00,27.528444444444478 +2020-05-21 21:00:00,28.715000000000227 +2020-05-21 22:00:00,34.62833333333339 +2020-05-21 23:00:00,42.73299999999989 +2020-05-22 00:00:00,42.8441111111113 +2020-05-22 01:00:00,14.69311111111128 +2020-05-22 02:00:00,11.66022222222241 +2020-05-22 03:00:00,8.960111111111148 +2020-05-22 04:00:00,1.2233333333333334 +2020-05-22 05:00:00,0.0 +2020-05-22 06:00:00,0.0 +2020-05-22 07:00:00,0.0 +2020-05-22 08:00:00,0.0 +2020-05-22 09:00:00,0.0 +2020-05-22 10:00:00,0.0 +2020-05-22 11:00:00,0.0 +2020-05-22 12:00:00,0.0 +2020-05-22 13:00:00,0.0 +2020-05-22 14:00:00,0.0 +2020-05-22 15:00:00,0.0 +2020-05-22 16:00:00,0.0 +2020-05-22 17:00:00,0.0 +2020-05-22 18:00:00,0.7488888888888889 +2020-05-22 19:00:00,4.2509999999999435 +2020-05-22 20:00:00,9.163333333333421 +2020-05-22 21:00:00,28.788555555555387 +2020-05-22 22:00:00,40.00899999999994 +2020-05-22 23:00:00,42.19722222222223 +2020-05-23 00:00:00,58.36555555555582 +2020-05-23 01:00:00,47.305999999999564 +2020-05-23 02:00:00,31.20888888888874 +2020-05-23 03:00:00,44.03433333333344 +2020-05-23 04:00:00,10.77433333333348 +2020-05-23 05:00:00,0.0 +2020-05-23 06:00:00,0.0 +2020-05-23 07:00:00,0.0 +2020-05-23 08:00:00,0.0 +2020-05-23 09:00:00,0.0 +2020-05-23 10:00:00,0.0 +2020-05-23 11:00:00,0.0 +2020-05-23 12:00:00,0.0 +2020-05-23 13:00:00,0.0 +2020-05-23 14:00:00,0.0 +2020-05-23 15:00:00,0.0 +2020-05-23 16:00:00,0.0 +2020-05-23 17:00:00,0.0 +2020-05-23 18:00:00,1.0152222222222271 +2020-05-23 19:00:00,10.492777777777844 +2020-05-23 20:00:00,33.544555555555746 +2020-05-23 21:00:00,84.34488888888733 +2020-05-23 22:00:00,88.8538888888882 +2020-05-23 23:00:00,87.80933333333276 +2020-05-24 00:00:00,50.4022222222234 +2020-05-24 01:00:00,33.121666666666975 +2020-05-24 02:00:00,69.6967777777778 +2020-05-24 03:00:00,11.363333333333543 +2020-05-24 04:00:00,0.9117777777777829 +2020-05-24 05:00:00,0.0 +2020-05-24 06:00:00,0.0 +2020-05-24 07:00:00,0.0 +2020-05-24 08:00:00,0.0 +2020-05-24 09:00:00,0.0 +2020-05-24 10:00:00,0.0 +2020-05-24 11:00:00,0.0 +2020-05-24 12:00:00,0.0 +2020-05-24 13:00:00,0.0 +2020-05-24 14:00:00,0.0 +2020-05-24 15:00:00,0.0 +2020-05-24 16:00:00,0.0 +2020-05-24 17:00:00,0.0 +2020-05-24 18:00:00,4.809222222222222 +2020-05-24 19:00:00,54.8754444444443 +2020-05-24 20:00:00,82.17844444444565 +2020-05-24 21:00:00,85.03855555555673 +2020-05-24 22:00:00,80.45444444444469 +2020-05-24 23:00:00,82.92499999999974 +2020-05-25 00:00:00,83.03011111111128 +2020-05-25 01:00:00,60.65033333333326 +2020-05-25 02:00:00,44.47844444444496 +2020-05-25 03:00:00,15.016000000000137 +2020-05-25 04:00:00,4.025555555555494 +2020-05-25 05:00:00,0.0 +2020-05-25 06:00:00,0.0 +2020-05-25 07:00:00,0.0 +2020-05-25 08:00:00,0.0 +2020-05-25 09:00:00,0.0 +2020-05-25 10:00:00,0.0 +2020-05-25 11:00:00,0.0 +2020-05-25 12:00:00,0.0 +2020-05-25 13:00:00,0.0 +2020-05-25 14:00:00,0.0 +2020-05-25 15:00:00,0.0 +2020-05-25 16:00:00,0.0 +2020-05-25 17:00:00,0.0 +2020-05-25 18:00:00,1.7292222222222167 +2020-05-25 19:00:00,5.662222222222248 +2020-05-25 20:00:00,7.229444444444417 +2020-05-25 21:00:00,42.4853333333334 +2020-05-25 22:00:00,65.44833333333266 +2020-05-25 23:00:00,41.73055555555549 +2020-05-26 00:00:00,30.02966666666675 +2020-05-26 01:00:00,27.05733333333377 +2020-05-26 02:00:00,11.990444444444188 +2020-05-26 03:00:00,5.287111111111122 +2020-05-26 04:00:00,0.42 +2020-05-26 05:00:00,0.0 +2020-05-26 06:00:00,0.0 +2020-05-26 07:00:00,0.0 +2020-05-26 08:00:00,0.0 +2020-05-26 09:00:00,0.0 +2020-05-26 10:00:00,0.0 +2020-05-26 11:00:00,0.0 +2020-05-26 12:00:00,0.0 +2020-05-26 13:00:00,0.0 +2020-05-26 14:00:00,0.0 +2020-05-26 15:00:00,0.0 +2020-05-26 16:00:00,0.0 +2020-05-26 17:00:00,0.0 +2020-05-26 18:00:00,1.521111111111111 +2020-05-26 19:00:00,34.610999999999954 +2020-05-26 20:00:00,80.25555555555596 +2020-05-26 21:00:00,85.01000000000005 +2020-05-26 22:00:00,82.66244444444527 +2020-05-26 23:00:00,77.14355555555589 +2020-05-27 00:00:00,64.00222222222179 +2020-05-27 01:00:00,64.00355555555583 +2020-05-27 02:00:00,66.66955555555589 +2020-05-27 03:00:00,54.8391111111119 +2020-05-27 04:00:00,4.643333333333255 +2020-05-27 05:00:00,0.0 +2020-05-27 06:00:00,0.0 +2020-05-27 07:00:00,0.0 +2020-05-27 08:00:00,0.0 +2020-05-27 09:00:00,0.0 +2020-05-27 10:00:00,0.0 +2020-05-27 11:00:00,0.0 +2020-05-27 12:00:00,0.0 +2020-05-27 13:00:00,0.0 +2020-05-27 14:00:00,0.0 +2020-05-27 15:00:00,0.0 +2020-05-27 16:00:00,0.0 +2020-05-27 17:00:00,0.0 +2020-05-27 18:00:00,2.9918888888888806 +2020-05-27 19:00:00,52.33200000000002 +2020-05-27 20:00:00,81.8788888888889 +2020-05-27 21:00:00,84.92822222222179 +2020-05-27 22:00:00,84.44322222222246 +2020-05-27 23:00:00,82.3292222222214 +2020-05-28 00:00:00,61.52811111111065 +2020-05-28 01:00:00,17.909666666666855 +2020-05-28 02:00:00,25.873888888888416 +2020-05-28 03:00:00,17.18577777777806 +2020-05-28 04:00:00,4.08799999999992 +2020-05-28 05:00:00,0.0 +2020-05-28 06:00:00,0.0 +2020-05-28 07:00:00,0.0 +2020-05-28 08:00:00,0.0 +2020-05-28 09:00:00,0.0 +2020-05-28 10:00:00,0.0 +2020-05-28 11:00:00,0.0 +2020-05-28 12:00:00,0.0 +2020-05-28 13:00:00,0.0 +2020-05-28 14:00:00,0.0 +2020-05-28 15:00:00,0.0 +2020-05-28 16:00:00,0.0 +2020-05-28 17:00:00,0.0 +2020-05-28 18:00:00,8.843777777777769 +2020-05-28 19:00:00,54.08299999999994 +2020-05-28 20:00:00,81.60444444444416 +2020-05-28 21:00:00,84.26666666666655 +2020-05-28 22:00:00,85.17444444444439 +2020-05-28 23:00:00,85.5392222222221 +2020-05-29 00:00:00,74.86933333333386 +2020-05-29 01:00:00,54.16155555555651 +2020-05-29 02:00:00,43.97244444444473 +2020-05-29 03:00:00,25.390888888888544 +2020-05-29 04:00:00,4.954666666666564 +2020-05-29 05:00:00,0.0 +2020-05-29 06:00:00,0.0 +2020-05-29 07:00:00,0.0 +2020-05-29 08:00:00,0.0 +2020-05-29 09:00:00,0.0 +2020-05-29 10:00:00,0.0 +2020-05-29 11:00:00,0.0 +2020-05-29 12:00:00,0.0 +2020-05-29 13:00:00,0.0 +2020-05-29 14:00:00,0.0 +2020-05-29 15:00:00,0.0 +2020-05-29 16:00:00,0.0 +2020-05-29 17:00:00,0.0 +2020-05-29 18:00:00,6.5453333333333745 +2020-05-29 19:00:00,53.237111111110494 +2020-05-29 20:00:00,79.9571111111098 +2020-05-29 21:00:00,74.1943333333336 +2020-05-29 22:00:00,66.42511111111183 +2020-05-29 23:00:00,84.97911111111193 +2020-05-30 00:00:00,91.65533333333298 +2020-05-30 01:00:00,94.00777777777728 +2020-05-30 02:00:00,76.64400000000025 +2020-05-30 03:00:00,31.6574444444445 +2020-05-30 04:00:00,7.890111111111152 +2020-05-30 05:00:00,0.0 +2020-05-30 06:00:00,0.0 +2020-05-30 07:00:00,0.0 +2020-05-30 08:00:00,0.0 +2020-05-30 09:00:00,0.0 +2020-05-30 10:00:00,0.0 +2020-05-30 11:00:00,0.0 +2020-05-30 12:00:00,0.0 +2020-05-30 13:00:00,0.0 +2020-05-30 14:00:00,0.0 +2020-05-30 15:00:00,0.0 +2020-05-30 16:00:00,0.0 +2020-05-30 17:00:00,0.0 +2020-05-30 18:00:00,7.600666666666659 +2020-05-30 19:00:00,58.133888888889 +2020-05-30 20:00:00,86.1566666666681 +2020-05-30 21:00:00,88.33333333333482 +2020-05-30 22:00:00,89.7500000000015 +2020-05-30 23:00:00,92.24888888889042 +2020-05-31 00:00:00,95.18444444444603 +2020-05-31 01:00:00,96.36922222222363 +2020-05-31 02:00:00,92.10111111111058 +2020-05-31 03:00:00,60.892444444443164 +2020-05-31 04:00:00,13.528555555555462 +2020-05-31 05:00:00,0.0 +2020-05-31 06:00:00,0.0 +2020-05-31 07:00:00,0.0 +2020-05-31 08:00:00,0.0 +2020-05-31 09:00:00,0.0 +2020-05-31 10:00:00,0.0 +2020-05-31 11:00:00,0.0 +2020-05-31 12:00:00,0.0 +2020-05-31 13:00:00,0.0 +2020-05-31 14:00:00,0.0 +2020-05-31 15:00:00,0.0 +2020-05-31 16:00:00,0.0 +2020-05-31 17:00:00,0.0 +2020-05-31 18:00:00,7.5941111111110695 +2020-05-31 19:00:00,59.08833333333367 +2020-05-31 20:00:00,87.28444444444445 +2020-05-31 21:00:00,90.16777777777777 +2020-05-31 22:00:00,92.74666666666667 +2020-05-31 23:00:00,95.76222222222222 +2020-06-01 00:00:00,99.20566666666751 +2020-06-01 01:00:00,99.59333333333416 +2020-06-01 02:00:00,92.14544444444391 +2020-06-01 03:00:00,53.886111111111475 +2020-06-01 04:00:00,9.502222222222406 +2020-06-01 05:00:00,0.0 +2020-06-01 06:00:00,0.0 +2020-06-01 07:00:00,0.0 +2020-06-01 08:00:00,0.0 +2020-06-01 09:00:00,0.0 +2020-06-01 10:00:00,0.0 +2020-06-01 11:00:00,0.0 +2020-06-01 12:00:00,0.0 +2020-06-01 13:00:00,0.0 +2020-06-01 14:00:00,0.0 +2020-06-01 15:00:00,0.0 +2020-06-01 16:00:00,0.0 +2020-06-01 17:00:00,0.0 +2020-06-01 18:00:00,11.540111111111049 +2020-06-01 19:00:00,61.7966666666654 +2020-06-01 20:00:00,83.10111111110972 +2020-06-01 21:00:00,85.83222222222078 +2020-06-01 22:00:00,87.74666666666519 +2020-06-01 23:00:00,91.5422222222207 +2020-06-02 00:00:00,95.65666666666506 +2020-06-02 01:00:00,96.69999999999838 +2020-06-02 02:00:00,88.01855555555598 +2020-06-02 03:00:00,49.3286666666678 +2020-06-02 04:00:00,5.783555555555533 +2020-06-02 05:00:00,0.0 +2020-06-02 06:00:00,0.0 +2020-06-02 07:00:00,0.0 +2020-06-02 08:00:00,0.0 +2020-06-02 09:00:00,0.0 +2020-06-02 10:00:00,0.0 +2020-06-02 11:00:00,0.0 +2020-06-02 12:00:00,0.0 +2020-06-02 13:00:00,0.0 +2020-06-02 14:00:00,0.0 +2020-06-02 15:00:00,0.0 +2020-06-02 16:00:00,0.0 +2020-06-02 17:00:00,0.0 +2020-06-02 18:00:00,16.651777777777678 +2020-06-02 19:00:00,69.1616666666658 +2020-06-02 20:00:00,86.51000000000005 +2020-06-02 21:00:00,88.09555555555572 +2020-06-02 22:00:00,89.86888888888915 +2020-06-02 23:00:00,94.27466666666513 +2020-06-03 00:00:00,97.17666666666506 +2020-06-03 01:00:00,97.83199999999859 +2020-06-03 02:00:00,86.41411111111273 +2020-06-03 03:00:00,48.50799999999976 +2020-06-03 04:00:00,5.861777777777681 +2020-06-03 05:00:00,0.0 +2020-06-03 06:00:00,0.0 +2020-06-03 07:00:00,0.0 +2020-06-03 08:00:00,0.0 +2020-06-03 09:00:00,0.0 +2020-06-03 10:00:00,0.0 +2020-06-03 11:00:00,0.0 +2020-06-03 12:00:00,0.0 +2020-06-03 13:00:00,0.0 +2020-06-03 14:00:00,0.0 +2020-06-03 15:00:00,0.0 +2020-06-03 16:00:00,0.0 +2020-06-03 17:00:00,0.0 +2020-06-03 18:00:00,6.338666666666688 +2020-06-03 19:00:00,42.74777777777805 +2020-06-03 20:00:00,70.99855555555585 +2020-06-03 21:00:00,86.0 +2020-06-03 22:00:00,86.60977777777741 +2020-06-03 23:00:00,77.76255555555535 +2020-06-04 00:00:00,63.10611111111177 +2020-06-04 01:00:00,52.80211111111156 +2020-06-04 02:00:00,31.132444444444612 +2020-06-04 03:00:00,37.03733333333292 +2020-06-04 04:00:00,2.634444444444479 +2020-06-04 05:00:00,0.0 +2020-06-04 06:00:00,0.0 +2020-06-04 07:00:00,0.0 +2020-06-04 08:00:00,0.0 +2020-06-04 09:00:00,0.0 +2020-06-04 10:00:00,0.0 +2020-06-04 11:00:00,0.0 +2020-06-04 12:00:00,0.0 +2020-06-04 13:00:00,0.0 +2020-06-04 14:00:00,0.0 +2020-06-04 15:00:00,0.0 +2020-06-04 16:00:00,0.0 +2020-06-04 17:00:00,0.0 +2020-06-04 18:00:00,6.357555555555552 +2020-06-04 19:00:00,49.59922222222226 +2020-06-04 20:00:00,80.27555555555689 +2020-06-04 21:00:00,83.10844444444545 +2020-06-04 22:00:00,86.00966666666638 +2020-06-04 23:00:00,86.23099999999963 +2020-06-05 00:00:00,46.37911111111138 +2020-06-05 01:00:00,42.1098888888891 +2020-06-05 02:00:00,71.17933333333445 +2020-06-05 03:00:00,44.399111111110585 +2020-06-05 04:00:00,4.678444444444463 +2020-06-05 05:00:00,0.0 +2020-06-05 06:00:00,0.0 +2020-06-05 07:00:00,0.0 +2020-06-05 08:00:00,0.0 +2020-06-05 09:00:00,0.0 +2020-06-05 10:00:00,0.0 +2020-06-05 11:00:00,0.0 +2020-06-05 12:00:00,0.0 +2020-06-05 13:00:00,0.0 +2020-06-05 14:00:00,0.0 +2020-06-05 15:00:00,0.0 +2020-06-05 16:00:00,0.0 +2020-06-05 17:00:00,0.0 +2020-06-05 18:00:00,4.101777777777806 +2020-06-05 19:00:00,25.164111111110923 +2020-06-05 20:00:00,36.3476666666663 +2020-06-05 21:00:00,69.43088888888893 +2020-06-05 22:00:00,58.562999999999455 +2020-06-05 23:00:00,43.83988888888962 +2020-06-06 00:00:00,42.22911111111087 +2020-06-06 01:00:00,16.83000000000037 +2020-06-06 02:00:00,17.45888888888916 +2020-06-06 03:00:00,13.031555555555759 +2020-06-06 04:00:00,2.1665555555555525 +2020-06-06 05:00:00,0.0 +2020-06-06 06:00:00,0.0 +2020-06-06 07:00:00,0.0 +2020-06-06 08:00:00,0.0 +2020-06-06 09:00:00,0.0 +2020-06-06 10:00:00,0.0 +2020-06-06 11:00:00,0.0 +2020-06-06 12:00:00,0.0 +2020-06-06 13:00:00,0.0 +2020-06-06 14:00:00,0.0 +2020-06-06 15:00:00,0.0 +2020-06-06 16:00:00,0.0 +2020-06-06 17:00:00,0.0 +2020-06-06 18:00:00,15.226444444444603 +2020-06-06 19:00:00,65.7533333333341 +2020-06-06 20:00:00,83.6303333333333 +2020-06-06 21:00:00,85.68666666666667 +2020-06-06 22:00:00,87.03177777777715 +2020-06-06 23:00:00,80.9882222222224 +2020-06-07 00:00:00,89.48433333333183 +2020-06-07 01:00:00,59.82588888888837 +2020-06-07 02:00:00,28.825777777777816 +2020-06-07 03:00:00,21.59722222222283 +2020-06-07 04:00:00,1.644444444444458 +2020-06-07 05:00:00,0.0 +2020-06-07 06:00:00,0.0 +2020-06-07 07:00:00,0.0 +2020-06-07 08:00:00,0.0 +2020-06-07 09:00:00,0.0 +2020-06-07 10:00:00,0.0 +2020-06-07 11:00:00,0.0 +2020-06-07 12:00:00,0.0 +2020-06-07 13:00:00,0.0 +2020-06-07 14:00:00,0.0 +2020-06-07 15:00:00,0.0 +2020-06-07 16:00:00,0.0 +2020-06-07 17:00:00,0.0 +2020-06-07 18:00:00,5.892666666666656 +2020-06-07 19:00:00,33.55933333333331 +2020-06-07 20:00:00,31.055222222222373 +2020-06-07 21:00:00,54.67933333333319 +2020-06-07 22:00:00,35.55899999999991 +2020-06-07 23:00:00,31.479666666666855 +2020-06-08 00:00:00,29.702444444444044 +2020-06-08 01:00:00,20.39333333333341 +2020-06-08 02:00:00,18.022666666666627 +2020-06-08 03:00:00,6.63177777777763 +2020-06-08 04:00:00,0.5119999999999983 +2020-06-08 05:00:00,0.0 +2020-06-08 06:00:00,0.0 +2020-06-08 07:00:00,0.0 +2020-06-08 08:00:00,0.0 +2020-06-08 09:00:00,0.0 +2020-06-08 10:00:00,0.0 +2020-06-08 11:00:00,0.0 +2020-06-08 12:00:00,0.0 +2020-06-08 13:00:00,0.0 +2020-06-08 14:00:00,0.0 +2020-06-08 15:00:00,0.0 +2020-06-08 16:00:00,0.0 +2020-06-08 17:00:00,0.0 +2020-06-08 18:00:00,13.604000000000118 +2020-06-08 19:00:00,59.82633333333358 +2020-06-08 20:00:00,65.82199999999999 +2020-06-08 21:00:00,56.040222222222596 +2020-06-08 22:00:00,39.21633333333316 +2020-06-08 23:00:00,44.404222222222856 +2020-06-09 00:00:00,38.52777777777737 +2020-06-09 01:00:00,15.961333333333418 +2020-06-09 02:00:00,19.189888888889104 +2020-06-09 03:00:00,12.778333333333519 +2020-06-09 04:00:00,2.859888888888874 +2020-06-09 05:00:00,0.0 +2020-06-09 06:00:00,0.0 +2020-06-09 07:00:00,0.0 +2020-06-09 08:00:00,0.0 +2020-06-09 09:00:00,0.0 +2020-06-09 10:00:00,0.0 +2020-06-09 11:00:00,0.0 +2020-06-09 12:00:00,0.0 +2020-06-09 13:00:00,0.0 +2020-06-09 14:00:00,0.0 +2020-06-09 15:00:00,0.0 +2020-06-09 16:00:00,0.0 +2020-06-09 17:00:00,0.0 +2020-06-09 18:00:00,14.420666666666799 +2020-06-09 19:00:00,66.1393333333338 +2020-06-09 20:00:00,83.08777777777797 +2020-06-09 21:00:00,85.68333333333334 +2020-06-09 22:00:00,87.22333333333323 +2020-06-09 23:00:00,88.7672222222224 +2020-06-10 00:00:00,87.68966666666797 +2020-06-10 01:00:00,93.82311111110943 +2020-06-10 02:00:00,83.30800000000012 +2020-06-10 03:00:00,45.865666666666094 +2020-06-10 04:00:00,6.50999999999989 +2020-06-10 05:00:00,0.0 +2020-06-10 06:00:00,0.0 +2020-06-10 07:00:00,0.0 +2020-06-10 08:00:00,0.0 +2020-06-10 09:00:00,0.0 +2020-06-10 10:00:00,0.0 +2020-06-10 11:00:00,0.0 +2020-06-10 12:00:00,0.0 +2020-06-10 13:00:00,0.0 +2020-06-10 14:00:00,0.0 +2020-06-10 15:00:00,0.0 +2020-06-10 16:00:00,0.0 +2020-06-10 17:00:00,0.0 +2020-06-10 18:00:00,15.036555555555616 +2020-06-10 19:00:00,67.03022222222353 +2020-06-10 20:00:00,83.32555555555696 +2020-06-10 21:00:00,85.28777777777921 +2020-06-10 22:00:00,37.86866666666645 +2020-06-10 23:00:00,90.76011111111109 +2020-06-11 00:00:00,96.28333333333333 +2020-06-11 01:00:00,95.15244444444299 +2020-06-11 02:00:00,83.10088888888878 +2020-06-11 03:00:00,49.24444444444361 +2020-06-11 04:00:00,4.533555555555547 +2020-06-11 05:00:00,0.0 +2020-06-11 06:00:00,0.0 +2020-06-11 07:00:00,0.0 +2020-06-11 08:00:00,0.0 +2020-06-11 09:00:00,0.0 +2020-06-11 10:00:00,0.0 +2020-06-11 11:00:00,0.0 +2020-06-11 12:00:00,0.0 +2020-06-11 13:00:00,0.0 +2020-06-11 14:00:00,0.0 +2020-06-11 15:00:00,0.0 +2020-06-11 16:00:00,0.0 +2020-06-11 17:00:00,0.0 +2020-06-11 18:00:00,16.60477777777794 +2020-06-11 19:00:00,70.86711111111163 +2020-06-11 20:00:00,89.86222222222248 +2020-06-11 21:00:00,94.27666666666717 +2020-06-11 22:00:00,81.56988888888878 +2020-06-11 23:00:00,96.789111111111 +2020-06-12 00:00:00,81.16055555555513 +2020-06-12 01:00:00,89.78811111111125 +2020-06-12 02:00:00,70.72822222222223 +2020-06-12 03:00:00,18.789222222222218 +2020-06-12 04:00:00,3.7725555555555674 +2020-06-12 05:00:00,0.0 +2020-06-12 06:00:00,0.0 +2020-06-12 07:00:00,0.0 +2020-06-12 08:00:00,0.0 +2020-06-12 09:00:00,0.0 +2020-06-12 10:00:00,0.0 +2020-06-12 11:00:00,0.0 +2020-06-12 12:00:00,0.0 +2020-06-12 13:00:00,0.0 +2020-06-12 14:00:00,0.0 +2020-06-12 15:00:00,0.0 +2020-06-12 16:00:00,0.0 +2020-06-12 17:00:00,0.0 +2020-06-12 18:00:00,16.722000000000143 +2020-06-12 19:00:00,71.1758888888892 +2020-06-12 20:00:00,88.90333333333334 +2020-06-12 21:00:00,89.59666666666666 +2020-06-12 22:00:00,90.9811111111111 +2020-06-12 23:00:00,93.48333333333333 +2020-06-13 00:00:00,96.23666666666666 +2020-06-13 01:00:00,96.1454444444431 +2020-06-13 02:00:00,83.11133333333512 +2020-06-13 03:00:00,41.20822222222175 +2020-06-13 04:00:00,6.598555555555474 +2020-06-13 05:00:00,0.0 +2020-06-13 06:00:00,0.0 +2020-06-13 07:00:00,0.0 +2020-06-13 08:00:00,0.0 +2020-06-13 09:00:00,0.0 +2020-06-13 10:00:00,0.0 +2020-06-13 11:00:00,0.0 +2020-06-13 12:00:00,0.0 +2020-06-13 13:00:00,0.0 +2020-06-13 14:00:00,0.0 +2020-06-13 15:00:00,0.0 +2020-06-13 16:00:00,0.0 +2020-06-13 17:00:00,0.0 +2020-06-13 18:00:00,14.05433333333348 +2020-06-13 19:00:00,56.70844444444441 +2020-06-13 20:00:00,70.11177777777756 +2020-06-13 21:00:00,60.329777777778126 +2020-06-13 22:00:00,52.21777777777807 +2020-06-13 23:00:00,51.14444444444368 +2020-06-14 00:00:00,70.02355555555525 +2020-06-14 01:00:00,47.04788888888845 +2020-06-14 02:00:00,22.64355555555536 +2020-06-14 03:00:00,26.577555555555357 +2020-06-14 04:00:00,6.712666666666655 +2020-06-14 05:00:00,0.0 +2020-06-14 06:00:00,0.0 +2020-06-14 07:00:00,0.0 +2020-06-14 08:00:00,0.0 +2020-06-14 09:00:00,0.0 +2020-06-14 10:00:00,0.0 +2020-06-14 11:00:00,0.0 +2020-06-14 12:00:00,0.0 +2020-06-14 13:00:00,0.0 +2020-06-14 14:00:00,0.0 +2020-06-14 15:00:00,0.0 +2020-06-14 16:00:00,0.0 +2020-06-14 17:00:00,0.0 +2020-06-14 18:00:00,3.639555555555534 +2020-06-14 19:00:00,29.755333333333386 +2020-06-14 20:00:00,49.55944444444399 +2020-06-14 21:00:00,73.37122222222257 +2020-06-14 22:00:00,86.06522222222253 +2020-06-14 23:00:00,58.04211111111082 +2020-06-15 00:00:00,37.860222222222625 +2020-06-15 01:00:00,57.452444444444836 +2020-06-15 02:00:00,69.65888888888901 +2020-06-15 03:00:00,43.333888888888886 +2020-06-15 04:00:00,6.720666666666558 +2020-06-15 05:00:00,0.0 +2020-06-15 06:00:00,0.0 +2020-06-15 07:00:00,0.0 +2020-06-15 08:00:00,0.0 +2020-06-15 09:00:00,0.0 +2020-06-15 10:00:00,0.0 +2020-06-15 11:00:00,0.0 +2020-06-15 12:00:00,0.0 +2020-06-15 13:00:00,0.0 +2020-06-15 14:00:00,0.0 +2020-06-15 15:00:00,0.0 +2020-06-15 16:00:00,0.0 +2020-06-15 17:00:00,0.0 +2020-06-15 18:00:00,1.9824444444444516 +2020-06-15 19:00:00,18.305444444444518 +2020-06-15 20:00:00,27.760444444444584 +2020-06-15 21:00:00,43.851222222222404 +2020-06-15 22:00:00,51.92288888888797 +2020-06-15 23:00:00,36.7413333333337 +2020-06-16 00:00:00,46.49300000000027 +2020-06-16 01:00:00,16.866888888888507 +2020-06-16 02:00:00,12.55277777777771 +2020-06-16 03:00:00,8.88822222222231 +2020-06-16 04:00:00,2.403555555555544 +2020-06-16 05:00:00,0.0 +2020-06-16 06:00:00,0.0 +2020-06-16 07:00:00,0.0 +2020-06-16 08:00:00,0.0 +2020-06-16 09:00:00,0.0 +2020-06-16 10:00:00,0.0 +2020-06-16 11:00:00,0.0 +2020-06-16 12:00:00,0.0 +2020-06-16 13:00:00,0.0 +2020-06-16 14:00:00,0.0 +2020-06-16 15:00:00,0.0 +2020-06-16 16:00:00,0.0 +2020-06-16 17:00:00,0.0 +2020-06-16 18:00:00,12.95177777777788 +2020-06-16 19:00:00,60.56222222222236 +2020-06-16 20:00:00,78.24111111111166 +2020-06-16 21:00:00,78.05711111111124 +2020-06-16 22:00:00,56.7082222222222 +2020-06-16 23:00:00,85.45577777777781 +2020-06-17 00:00:00,66.48133333333331 +2020-06-17 01:00:00,89.43266666666611 +2020-06-17 02:00:00,89.88411111111188 +2020-06-17 03:00:00,50.83622222222207 +2020-06-17 04:00:00,7.106000000000124 +2020-06-17 05:00:00,0.0 +2020-06-17 06:00:00,0.0 +2020-06-17 07:00:00,0.0 +2020-06-17 08:00:00,0.0 +2020-06-17 09:00:00,0.0 +2020-06-17 10:00:00,0.0 +2020-06-17 11:00:00,0.0 +2020-06-17 12:00:00,0.0 +2020-06-17 13:00:00,0.0 +2020-06-17 14:00:00,0.0 +2020-06-17 15:00:00,0.0 +2020-06-17 16:00:00,0.0 +2020-06-17 17:00:00,0.0 +2020-06-17 18:00:00,5.124222222222223 +2020-06-17 19:00:00,22.157555555555547 +2020-06-17 20:00:00,35.10877777777793 +2020-06-17 21:00:00,54.53555555555491 +2020-06-17 22:00:00,24.512444444444693 +2020-06-17 23:00:00,41.37744444444414 +2020-06-18 00:00:00,43.60944444444449 +2020-06-18 01:00:00,16.18611111111081 +2020-06-18 02:00:00,13.707999999999844 +2020-06-18 03:00:00,10.661777777777518 +2020-06-18 04:00:00,0.6946666666666627 +2020-06-18 05:00:00,0.0 +2020-06-18 06:00:00,0.0 +2020-06-18 07:00:00,0.0 +2020-06-18 08:00:00,0.0 +2020-06-18 09:00:00,0.0 +2020-06-18 10:00:00,0.0 +2020-06-18 11:00:00,0.0 +2020-06-18 12:00:00,0.0 +2020-06-18 13:00:00,0.0 +2020-06-18 14:00:00,0.0 +2020-06-18 15:00:00,0.0 +2020-06-18 16:00:00,0.0 +2020-06-18 17:00:00,0.0 +2020-06-18 18:00:00,3.735333333333346 +2020-06-18 19:00:00,27.743333333332885 +2020-06-18 20:00:00,49.4665555555555 +2020-06-18 21:00:00,48.717555555554796 +2020-06-18 22:00:00,69.3063333333337 +2020-06-18 23:00:00,72.58455555555533 +2020-06-19 00:00:00,41.353888888888875 +2020-06-19 01:00:00,40.94377777777774 +2020-06-19 02:00:00,21.19433333333341 +2020-06-19 03:00:00,20.79277777777819 +2020-06-19 04:00:00,2.5938888888889173 +2020-06-19 05:00:00,0.0 +2020-06-19 06:00:00,0.0 +2020-06-19 07:00:00,0.0 +2020-06-19 08:00:00,0.0 +2020-06-19 09:00:00,0.0 +2020-06-19 10:00:00,0.0 +2020-06-19 11:00:00,0.0 +2020-06-19 12:00:00,0.0 +2020-06-19 13:00:00,0.0 +2020-06-19 14:00:00,0.0 +2020-06-19 15:00:00,0.0 +2020-06-19 16:00:00,0.0 +2020-06-19 17:00:00,0.0 +2020-06-19 18:00:00,6.494666666666674 +2020-06-19 19:00:00,15.023777777778017 +2020-06-19 20:00:00,20.31166666666696 +2020-06-19 21:00:00,38.56888888888922 +2020-06-19 22:00:00,54.35422222222199 +2020-06-19 23:00:00,91.93466666666684 +2020-06-20 00:00:00,103.18122222222316 +2020-06-20 01:00:00,101.66444444444615 +2020-06-20 02:00:00,94.00722222222167 +2020-06-20 03:00:00,54.728888888888065 +2020-06-20 04:00:00,8.220222222222223 +2020-06-20 05:00:00,0.0 +2020-06-20 06:00:00,0.0 +2020-06-20 07:00:00,0.0 +2020-06-20 08:00:00,0.0 +2020-06-20 09:00:00,0.0 +2020-06-20 10:00:00,0.0 +2020-06-20 11:00:00,0.0 +2020-06-20 12:00:00,0.0 +2020-06-20 13:00:00,0.0 +2020-06-20 14:00:00,0.0 +2020-06-20 15:00:00,0.0 +2020-06-20 16:00:00,0.0 +2020-06-20 17:00:00,0.0 +2020-06-20 18:00:00,17.89400000000005 +2020-06-20 19:00:00,72.47077777777784 +2020-06-20 20:00:00,91.4908888888886 +2020-06-20 21:00:00,94.2226666666664 +2020-06-20 22:00:00,96.67022222222222 +2020-06-20 23:00:00,99.65977777777755 +2020-06-21 00:00:00,101.1968888888885 +2020-06-21 01:00:00,98.44299999999943 +2020-06-21 02:00:00,91.09700000000008 +2020-06-21 03:00:00,54.62822222222221 +2020-06-21 04:00:00,8.634222222222224 +2020-06-21 05:00:00,0.0 +2020-06-21 06:00:00,0.0 +2020-06-21 07:00:00,0.0 +2020-06-21 08:00:00,0.0 +2020-06-21 09:00:00,0.0 +2020-06-21 10:00:00,0.0 +2020-06-21 11:00:00,0.0 +2020-06-21 12:00:00,0.0 +2020-06-21 13:00:00,0.0 +2020-06-21 14:00:00,0.0 +2020-06-21 15:00:00,0.0 +2020-06-21 16:00:00,0.0 +2020-06-21 17:00:00,0.0 +2020-06-21 18:00:00,2.852333333333339 +2020-06-21 19:00:00,38.54800000000003 +2020-06-21 20:00:00,84.03088888888911 +2020-06-21 21:00:00,88.46800000000042 +2020-06-21 22:00:00,92.0027777777779 +2020-06-21 23:00:00,96.29244444444478 +2020-06-22 00:00:00,99.02177777777806 +2020-06-22 01:00:00,98.4925555555556 +2020-06-22 02:00:00,88.47500000000004 +2020-06-22 03:00:00,49.97233333333333 +2020-06-22 04:00:00,8.192000000000002 +2020-06-22 05:00:00,0.0 +2020-06-22 06:00:00,0.0 +2020-06-22 07:00:00,0.0 +2020-06-22 08:00:00,0.0 +2020-06-22 09:00:00,0.0 +2020-06-22 10:00:00,0.0 +2020-06-22 11:00:00,0.0 +2020-06-22 12:00:00,0.0 +2020-06-22 13:00:00,0.0 +2020-06-22 14:00:00,0.0 +2020-06-22 15:00:00,0.0 +2020-06-22 16:00:00,0.0 +2020-06-22 17:00:00,0.0 +2020-06-22 18:00:00,11.983222222222224 +2020-06-22 19:00:00,65.01999999999998 +2020-06-22 20:00:00,88.07866666666699 +2020-06-22 21:00:00,91.13877777777725 +2020-06-22 22:00:00,93.3878888888888 +2020-06-22 23:00:00,99.01444444444422 +2020-06-23 00:00:00,100.47877777777755 +2020-06-23 01:00:00,101.11877777777785 +2020-06-23 02:00:00,91.24566666666674 +2020-06-23 03:00:00,53.15411111111114 +2020-06-23 04:00:00,8.426444444444442 +2020-06-23 05:00:00,0.0 +2020-06-23 06:00:00,0.0 +2020-06-23 07:00:00,0.0 +2020-06-23 08:00:00,0.0 +2020-06-23 09:00:00,0.0 +2020-06-23 10:00:00,0.0 +2020-06-23 11:00:00,0.0 +2020-06-23 12:00:00,0.0 +2020-06-23 13:00:00,0.0 +2020-06-23 14:00:00,0.0 +2020-06-23 15:00:00,0.0 +2020-06-23 16:00:00,0.0 +2020-06-23 17:00:00,0.0 +2020-06-23 18:00:00,17.15022222222222 +2020-06-23 19:00:00,73.20600000000015 +2020-06-23 20:00:00,90.31555555555494 +2020-06-23 21:00:00,87.98488888888805 +2020-06-23 22:00:00,88.03711111111092 +2020-06-23 23:00:00,91.15922222222243 +2020-06-24 00:00:00,94.16155555555656 +2020-06-24 01:00:00,94.98755555555692 +2020-06-24 02:00:00,87.13466666666667 +2020-06-24 03:00:00,50.891666666666595 +2020-06-24 04:00:00,8.102000000000002 +2020-06-24 05:00:00,0.0 +2020-06-24 06:00:00,0.0 +2020-06-24 07:00:00,0.0 +2020-06-24 08:00:00,0.0 +2020-06-24 09:00:00,0.0 +2020-06-24 10:00:00,0.0 +2020-06-24 11:00:00,0.0 +2020-06-24 12:00:00,0.0 +2020-06-24 13:00:00,0.0 +2020-06-24 14:00:00,0.0 +2020-06-24 15:00:00,0.0 +2020-06-24 16:00:00,0.0 +2020-06-24 17:00:00,0.0 +2020-06-24 18:00:00,16.54811111111111 +2020-06-24 19:00:00,66.77888888888894 +2020-06-24 20:00:00,82.35022222222308 +2020-06-24 21:00:00,84.25066666666703 +2020-06-24 22:00:00,86.54322222222251 +2020-06-24 23:00:00,89.61322222222239 +2020-06-25 00:00:00,92.6691111111109 +2020-06-25 01:00:00,96.07377777777782 +2020-06-25 02:00:00,89.91888888888874 +2020-06-25 03:00:00,53.19866666666669 +2020-06-25 04:00:00,8.541222222222217 +2020-06-25 05:00:00,0.0 +2020-06-25 06:00:00,0.0 +2020-06-25 07:00:00,0.0 +2020-06-25 08:00:00,0.0 +2020-06-25 09:00:00,0.0 +2020-06-25 10:00:00,0.0 +2020-06-25 11:00:00,0.0 +2020-06-25 12:00:00,0.0 +2020-06-25 13:00:00,0.0 +2020-06-25 14:00:00,0.0 +2020-06-25 15:00:00,0.0 +2020-06-25 16:00:00,0.0 +2020-06-25 17:00:00,0.0 +2020-06-25 18:00:00,16.829111111111107 +2020-06-25 19:00:00,55.50922222222226 +2020-06-25 20:00:00,79.22222222222216 +2020-06-25 21:00:00,79.5599999999999 +2020-06-25 22:00:00,78.74322222222224 +2020-06-25 23:00:00,86.87088888888914 +2020-06-26 00:00:00,89.78544444444451 +2020-06-26 01:00:00,89.98955555555455 +2020-06-26 02:00:00,86.31155555555571 +2020-06-26 03:00:00,50.94300000000008 +2020-06-26 04:00:00,8.294333333333324 +2020-06-26 05:00:00,0.0 +2020-06-26 06:00:00,0.0 +2020-06-26 07:00:00,0.0 +2020-06-26 08:00:00,0.0 +2020-06-26 09:00:00,0.0 +2020-06-26 10:00:00,0.0 +2020-06-26 11:00:00,0.0 +2020-06-26 12:00:00,0.0 +2020-06-26 13:00:00,0.0 +2020-06-26 14:00:00,0.0 +2020-06-26 15:00:00,0.0 +2020-06-26 16:00:00,0.0 +2020-06-26 17:00:00,0.0 +2020-06-26 18:00:00,16.535777777777778 +2020-06-26 19:00:00,66.94377777777781 +2020-06-26 20:00:00,82.52333333333362 +2020-06-26 21:00:00,85.41044444444462 +2020-06-26 22:00:00,84.8434444444443 +2020-06-26 23:00:00,84.91344444444424 +2020-06-27 00:00:00,78.26544444444454 +2020-06-27 01:00:00,70.87266666666666 +2020-06-27 02:00:00,23.96811111111115 +2020-06-27 03:00:00,13.952555555555547 +2020-06-27 04:00:00,2.0497777777777797 +2020-06-27 05:00:00,0.0 +2020-06-27 06:00:00,0.0 +2020-06-27 07:00:00,0.0 +2020-06-27 08:00:00,0.0 +2020-06-27 09:00:00,0.0 +2020-06-27 10:00:00,0.0 +2020-06-27 11:00:00,0.0 +2020-06-27 12:00:00,0.0 +2020-06-27 13:00:00,0.0 +2020-06-27 14:00:00,0.0 +2020-06-27 15:00:00,0.0 +2020-06-27 16:00:00,0.0 +2020-06-27 17:00:00,0.0 +2020-06-27 18:00:00,4.758888888888897 +2020-06-27 19:00:00,11.389111111111118 +2020-06-27 20:00:00,14.726888888888853 +2020-06-27 21:00:00,31.349111111111032 +2020-06-27 22:00:00,25.11400000000001 +2020-06-27 23:00:00,26.380000000000017 +2020-06-28 00:00:00,6.934888888888913 +2020-06-28 01:00:00,4.068666666666653 +2020-06-28 02:00:00,19.331333333333355 +2020-06-28 03:00:00,11.569777777777823 +2020-06-28 04:00:00,4.8472222222222205 +2020-06-28 05:00:00,0.0 +2020-06-28 06:00:00,0.0 +2020-06-28 07:00:00,0.0 +2020-06-28 08:00:00,0.0 +2020-06-28 09:00:00,0.0 +2020-06-28 10:00:00,0.0 +2020-06-28 11:00:00,0.0 +2020-06-28 12:00:00,0.0 +2020-06-28 13:00:00,0.0 +2020-06-28 14:00:00,0.0 +2020-06-28 15:00:00,0.0 +2020-06-28 16:00:00,0.0 +2020-06-28 17:00:00,0.0 +2020-06-28 18:00:00,0.4027777777777775 +2020-06-28 19:00:00,3.460111111111106 +2020-06-28 20:00:00,13.235555555555557 +2020-06-28 21:00:00,19.35299999999997 +2020-06-28 22:00:00,12.770333333333333 +2020-06-28 23:00:00,22.218444444444504 +2020-06-29 00:00:00,14.043555555555576 +2020-06-29 01:00:00,24.121111111111098 +2020-06-29 02:00:00,6.548888888888871 +2020-06-29 03:00:00,2.8906666666666743 +2020-06-29 04:00:00,0.0 +2020-06-29 05:00:00,0.0 +2020-06-29 06:00:00,0.0 +2020-06-29 07:00:00,0.0 +2020-06-29 08:00:00,0.0 +2020-06-29 09:00:00,0.0 +2020-06-29 10:00:00,0.0 +2020-06-29 11:00:00,0.0 +2020-06-29 12:00:00,0.0 +2020-06-29 13:00:00,0.0 +2020-06-29 14:00:00,0.0 +2020-06-29 15:00:00,0.0 +2020-06-29 16:00:00,0.0 +2020-06-29 17:00:00,0.0 +2020-06-29 18:00:00,4.374222222222222 +2020-06-29 19:00:00,40.636444444444415 +2020-06-29 20:00:00,62.010222222222204 +2020-06-29 21:00:00,71.53811111111123 +2020-06-29 22:00:00,84.02422222222293 +2020-06-29 23:00:00,88.7507777777774 +2020-06-30 00:00:00,92.82999999999997 +2020-06-30 01:00:00,83.9309999999999 +2020-06-30 02:00:00,13.241666666666667 +2020-06-30 03:00:00,9.449222222222225 +2020-06-30 04:00:00,0.37811111111111123 +2020-06-30 05:00:00,0.0 +2020-06-30 06:00:00,0.0 +2020-06-30 07:00:00,0.0 +2020-06-30 08:00:00,0.0 +2020-06-30 09:00:00,0.0 +2020-06-30 10:00:00,0.0 +2020-06-30 11:00:00,0.0 +2020-06-30 12:00:00,0.0 +2020-06-30 13:00:00,0.0 +2020-06-30 14:00:00,0.0 +2020-06-30 15:00:00,0.0 +2020-06-30 16:00:00,0.0 +2020-06-30 17:00:00,0.0 +2020-06-30 18:00:00,15.362222222222229 +2020-06-30 19:00:00,66.39711111111122 +2020-06-30 20:00:00,82.94177777777828 +2020-06-30 21:00:00,85.5000000000002 +2020-06-30 22:00:00,86.95533333333323 +2020-06-30 23:00:00,90.77633333333362 +2020-07-01 00:00:00,93.64233333333307 +2020-07-01 01:00:00,94.8165555555556 +2020-07-01 02:00:00,89.6595555555557 +2020-07-01 03:00:00,52.175444444444494 +2020-07-01 04:00:00,8.764111111111111 +2020-07-01 05:00:00,0.0 +2020-07-01 06:00:00,0.0 +2020-07-01 07:00:00,0.0 +2020-07-01 08:00:00,0.0 +2020-07-01 09:00:00,0.0 +2020-07-01 10:00:00,0.0 +2020-07-01 11:00:00,0.0 +2020-07-01 12:00:00,0.0 +2020-07-01 13:00:00,0.0 +2020-07-01 14:00:00,0.0 +2020-07-01 15:00:00,0.0 +2020-07-01 16:00:00,0.0 +2020-07-01 17:00:00,0.0 +2020-07-01 18:00:00,17.04744444444444 +2020-07-01 19:00:00,67.11500000000007 +2020-07-01 20:00:00,82.23811111111108 +2020-07-01 21:00:00,84.3391111111108 +2020-07-01 22:00:00,83.86266666666675 +2020-07-01 23:00:00,76.7652222222222 +2020-07-02 00:00:00,87.1234444444446 +2020-07-02 01:00:00,91.7455555555554 +2020-07-02 02:00:00,85.71911111111139 +2020-07-02 03:00:00,51.950111111111156 +2020-07-02 04:00:00,9.044000000000006 +2020-07-02 05:00:00,0.0 +2020-07-02 06:00:00,0.0 +2020-07-02 07:00:00,0.0 +2020-07-02 08:00:00,0.0 +2020-07-02 09:00:00,0.0 +2020-07-02 10:00:00,0.0 +2020-07-02 11:00:00,0.0 +2020-07-02 12:00:00,0.0 +2020-07-02 13:00:00,0.0 +2020-07-02 14:00:00,0.0 +2020-07-02 15:00:00,0.0 +2020-07-02 16:00:00,0.0 +2020-07-02 17:00:00,0.0 +2020-07-02 18:00:00,10.608666666666668 +2020-07-02 19:00:00,53.446222222222204 +2020-07-02 20:00:00,82.71888888888839 +2020-07-02 21:00:00,85.25511111111089 +2020-07-02 22:00:00,86.26066666666611 +2020-07-02 23:00:00,88.31744444444381 +2020-07-03 00:00:00,91.07144444444471 +2020-07-03 01:00:00,30.23677777777777 +2020-07-03 02:00:00,78.8214444444444 +2020-07-03 03:00:00,47.01866666666664 +2020-07-03 04:00:00,8.799333333333337 +2020-07-03 05:00:00,0.0 +2020-07-03 06:00:00,0.0 +2020-07-03 07:00:00,0.0 +2020-07-03 08:00:00,0.0 +2020-07-03 09:00:00,0.0 +2020-07-03 10:00:00,0.0 +2020-07-03 11:00:00,0.0 +2020-07-03 12:00:00,0.0 +2020-07-03 13:00:00,0.0 +2020-07-03 14:00:00,0.0 +2020-07-03 15:00:00,0.0 +2020-07-03 16:00:00,0.0 +2020-07-03 17:00:00,0.0 +2020-07-03 18:00:00,19.211333333333346 +2020-07-03 19:00:00,70.847 +2020-07-03 20:00:00,86.27422222222172 +2020-07-03 21:00:00,86.4341111111111 +2020-07-03 22:00:00,86.7795555555555 +2020-07-03 23:00:00,89.63333333333377 +2020-07-04 00:00:00,92.74122222222195 +2020-07-04 01:00:00,91.82411111111074 +2020-07-04 02:00:00,75.2553333333334 +2020-07-04 03:00:00,44.17744444444438 +2020-07-04 04:00:00,9.26988888888891 +2020-07-04 05:00:00,0.0 +2020-07-04 06:00:00,0.0 +2020-07-04 07:00:00,0.0 +2020-07-04 08:00:00,0.0 +2020-07-04 09:00:00,0.0 +2020-07-04 10:00:00,0.0 +2020-07-04 11:00:00,0.0 +2020-07-04 12:00:00,0.0 +2020-07-04 13:00:00,0.0 +2020-07-04 14:00:00,0.0 +2020-07-04 15:00:00,0.0 +2020-07-04 16:00:00,0.0 +2020-07-04 17:00:00,0.0 +2020-07-04 18:00:00,20.18144444444445 +2020-07-04 19:00:00,72.72877777777776 +2020-07-04 20:00:00,89.5924444444449 +2020-07-04 21:00:00,92.38499999999888 +2020-07-04 22:00:00,92.39377777777798 +2020-07-04 23:00:00,91.97866666666668 +2020-07-05 00:00:00,92.17122222222065 +2020-07-05 01:00:00,92.0169999999995 +2020-07-05 02:00:00,90.24799999999983 +2020-07-05 03:00:00,58.36422222222225 +2020-07-05 04:00:00,10.910222222222192 +2020-07-05 05:00:00,0.0 +2020-07-05 06:00:00,0.0 +2020-07-05 07:00:00,0.0 +2020-07-05 08:00:00,0.0 +2020-07-05 09:00:00,0.0 +2020-07-05 10:00:00,0.0 +2020-07-05 11:00:00,0.0 +2020-07-05 12:00:00,0.0 +2020-07-05 13:00:00,0.0 +2020-07-05 14:00:00,0.0 +2020-07-05 15:00:00,0.0 +2020-07-05 16:00:00,0.0 +2020-07-05 17:00:00,0.0 +2020-07-05 18:00:00,21.78266666666666 +2020-07-05 19:00:00,75.50022222222209 +2020-07-05 20:00:00,90.05955555555617 +2020-07-05 21:00:00,92.05111111111066 +2020-07-05 22:00:00,92.37100000000005 +2020-07-05 23:00:00,92.08922222222229 +2020-07-06 00:00:00,92.1000000000004 +2020-07-06 01:00:00,92.12222222222269 +2020-07-06 02:00:00,90.25400000000002 +2020-07-06 03:00:00,58.26944444444441 +2020-07-06 04:00:00,10.286666666666672 +2020-07-06 05:00:00,0.0 +2020-07-06 06:00:00,0.0 +2020-07-06 07:00:00,0.0 +2020-07-06 08:00:00,0.0 +2020-07-06 09:00:00,0.0 +2020-07-06 10:00:00,0.0 +2020-07-06 11:00:00,0.0 +2020-07-06 12:00:00,0.0 +2020-07-06 13:00:00,0.0 +2020-07-06 14:00:00,0.0 +2020-07-06 15:00:00,0.0 +2020-07-06 16:00:00,0.0 +2020-07-06 17:00:00,0.0 +2020-07-06 18:00:00,21.5938888888889 +2020-07-06 19:00:00,74.72355555555566 +2020-07-06 20:00:00,88.35188888888923 +2020-07-06 21:00:00,89.46866666666664 +2020-07-06 22:00:00,89.63155555555615 +2020-07-06 23:00:00,91.81799999999959 +2020-07-07 00:00:00,92.14922222222276 +2020-07-07 01:00:00,91.98077777777817 +2020-07-07 02:00:00,89.17288888888896 +2020-07-07 03:00:00,56.494444444444504 +2020-07-07 04:00:00,10.529111111111105 +2020-07-07 05:00:00,0.0 +2020-07-07 06:00:00,0.0 +2020-07-07 07:00:00,0.0 +2020-07-07 08:00:00,0.0 +2020-07-07 09:00:00,0.0 +2020-07-07 10:00:00,0.0 +2020-07-07 11:00:00,0.0 +2020-07-07 12:00:00,0.0 +2020-07-07 13:00:00,0.0 +2020-07-07 14:00:00,0.0 +2020-07-07 15:00:00,0.0 +2020-07-07 16:00:00,0.0 +2020-07-07 17:00:00,0.0 +2020-07-07 18:00:00,21.080999999999978 +2020-07-07 19:00:00,71.06422222222204 +2020-07-07 20:00:00,88.33233333333322 +2020-07-07 21:00:00,90.85211111111063 +2020-07-07 22:00:00,91.25077777777796 +2020-07-07 23:00:00,92.22622222222128 +2020-07-08 00:00:00,92.17577777777817 +2020-07-08 01:00:00,92.07566666666727 +2020-07-08 02:00:00,88.2316666666665 +2020-07-08 03:00:00,53.675555555555654 +2020-07-08 04:00:00,10.212888888888902 +2020-07-08 05:00:00,0.0 +2020-07-08 06:00:00,0.0 +2020-07-08 07:00:00,0.0 +2020-07-08 08:00:00,0.0 +2020-07-08 09:00:00,0.0 +2020-07-08 10:00:00,0.0 +2020-07-08 11:00:00,0.0 diff --git a/greykite/data/hourly/hourly_windpower.csv b/greykite/data/hourly/hourly_windpower.csv new file mode 100644 index 0000000..3de2e89 --- /dev/null +++ b/greykite/data/hourly/hourly_windpower.csv @@ -0,0 +1,8221 @@ +ts,y +2019-08-01 00:00:00,19.110333333333422 +2019-08-01 01:00:00,15.088333333333296 +2019-08-01 02:00:00,7.5765555555555615 +2019-08-01 03:00:00,10.857666666666729 +2019-08-01 04:00:00,12.770777777777731 +2019-08-01 05:00:00,13.699111111110945 +2019-08-01 06:00:00,13.076444444444366 +2019-08-01 07:00:00,14.72322222222216 +2019-08-01 08:00:00,11.590111111111092 +2019-08-01 09:00:00,14.813000000000011 +2019-08-01 10:00:00,25.52577777777774 +2019-08-01 11:00:00,29.699000000000048 +2019-08-01 12:00:00,26.24399999999983 +2019-08-01 13:00:00,18.024777777777786 +2019-08-01 14:00:00,20.279666666666753 +2019-08-01 15:00:00,28.633444444444407 +2019-08-01 16:00:00,28.424333333333408 +2019-08-01 17:00:00,21.620555555555413 +2019-08-01 18:00:00,6.00833333333339 +2019-08-01 19:00:00,5.965333333333342 +2019-08-01 20:00:00,17.643111111110954 +2019-08-01 21:00:00,26.941888888888865 +2019-08-01 22:00:00,38.15788888888909 +2019-08-01 23:00:00,35.078333333333404 +2019-08-02 00:00:00,29.496666666666673 +2019-08-02 01:00:00,18.238111111111092 +2019-08-02 02:00:00,20.847444444444438 +2019-08-02 03:00:00,18.71322222222226 +2019-08-02 04:00:00,17.61966666666661 +2019-08-02 05:00:00,15.584888888888962 +2019-08-02 06:00:00,12.321666666666717 +2019-08-02 07:00:00,10.355111111111116 +2019-08-02 08:00:00,10.387111111111178 +2019-08-02 09:00:00,-0.9516666666666592 +2019-08-02 10:00:00,7.274444444444455 +2019-08-02 11:00:00,96.63922222222247 +2019-08-02 12:00:00,104.98122222222285 +2019-08-02 13:00:00,104.98311111111074 +2019-08-02 14:00:00,105.00533333333257 +2019-08-02 15:00:00,104.94666666666672 +2019-08-02 16:00:00,105.02377777777784 +2019-08-02 17:00:00,104.93666666666621 +2019-08-02 18:00:00,105.02333333333328 +2019-08-02 19:00:00,104.97144444444605 +2019-08-02 20:00:00,104.96133333333346 +2019-08-02 21:00:00,105.0145555555564 +2019-08-02 22:00:00,103.167555555556 +2019-08-02 23:00:00,104.71400000000007 +2019-08-03 00:00:00,104.727444444444 +2019-08-03 01:00:00,103.05422222222266 +2019-08-03 02:00:00,104.27177777777933 +2019-08-03 03:00:00,99.26533333333354 +2019-08-03 04:00:00,93.84499999999937 +2019-08-03 05:00:00,86.51722222222237 +2019-08-03 06:00:00,51.15600000000055 +2019-08-03 07:00:00,46.862777777777914 +2019-08-03 08:00:00,45.43311111111103 +2019-08-03 09:00:00,69.53855555555596 +2019-08-03 10:00:00,74.14366666666686 +2019-08-03 11:00:00,76.30500000000019 +2019-08-03 12:00:00,82.46444444444431 +2019-08-03 13:00:00,69.20133333333347 +2019-08-03 14:00:00,100.95466666666633 +2019-08-03 15:00:00,104.94288888888862 +2019-08-03 16:00:00,104.97766666666753 +2019-08-03 17:00:00,104.83044444444393 +2019-08-03 18:00:00,103.24466666666598 +2019-08-03 19:00:00,104.97744444444379 +2019-08-03 20:00:00,101.27877777777839 +2019-08-03 21:00:00,91.69022222222257 +2019-08-03 22:00:00,95.29599999999984 +2019-08-03 23:00:00,94.25055555555572 +2019-08-04 00:00:00,76.81233333333363 +2019-08-04 01:00:00,98.86811111111102 +2019-08-04 02:00:00,108.2301111111112 +2019-08-04 03:00:00,88.04544444444436 +2019-08-04 04:00:00,111.44311111111071 +2019-08-04 05:00:00,110.32444444444391 +2019-08-04 06:00:00,117.77555555555557 +2019-08-04 07:00:00,121.75677777777777 +2019-08-04 08:00:00,124.60611111111024 +2019-08-04 09:00:00,124.07688888888813 +2019-08-04 10:00:00,125.03588888888802 +2019-08-04 11:00:00,124.91166666666714 +2019-08-04 12:00:00,124.8787777777785 +2019-08-04 13:00:00,122.69622222222192 +2019-08-04 14:00:00,79.32299999999934 +2019-08-04 15:00:00,73.79999999999994 +2019-08-04 16:00:00,78.07555555555498 +2019-08-04 17:00:00,72.48777777777772 +2019-08-04 18:00:00,62.51744444444442 +2019-08-04 19:00:00,61.910777777778 +2019-08-04 20:00:00,50.51844444444474 +2019-08-04 21:00:00,51.63066666666657 +2019-08-04 22:00:00,79.74577777777762 +2019-08-04 23:00:00,91.8291111111112 +2019-08-05 00:00:00,88.77722222222148 +2019-08-05 01:00:00,86.65422222222185 +2019-08-05 02:00:00,84.2898888888889 +2019-08-05 03:00:00,84.00388888888884 +2019-08-05 04:00:00,85.40455555555558 +2019-08-05 05:00:00,124.19722222222249 +2019-08-05 06:00:00,124.16511111111127 +2019-08-05 07:00:00,124.88711111111022 +2019-08-05 08:00:00,121.83122222222268 +2019-08-05 09:00:00,120.5162222222238 +2019-08-05 10:00:00,119.65699999999855 +2019-08-05 11:00:00,119.46644444444453 +2019-08-05 12:00:00,119.40011111111107 +2019-08-05 13:00:00,110.71122222222172 +2019-08-05 14:00:00,86.80033333333293 +2019-08-05 15:00:00,88.88655555555528 +2019-08-05 16:00:00,91.8471111111105 +2019-08-05 17:00:00,93.79144444444445 +2019-08-05 18:00:00,93.46622222222253 +2019-08-05 19:00:00,96.38511111111175 +2019-08-05 20:00:00,105.70311111111079 +2019-08-05 21:00:00,117.94522222222218 +2019-08-05 22:00:00,100.31277777777784 +2019-08-05 23:00:00,98.51511111111118 +2019-08-06 00:00:00,92.06933333333353 +2019-08-06 01:00:00,78.96433333333349 +2019-08-06 02:00:00,41.66466666666671 +2019-08-06 03:00:00,19.41144444444428 +2019-08-06 04:00:00,12.80400000000007 +2019-08-06 05:00:00,10.909444444444405 +2019-08-06 06:00:00,14.093000000000123 +2019-08-06 07:00:00,14.675000000000095 +2019-08-06 08:00:00,10.80711111111111 +2019-08-06 09:00:00,9.301111111111048 +2019-08-06 10:00:00,6.843444444444585 +2019-08-06 11:00:00,8.677999999999992 +2019-08-06 12:00:00,10.925777777777787 +2019-08-06 13:00:00,13.62122222222222 +2019-08-06 14:00:00,18.722444444444374 +2019-08-06 15:00:00,14.746999999999991 +2019-08-06 16:00:00,10.22544444444445 +2019-08-06 17:00:00,4.964333333333329 +2019-08-06 18:00:00,1.5417777777777557 +2019-08-06 19:00:00,0.5972222222222173 +2019-08-06 20:00:00,-0.6535555555555487 +2019-08-06 21:00:00,-0.874777777777764 +2019-08-06 22:00:00,-0.8695555555555441 +2019-08-06 23:00:00,-0.6873333333333219 +2019-08-07 00:00:00,-0.18899999999999875 +2019-08-07 01:00:00,2.575222222222231 +2019-08-07 02:00:00,8.635111111111147 +2019-08-07 03:00:00,6.0386666666666375 +2019-08-07 04:00:00,10.26211111111107 +2019-08-07 05:00:00,8.503888888888962 +2019-08-07 06:00:00,8.169555555555675 +2019-08-07 07:00:00,6.131444444444503 +2019-08-07 08:00:00,1.7276666666666807 +2019-08-07 09:00:00,0.3290000000000007 +2019-08-07 10:00:00,2.734222222222201 +2019-08-07 11:00:00,1.0022222222222446 +2019-08-07 12:00:00,0.39644444444444094 +2019-08-07 13:00:00,1.8088888888888903 +2019-08-07 14:00:00,1.5300000000000042 +2019-08-07 15:00:00,0.4613333333333391 +2019-08-07 16:00:00,-0.732777777777772 +2019-08-07 17:00:00,-0.8999999999999857 +2019-08-07 18:00:00,-0.8999999999999857 +2019-08-07 19:00:00,-0.28055555555554945 +2019-08-07 20:00:00,1.181777777777785 +2019-08-07 21:00:00,0.9257777777777702 +2019-08-07 22:00:00,1.9175555555555408 +2019-08-07 23:00:00,2.2215555555555455 +2019-08-08 00:00:00,-0.34044444444444566 +2019-08-08 01:00:00,-0.41233333333333666 +2019-08-08 02:00:00,-0.3165555555555579 +2019-08-08 03:00:00,-0.8147777777777704 +2019-08-08 04:00:00,-0.868999999999984 +2019-08-08 05:00:00,-0.9056666666666521 +2019-08-08 06:00:00,-0.8638888888888758 +2019-08-08 07:00:00,-0.8773333333333222 +2019-08-08 08:00:00,-0.6217777777777864 +2019-08-08 09:00:00,1.9063333333333397 +2019-08-08 10:00:00,12.564444444444488 +2019-08-08 11:00:00,23.333777777777932 +2019-08-08 12:00:00,33.26577777777758 +2019-08-08 13:00:00,36.64399999999984 +2019-08-08 14:00:00,36.43355555555538 +2019-08-08 15:00:00,39.03611111111138 +2019-08-08 16:00:00,27.045222222222172 +2019-08-08 17:00:00,20.502444444444475 +2019-08-08 18:00:00,52.40788888888862 +2019-08-08 19:00:00,63.37588888888893 +2019-08-08 20:00:00,61.64011111111114 +2019-08-08 21:00:00,58.25133333333339 +2019-08-08 22:00:00,41.32522222222215 +2019-08-08 23:00:00,43.11133333333317 +2019-08-09 00:00:00,57.259777777777764 +2019-08-09 01:00:00,59.36244444444416 +2019-08-09 02:00:00,52.17855555555549 +2019-08-09 03:00:00,41.88677777777794 +2019-08-09 04:00:00,36.71833333333326 +2019-08-09 05:00:00,26.626888888888907 +2019-08-09 06:00:00,18.243222222222272 +2019-08-09 07:00:00,18.617333333333413 +2019-08-09 08:00:00,37.33688888888888 +2019-08-09 09:00:00,66.87888888888851 +2019-08-09 10:00:00,97.1771111111107 +2019-08-09 11:00:00,103.41722222222218 +2019-08-09 12:00:00,111.79577777777799 +2019-08-09 13:00:00,121.20288888888807 +2019-08-09 14:00:00,121.56866666666735 +2019-08-09 15:00:00,121.976888888887 +2019-08-09 16:00:00,122.61711111111018 +2019-08-09 17:00:00,122.32755555555431 +2019-08-09 18:00:00,122.4953333333331 +2019-08-09 19:00:00,121.69088888888831 +2019-08-09 20:00:00,117.3204444444444 +2019-08-09 21:00:00,119.48855555555551 +2019-08-09 22:00:00,110.37977777777799 +2019-08-09 23:00:00,74.19766666666665 +2019-08-10 00:00:00,67.43388888888919 +2019-08-10 01:00:00,61.031666666666744 +2019-08-10 02:00:00,43.500000000000156 +2019-08-10 03:00:00,52.49122222222211 +2019-08-10 04:00:00,51.434444444444395 +2019-08-10 05:00:00,67.24699999999987 +2019-08-10 06:00:00,90.44911111111114 +2019-08-10 07:00:00,116.22477777777769 +2019-08-10 08:00:00,122.78677777777676 +2019-08-10 09:00:00,124.76466666666609 +2019-08-10 10:00:00,124.31688888888839 +2019-08-10 11:00:00,122.25211111111086 +2019-08-10 12:00:00,122.07944444444452 +2019-08-10 13:00:00,122.29411111111241 +2019-08-10 14:00:00,121.61788888888842 +2019-08-10 15:00:00,116.8511111111103 +2019-08-10 16:00:00,116.57155555555464 +2019-08-10 17:00:00,116.13400000000019 +2019-08-10 18:00:00,116.32155555555573 +2019-08-10 19:00:00,114.02422222222174 +2019-08-10 20:00:00,119.65522222222286 +2019-08-10 21:00:00,117.51533333333293 +2019-08-10 22:00:00,108.99155555555556 +2019-08-10 23:00:00,116.8138888888891 +2019-08-11 00:00:00,111.96300000000016 +2019-08-11 01:00:00,72.17288888888864 +2019-08-11 02:00:00,41.36011111111131 +2019-08-11 03:00:00,24.37277777777755 +2019-08-11 04:00:00,14.40866666666665 +2019-08-11 05:00:00,9.468555555555598 +2019-08-11 06:00:00,11.201222222222263 +2019-08-11 07:00:00,8.13033333333339 +2019-08-11 08:00:00,6.87044444444444 +2019-08-11 09:00:00,0.4155555555555571 +2019-08-11 10:00:00,0.12844444444444442 +2019-08-11 11:00:00,2.9827777777777915 +2019-08-11 12:00:00,11.412777777777801 +2019-08-11 13:00:00,13.276666666666571 +2019-08-11 14:00:00,16.111999999999995 +2019-08-11 15:00:00,25.781333333333173 +2019-08-11 16:00:00,24.49788888888882 +2019-08-11 17:00:00,38.540666666666795 +2019-08-11 18:00:00,44.24366666666672 +2019-08-11 19:00:00,49.584777777777774 +2019-08-11 20:00:00,50.155666666666775 +2019-08-11 21:00:00,49.20133333333335 +2019-08-11 22:00:00,31.3747777777775 +2019-08-11 23:00:00,54.38199999999995 +2019-08-12 00:00:00,47.47755555555535 +2019-08-12 01:00:00,34.11377777777772 +2019-08-12 02:00:00,23.07966666666658 +2019-08-12 03:00:00,17.228222222222247 +2019-08-12 04:00:00,11.623777777777763 +2019-08-12 05:00:00,8.85388888888881 +2019-08-12 06:00:00,12.326111111111166 +2019-08-12 07:00:00,37.62633333333327 +2019-08-12 08:00:00,62.028444444444425 +2019-08-12 09:00:00,74.48055555555575 +2019-08-12 10:00:00,70.34400000000012 +2019-08-12 11:00:00,109.07733333333356 +2019-08-12 12:00:00,113.1398888888889 +2019-08-12 13:00:00,71.58011111111111 +2019-08-12 14:00:00,91.02000000000004 +2019-08-12 15:00:00,83.48188888888899 +2019-08-12 16:00:00,115.35244444444518 +2019-08-12 17:00:00,100.28011111111145 +2019-08-12 18:00:00,101.70677777777796 +2019-08-12 19:00:00,107.04999999999943 +2019-08-12 20:00:00,117.52866666666696 +2019-08-12 21:00:00,111.98133333333337 +2019-08-12 22:00:00,8.481 +2019-08-12 23:00:00,45.025333333333364 +2019-08-13 00:00:00,84.6792222222229 +2019-08-13 01:00:00,102.51844444444417 +2019-08-13 02:00:00,111.39822222222233 +2019-08-13 03:00:00,85.46266666666608 +2019-08-13 04:00:00,84.72400000000015 +2019-08-13 05:00:00,97.9590000000002 +2019-08-13 06:00:00,94.76444444444452 +2019-08-13 07:00:00,102.03299999999963 +2019-08-13 08:00:00,59.02466666666692 +2019-08-13 09:00:00,102.357666666667 +2019-08-13 10:00:00,101.83911111111124 +2019-08-13 11:00:00,82.92122222222223 +2019-08-13 12:00:00,84.94511111111105 +2019-08-13 13:00:00,74.33488888888881 +2019-08-13 14:00:00,94.84122222222224 +2019-08-13 15:00:00,89.81588888888899 +2019-08-13 16:00:00,90.16400000000017 +2019-08-13 17:00:00,99.47933333333313 +2019-08-13 18:00:00,96.85911111111099 +2019-08-13 19:00:00,95.0204444444442 +2019-08-13 20:00:00,86.57677777777751 +2019-08-13 21:00:00,67.0612222222223 +2019-08-13 22:00:00,93.35700000000006 +2019-08-13 23:00:00,91.84266666666653 +2019-08-14 00:00:00,89.30411111111118 +2019-08-14 01:00:00,82.81688888888867 +2019-08-14 02:00:00,75.34055555555555 +2019-08-14 03:00:00,90.01777777777758 +2019-08-14 04:00:00,71.96633333333337 +2019-08-14 05:00:00,49.304333333333346 +2019-08-14 06:00:00,41.43899999999984 +2019-08-14 07:00:00,42.67733333333332 +2019-08-14 08:00:00,55.386888888888905 +2019-08-14 09:00:00,78.90255555555534 +2019-08-14 10:00:00,90.78111111111079 +2019-08-14 11:00:00,98.98100000000025 +2019-08-14 12:00:00,104.16900000000003 +2019-08-14 13:00:00,64.46122222222235 +2019-08-14 14:00:00,84.543222222222 +2019-08-14 15:00:00,83.72066666666663 +2019-08-14 16:00:00,90.5944444444444 +2019-08-14 17:00:00,95.9614444444446 +2019-08-14 18:00:00,101.8865555555556 +2019-08-14 19:00:00,107.70600000000007 +2019-08-14 20:00:00,105.42211111111116 +2019-08-14 21:00:00,108.23977777777776 +2019-08-14 22:00:00,119.15844444444448 +2019-08-14 23:00:00,108.67099999999962 +2019-08-15 00:00:00,97.77811111111124 +2019-08-15 01:00:00,88.97577777777744 +2019-08-15 02:00:00,89.34111111111113 +2019-08-15 03:00:00,92.62911111111153 +2019-08-15 04:00:00,84.05155555555531 +2019-08-15 05:00:00,122.46277777777777 +2019-08-15 06:00:00,121.35422222222198 +2019-08-15 07:00:00,122.63388888888873 +2019-08-15 08:00:00,122.27222222222181 +2019-08-15 09:00:00,124.60711111111078 +2019-08-15 10:00:00,108.45166666666655 +2019-08-15 11:00:00,92.05611111111051 +2019-08-15 12:00:00,93.6901111111107 +2019-08-15 13:00:00,97.13399999999957 +2019-08-15 14:00:00,95.26455555555557 +2019-08-15 15:00:00,91.9144444444448 +2019-08-15 16:00:00,104.01777777777788 +2019-08-15 17:00:00,112.42866666666656 +2019-08-15 18:00:00,107.63744444444431 +2019-08-15 19:00:00,90.2470000000002 +2019-08-15 20:00:00,71.82000000000015 +2019-08-15 21:00:00,80.76222222222236 +2019-08-15 22:00:00,99.38666666666667 +2019-08-15 23:00:00,95.88155555555542 +2019-08-16 00:00:00,86.73444444444446 +2019-08-16 01:00:00,88.71111111111087 +2019-08-16 02:00:00,69.15422222222239 +2019-08-16 03:00:00,77.24222222222204 +2019-08-16 04:00:00,78.0128888888889 +2019-08-16 05:00:00,84.06599999999987 +2019-08-16 06:00:00,77.10411111111108 +2019-08-16 07:00:00,64.53666666666676 +2019-08-16 08:00:00,56.9541111111114 +2019-08-16 09:00:00,76.66388888888886 +2019-08-16 10:00:00,93.78900000000002 +2019-08-16 11:00:00,92.0712222222223 +2019-08-16 12:00:00,101.84766666666663 +2019-08-16 13:00:00,109.98911111111096 +2019-08-16 14:00:00,112.81588888888875 +2019-08-16 15:00:00,108.81777777777798 +2019-08-16 16:00:00,110.91777777777777 +2019-08-16 17:00:00,109.3097777777778 +2019-08-16 18:00:00,92.52033333333328 +2019-08-16 19:00:00,55.28922222222217 +2019-08-16 20:00:00,31.89988888888871 +2019-08-16 21:00:00,19.82055555555557 +2019-08-16 22:00:00,11.531777777777743 +2019-08-16 23:00:00,4.989888888888919 +2019-08-17 00:00:00,4.6017777777777695 +2019-08-17 01:00:00,7.298222222222192 +2019-08-17 02:00:00,2.4830000000000205 +2019-08-17 03:00:00,2.7506666666666564 +2019-08-17 04:00:00,0.6274444444444647 +2019-08-17 05:00:00,-0.8997777777777629 +2019-08-17 06:00:00,-0.8999999999999857 +2019-08-17 07:00:00,-0.871999999999984 +2019-08-17 08:00:00,-0.7973333333333316 +2019-08-17 09:00:00,0.8463333333333348 +2019-08-17 10:00:00,3.358222222222213 +2019-08-17 11:00:00,6.985555555555537 +2019-08-17 12:00:00,9.248333333333278 +2019-08-17 13:00:00,9.744444444444525 +2019-08-17 14:00:00,17.05366666666669 +2019-08-17 15:00:00,14.181555555555672 +2019-08-17 16:00:00,20.29755555555562 +2019-08-17 17:00:00,35.717000000000105 +2019-08-17 18:00:00,35.38944444444417 +2019-08-17 19:00:00,26.14988888888896 +2019-08-17 20:00:00,29.651888888888834 +2019-08-17 21:00:00,27.097555555555626 +2019-08-17 22:00:00,11.249666666666675 +2019-08-17 23:00:00,15.663777777777756 +2019-08-18 00:00:00,35.958444444444446 +2019-08-18 01:00:00,41.66800000000004 +2019-08-18 02:00:00,36.02799999999998 +2019-08-18 03:00:00,39.684666666666516 +2019-08-18 04:00:00,32.00777777777779 +2019-08-18 05:00:00,18.418000000000085 +2019-08-18 06:00:00,15.161111111111087 +2019-08-18 07:00:00,21.31099999999979 +2019-08-18 08:00:00,53.39577777777758 +2019-08-18 09:00:00,81.78455555555531 +2019-08-18 10:00:00,96.33544444444358 +2019-08-18 11:00:00,91.42677777777784 +2019-08-18 12:00:00,88.21777777777781 +2019-08-18 13:00:00,90.38211111111208 +2019-08-18 14:00:00,83.51044444444474 +2019-08-18 15:00:00,84.11699999999989 +2019-08-18 16:00:00,83.40433333333429 +2019-08-18 17:00:00,83.38333333333352 +2019-08-18 18:00:00,84.362666666667 +2019-08-18 19:00:00,96.17033333333319 +2019-08-18 20:00:00,36.21600000000002 +2019-08-18 21:00:00,119.50399999999989 +2019-08-18 22:00:00,65.14855555555532 +2019-08-18 23:00:00,46.4083333333332 +2019-08-19 00:00:00,94.9791111111108 +2019-08-19 01:00:00,112.61377777777757 +2019-08-19 02:00:00,93.11522222222239 +2019-08-19 03:00:00,87.10111111111118 +2019-08-19 04:00:00,62.845888888888894 +2019-08-19 05:00:00,51.58966666666681 +2019-08-19 06:00:00,49.6613333333334 +2019-08-19 07:00:00,54.14988888888905 +2019-08-19 08:00:00,47.30866666666649 +2019-08-19 09:00:00,46.38288888888889 +2019-08-19 10:00:00,38.23344444444448 +2019-08-19 11:00:00,53.75344444444435 +2019-08-19 12:00:00,43.674777777777656 +2019-08-19 13:00:00,33.85899999999969 +2019-08-19 14:00:00,22.583222222222208 +2019-08-19 15:00:00,23.714666666666762 +2019-08-19 16:00:00,19.81444444444442 +2019-08-19 17:00:00,19.903444444444535 +2019-08-19 18:00:00,9.79844444444448 +2019-08-19 19:00:00,8.091555555555564 +2019-08-19 20:00:00,5.358888888888831 +2019-08-19 21:00:00,1.4827777777777704 +2019-08-19 22:00:00,3.5943333333332985 +2019-08-19 23:00:00,4.502444444444459 +2019-08-20 00:00:00,3.5055555555555387 +2019-08-20 01:00:00,5.029111111111121 +2019-08-20 02:00:00,4.437888888888908 +2019-08-20 03:00:00,6.910222222222276 +2019-08-20 04:00:00,5.107888888888934 +2019-08-20 05:00:00,8.212777777777806 +2019-08-20 06:00:00,7.99377777777779 +2019-08-20 07:00:00,5.495666666666688 +2019-08-20 08:00:00,6.79299999999999 +2019-08-20 09:00:00,8.510222222222314 +2019-08-20 10:00:00,4.665111111111084 +2019-08-20 11:00:00,5.942111111111104 +2019-08-20 12:00:00,8.065222222222287 +2019-08-20 13:00:00,11.06900000000008 +2019-08-20 14:00:00,12.714666666666785 +2019-08-20 15:00:00,6.742999999999977 +2019-08-20 16:00:00,4.486555555555563 +2019-08-20 17:00:00,4.058777777777745 +2019-08-20 18:00:00,1.9780000000000069 +2019-08-20 19:00:00,1.4967777777777798 +2019-08-20 20:00:00,1.6156666666666706 +2019-08-20 21:00:00,2.3023333333333187 +2019-08-20 22:00:00,-0.18900000000000053 +2019-08-20 23:00:00,-0.4891111111111068 +2019-08-21 00:00:00,-0.4027777777777788 +2019-08-21 01:00:00,-0.7043333333333361 +2019-08-21 02:00:00,0.025999999999998875 +2019-08-21 03:00:00,1.4862222222222337 +2019-08-21 04:00:00,3.882222222222233 +2019-08-21 05:00:00,5.783444444444449 +2019-08-21 06:00:00,4.779111111111106 +2019-08-21 07:00:00,8.660222222222206 +2019-08-21 08:00:00,8.95755555555552 +2019-08-21 09:00:00,7.07777777777783 +2019-08-21 10:00:00,3.752333333333414 +2019-08-21 11:00:00,0.44822222222222435 +2019-08-21 12:00:00,0.2022222222222224 +2019-08-21 13:00:00,0.10388888888889095 +2019-08-21 14:00:00,-0.8545555555555379 +2019-08-21 15:00:00,-0.7914444444444388 +2019-08-21 16:00:00,0.660222222222221 +2019-08-21 17:00:00,0.9519999999999887 +2019-08-21 18:00:00,-0.0937777777777749 +2019-08-21 19:00:00,4.541555555555587 +2019-08-21 20:00:00,4.277111111111082 +2019-08-21 21:00:00,1.1054444444444422 +2019-08-21 22:00:00,-0.5991111111111111 +2019-08-21 23:00:00,0.9693333333333358 +2019-08-22 00:00:00,4.7798888888889275 +2019-08-22 01:00:00,6.619444444444491 +2019-08-22 02:00:00,1.8942222222222267 +2019-08-22 03:00:00,1.0114444444444404 +2019-08-22 04:00:00,3.996222222222241 +2019-08-22 05:00:00,12.28455555555562 +2019-08-22 06:00:00,19.7420000000001 +2019-08-22 07:00:00,15.899111111111042 +2019-08-22 08:00:00,16.962777777777795 +2019-08-22 09:00:00,10.124444444444453 +2019-08-22 10:00:00,6.067555555555505 +2019-08-22 11:00:00,4.016666666666649 +2019-08-22 12:00:00,7.036999999999909 +2019-08-22 13:00:00,11.055555555555555 +2019-08-22 14:00:00,19.104111111111024 +2019-08-22 15:00:00,33.72155555555531 +2019-08-22 16:00:00,34.13500000000015 +2019-08-22 17:00:00,31.45166666666662 +2019-08-22 18:00:00,56.53455555555604 +2019-08-22 19:00:00,85.58088888888865 +2019-08-22 20:00:00,85.36888888888902 +2019-08-22 21:00:00,93.71366666666678 +2019-08-22 22:00:00,94.3837777777779 +2019-08-22 23:00:00,113.2340000000001 +2019-08-23 00:00:00,103.85344444444424 +2019-08-23 01:00:00,103.79188888888885 +2019-08-23 02:00:00,106.32988888888882 +2019-08-23 03:00:00,83.11377777777784 +2019-08-23 04:00:00,81.28322222222215 +2019-08-23 05:00:00,77.12411111111123 +2019-08-23 06:00:00,46.0101111111108 +2019-08-23 07:00:00,25.945666666666607 +2019-08-23 08:00:00,13.767111111111149 +2019-08-23 09:00:00,18.90833333333331 +2019-08-23 10:00:00,14.034111111111148 +2019-08-23 11:00:00,20.966888888888928 +2019-08-23 12:00:00,31.89711111111125 +2019-08-23 13:00:00,35.217555555555684 +2019-08-23 14:00:00,52.17177777777806 +2019-08-23 15:00:00,47.23688888888861 +2019-08-23 16:00:00,47.02477777777782 +2019-08-23 17:00:00,76.69277777777786 +2019-08-23 18:00:00,68.36222222222216 +2019-08-23 19:00:00,64.0016666666665 +2019-08-23 20:00:00,50.233888888888856 +2019-08-23 21:00:00,41.95822222222218 +2019-08-23 22:00:00,44.2022222222223 +2019-08-23 23:00:00,36.16055555555555 +2019-08-24 00:00:00,37.57877777777773 +2019-08-24 01:00:00,21.365444444444424 +2019-08-24 02:00:00,8.117111111111127 +2019-08-24 03:00:00,7.852666666666652 +2019-08-24 04:00:00,7.24977777777778 +2019-08-24 05:00:00,7.385999999999995 +2019-08-24 06:00:00,8.703999999999942 +2019-08-24 07:00:00,25.896111111111033 +2019-08-24 08:00:00,37.93611111111121 +2019-08-24 09:00:00,63.14377777777777 +2019-08-24 10:00:00,67.89500000000005 +2019-08-24 11:00:00,59.91899999999989 +2019-08-24 12:00:00,72.44433333333335 +2019-08-24 13:00:00,65.97433333333352 +2019-08-24 14:00:00,83.38122222222219 +2019-08-24 15:00:00,80.85055555555599 +2019-08-24 16:00:00,79.17655555555594 +2019-08-24 17:00:00,86.23833333333316 +2019-08-24 18:00:00,91.79299999999985 +2019-08-24 19:00:00,82.23388888888883 +2019-08-24 20:00:00,75.57411111111145 +2019-08-24 21:00:00,75.02455555555557 +2019-08-24 22:00:00,58.54977777777785 +2019-08-24 23:00:00,44.30077777777767 +2019-08-25 00:00:00,37.75566666666661 +2019-08-25 01:00:00,32.33955555555553 +2019-08-25 02:00:00,35.61611111111106 +2019-08-25 03:00:00,36.84155555555541 +2019-08-25 04:00:00,30.54911111111106 +2019-08-25 05:00:00,23.56533333333327 +2019-08-25 06:00:00,14.737222222222314 +2019-08-25 07:00:00,25.832444444444384 +2019-08-25 08:00:00,51.474333333333256 +2019-08-25 09:00:00,90.46311111111102 +2019-08-25 10:00:00,109.88522222222228 +2019-08-25 11:00:00,97.90833333333406 +2019-08-25 12:00:00,72.2122222222222 +2019-08-25 13:00:00,85.29455555555658 +2019-08-25 14:00:00,69.39644444444426 +2019-08-25 15:00:00,76.27233333333356 +2019-08-25 16:00:00,57.67933333333322 +2019-08-25 17:00:00,24.949888888888655 +2019-08-25 18:00:00,45.4678888888889 +2019-08-25 19:00:00,74.68122222222225 +2019-08-25 20:00:00,91.93855555555557 +2019-08-25 21:00:00,34.69355555555551 +2019-08-25 22:00:00,20.685222222222176 +2019-08-25 23:00:00,23.66788888888891 +2019-08-26 00:00:00,64.20433333333322 +2019-08-26 01:00:00,86.40466666666664 +2019-08-26 02:00:00,83.8178888888887 +2019-08-26 03:00:00,63.92755555555556 +2019-08-26 04:00:00,60.094000000000094 +2019-08-26 05:00:00,44.624777777777545 +2019-08-26 06:00:00,60.99666666666657 +2019-08-26 07:00:00,77.269888888889 +2019-08-26 08:00:00,91.78033333333354 +2019-08-26 09:00:00,117.80011111111106 +2019-08-26 10:00:00,123.50033333333344 +2019-08-26 11:00:00,110.616222222222 +2019-08-26 12:00:00,95.10788888888837 +2019-08-26 13:00:00,78.15322222222191 +2019-08-26 14:00:00,91.39655555555584 +2019-08-26 15:00:00,123.12544444444408 +2019-08-26 16:00:00,116.04911111111099 +2019-08-26 17:00:00,109.52666666666671 +2019-08-26 18:00:00,100.97333333333323 +2019-08-26 19:00:00,85.57011111111044 +2019-08-26 20:00:00,110.12333333333392 +2019-08-26 21:00:00,105.74988888888886 +2019-08-26 22:00:00,94.2478888888887 +2019-08-26 23:00:00,68.82344444444443 +2019-08-27 00:00:00,89.14233333333351 +2019-08-27 01:00:00,101.6403333333333 +2019-08-27 02:00:00,75.0922222222222 +2019-08-27 03:00:00,61.98988888888903 +2019-08-27 04:00:00,45.589333333333265 +2019-08-27 05:00:00,30.436111111111185 +2019-08-27 06:00:00,13.144999999999976 +2019-08-27 07:00:00,4.679111111111113 +2019-08-27 08:00:00,0.17000000000000096 +2019-08-27 09:00:00,0.06755555555555585 +2019-08-27 10:00:00,-0.6592222222222146 +2019-08-27 11:00:00,0.4788888888888915 +2019-08-27 12:00:00,12.219555555555651 +2019-08-27 13:00:00,21.014000000000088 +2019-08-27 14:00:00,25.70811111111126 +2019-08-27 15:00:00,47.94366666666656 +2019-08-27 16:00:00,64.85866666666703 +2019-08-27 17:00:00,67.84400000000008 +2019-08-27 18:00:00,58.17077777777777 +2019-08-27 19:00:00,62.461111111111094 +2019-08-27 20:00:00,70.92288888888896 +2019-08-27 21:00:00,65.9684444444445 +2019-08-27 22:00:00,52.79666666666684 +2019-08-27 23:00:00,70.11933333333339 +2019-08-28 00:00:00,73.5273333333339 +2019-08-28 01:00:00,72.7127777777777 +2019-08-28 02:00:00,51.012888888888874 +2019-08-28 03:00:00,2.160333333333328 +2019-08-28 04:00:00,9.63955555555556 +2019-08-28 05:00:00,42.13588888888903 +2019-08-28 06:00:00,28.94833333333333 +2019-08-28 07:00:00,12.53755555555549 +2019-08-28 08:00:00,14.227666666666629 +2019-08-28 09:00:00,19.2952222222223 +2019-08-28 10:00:00,31.900666666666655 +2019-08-28 11:00:00,32.472888888888896 +2019-08-28 12:00:00,69.43666666666657 +2019-08-28 13:00:00,27.661333333333246 +2019-08-28 14:00:00,28.458888888888946 +2019-08-28 15:00:00,57.193888888888694 +2019-08-28 16:00:00,74.17055555555527 +2019-08-28 17:00:00,67.62688888888825 +2019-08-28 18:00:00,50.37844444444433 +2019-08-28 19:00:00,32.43799999999993 +2019-08-28 20:00:00,17.782555555555387 +2019-08-28 21:00:00,13.768666666666615 +2019-08-28 22:00:00,10.285666666666701 +2019-08-28 23:00:00,23.793777777777777 +2019-08-29 00:00:00,49.66222222222203 +2019-08-29 01:00:00,42.26455555555536 +2019-08-29 02:00:00,76.68000000000015 +2019-08-29 03:00:00,53.126444444444495 +2019-08-29 04:00:00,58.23822222222212 +2019-08-29 05:00:00,115.77477777777817 +2019-08-29 06:00:00,100.14355555555596 +2019-08-29 07:00:00,78.55811111111139 +2019-08-29 08:00:00,57.432888888889075 +2019-08-29 09:00:00,31.87833333333371 +2019-08-29 10:00:00,22.779666666666483 +2019-08-29 11:00:00,10.53122222222222 +2019-08-29 12:00:00,15.413111111111109 +2019-08-29 13:00:00,17.684666666666715 +2019-08-29 14:00:00,6.402555555555537 +2019-08-29 15:00:00,0.06533333333333582 +2019-08-29 16:00:00,0.1385555555555565 +2019-08-29 17:00:00,6.033333333333363 +2019-08-29 18:00:00,16.03400000000008 +2019-08-29 19:00:00,12.760666666666715 +2019-08-29 20:00:00,-0.5154444444444394 +2019-08-29 21:00:00,-0.569444444444437 +2019-08-29 22:00:00,-0.21755555555555472 +2019-08-29 23:00:00,-0.9254444444444356 +2019-08-30 00:00:00,2.2364444444444387 +2019-08-30 01:00:00,2.2918888888888915 +2019-08-30 02:00:00,1.2621111111111036 +2019-08-30 03:00:00,4.77288888888886 +2019-08-30 04:00:00,0.5426666666666784 +2019-08-30 05:00:00,6.782444444444506 +2019-08-30 06:00:00,6.729777777777846 +2019-08-30 07:00:00,-0.9495555555555537 +2019-08-30 08:00:00,1.0617777777777804 +2019-08-30 09:00:00,0.08733333333333197 +2019-08-30 10:00:00,-0.2964444444444442 +2019-08-30 11:00:00,8.298444444444415 +2019-08-30 12:00:00,0.48766666666667435 +2019-08-30 13:00:00,-0.7558888888888838 +2019-08-30 14:00:00,-0.8999999999999857 +2019-08-30 15:00:00,-0.8951111111110985 +2019-08-30 16:00:00,0.9403333333333322 +2019-08-30 17:00:00,3.9804444444444838 +2019-08-30 18:00:00,-0.6423333333333292 +2019-08-30 19:00:00,-0.9126666666666553 +2019-08-30 20:00:00,1.4571111111111112 +2019-08-30 21:00:00,10.20477777777781 +2019-08-30 22:00:00,35.59133333333335 +2019-08-30 23:00:00,43.41133333333328 +2019-08-31 00:00:00,50.80777777777793 +2019-08-31 01:00:00,72.32222222222214 +2019-08-31 02:00:00,80.67999999999957 +2019-08-31 03:00:00,98.31133333333312 +2019-08-31 04:00:00,103.1246666666666 +2019-08-31 05:00:00,110.48811111111091 +2019-08-31 06:00:00,103.42677777777806 +2019-08-31 07:00:00,105.00300000000034 +2019-08-31 08:00:00,111.59177777777786 +2019-08-31 09:00:00,113.25277777777782 +2019-08-31 10:00:00,118.08466666666689 +2019-08-31 11:00:00,116.41944444444434 +2019-08-31 12:00:00,118.1499999999999 +2019-08-31 13:00:00,106.92922222222194 +2019-08-31 14:00:00,111.2719999999996 +2019-08-31 15:00:00,116.92833333333388 +2019-08-31 16:00:00,121.80488888888968 +2019-08-31 17:00:00,112.57877777777658 +2019-08-31 18:00:00,115.37700000000008 +2019-08-31 19:00:00,109.95322222222177 +2019-08-31 20:00:00,106.83755555555447 +2019-08-31 21:00:00,109.62655555555587 +2019-08-31 22:00:00,102.34533333333324 +2019-08-31 23:00:00,103.5778888888891 +2019-09-01 00:00:00,100.37222222222199 +2019-09-01 01:00:00,79.21388888888862 +2019-09-01 02:00:00,82.30322222222232 +2019-09-01 03:00:00,85.83199999999997 +2019-09-01 04:00:00,76.7405555555563 +2019-09-01 05:00:00,88.69944444444435 +2019-09-01 06:00:00,101.50888888888841 +2019-09-01 07:00:00,100.8164444444451 +2019-09-01 08:00:00,108.13655555555572 +2019-09-01 09:00:00,114.09566666666599 +2019-09-01 10:00:00,117.04844444444443 +2019-09-01 11:00:00,109.07455555555549 +2019-09-01 12:00:00,98.74144444444451 +2019-09-01 13:00:00,77.0783333333332 +2019-09-01 14:00:00,80.86900000000011 +2019-09-01 15:00:00,85.44677777777781 +2019-09-01 16:00:00,82.27222222222171 +2019-09-01 17:00:00,88.78577777777767 +2019-09-01 18:00:00,80.71133333333333 +2019-09-01 19:00:00,78.63466666666639 +2019-09-01 20:00:00,55.45811111111103 +2019-09-01 21:00:00,62.604777777777805 +2019-09-01 22:00:00,73.04899999999996 +2019-09-01 23:00:00,88.38188888888901 +2019-09-02 00:00:00,85.77244444444423 +2019-09-02 01:00:00,83.74633333333325 +2019-09-02 02:00:00,88.30799999999958 +2019-09-02 03:00:00,94.43511111111151 +2019-09-02 04:00:00,91.13699999999983 +2019-09-02 05:00:00,104.12500000000001 +2019-09-02 06:00:00,105.19244444444439 +2019-09-02 07:00:00,95.27577777777795 +2019-09-02 08:00:00,89.36088888888872 +2019-09-02 09:00:00,84.28133333333331 +2019-09-02 10:00:00,84.63499999999968 +2019-09-02 11:00:00,91.62033333333328 +2019-09-02 12:00:00,84.06699999999992 +2019-09-02 13:00:00,91.41555555555554 +2019-09-02 14:00:00,90.62066666666672 +2019-09-02 15:00:00,93.757 +2019-09-02 16:00:00,111.31133333333355 +2019-09-02 17:00:00,117.95411111111122 +2019-09-02 18:00:00,121.64055555555517 +2019-09-02 19:00:00,69.3491111111113 +2019-09-02 20:00:00,69.38677777777752 +2019-09-02 21:00:00,74.85566666666705 +2019-09-02 22:00:00,86.86644444444417 +2019-09-02 23:00:00,90.69766666666659 +2019-09-03 00:00:00,97.8940000000003 +2019-09-03 01:00:00,75.24488888888945 +2019-09-03 02:00:00,62.91522222222249 +2019-09-03 03:00:00,97.172666666667 +2019-09-03 04:00:00,85.32422222222262 +2019-09-03 05:00:00,110.31844444444424 +2019-09-03 06:00:00,105.7773333333334 +2019-09-03 07:00:00,121.98911111111123 +2019-09-03 08:00:00,120.98011111111116 +2019-09-03 09:00:00,120.76699999999981 +2019-09-03 10:00:00,99.01888888888882 +2019-09-03 11:00:00,51.987999999999644 +2019-09-03 12:00:00,39.20466666666671 +2019-09-03 13:00:00,74.86655555555556 +2019-09-03 14:00:00,89.48255555555598 +2019-09-03 15:00:00,66.1638888888886 +2019-09-03 16:00:00,44.44388888888919 +2019-09-03 17:00:00,32.034888888888986 +2019-09-03 18:00:00,26.121222222222148 +2019-09-03 19:00:00,28.965555555555383 +2019-09-03 20:00:00,14.04766666666659 +2019-09-03 21:00:00,11.326333333333322 +2019-09-03 22:00:00,12.401888888888871 +2019-09-03 23:00:00,2.3574444444444596 +2019-09-04 00:00:00,-0.3133333333333336 +2019-09-04 01:00:00,0.8712222222222156 +2019-09-04 02:00:00,1.3201111111111041 +2019-09-04 03:00:00,0.5314444444444442 +2019-09-04 04:00:00,3.0284444444444385 +2019-09-04 05:00:00,12.327555555555533 +2019-09-04 06:00:00,12.980222222222453 +2019-09-04 07:00:00,12.717111111111125 +2019-09-04 08:00:00,3.6054444444444664 +2019-09-04 09:00:00,9.262888888888863 +2019-09-04 10:00:00,14.062000000000042 +2019-09-04 11:00:00,17.816333333333457 +2019-09-04 12:00:00,18.97755555555544 +2019-09-04 13:00:00,18.567888888888973 +2019-09-04 14:00:00,13.504222222222253 +2019-09-04 15:00:00,7.743888888889043 +2019-09-04 16:00:00,8.614111111111098 +2019-09-04 17:00:00,13.100777777777822 +2019-09-04 18:00:00,14.495222222222377 +2019-09-04 19:00:00,18.180999999999944 +2019-09-04 20:00:00,20.184777777777683 +2019-09-04 21:00:00,13.748444444444502 +2019-09-04 22:00:00,5.954333333333269 +2019-09-04 23:00:00,1.5262222222222375 +2019-09-05 00:00:00,1.8252222222222196 +2019-09-05 01:00:00,3.6158888888888643 +2019-09-05 02:00:00,0.49288888888888754 +2019-09-05 03:00:00,-0.4958888888888935 +2019-09-05 04:00:00,-0.702555555555547 +2019-09-05 05:00:00,-0.8059999999999926 +2019-09-05 06:00:00,-0.8999999999999857 +2019-09-05 07:00:00,-0.9168888888888784 +2019-09-05 08:00:00,-0.6195555555555513 +2019-09-05 09:00:00,6.147666666666637 +2019-09-05 10:00:00,15.89644444444452 +2019-09-05 11:00:00,26.741222222222127 +2019-09-05 12:00:00,37.342222222222155 +2019-09-05 13:00:00,39.05966666666672 +2019-09-05 14:00:00,39.91266666666694 +2019-09-05 15:00:00,28.039222222222236 +2019-09-05 16:00:00,27.74166666666662 +2019-09-05 17:00:00,34.5872222222221 +2019-09-05 18:00:00,33.104444444444255 +2019-09-05 19:00:00,29.709888888888997 +2019-09-05 20:00:00,25.95455555555559 +2019-09-05 21:00:00,18.089222222222325 +2019-09-05 22:00:00,11.970555555555494 +2019-09-05 23:00:00,11.385444444444458 +2019-09-06 00:00:00,7.9364444444444535 +2019-09-06 01:00:00,10.414777777777827 +2019-09-06 02:00:00,12.12011111111122 +2019-09-06 03:00:00,15.302555555555527 +2019-09-06 04:00:00,18.087333333333287 +2019-09-06 05:00:00,19.338222222222264 +2019-09-06 06:00:00,24.298555555555552 +2019-09-06 07:00:00,39.44044444444498 +2019-09-06 08:00:00,56.479222222222646 +2019-09-06 09:00:00,95.08800000000018 +2019-09-06 10:00:00,96.82988888888845 +2019-09-06 11:00:00,86.81300000000043 +2019-09-06 12:00:00,86.9005555555563 +2019-09-06 13:00:00,85.93566666666648 +2019-09-06 14:00:00,84.95533333333384 +2019-09-06 15:00:00,86.62722222222206 +2019-09-06 16:00:00,87.63455555555616 +2019-09-06 17:00:00,88.55122222222232 +2019-09-06 18:00:00,94.38600000000004 +2019-09-06 19:00:00,103.56888888888838 +2019-09-06 20:00:00,102.45633333333264 +2019-09-06 21:00:00,108.86355555555588 +2019-09-06 22:00:00,117.88244444444454 +2019-09-06 23:00:00,116.34166666666655 +2019-09-07 00:00:00,108.26966666666642 +2019-09-07 01:00:00,68.17511111111119 +2019-09-07 02:00:00,32.624999999999936 +2019-09-07 03:00:00,21.18299999999996 +2019-09-07 04:00:00,25.0394444444443 +2019-09-07 05:00:00,19.135999999999957 +2019-09-07 06:00:00,9.77266666666667 +2019-09-07 07:00:00,5.130333333333366 +2019-09-07 08:00:00,2.564555555555554 +2019-09-07 09:00:00,0.2292222222222217 +2019-09-07 10:00:00,-0.8446666666666615 +2019-09-07 11:00:00,-0.8999999999999857 +2019-09-07 12:00:00,-0.6622222222222189 +2019-09-07 13:00:00,-0.598444444444445 +2019-09-07 14:00:00,-0.19722222222222402 +2019-09-07 15:00:00,-0.28166666666666884 +2019-09-07 16:00:00,1.945555555555571 +2019-09-07 17:00:00,3.8586666666666654 +2019-09-07 18:00:00,0.5390000000000009 +2019-09-07 19:00:00,-0.8431111111111012 +2019-09-07 20:00:00,0.1466666666666659 +2019-09-07 21:00:00,0.08433333333333393 +2019-09-07 22:00:00,2.769222222222133 +2019-09-07 23:00:00,4.1236666666666855 +2019-09-08 00:00:00,8.891777777777746 +2019-09-08 01:00:00,20.93433333333324 +2019-09-08 02:00:00,28.412444444444642 +2019-09-08 03:00:00,25.919666666666696 +2019-09-08 04:00:00,35.18188888888886 +2019-09-08 05:00:00,15.223222222222248 +2019-09-08 06:00:00,8.5745555555555 +2019-09-08 07:00:00,0.6604444444444478 +2019-09-08 08:00:00,3.8943333333333543 +2019-09-08 09:00:00,9.561444444444488 +2019-09-08 10:00:00,12.151111111111097 +2019-09-08 11:00:00,7.170888888888907 +2019-09-08 12:00:00,1.703555555555555 +2019-09-08 13:00:00,0.21477777777777712 +2019-09-08 14:00:00,-0.09911111111111051 +2019-09-08 15:00:00,-0.14355555555555308 +2019-09-08 16:00:00,1.708333333333337 +2019-09-08 17:00:00,2.1473333333333255 +2019-09-08 18:00:00,7.636555555555508 +2019-09-08 19:00:00,16.263444444444485 +2019-09-08 20:00:00,15.052999999999965 +2019-09-08 21:00:00,9.622666666666673 +2019-09-08 22:00:00,6.344888888888852 +2019-09-08 23:00:00,8.130555555555494 +2019-09-09 00:00:00,4.425222222222246 +2019-09-09 01:00:00,8.08799999999999 +2019-09-09 02:00:00,8.48600000000001 +2019-09-09 03:00:00,7.7786666666666395 +2019-09-09 04:00:00,4.211555555555574 +2019-09-09 05:00:00,3.219666666666638 +2019-09-09 06:00:00,6.587555555555546 +2019-09-09 07:00:00,6.531555555555558 +2019-09-09 08:00:00,-0.9528888888888909 +2019-09-09 09:00:00,-0.9601111111111108 +2019-09-09 10:00:00,0.5668888888888884 +2019-09-09 11:00:00,7.209888888888859 +2019-09-09 12:00:00,30.035555555555522 +2019-09-09 13:00:00,80.67344444444464 +2019-09-09 14:00:00,102.39844444444464 +2019-09-09 15:00:00,104.82033333333266 +2019-09-09 16:00:00,104.9529999999995 +2019-09-09 17:00:00,104.95877777777777 +2019-09-09 18:00:00,104.90144444444373 +2019-09-09 19:00:00,104.87111111111074 +2019-09-09 20:00:00,104.93255555555518 +2019-09-09 21:00:00,95.5891111111111 +2019-09-09 22:00:00,93.81133333333344 +2019-09-09 23:00:00,54.43933333333333 +2019-09-10 00:00:00,78.40044444444432 +2019-09-10 01:00:00,53.00822222222225 +2019-09-10 02:00:00,38.8074444444443 +2019-09-10 03:00:00,60.14955555555557 +2019-09-10 04:00:00,49.06911111111109 +2019-09-10 05:00:00,54.61855555555587 +2019-09-10 06:00:00,52.22444444444493 +2019-09-10 07:00:00,44.16900000000035 +2019-09-10 08:00:00,10.006888888888877 +2019-09-10 09:00:00,0.37455555555555536 +2019-09-10 10:00:00,28.552888888889054 +2019-09-10 11:00:00,5.203444444444373 +2019-09-10 12:00:00,-0.539000000000005 +2019-09-10 13:00:00,10.35077777777773 +2019-09-10 14:00:00,6.8401111111110575 +2019-09-10 15:00:00,9.885222222222096 +2019-09-10 16:00:00,16.93122222222218 +2019-09-10 17:00:00,25.090555555555593 +2019-09-10 18:00:00,23.32722222222202 +2019-09-10 19:00:00,45.071222222222104 +2019-09-10 20:00:00,40.13988888888876 +2019-09-10 21:00:00,24.964444444444478 +2019-09-10 22:00:00,35.9075555555556 +2019-09-10 23:00:00,55.17566666666662 +2019-09-11 00:00:00,37.00233333333313 +2019-09-11 01:00:00,28.436666666666703 +2019-09-11 02:00:00,34.02166666666681 +2019-09-11 03:00:00,54.948777777777906 +2019-09-11 04:00:00,46.70777777777783 +2019-09-11 05:00:00,49.91988888888903 +2019-09-11 06:00:00,60.009222222222576 +2019-09-11 07:00:00,60.68988888888865 +2019-09-11 08:00:00,76.44766666666682 +2019-09-11 09:00:00,78.85455555555535 +2019-09-11 10:00:00,72.17966666666686 +2019-09-11 11:00:00,64.64066666666658 +2019-09-11 12:00:00,69.752 +2019-09-11 13:00:00,96.98266666666655 +2019-09-11 14:00:00,86.29855555555562 +2019-09-11 15:00:00,86.6269999999999 +2019-09-11 16:00:00,80.63811111111131 +2019-09-11 17:00:00,52.1327777777777 +2019-09-11 18:00:00,89.78255555555523 +2019-09-11 19:00:00,98.76788888888878 +2019-09-11 20:00:00,82.56366666666675 +2019-09-11 21:00:00,72.63211111111114 +2019-09-11 22:00:00,74.57988888888902 +2019-09-11 23:00:00,64.75922222222238 +2019-09-12 00:00:00,49.00155555555574 +2019-09-12 01:00:00,25.5235555555557 +2019-09-12 02:00:00,13.766000000000018 +2019-09-12 03:00:00,11.880333333333256 +2019-09-12 04:00:00,7.899333333333308 +2019-09-12 05:00:00,6.497777777777838 +2019-09-12 06:00:00,3.5263333333333184 +2019-09-12 07:00:00,9.972111111111056 +2019-09-12 08:00:00,37.67633333333346 +2019-09-12 09:00:00,40.65733333333319 +2019-09-12 10:00:00,50.907888888888884 +2019-09-12 11:00:00,48.40444444444463 +2019-09-12 12:00:00,69.35111111111094 +2019-09-12 13:00:00,59.09322222222206 +2019-09-12 14:00:00,46.05522222222235 +2019-09-12 15:00:00,42.92888888888857 +2019-09-12 16:00:00,50.862555555555645 +2019-09-12 17:00:00,62.43711111111099 +2019-09-12 18:00:00,85.00333333333317 +2019-09-12 19:00:00,90.59555555555555 +2019-09-12 20:00:00,88.39555555555539 +2019-09-12 21:00:00,89.27788888888875 +2019-09-12 22:00:00,73.90111111111105 +2019-09-12 23:00:00,30.23688888888875 +2019-09-13 00:00:00,18.69044444444444 +2019-09-13 01:00:00,22.91344444444451 +2019-09-13 02:00:00,27.0219999999999 +2019-09-13 03:00:00,30.113000000000017 +2019-09-13 04:00:00,43.76722222222213 +2019-09-13 05:00:00,62.28644444444446 +2019-09-13 06:00:00,75.8037777777777 +2019-09-13 07:00:00,93.57577777777803 +2019-09-13 08:00:00,102.38866666666671 +2019-09-13 09:00:00,112.5362222222224 +2019-09-13 10:00:00,111.26644444444472 +2019-09-13 11:00:00,91.12266666666655 +2019-09-13 12:00:00,122.30611111111132 +2019-09-13 13:00:00,103.81955555555663 +2019-09-13 14:00:00,86.77333333333355 +2019-09-13 15:00:00,84.92722222222157 +2019-09-13 16:00:00,85.1491111111101 +2019-09-13 17:00:00,84.36377777777719 +2019-09-13 18:00:00,98.37188888888902 +2019-09-13 19:00:00,107.76866666666614 +2019-09-13 20:00:00,103.11144444444469 +2019-09-13 21:00:00,44.13322222222189 +2019-09-13 22:00:00,30.54366666666668 +2019-09-13 23:00:00,62.23377777777793 +2019-09-14 00:00:00,75.11366666666683 +2019-09-14 01:00:00,85.61711111111111 +2019-09-14 02:00:00,64.03222222222215 +2019-09-14 03:00:00,82.18755555555589 +2019-09-14 04:00:00,48.61055555555558 +2019-09-14 05:00:00,36.477333333333476 +2019-09-14 06:00:00,31.375222222222337 +2019-09-14 07:00:00,28.13277777777778 +2019-09-14 08:00:00,21.795222222222236 +2019-09-14 09:00:00,13.384444444444426 +2019-09-14 10:00:00,14.05299999999991 +2019-09-14 11:00:00,14.262666666666675 +2019-09-14 12:00:00,18.34577777777782 +2019-09-14 13:00:00,73.69488888888911 +2019-09-14 14:00:00,87.00488888888879 +2019-09-14 15:00:00,88.37099999999988 +2019-09-14 16:00:00,26.17877777777791 +2019-09-14 17:00:00,26.978333333333264 +2019-09-14 18:00:00,30.053111111110997 +2019-09-14 19:00:00,27.840777777777628 +2019-09-14 20:00:00,18.96288888888889 +2019-09-14 21:00:00,11.287666666666594 +2019-09-14 22:00:00,6.994888888888829 +2019-09-14 23:00:00,5.251666666666713 +2019-09-15 00:00:00,6.68466666666664 +2019-09-15 01:00:00,9.043000000000003 +2019-09-15 02:00:00,19.694444444444397 +2019-09-15 03:00:00,52.15511111111108 +2019-09-15 04:00:00,80.05888888888808 +2019-09-15 05:00:00,78.83511111111113 +2019-09-15 06:00:00,81.84333333333335 +2019-09-15 07:00:00,79.61255555555537 +2019-09-15 08:00:00,71.04377777777779 +2019-09-15 09:00:00,37.74566666666671 +2019-09-15 10:00:00,68.12655555555558 +2019-09-15 11:00:00,61.09344444444438 +2019-09-15 12:00:00,100.1178888888888 +2019-09-15 13:00:00,78.51922222222204 +2019-09-15 14:00:00,85.12366666666644 +2019-09-15 15:00:00,79.77788888888952 +2019-09-15 16:00:00,73.00322222222229 +2019-09-15 17:00:00,95.54455555555518 +2019-09-15 18:00:00,113.24733333333333 +2019-09-15 19:00:00,111.07499999999993 +2019-09-15 20:00:00,76.55566666666643 +2019-09-15 21:00:00,63.51677777777784 +2019-09-15 22:00:00,34.15722222222216 +2019-09-15 23:00:00,11.965777777777845 +2019-09-16 00:00:00,11.839555555555586 +2019-09-16 01:00:00,1.929888888888873 +2019-09-16 02:00:00,28.524777777777807 +2019-09-16 03:00:00,30.787888888889018 +2019-09-16 04:00:00,36.5865555555555 +2019-09-16 05:00:00,58.208333333333435 +2019-09-16 06:00:00,60.16922222222233 +2019-09-16 07:00:00,45.0975555555557 +2019-09-16 08:00:00,39.74277777777779 +2019-09-16 09:00:00,43.93488888888903 +2019-09-16 10:00:00,38.212444444444344 +2019-09-16 11:00:00,31.31000000000043 +2019-09-16 12:00:00,26.106555555555563 +2019-09-16 13:00:00,18.507111111111133 +2019-09-16 14:00:00,19.67822222222243 +2019-09-16 15:00:00,24.405555555555665 +2019-09-16 16:00:00,35.71044444444436 +2019-09-16 17:00:00,46.30177777777816 +2019-09-16 18:00:00,43.34977777777766 +2019-09-16 19:00:00,42.212111111111156 +2019-09-16 20:00:00,38.237444444444485 +2019-09-16 21:00:00,52.991888888889086 +2019-09-16 22:00:00,55.764999999999944 +2019-09-16 23:00:00,60.8004444444443 +2019-09-17 00:00:00,70.86899999999979 +2019-09-17 01:00:00,77.24088888888907 +2019-09-17 02:00:00,93.99388888888882 +2019-09-17 03:00:00,48.561555555555486 +2019-09-17 04:00:00,74.76566666666646 +2019-09-17 05:00:00,82.04722222222206 +2019-09-17 06:00:00,89.63688888888885 +2019-09-17 07:00:00,96.26155555555569 +2019-09-17 08:00:00,106.19211111111125 +2019-09-17 09:00:00,115.16166666666638 +2019-09-17 10:00:00,126.82122222222227 +2019-09-17 11:00:00,126.67599999999997 +2019-09-17 12:00:00,93.29211111111137 +2019-09-17 13:00:00,81.52100000000036 +2019-09-17 14:00:00,52.86122222222201 +2019-09-17 15:00:00,46.897111111110995 +2019-09-17 16:00:00,51.30099999999987 +2019-09-17 17:00:00,59.954111111111125 +2019-09-17 18:00:00,44.08288888888923 +2019-09-17 19:00:00,49.00911111111107 +2019-09-17 20:00:00,53.69388888888892 +2019-09-17 21:00:00,51.563444444444734 +2019-09-17 22:00:00,54.02277777777787 +2019-09-17 23:00:00,34.08888888888884 +2019-09-18 00:00:00,24.701777777777764 +2019-09-18 01:00:00,26.058777777777696 +2019-09-18 02:00:00,23.857555555555596 +2019-09-18 03:00:00,23.12977777777776 +2019-09-18 04:00:00,20.070222222222238 +2019-09-18 05:00:00,13.112666666666609 +2019-09-18 06:00:00,18.36622222222236 +2019-09-18 07:00:00,13.939333333333385 +2019-09-18 08:00:00,11.743666666666803 +2019-09-18 09:00:00,12.703111111111129 +2019-09-18 10:00:00,10.806666666666658 +2019-09-18 11:00:00,7.698888888888783 +2019-09-18 12:00:00,5.288777777777762 +2019-09-18 13:00:00,-0.1756666666666663 +2019-09-18 14:00:00,1.1136666666666644 +2019-09-18 15:00:00,1.0578888888888753 +2019-09-18 16:00:00,-0.8846666666666544 +2019-09-18 17:00:00,-0.9083333333333192 +2019-09-18 18:00:00,-0.8747777777777641 +2019-09-18 19:00:00,-0.8999999999999857 +2019-09-18 20:00:00,-0.8999999999999857 +2019-09-18 21:00:00,-0.8829999999999871 +2019-09-18 22:00:00,-0.8914444444444304 +2019-09-18 23:00:00,-0.8452222222222142 +2019-09-19 00:00:00,-0.6664444444444458 +2019-09-19 01:00:00,-0.5457777777777807 +2019-09-19 02:00:00,0.1872222222222195 +2019-09-19 03:00:00,0.6641111111111117 +2019-09-19 04:00:00,-0.042333333333332085 +2019-09-19 05:00:00,3.3985555555555793 +2019-09-19 06:00:00,8.097888888888903 +2019-09-19 07:00:00,9.499000000000018 +2019-09-19 08:00:00,8.894666666666682 +2019-09-19 09:00:00,5.467777777777796 +2019-09-19 10:00:00,4.025444444444438 +2019-09-19 11:00:00,5.77544444444445 +2019-09-19 12:00:00,9.895333333333422 +2019-09-19 13:00:00,12.453555555555587 +2019-09-19 14:00:00,11.6522222222223 +2019-09-19 15:00:00,14.02733333333333 +2019-09-19 16:00:00,18.530777777777775 +2019-09-19 17:00:00,22.40033333333337 +2019-09-19 18:00:00,23.957333333333395 +2019-09-19 19:00:00,26.344111111111065 +2019-09-19 20:00:00,27.677444444444536 +2019-09-19 21:00:00,19.118555555555563 +2019-09-19 22:00:00,17.45877777777791 +2019-09-19 23:00:00,9.808111111111074 +2019-09-20 00:00:00,3.529111111111134 +2019-09-20 01:00:00,1.119444444444442 +2019-09-20 02:00:00,0.30866666666666565 +2019-09-20 03:00:00,1.3624444444444455 +2019-09-20 04:00:00,3.2265555555555587 +2019-09-20 05:00:00,2.1725555555555345 +2019-09-20 06:00:00,0.44000000000000195 +2019-09-20 07:00:00,2.002333333333345 +2019-09-20 08:00:00,1.7144444444444464 +2019-09-20 09:00:00,8.761666666666706 +2019-09-20 10:00:00,20.927999999999905 +2019-09-20 11:00:00,27.746333333333308 +2019-09-20 12:00:00,46.24722222222223 +2019-09-20 13:00:00,57.28444444444452 +2019-09-20 14:00:00,56.92188888888898 +2019-09-20 15:00:00,49.61066666666662 +2019-09-20 16:00:00,37.49444444444452 +2019-09-20 17:00:00,34.79255555555545 +2019-09-20 18:00:00,20.31122222222228 +2019-09-20 19:00:00,8.454333333333382 +2019-09-20 20:00:00,4.30011111111115 +2019-09-20 21:00:00,6.447333333333358 +2019-09-20 22:00:00,6.460222222222161 +2019-09-20 23:00:00,10.718888888888864 +2019-09-21 00:00:00,9.79777777777781 +2019-09-21 01:00:00,15.460777777777786 +2019-09-21 02:00:00,14.424666666666688 +2019-09-21 03:00:00,9.082666666666645 +2019-09-21 04:00:00,7.471222222222255 +2019-09-21 05:00:00,7.378222222222263 +2019-09-21 06:00:00,5.266333333333317 +2019-09-21 07:00:00,2.020111111111075 +2019-09-21 08:00:00,-0.9677777777777744 +2019-09-21 09:00:00,-0.548666666666662 +2019-09-21 10:00:00,8.860333333333344 +2019-09-21 11:00:00,35.08233333333348 +2019-09-21 12:00:00,77.49488888888911 +2019-09-21 13:00:00,106.88744444444413 +2019-09-21 14:00:00,108.95977777777793 +2019-09-21 15:00:00,96.36300000000014 +2019-09-21 16:00:00,83.3900000000002 +2019-09-21 17:00:00,74.34733333333344 +2019-09-21 18:00:00,1.5759999999999532 +2019-09-21 19:00:00,0.04244444444444475 +2019-09-21 20:00:00,0.016999999999999956 +2019-09-21 21:00:00,4.022222222222224 +2019-09-21 22:00:00,22.928111111111107 +2019-09-21 23:00:00,23.063999999999584 +2019-09-22 00:00:00,49.37933333333347 +2019-09-22 01:00:00,68.01122222222216 +2019-09-22 02:00:00,52.51122222222197 +2019-09-22 03:00:00,39.04188888888889 +2019-09-22 04:00:00,29.155222222222246 +2019-09-22 05:00:00,24.37433333333337 +2019-09-22 06:00:00,17.068444444444363 +2019-09-22 07:00:00,13.42266666666643 +2019-09-22 08:00:00,3.9140000000000117 +2019-09-22 09:00:00,3.4708888888888865 +2019-09-22 10:00:00,2.8867777777777857 +2019-09-22 11:00:00,3.931999999999986 +2019-09-22 12:00:00,16.731222222222254 +2019-09-22 13:00:00,30.591111111111122 +2019-09-22 14:00:00,48.55388888888864 +2019-09-22 15:00:00,71.57466666666673 +2019-09-22 16:00:00,70.67288888888875 +2019-09-22 17:00:00,60.76922222222218 +2019-09-22 18:00:00,67.14733333333344 +2019-09-22 19:00:00,66.17488888888879 +2019-09-22 20:00:00,26.610777777777795 +2019-09-22 21:00:00,47.05833333333339 +2019-09-22 22:00:00,31.950555555555447 +2019-09-22 23:00:00,14.721666666666605 +2019-09-23 00:00:00,-0.182555555555558 +2019-09-23 01:00:00,-0.4266666666666642 +2019-09-23 02:00:00,-0.7788888888888843 +2019-09-23 03:00:00,-0.542888888888881 +2019-09-23 04:00:00,0.6229999999999919 +2019-09-23 05:00:00,0.8606666666666697 +2019-09-23 06:00:00,6.486666666666688 +2019-09-23 07:00:00,22.040444444444486 +2019-09-23 08:00:00,3.333999999999999 +2019-09-23 09:00:00,8.493222222222244 +2019-09-23 10:00:00,2.2561111111111285 +2019-09-23 11:00:00,-0.7352222222222172 +2019-09-23 12:00:00,-0.9083333333333188 +2019-09-23 13:00:00,-0.3256666666666673 +2019-09-23 14:00:00,2.376000000000009 +2019-09-23 15:00:00,4.165555555555563 +2019-09-23 16:00:00,5.653222222222254 +2019-09-23 17:00:00,7.1197777777777445 +2019-09-23 18:00:00,13.00311111111109 +2019-09-23 19:00:00,12.537111111110981 +2019-09-23 20:00:00,15.820000000000014 +2019-09-23 21:00:00,11.977333333333258 +2019-09-23 22:00:00,3.515444444444455 +2019-09-23 23:00:00,-0.3023333333333342 +2019-09-24 00:00:00,-0.9256666666666569 +2019-09-24 01:00:00,-0.9292222222222137 +2019-09-24 02:00:00,-0.8009999999999908 +2019-09-24 03:00:00,-0.2967777777777761 +2019-09-24 04:00:00,0.2058888888888891 +2019-09-24 05:00:00,0.9026666666666693 +2019-09-24 06:00:00,5.040000000000032 +2019-09-24 07:00:00,9.778333333333412 +2019-09-24 08:00:00,33.46866666666672 +2019-09-24 09:00:00,61.126555555555505 +2019-09-24 10:00:00,61.32733333333317 +2019-09-24 11:00:00,53.34888888888869 +2019-09-24 12:00:00,47.614333333333256 +2019-09-24 13:00:00,48.20711111111115 +2019-09-24 14:00:00,48.89111111111122 +2019-09-24 15:00:00,48.30500000000022 +2019-09-24 16:00:00,56.95077777777772 +2019-09-24 17:00:00,65.76555555555564 +2019-09-24 18:00:00,78.15677777777782 +2019-09-24 19:00:00,70.7737777777778 +2019-09-24 20:00:00,61.675333333333356 +2019-09-24 21:00:00,60.97366666666674 +2019-09-24 22:00:00,54.08244444444428 +2019-09-24 23:00:00,35.54699999999992 +2019-09-25 00:00:00,25.66599999999999 +2019-09-25 01:00:00,17.359000000000048 +2019-09-25 02:00:00,11.649000000000113 +2019-09-25 03:00:00,8.646777777777734 +2019-09-25 04:00:00,7.687999999999977 +2019-09-25 05:00:00,10.226555555555464 +2019-09-25 06:00:00,13.473333333333418 +2019-09-25 07:00:00,18.63855555555557 +2019-09-25 08:00:00,39.62077777777767 +2019-09-25 09:00:00,54.39622222222209 +2019-09-25 10:00:00,57.59766666666674 +2019-09-25 11:00:00,53.122666666666625 +2019-09-25 12:00:00,64.07233333333329 +2019-09-25 13:00:00,72.24122222222242 +2019-09-25 14:00:00,70.64866666666671 +2019-09-25 15:00:00,71.09799999999998 +2019-09-25 16:00:00,74.42966666666652 +2019-09-25 17:00:00,76.08744444444453 +2019-09-25 18:00:00,63.132333333333854 +2019-09-25 19:00:00,61.039555555555474 +2019-09-25 20:00:00,70.26077777777799 +2019-09-25 21:00:00,54.00411111111101 +2019-09-25 22:00:00,36.78255555555561 +2019-09-25 23:00:00,22.557000000000045 +2019-09-26 00:00:00,28.195888888888838 +2019-09-26 01:00:00,25.816888888888816 +2019-09-26 02:00:00,18.510333333333328 +2019-09-26 03:00:00,13.819111111111091 +2019-09-26 04:00:00,12.559222222222209 +2019-09-26 05:00:00,5.769333333333332 +2019-09-26 06:00:00,12.748666666666628 +2019-09-26 07:00:00,29.478111111111247 +2019-09-26 08:00:00,51.23422222222224 +2019-09-26 09:00:00,54.6394444444444 +2019-09-26 10:00:00,44.66744444444444 +2019-09-26 11:00:00,40.341555555555544 +2019-09-26 12:00:00,64.3143333333333 +2019-09-26 13:00:00,85.88677777777819 +2019-09-26 14:00:00,80.47844444444435 +2019-09-26 15:00:00,83.0978888888887 +2019-09-26 16:00:00,75.02444444444444 +2019-09-26 17:00:00,99.48477777777721 +2019-09-26 18:00:00,39.17211111111114 +2019-09-26 19:00:00,64.86877777777788 +2019-09-26 20:00:00,45.02211111111108 +2019-09-26 21:00:00,49.283888888888725 +2019-09-26 22:00:00,55.66088888888892 +2019-09-26 23:00:00,33.3046666666667 +2019-09-27 00:00:00,30.738888888888873 +2019-09-27 01:00:00,28.97688888888913 +2019-09-27 02:00:00,59.60166666666681 +2019-09-27 03:00:00,88.06911111111116 +2019-09-27 04:00:00,97.0708888888889 +2019-09-27 05:00:00,58.41088888888908 +2019-09-27 06:00:00,47.4791111111111 +2019-09-27 07:00:00,33.06177777777772 +2019-09-27 08:00:00,24.931333333333292 +2019-09-27 09:00:00,20.68688888888885 +2019-09-27 10:00:00,9.585777777777821 +2019-09-27 11:00:00,8.262666666666648 +2019-09-27 12:00:00,6.548222222222173 +2019-09-27 13:00:00,8.11888888888895 +2019-09-27 14:00:00,10.826000000000075 +2019-09-27 15:00:00,10.250444444444485 +2019-09-27 16:00:00,8.851999999999968 +2019-09-27 17:00:00,16.668555555555344 +2019-09-27 18:00:00,9.96144444444436 +2019-09-27 19:00:00,1.868888888888873 +2019-09-27 20:00:00,-0.12266666666665661 +2019-09-27 21:00:00,0.826333333333344 +2019-09-27 22:00:00,-0.6418888888888893 +2019-09-27 23:00:00,-0.9355555555555455 +2019-09-28 00:00:00,-0.8639999999999902 +2019-09-28 01:00:00,-0.9245555555555448 +2019-09-28 02:00:00,-0.5854444444444379 +2019-09-28 03:00:00,3.8591111111110896 +2019-09-28 04:00:00,4.466666666666646 +2019-09-28 05:00:00,12.506333333333371 +2019-09-28 06:00:00,8.001333333333308 +2019-09-28 07:00:00,1.126333333333333 +2019-09-28 08:00:00,5.95755555555546 +2019-09-28 09:00:00,1.9404444444444373 +2019-09-28 10:00:00,7.080888888888938 +2019-09-28 11:00:00,15.85044444444442 +2019-09-28 12:00:00,31.46022222222229 +2019-09-28 13:00:00,46.785444444444614 +2019-09-28 14:00:00,53.94999999999993 +2019-09-28 15:00:00,74.36855555555537 +2019-09-28 16:00:00,60.48244444444441 +2019-09-28 17:00:00,66.3536666666665 +2019-09-28 18:00:00,79.8094444444442 +2019-09-28 19:00:00,85.04288888888902 +2019-09-28 20:00:00,83.4770000000002 +2019-09-28 21:00:00,49.258333333333304 +2019-09-28 22:00:00,24.80533333333341 +2019-09-28 23:00:00,40.463444444444356 +2019-09-29 00:00:00,44.69988888888896 +2019-09-29 01:00:00,37.45277777777771 +2019-09-29 02:00:00,24.49422222222227 +2019-09-29 03:00:00,62.804777777777964 +2019-09-29 04:00:00,58.06488888888879 +2019-09-29 05:00:00,41.00611111111112 +2019-09-29 06:00:00,77.63277777777807 +2019-09-29 07:00:00,44.50611111111107 +2019-09-29 08:00:00,13.984666666666701 +2019-09-29 09:00:00,2.8489999999999913 +2019-09-29 10:00:00,37.37888888888898 +2019-09-29 11:00:00,5.483777777777841 +2019-09-29 12:00:00,2.728111111111102 +2019-09-29 13:00:00,5.138444444444447 +2019-09-29 14:00:00,9.440333333333411 +2019-09-29 15:00:00,11.05377777777777 +2019-09-29 16:00:00,16.39866666666664 +2019-09-29 17:00:00,71.59888888888906 +2019-09-29 18:00:00,47.6522222222219 +2019-09-29 19:00:00,11.434111111111022 +2019-09-29 20:00:00,19.86822222222223 +2019-09-29 21:00:00,28.469888888888807 +2019-09-29 22:00:00,7.848666666666655 +2019-09-29 23:00:00,-0.5430000000000048 +2019-09-30 00:00:00,73.28966666666634 +2019-09-30 01:00:00,96.84555555555534 +2019-09-30 02:00:00,74.33655555555542 +2019-09-30 03:00:00,89.7636666666673 +2019-09-30 04:00:00,90.08644444444428 +2019-09-30 05:00:00,83.77155555555566 +2019-09-30 06:00:00,74.64500000000015 +2019-09-30 07:00:00,69.2433333333333 +2019-09-30 08:00:00,19.963444444444395 +2019-09-30 09:00:00,69.70611111111126 +2019-09-30 10:00:00,97.23155555555543 +2019-09-30 11:00:00,93.87722222222273 +2019-09-30 12:00:00,110.04599999999998 +2019-09-30 13:00:00,111.04811111111154 +2019-09-30 14:00:00,117.76511111111056 +2019-09-30 15:00:00,118.61900000000051 +2019-09-30 16:00:00,114.33022222222247 +2019-09-30 17:00:00,110.9091111111108 +2019-09-30 18:00:00,116.46000000000112 +2019-09-30 19:00:00,119.5500000000007 +2019-09-30 20:00:00,115.87600000000006 +2019-09-30 21:00:00,104.97222222222206 +2019-09-30 22:00:00,69.3861111111108 +2019-09-30 23:00:00,81.77544444444439 +2019-10-01 00:00:00,87.02077777777757 +2019-10-01 01:00:00,95.97422222222224 +2019-10-01 02:00:00,106.55888888888886 +2019-10-01 03:00:00,95.79222222222184 +2019-10-01 04:00:00,88.22199999999998 +2019-10-01 05:00:00,55.130666666666805 +2019-10-01 06:00:00,44.12333333333352 +2019-10-01 07:00:00,34.944888888888734 +2019-10-01 08:00:00,50.25833333333347 +2019-10-01 09:00:00,41.91922222222205 +2019-10-01 10:00:00,30.584666666666838 +2019-10-01 11:00:00,35.2277777777778 +2019-10-01 12:00:00,47.40533333333336 +2019-10-01 13:00:00,54.04111111111135 +2019-10-01 14:00:00,56.72900000000017 +2019-10-01 15:00:00,53.08211111111104 +2019-10-01 16:00:00,57.06588888888876 +2019-10-01 17:00:00,36.72566666666669 +2019-10-01 18:00:00,29.428888888888938 +2019-10-01 19:00:00,36.089555555555485 +2019-10-01 20:00:00,48.07122222222239 +2019-10-01 21:00:00,43.97722222222229 +2019-10-01 22:00:00,44.54277777777796 +2019-10-01 23:00:00,64.45333333333342 +2019-10-02 00:00:00,23.697444444444386 +2019-10-02 01:00:00,6.073111111111111 +2019-10-02 02:00:00,6.250333333333473 +2019-10-02 03:00:00,34.2344444444445 +2019-10-02 04:00:00,89.1406666666664 +2019-10-02 05:00:00,97.26977777777734 +2019-10-02 06:00:00,112.14877777777797 +2019-10-02 07:00:00,123.835666666667 +2019-10-02 08:00:00,125.5768888888891 +2019-10-02 09:00:00,127.02611111111115 +2019-10-02 10:00:00,121.33000000000001 +2019-10-02 11:00:00,113.53211111111115 +2019-10-02 12:00:00,102.03355555555567 +2019-10-02 13:00:00,111.7287777777775 +2019-10-02 14:00:00,113.82711111111094 +2019-10-02 15:00:00,110.95522222222223 +2019-10-02 16:00:00,71.17833333333344 +2019-10-02 17:00:00,54.88144444444432 +2019-10-02 18:00:00,55.90900000000012 +2019-10-02 19:00:00,45.64155555555552 +2019-10-02 20:00:00,56.11166666666669 +2019-10-02 21:00:00,61.06033333333329 +2019-10-02 22:00:00,47.69255555555557 +2019-10-02 23:00:00,43.09811111111108 +2019-10-03 00:00:00,27.941444444444343 +2019-10-03 01:00:00,16.251777777777807 +2019-10-03 02:00:00,12.018666666666638 +2019-10-03 03:00:00,10.421777777777748 +2019-10-03 04:00:00,9.460555555555572 +2019-10-03 05:00:00,7.9387777777777355 +2019-10-03 06:00:00,11.574111111111067 +2019-10-03 07:00:00,23.540777777777535 +2019-10-03 08:00:00,24.39222222222226 +2019-10-03 09:00:00,42.43311111111129 +2019-10-03 10:00:00,43.156000000000134 +2019-10-03 11:00:00,47.750333333333 +2019-10-03 12:00:00,44.08500000000038 +2019-10-03 13:00:00,49.12733333333341 +2019-10-03 14:00:00,38.608222222222125 +2019-10-03 15:00:00,52.77911111111125 +2019-10-03 16:00:00,59.392333333333625 +2019-10-03 17:00:00,35.594555555555516 +2019-10-03 18:00:00,47.739333333333256 +2019-10-03 19:00:00,36.43166666666678 +2019-10-03 20:00:00,26.617777777777686 +2019-10-03 21:00:00,23.919777777777764 +2019-10-03 22:00:00,15.181666666666692 +2019-10-03 23:00:00,3.8259999999999286 +2019-10-04 00:00:00,0.03733333333333063 +2019-10-04 01:00:00,-0.742888888888885 +2019-10-04 02:00:00,-0.5699999999999998 +2019-10-04 03:00:00,-0.6584444444444393 +2019-10-04 04:00:00,-0.18166666666666673 +2019-10-04 05:00:00,2.885888888888894 +2019-10-04 06:00:00,11.391777777777754 +2019-10-04 07:00:00,26.02422222222211 +2019-10-04 08:00:00,39.88977777777778 +2019-10-04 09:00:00,52.39066666666674 +2019-10-04 10:00:00,54.50200000000014 +2019-10-04 11:00:00,53.21866666666675 +2019-10-04 12:00:00,70.95211111111102 +2019-10-04 13:00:00,71.91233333333345 +2019-10-04 14:00:00,66.59633333333336 +2019-10-04 15:00:00,67.36577777777758 +2019-10-04 16:00:00,59.95977777777771 +2019-10-04 17:00:00,52.10088888888894 +2019-10-04 18:00:00,54.92833333333332 +2019-10-04 19:00:00,48.576222222222114 +2019-10-04 20:00:00,35.51299999999997 +2019-10-04 21:00:00,38.190777777777875 +2019-10-04 22:00:00,18.12777777777779 +2019-10-04 23:00:00,2.0067777777777818 +2019-10-05 00:00:00,-0.8766666666666604 +2019-10-05 01:00:00,-0.6183333333333358 +2019-10-05 02:00:00,0.4443333333333328 +2019-10-05 03:00:00,4.244666666666658 +2019-10-05 04:00:00,3.3147777777777856 +2019-10-05 05:00:00,9.042000000000085 +2019-10-05 06:00:00,6.729555555555635 +2019-10-05 07:00:00,13.097333333333252 +2019-10-05 08:00:00,22.263333333333367 +2019-10-05 09:00:00,19.960666666666615 +2019-10-05 10:00:00,28.79555555555564 +2019-10-05 11:00:00,43.85499999999993 +2019-10-05 12:00:00,47.65933333333334 +2019-10-05 13:00:00,44.606111111111254 +2019-10-05 14:00:00,44.09188888888885 +2019-10-05 15:00:00,58.196666666666694 +2019-10-05 16:00:00,70.93133333333336 +2019-10-05 17:00:00,71.34677777777775 +2019-10-05 18:00:00,64.80155555555555 +2019-10-05 19:00:00,69.38388888888882 +2019-10-05 20:00:00,71.11244444444442 +2019-10-05 21:00:00,70.91377777777761 +2019-10-05 22:00:00,65.4123333333334 +2019-10-05 23:00:00,47.27511111111102 +2019-10-06 00:00:00,23.745555555555452 +2019-10-06 01:00:00,4.75533333333334 +2019-10-06 02:00:00,2.393222222222214 +2019-10-06 03:00:00,1.576999999999993 +2019-10-06 04:00:00,0.9751111111111204 +2019-10-06 05:00:00,0.8562222222222234 +2019-10-06 06:00:00,4.63288888888888 +2019-10-06 07:00:00,11.809444444444392 +2019-10-06 08:00:00,43.4496666666666 +2019-10-06 09:00:00,65.75677777777794 +2019-10-06 10:00:00,68.22933333333341 +2019-10-06 11:00:00,76.83977777777773 +2019-10-06 12:00:00,97.35733333333339 +2019-10-06 13:00:00,103.71222222222227 +2019-10-06 14:00:00,100.06733333333325 +2019-10-06 15:00:00,92.95022222222181 +2019-10-06 16:00:00,67.49244444444439 +2019-10-06 17:00:00,46.99066666666664 +2019-10-06 18:00:00,48.74211111111125 +2019-10-06 19:00:00,39.67999999999989 +2019-10-06 20:00:00,23.16866666666667 +2019-10-06 21:00:00,18.651333333333294 +2019-10-06 22:00:00,21.32355555555565 +2019-10-06 23:00:00,18.954333333333263 +2019-10-07 00:00:00,12.858111111111118 +2019-10-07 01:00:00,5.889555555555628 +2019-10-07 02:00:00,2.432111111111087 +2019-10-07 03:00:00,5.022777777777782 +2019-10-07 04:00:00,15.272333333333345 +2019-10-07 05:00:00,23.602555555555586 +2019-10-07 06:00:00,22.833111111111176 +2019-10-07 07:00:00,42.674555555555365 +2019-10-07 08:00:00,51.25811111111105 +2019-10-07 09:00:00,60.20233333333335 +2019-10-07 10:00:00,99.74888888888871 +2019-10-07 11:00:00,105.3415555555559 +2019-10-07 12:00:00,92.71155555555573 +2019-10-07 13:00:00,77.3834444444446 +2019-10-07 14:00:00,88.7781111111111 +2019-10-07 15:00:00,80.68022222222231 +2019-10-07 16:00:00,68.30222222222223 +2019-10-07 17:00:00,47.25400000000007 +2019-10-07 18:00:00,86.59533333333319 +2019-10-07 19:00:00,96.84366666666651 +2019-10-07 20:00:00,91.32511111111091 +2019-10-07 21:00:00,62.48044444444453 +2019-10-07 22:00:00,91.04399999999985 +2019-10-07 23:00:00,88.97722222222227 +2019-10-08 00:00:00,23.420333333333364 +2019-10-08 01:00:00,0.44144444444444475 +2019-10-08 02:00:00,28.97077777777782 +2019-10-08 03:00:00,58.28755555555533 +2019-10-08 04:00:00,67.63199999999999 +2019-10-08 05:00:00,20.229222222222162 +2019-10-08 06:00:00,0.6375555555555578 +2019-10-08 07:00:00,7.952666666666638 +2019-10-08 08:00:00,7.670444444444426 +2019-10-08 09:00:00,5.789555555555578 +2019-10-08 10:00:00,9.063999999999925 +2019-10-08 11:00:00,18.03577777777769 +2019-10-08 12:00:00,39.71277777777777 +2019-10-08 13:00:00,28.70766666666669 +2019-10-08 14:00:00,33.169999999999874 +2019-10-08 15:00:00,35.29977777777777 +2019-10-08 16:00:00,89.63766666666668 +2019-10-08 17:00:00,78.41833333333336 +2019-10-08 18:00:00,67.42200000000004 +2019-10-08 19:00:00,42.03077777777787 +2019-10-08 20:00:00,26.7106666666666 +2019-10-08 21:00:00,13.441333333333365 +2019-10-08 22:00:00,10.918999999999945 +2019-10-08 23:00:00,15.067666666666625 +2019-10-09 00:00:00,15.116666666666696 +2019-10-09 01:00:00,15.939555555555673 +2019-10-09 02:00:00,20.044777777777767 +2019-10-09 03:00:00,24.806222222222164 +2019-10-09 04:00:00,9.67444444444442 +2019-10-09 05:00:00,11.961555555555542 +2019-10-09 06:00:00,15.342111111111137 +2019-10-09 07:00:00,10.94399999999995 +2019-10-09 08:00:00,13.54644444444441 +2019-10-09 09:00:00,6.94588888888877 +2019-10-09 10:00:00,5.94711111111113 +2019-10-09 11:00:00,2.746666666666646 +2019-10-09 12:00:00,1.0592222222222163 +2019-10-09 13:00:00,2.511444444444432 +2019-10-09 14:00:00,1.2927777777777636 +2019-10-09 15:00:00,-0.1521111111111124 +2019-10-09 16:00:00,-0.6779999999999943 +2019-10-09 17:00:00,1.0466666666666606 +2019-10-09 18:00:00,3.169777777777779 +2019-10-09 19:00:00,9.140666666666633 +2019-10-09 20:00:00,5.1201111111110835 +2019-10-09 21:00:00,7.001777777777828 +2019-10-09 22:00:00,2.518666666666619 +2019-10-09 23:00:00,2.971777777777753 +2019-10-10 00:00:00,1.2987777777777854 +2019-10-10 01:00:00,4.976000000000009 +2019-10-10 02:00:00,8.295111111111146 +2019-10-10 03:00:00,7.364333333333283 +2019-10-10 04:00:00,16.44888888888886 +2019-10-10 05:00:00,16.47288888888899 +2019-10-10 06:00:00,9.93733333333342 +2019-10-10 07:00:00,11.641888888888897 +2019-10-10 08:00:00,26.73133333333325 +2019-10-10 09:00:00,24.44744444444454 +2019-10-10 10:00:00,19.583444444444318 +2019-10-10 11:00:00,21.272222222222215 +2019-10-10 12:00:00,33.167000000000044 +2019-10-10 13:00:00,28.306999999999995 +2019-10-10 14:00:00,35.75377777777783 +2019-10-10 15:00:00,18.113888888888944 +2019-10-10 16:00:00,14.760444444444422 +2019-10-10 17:00:00,16.961999999999986 +2019-10-10 18:00:00,17.846333333333327 +2019-10-10 19:00:00,18.854777777777752 +2019-10-10 20:00:00,11.90422222222217 +2019-10-10 21:00:00,16.77944444444449 +2019-10-10 22:00:00,14.146666666666771 +2019-10-10 23:00:00,25.986222222222153 +2019-10-11 00:00:00,44.332111111111075 +2019-10-11 01:00:00,60.427000000000135 +2019-10-11 02:00:00,41.27344444444437 +2019-10-11 03:00:00,92.08955555555542 +2019-10-11 04:00:00,73.92033333333353 +2019-10-11 05:00:00,97.33500000000032 +2019-10-11 06:00:00,108.11255555555559 +2019-10-11 07:00:00,112.82500000000022 +2019-10-11 08:00:00,117.62899999999985 +2019-10-11 09:00:00,108.38466666666685 +2019-10-11 10:00:00,92.841111111111 +2019-10-11 11:00:00,104.90877777777766 +2019-10-11 12:00:00,104.84733333333368 +2019-10-11 13:00:00,104.67411111111157 +2019-10-11 14:00:00,104.93744444444468 +2019-10-11 15:00:00,104.97511111111217 +2019-10-11 16:00:00,104.96000000000085 +2019-10-11 17:00:00,105.00533333333428 +2019-10-11 18:00:00,48.06311111111043 +2019-10-11 19:00:00,-0.8999999999999857 +2019-10-11 20:00:00,-0.8487777777777654 +2019-10-11 21:00:00,85.90166666666666 +2019-10-11 22:00:00,99.35166666666659 +2019-10-11 23:00:00,90.51199999999994 +2019-10-12 00:00:00,80.47411111111118 +2019-10-12 01:00:00,58.980444444444444 +2019-10-12 02:00:00,43.72544444444453 +2019-10-12 03:00:00,35.38388888888875 +2019-10-12 04:00:00,35.41900000000014 +2019-10-12 05:00:00,35.99011111111119 +2019-10-12 06:00:00,35.93211111111116 +2019-10-12 07:00:00,18.54699999999986 +2019-10-12 08:00:00,0.1588888888888992 +2019-10-12 09:00:00,2.483111111111114 +2019-10-12 10:00:00,16.61844444444451 +2019-10-12 11:00:00,29.770555555555696 +2019-10-12 12:00:00,30.544666666666526 +2019-10-12 13:00:00,19.10311111111109 +2019-10-12 14:00:00,4.848555555555485 +2019-10-12 15:00:00,8.937777777777752 +2019-10-12 16:00:00,52.555888888889015 +2019-10-12 17:00:00,96.43922222222261 +2019-10-12 18:00:00,95.41044444444465 +2019-10-12 19:00:00,63.66655555555557 +2019-10-12 20:00:00,72.58944444444437 +2019-10-12 21:00:00,68.40866666666653 +2019-10-12 22:00:00,48.618666666666336 +2019-10-12 23:00:00,45.45722222222227 +2019-10-13 00:00:00,41.78188888888881 +2019-10-13 01:00:00,60.198444444444654 +2019-10-13 02:00:00,57.32188888888936 +2019-10-13 03:00:00,57.45544444444443 +2019-10-13 04:00:00,83.04055555555595 +2019-10-13 05:00:00,102.33755555555562 +2019-10-13 06:00:00,114.57144444444488 +2019-10-13 07:00:00,107.24244444444462 +2019-10-13 08:00:00,95.35666666666705 +2019-10-13 09:00:00,79.17566666666652 +2019-10-13 10:00:00,95.39422222222218 +2019-10-13 11:00:00,111.69755555555554 +2019-10-13 12:00:00,113.27066666666664 +2019-10-13 13:00:00,117.25477777777809 +2019-10-13 14:00:00,125.30177777777756 +2019-10-13 15:00:00,124.82000000000004 +2019-10-13 16:00:00,118.72555555555573 +2019-10-13 17:00:00,118.43022222222254 +2019-10-13 18:00:00,107.30799999999999 +2019-10-13 19:00:00,95.56722222222211 +2019-10-13 20:00:00,116.02077777777808 +2019-10-13 21:00:00,103.6510000000001 +2019-10-13 22:00:00,65.36322222222181 +2019-10-13 23:00:00,70.89577777777788 +2019-10-14 00:00:00,24.24288888888892 +2019-10-14 01:00:00,59.598000000000035 +2019-10-14 02:00:00,96.07544444444424 +2019-10-14 03:00:00,97.28233333333347 +2019-10-14 04:00:00,62.433222222222334 +2019-10-14 05:00:00,95.99122222222208 +2019-10-14 06:00:00,76.46333333333351 +2019-10-14 07:00:00,56.141999999999626 +2019-10-14 08:00:00,35.43799999999994 +2019-10-14 09:00:00,15.431333333333498 +2019-10-14 10:00:00,16.446555555555634 +2019-10-14 11:00:00,11.422111111111004 +2019-10-14 12:00:00,3.45599999999997 +2019-10-14 13:00:00,1.8127777777777783 +2019-10-14 14:00:00,1.8890000000000131 +2019-10-14 15:00:00,1.0535555555555631 +2019-10-14 16:00:00,2.1561111111111235 +2019-10-14 17:00:00,4.9737777777777925 +2019-10-14 18:00:00,7.713222222222217 +2019-10-14 19:00:00,2.7724444444444276 +2019-10-14 20:00:00,5.344333333333327 +2019-10-14 21:00:00,4.66488888888888 +2019-10-14 22:00:00,1.1116666666666515 +2019-10-14 23:00:00,-0.24411111111111314 +2019-10-15 00:00:00,-0.6387777777777752 +2019-10-15 01:00:00,-0.5936666666666677 +2019-10-15 02:00:00,-0.19922222222222216 +2019-10-15 03:00:00,-0.4414444444444483 +2019-10-15 04:00:00,-0.1488888888888901 +2019-10-15 05:00:00,6.215555555555509 +2019-10-15 06:00:00,5.548555555555607 +2019-10-15 07:00:00,9.209222222222202 +2019-10-15 08:00:00,17.47755555555555 +2019-10-15 09:00:00,19.148111111111117 +2019-10-15 10:00:00,31.735888888888788 +2019-10-15 11:00:00,25.147666666666485 +2019-10-15 12:00:00,50.853000000000115 +2019-10-15 13:00:00,60.95866666666651 +2019-10-15 14:00:00,65.74911111111109 +2019-10-15 15:00:00,42.8245555555557 +2019-10-15 16:00:00,37.20177777777781 +2019-10-15 17:00:00,37.17466666666673 +2019-10-15 18:00:00,33.57411111111116 +2019-10-15 19:00:00,20.015777777777704 +2019-10-15 20:00:00,12.703000000000008 +2019-10-15 21:00:00,9.315111111111072 +2019-10-15 22:00:00,0.7006666666666674 +2019-10-15 23:00:00,-0.9558888888888794 +2019-10-16 00:00:00,-0.9257777777777743 +2019-10-16 01:00:00,-0.9086666666666573 +2019-10-16 02:00:00,-0.8696666666666675 +2019-10-16 03:00:00,1.965555555555564 +2019-10-16 04:00:00,1.0484444444444436 +2019-10-16 05:00:00,3.11466666666663 +2019-10-16 06:00:00,1.6028888888888932 +2019-10-16 07:00:00,7.85022222222222 +2019-10-16 08:00:00,21.683666666666678 +2019-10-16 09:00:00,25.732111111111102 +2019-10-16 10:00:00,20.473777777777656 +2019-10-16 11:00:00,25.286333333333296 +2019-10-16 12:00:00,34.69777777777788 +2019-10-16 13:00:00,40.67777777777776 +2019-10-16 14:00:00,46.275444444444545 +2019-10-16 15:00:00,27.08677777777787 +2019-10-16 16:00:00,27.036333333333257 +2019-10-16 17:00:00,23.54600000000012 +2019-10-16 18:00:00,17.914111111110948 +2019-10-16 19:00:00,13.007000000000032 +2019-10-16 20:00:00,9.057222222222283 +2019-10-16 21:00:00,3.780222222222208 +2019-10-16 22:00:00,-0.3098888888888891 +2019-10-16 23:00:00,-0.15555555555555572 +2019-10-17 00:00:00,-0.39966666666666667 +2019-10-17 01:00:00,-0.38055555555555576 +2019-10-17 02:00:00,-0.6233333333333301 +2019-10-17 03:00:00,-0.6976666666666649 +2019-10-17 04:00:00,0.7590000000000018 +2019-10-17 05:00:00,8.376333333333323 +2019-10-17 06:00:00,22.672777777777785 +2019-10-17 07:00:00,32.031888888888844 +2019-10-17 08:00:00,36.867999999999725 +2019-10-17 09:00:00,25.247222222222398 +2019-10-17 10:00:00,24.102222222222316 +2019-10-17 11:00:00,25.36711111111106 +2019-10-17 12:00:00,27.24611111111113 +2019-10-17 13:00:00,16.934666666666622 +2019-10-17 14:00:00,13.268000000000121 +2019-10-17 15:00:00,14.091666666666548 +2019-10-17 16:00:00,15.351777777777771 +2019-10-17 17:00:00,19.366222222222348 +2019-10-17 18:00:00,24.346666666666767 +2019-10-17 19:00:00,21.80911111111119 +2019-10-17 20:00:00,21.92633333333322 +2019-10-17 21:00:00,27.103222222222158 +2019-10-17 22:00:00,20.77522222222219 +2019-10-17 23:00:00,19.628555555555653 +2019-10-18 00:00:00,19.474333333333327 +2019-10-18 01:00:00,8.6896666666667 +2019-10-18 02:00:00,6.2941111111111425 +2019-10-18 03:00:00,3.9846666666666626 +2019-10-18 04:00:00,5.110222222222194 +2019-10-18 05:00:00,4.3511111111111145 +2019-10-18 06:00:00,1.570444444444454 +2019-10-18 07:00:00,18.67244444444439 +2019-10-18 08:00:00,8.694222222222212 +2019-10-18 09:00:00,5.351333333333282 +2019-10-18 10:00:00,0.09399999999999417 +2019-10-18 11:00:00,-0.8627777777777789 +2019-10-18 12:00:00,0.7168888888888825 +2019-10-18 13:00:00,1.1122222222222213 +2019-10-18 14:00:00,3.456222222222234 +2019-10-18 15:00:00,6.734000000000061 +2019-10-18 16:00:00,13.863777777777813 +2019-10-18 17:00:00,27.51644444444445 +2019-10-18 18:00:00,38.475666666666676 +2019-10-18 19:00:00,35.88422222222235 +2019-10-18 20:00:00,27.466888888888825 +2019-10-18 21:00:00,49.69666666666676 +2019-10-18 22:00:00,75.51522222222223 +2019-10-18 23:00:00,76.13000000000004 +2019-10-19 00:00:00,80.69088888888894 +2019-10-19 01:00:00,78.8076666666666 +2019-10-19 02:00:00,53.85466666666647 +2019-10-19 03:00:00,67.60144444444447 +2019-10-19 04:00:00,61.93344444444444 +2019-10-19 05:00:00,61.826111111111125 +2019-10-19 06:00:00,81.44177777777786 +2019-10-19 07:00:00,96.24144444444416 +2019-10-19 08:00:00,91.96788888888888 +2019-10-19 09:00:00,94.29266666666679 +2019-10-19 10:00:00,61.7929999999997 +2019-10-19 11:00:00,63.89788888888906 +2019-10-19 12:00:00,86.04866666666663 +2019-10-19 13:00:00,85.60622222222236 +2019-10-19 14:00:00,98.23744444444431 +2019-10-19 15:00:00,97.22911111111084 +2019-10-19 16:00:00,102.60722222222216 +2019-10-19 17:00:00,97.76444444444454 +2019-10-19 18:00:00,94.00977777777781 +2019-10-19 19:00:00,90.39288888888886 +2019-10-19 20:00:00,76.8170000000003 +2019-10-19 21:00:00,56.83711111111128 +2019-10-19 22:00:00,94.48188888888895 +2019-10-19 23:00:00,78.95755555555553 +2019-10-20 00:00:00,118.54855555555554 +2019-10-20 01:00:00,68.63566666666684 +2019-10-20 02:00:00,60.00399999999978 +2019-10-20 03:00:00,75.40622222222255 +2019-10-20 04:00:00,76.26977777777826 +2019-10-20 05:00:00,85.50333333333303 +2019-10-20 06:00:00,128.28466666666557 +2019-10-20 07:00:00,114.04077777777712 +2019-10-20 08:00:00,113.98688888888849 +2019-10-20 09:00:00,88.64588888888949 +2019-10-20 10:00:00,88.43822222222252 +2019-10-20 11:00:00,90.58322222222245 +2019-10-20 12:00:00,89.25388888888975 +2019-10-20 13:00:00,94.88100000000057 +2019-10-20 14:00:00,98.12877777777771 +2019-10-20 15:00:00,88.29100000000005 +2019-10-20 16:00:00,86.36388888888877 +2019-10-20 17:00:00,89.44844444444365 +2019-10-20 18:00:00,92.19044444444492 +2019-10-20 19:00:00,95.16366666666711 +2019-10-20 20:00:00,84.91977777777682 +2019-10-20 21:00:00,45.318555555555456 +2019-10-20 22:00:00,55.37222222222213 +2019-10-20 23:00:00,80.25044444444455 +2019-10-21 00:00:00,89.6094444444445 +2019-10-21 01:00:00,95.87544444444431 +2019-10-21 02:00:00,87.01077777777783 +2019-10-21 03:00:00,93.64544444444422 +2019-10-21 04:00:00,93.91544444444426 +2019-10-21 05:00:00,76.241888888889 +2019-10-21 06:00:00,82.93322222222233 +2019-10-21 07:00:00,73.78088888888891 +2019-10-21 08:00:00,47.504444444444225 +2019-10-21 09:00:00,47.2585555555558 +2019-10-21 10:00:00,40.62044444444428 +2019-10-21 11:00:00,36.48911111111091 +2019-10-21 12:00:00,28.32355555555535 +2019-10-21 13:00:00,32.036222222221795 +2019-10-21 14:00:00,27.467777777777872 +2019-10-21 15:00:00,21.427111111111117 +2019-10-21 16:00:00,17.434666666666757 +2019-10-21 17:00:00,17.505555555555624 +2019-10-21 18:00:00,7.6275555555554675 +2019-10-21 19:00:00,10.642444444444465 +2019-10-21 20:00:00,22.74855555555564 +2019-10-21 21:00:00,22.201666666666803 +2019-10-21 22:00:00,16.827777777777754 +2019-10-21 23:00:00,19.36633333333336 +2019-10-22 00:00:00,23.452222222222186 +2019-10-22 01:00:00,28.674666666666663 +2019-10-22 02:00:00,39.80466666666665 +2019-10-22 03:00:00,44.534444444444446 +2019-10-22 04:00:00,31.652888888888818 +2019-10-22 05:00:00,20.58877777777785 +2019-10-22 06:00:00,26.87288888888891 +2019-10-22 07:00:00,39.37666666666677 +2019-10-22 08:00:00,26.575666666666738 +2019-10-22 09:00:00,17.21455555555554 +2019-10-22 10:00:00,0.9906666666666649 +2019-10-22 11:00:00,2.3083333333333496 +2019-10-22 12:00:00,0.9902222222222303 +2019-10-22 13:00:00,3.279999999999977 +2019-10-22 14:00:00,4.487111111111118 +2019-10-22 15:00:00,7.53388888888892 +2019-10-22 16:00:00,12.102111111111196 +2019-10-22 17:00:00,13.488888888888889 +2019-10-22 18:00:00,15.170555555555438 +2019-10-22 19:00:00,16.889222222222223 +2019-10-22 20:00:00,11.808000000000055 +2019-10-22 21:00:00,5.437666666666644 +2019-10-22 22:00:00,4.603555555555521 +2019-10-22 23:00:00,2.6977777777778007 +2019-10-23 00:00:00,5.004999999999994 +2019-10-23 01:00:00,2.33822222222221 +2019-10-23 02:00:00,1.1373333333333249 +2019-10-23 03:00:00,0.37611111111110845 +2019-10-23 04:00:00,0.8761111111111092 +2019-10-23 05:00:00,1.1326666666666634 +2019-10-23 06:00:00,5.498333333333324 +2019-10-23 07:00:00,1.8011111111111078 +2019-10-23 08:00:00,0.08599999999999991 +2019-10-23 09:00:00,5.263111111111138 +2019-10-23 10:00:00,15.373111111111012 +2019-10-23 11:00:00,27.61266666666681 +2019-10-23 12:00:00,31.663666666666714 +2019-10-23 13:00:00,31.34822222222231 +2019-10-23 14:00:00,35.63600000000001 +2019-10-23 15:00:00,31.186777777777824 +2019-10-23 16:00:00,39.47266666666681 +2019-10-23 17:00:00,43.279666666666834 +2019-10-23 18:00:00,56.44911111111136 +2019-10-23 19:00:00,52.12344444444435 +2019-10-23 20:00:00,36.63388888888895 +2019-10-23 21:00:00,28.36955555555549 +2019-10-23 22:00:00,25.73066666666666 +2019-10-23 23:00:00,22.885666666666665 +2019-10-24 00:00:00,19.14033333333328 +2019-10-24 01:00:00,16.887222222222274 +2019-10-24 02:00:00,17.7432222222222 +2019-10-24 03:00:00,11.074222222222245 +2019-10-24 04:00:00,8.282999999999983 +2019-10-24 05:00:00,8.433777777777745 +2019-10-24 06:00:00,5.030333333333333 +2019-10-24 07:00:00,1.9415555555555781 +2019-10-24 08:00:00,0.22100000000000067 +2019-10-24 09:00:00,1.0678888888888944 +2019-10-24 10:00:00,61.686000000000085 +2019-10-24 11:00:00,86.12555555555551 +2019-10-24 12:00:00,96.92988888888878 +2019-10-24 13:00:00,87.97500000000039 +2019-10-24 14:00:00,58.62522222222221 +2019-10-24 15:00:00,32.79355555555563 +2019-10-24 16:00:00,12.113888888888766 +2019-10-24 17:00:00,22.433555555555596 +2019-10-24 18:00:00,46.827888888888914 +2019-10-24 19:00:00,51.98211111111103 +2019-10-24 20:00:00,32.07833333333328 +2019-10-24 21:00:00,37.94544444444435 +2019-10-24 22:00:00,18.665000000000045 +2019-10-24 23:00:00,12.635333333333305 +2019-10-25 00:00:00,6.513333333333338 +2019-10-25 01:00:00,7.450999999999981 +2019-10-25 02:00:00,10.421444444444475 +2019-10-25 03:00:00,11.768777777777784 +2019-10-25 04:00:00,7.623999999999974 +2019-10-25 05:00:00,10.595111111111123 +2019-10-25 06:00:00,17.946000000000083 +2019-10-25 07:00:00,12.161222222222337 +2019-10-25 08:00:00,5.672888888888943 +2019-10-25 09:00:00,15.441222222222237 +2019-10-25 10:00:00,92.73233333333349 +2019-10-25 11:00:00,118.25388888888872 +2019-10-25 12:00:00,100.0993333333334 +2019-10-25 13:00:00,95.26922222222227 +2019-10-25 14:00:00,101.85833333333318 +2019-10-25 15:00:00,65.34377777777776 +2019-10-25 16:00:00,58.305666666666625 +2019-10-25 17:00:00,21.37766666666669 +2019-10-25 18:00:00,56.698111111111096 +2019-10-25 19:00:00,55.54022222222216 +2019-10-25 20:00:00,32.74988888888884 +2019-10-25 21:00:00,57.95922222222222 +2019-10-25 22:00:00,72.43788888888879 +2019-10-25 23:00:00,70.91899999999995 +2019-10-26 00:00:00,74.21044444444442 +2019-10-26 01:00:00,81.90655555555571 +2019-10-26 02:00:00,76.81466666666665 +2019-10-26 03:00:00,64.90766666666656 +2019-10-26 04:00:00,71.30511111111102 +2019-10-26 05:00:00,65.77933333333328 +2019-10-26 06:00:00,45.13699999999996 +2019-10-26 07:00:00,59.71499999999991 +2019-10-26 08:00:00,92.08222222222226 +2019-10-26 09:00:00,75.72766666666695 +2019-10-26 10:00:00,117.88711111111138 +2019-10-26 11:00:00,101.30022222222202 +2019-10-26 12:00:00,106.66655555555552 +2019-10-26 13:00:00,98.74200000000012 +2019-10-26 14:00:00,59.519111111111116 +2019-10-26 15:00:00,50.93222222222235 +2019-10-26 16:00:00,89.71366666666658 +2019-10-26 17:00:00,62.72922222222237 +2019-10-26 18:00:00,52.82411111111103 +2019-10-26 19:00:00,51.65622222222219 +2019-10-26 20:00:00,48.41222222222207 +2019-10-26 21:00:00,41.13788888888891 +2019-10-26 22:00:00,53.41477777777774 +2019-10-26 23:00:00,59.03655555555561 +2019-10-27 00:00:00,68.48555555555542 +2019-10-27 01:00:00,41.716444444444406 +2019-10-27 02:00:00,26.127222222222194 +2019-10-27 03:00:00,22.610888888888937 +2019-10-27 04:00:00,28.664888888888825 +2019-10-27 05:00:00,52.656111111111166 +2019-10-27 06:00:00,104.28133333333298 +2019-10-27 07:00:00,101.31911111111165 +2019-10-27 08:00:00,102.25244444444455 +2019-10-27 09:00:00,66.77866666666682 +2019-10-27 10:00:00,60.50922222222246 +2019-10-27 11:00:00,72.06722222222213 +2019-10-27 12:00:00,32.07099999999993 +2019-10-27 13:00:00,44.097999999999814 +2019-10-27 14:00:00,20.022222222222332 +2019-10-27 15:00:00,35.9076666666667 +2019-10-27 16:00:00,19.612777777777843 +2019-10-27 17:00:00,5.597222222222253 +2019-10-27 18:00:00,4.652888888888898 +2019-10-27 19:00:00,15.856555555555572 +2019-10-27 20:00:00,26.646000000000004 +2019-10-27 21:00:00,14.870666666666722 +2019-10-27 22:00:00,6.840666666666704 +2019-10-27 23:00:00,2.0054444444444464 +2019-10-28 00:00:00,1.8635555555555543 +2019-10-28 01:00:00,14.793111111111084 +2019-10-28 02:00:00,12.741333333333332 +2019-10-28 03:00:00,10.000777777777808 +2019-10-28 04:00:00,5.845555555555592 +2019-10-28 05:00:00,12.641444444444392 +2019-10-28 06:00:00,10.40655555555546 +2019-10-28 07:00:00,15.598222222222171 +2019-10-28 08:00:00,14.568555555555491 +2019-10-28 09:00:00,12.000333333333373 +2019-10-28 10:00:00,11.885000000000002 +2019-10-28 11:00:00,5.463444444444424 +2019-10-28 12:00:00,5.306999999999867 +2019-10-28 13:00:00,5.073777777777744 +2019-10-28 14:00:00,7.665000000000002 +2019-10-28 15:00:00,0.1962222222222225 +2019-10-28 16:00:00,4.241999999999996 +2019-10-28 17:00:00,39.619111111111124 +2019-10-28 18:00:00,25.323444444444554 +2019-10-28 19:00:00,42.79222222222235 +2019-10-28 20:00:00,43.599000000000096 +2019-10-28 21:00:00,65.71366666666682 +2019-10-28 22:00:00,58.98044444444448 +2019-10-28 23:00:00,59.3692222222222 +2019-10-29 00:00:00,64.82311111111119 +2019-10-29 01:00:00,78.30377777777771 +2019-10-29 02:00:00,76.08466666666666 +2019-10-29 03:00:00,115.66988888888906 +2019-10-29 04:00:00,100.7986666666668 +2019-10-29 05:00:00,90.10999999999997 +2019-10-29 06:00:00,77.22100000000017 +2019-10-29 07:00:00,36.98344444444453 +2019-10-29 08:00:00,18.073222222222164 +2019-10-29 09:00:00,21.503666666666756 +2019-10-29 10:00:00,15.731222222222295 +2019-10-29 11:00:00,12.542555555555367 +2019-10-29 12:00:00,26.11211111111095 +2019-10-29 13:00:00,43.83777777777787 +2019-10-29 14:00:00,88.941888888889 +2019-10-29 15:00:00,91.57777777777815 +2019-10-29 16:00:00,82.43533333333329 +2019-10-29 17:00:00,100.90844444444436 +2019-10-29 18:00:00,124.35766666666709 +2019-10-29 19:00:00,119.23511111111083 +2019-10-29 20:00:00,98.88633333333281 +2019-10-29 21:00:00,86.56533333333338 +2019-10-29 22:00:00,84.2571111111108 +2019-10-29 23:00:00,72.25366666666686 +2019-10-30 00:00:00,45.820444444444156 +2019-10-30 01:00:00,44.298333333333424 +2019-10-30 02:00:00,81.70455555555579 +2019-10-30 03:00:00,87.19244444444499 +2019-10-30 04:00:00,87.36833333333254 +2019-10-30 05:00:00,79.86144444444446 +2019-10-30 06:00:00,107.62844444444441 +2019-10-30 07:00:00,87.51077777777775 +2019-10-30 08:00:00,87.77866666666651 +2019-10-30 09:00:00,76.75755555555483 +2019-10-30 10:00:00,60.1584444444446 +2019-10-30 11:00:00,26.092444444444183 +2019-10-30 12:00:00,11.629666666666626 +2019-10-30 13:00:00,10.449000000000035 +2019-10-30 14:00:00,16.71755555555559 +2019-10-30 15:00:00,31.350444444444314 +2019-10-30 16:00:00,21.7935555555558 +2019-10-30 17:00:00,8.269555555555508 +2019-10-30 18:00:00,1.3671111111111183 +2019-10-30 19:00:00,0.20866666666666803 +2019-10-30 20:00:00,4.360000000000001 +2019-10-30 21:00:00,8.585666666666672 +2019-10-30 22:00:00,15.795777777777706 +2019-10-30 23:00:00,22.683555555555515 +2019-10-31 00:00:00,36.52111111111111 +2019-10-31 01:00:00,52.99755555555541 +2019-10-31 02:00:00,46.5781111111111 +2019-10-31 03:00:00,84.32499999999995 +2019-10-31 04:00:00,89.58655555555532 +2019-10-31 05:00:00,83.90822222222222 +2019-10-31 06:00:00,69.7598888888888 +2019-10-31 07:00:00,72.28233333333337 +2019-10-31 08:00:00,33.417555555555694 +2019-10-31 09:00:00,15.341666666666576 +2019-10-31 10:00:00,15.843555555555504 +2019-10-31 11:00:00,19.43266666666657 +2019-10-31 12:00:00,18.435777777777684 +2019-10-31 13:00:00,34.6979999999998 +2019-10-31 14:00:00,65.67544444444476 +2019-10-31 15:00:00,63.390666666666846 +2019-10-31 16:00:00,64.72277777777808 +2019-10-31 17:00:00,72.23222222222199 +2019-10-31 18:00:00,55.01744444444453 +2019-10-31 19:00:00,53.27288888888886 +2019-10-31 20:00:00,82.80588888888902 +2019-10-31 21:00:00,115.15577777777787 +2019-10-31 22:00:00,89.88544444444386 +2019-10-31 23:00:00,71.19600000000054 +2019-11-01 00:00:00,69.37533333333354 +2019-11-01 01:00:00,69.90933333333287 +2019-11-01 02:00:00,73.84200000000105 +2019-11-01 03:00:00,77.40199999999972 +2019-11-01 04:00:00,75.4718888888891 +2019-11-01 05:00:00,73.861555555555 +2019-11-01 06:00:00,79.70444444444522 +2019-11-01 07:00:00,83.25588888888805 +2019-11-01 08:00:00,86.49966666666718 +2019-11-01 09:00:00,83.146000000001 +2019-11-01 10:00:00,84.62822222222164 +2019-11-01 11:00:00,84.20355555555537 +2019-11-01 12:00:00,85.3928888888893 +2019-11-01 13:00:00,83.8493333333346 +2019-11-01 14:00:00,84.73599999999998 +2019-11-01 15:00:00,87.7149999999994 +2019-11-01 16:00:00,86.88122222222157 +2019-11-01 17:00:00,85.53444444444453 +2019-11-01 18:00:00,91.17677777777796 +2019-11-01 19:00:00,92.111 +2019-11-01 20:00:00,77.06022222222202 +2019-11-01 21:00:00,73.12511111111101 +2019-11-01 22:00:00,55.08199999999996 +2019-11-01 23:00:00,70.9808888888889 +2019-11-02 00:00:00,79.9094444444446 +2019-11-02 01:00:00,93.5625555555556 +2019-11-02 02:00:00,75.7590000000004 +2019-11-02 03:00:00,75.40411111111031 +2019-11-02 04:00:00,75.7154444444445 +2019-11-02 05:00:00,74.50644444444413 +2019-11-02 06:00:00,80.54588888888917 +2019-11-02 07:00:00,83.74466666666648 +2019-11-02 08:00:00,83.90255555555605 +2019-11-02 09:00:00,84.62822222222128 +2019-11-02 10:00:00,83.34522222222247 +2019-11-02 11:00:00,83.44655555555507 +2019-11-02 12:00:00,82.9952222222216 +2019-11-02 13:00:00,83.82833333333254 +2019-11-02 14:00:00,83.58377777777754 +2019-11-02 15:00:00,83.98744444444507 +2019-11-02 16:00:00,92.93922222222193 +2019-11-02 17:00:00,84.97044444444387 +2019-11-02 18:00:00,86.5016666666665 +2019-11-02 19:00:00,80.34844444444485 +2019-11-02 20:00:00,77.9102222222223 +2019-11-02 21:00:00,86.42477777777809 +2019-11-02 22:00:00,100.45077777777816 +2019-11-02 23:00:00,61.64344444444456 +2019-11-03 00:00:00,16.66311111111112 +2019-11-03 01:00:00,7.265111111111112 +2019-11-03 02:00:00,82.4857777777777 +2019-11-03 03:00:00,116.75399999999999 +2019-11-03 04:00:00,87.27822222222244 +2019-11-03 05:00:00,82.55222222222201 +2019-11-03 06:00:00,97.5250000000004 +2019-11-03 07:00:00,73.7573333333334 +2019-11-03 08:00:00,65.20388888888901 +2019-11-03 09:00:00,53.80166666666679 +2019-11-03 10:00:00,18.399333333333335 +2019-11-03 11:00:00,15.474666666666643 +2019-11-03 12:00:00,14.360111111110898 +2019-11-03 13:00:00,17.95655555555559 +2019-11-03 14:00:00,12.908777777777754 +2019-11-03 15:00:00,8.165999999999906 +2019-11-03 16:00:00,5.252111111111076 +2019-11-03 17:00:00,9.766333333333332 +2019-11-03 18:00:00,16.310888888888883 +2019-11-03 19:00:00,31.998888888889013 +2019-11-03 20:00:00,52.13533333333337 +2019-11-03 21:00:00,37.89255555555558 +2019-11-03 22:00:00,54.334555555555625 +2019-11-03 23:00:00,49.16477777777758 +2019-11-04 00:00:00,39.10999999999995 +2019-11-04 01:00:00,47.927888888888866 +2019-11-04 02:00:00,50.169333333333434 +2019-11-04 03:00:00,61.45588888888902 +2019-11-04 04:00:00,47.770333333333255 +2019-11-04 05:00:00,53.13366666666667 +2019-11-04 06:00:00,74.88366666666664 +2019-11-04 07:00:00,61.923111111110956 +2019-11-04 08:00:00,57.536888888888654 +2019-11-04 09:00:00,52.98199999999997 +2019-11-04 10:00:00,44.8795555555556 +2019-11-04 11:00:00,30.767666666666813 +2019-11-04 12:00:00,29.06722222222232 +2019-11-04 13:00:00,23.637888888889037 +2019-11-04 14:00:00,21.698666666666806 +2019-11-04 15:00:00,24.566222222222233 +2019-11-04 16:00:00,26.715555555555632 +2019-11-04 17:00:00,20.70744444444444 +2019-11-04 18:00:00,18.931999999999913 +2019-11-04 19:00:00,9.370333333333301 +2019-11-04 20:00:00,2.0756666666666903 +2019-11-04 21:00:00,0.9781111111111183 +2019-11-04 22:00:00,3.4427777777777626 +2019-11-04 23:00:00,4.899888888888905 +2019-11-05 00:00:00,9.923111111111124 +2019-11-05 01:00:00,11.970666666666705 +2019-11-05 02:00:00,13.304888888888877 +2019-11-05 03:00:00,17.298111111111112 +2019-11-05 04:00:00,17.162333333333294 +2019-11-05 05:00:00,21.618555555555574 +2019-11-05 06:00:00,20.525333333333435 +2019-11-05 07:00:00,7.448666666666735 +2019-11-05 08:00:00,-0.9431111111111108 +2019-11-05 09:00:00,-0.96577777777777 +2019-11-05 10:00:00,-0.8228888888888821 +2019-11-05 11:00:00,1.354222222222232 +2019-11-05 12:00:00,10.498888888888896 +2019-11-05 13:00:00,25.334999999999958 +2019-11-05 14:00:00,28.927444444444436 +2019-11-05 15:00:00,26.90244444444439 +2019-11-05 16:00:00,25.96833333333321 +2019-11-05 17:00:00,63.47077777777769 +2019-11-05 18:00:00,105.23500000000054 +2019-11-05 19:00:00,89.47433333333348 +2019-11-05 20:00:00,74.36744444444443 +2019-11-05 21:00:00,25.213111111111086 +2019-11-05 22:00:00,-1.0038888888888888 +2019-11-05 23:00:00,-1.0 +2019-11-06 00:00:00,14.485888888888855 +2019-11-06 01:00:00,43.9356666666668 +2019-11-06 02:00:00,102.03466666666668 +2019-11-06 03:00:00,92.72444444444425 +2019-11-06 04:00:00,10.770222222222145 +2019-11-06 05:00:00,89.60911111111128 +2019-11-06 06:00:00,89.71966666666714 +2019-11-06 07:00:00,98.4343333333335 +2019-11-06 08:00:00,93.46966666666695 +2019-11-06 09:00:00,83.0083333333342 +2019-11-06 10:00:00,82.77166666666616 +2019-11-06 11:00:00,105.81044444444417 +2019-11-06 12:00:00,104.31877777777787 +2019-11-06 13:00:00,96.4311111111119 +2019-11-06 14:00:00,92.45188888888856 +2019-11-06 15:00:00,90.07055555555542 +2019-11-06 16:00:00,92.51333333333349 +2019-11-06 17:00:00,97.69299999999976 +2019-11-06 18:00:00,96.32688888888886 +2019-11-06 19:00:00,98.4444444444443 +2019-11-06 20:00:00,90.40499999999997 +2019-11-06 21:00:00,94.00000000000004 +2019-11-06 22:00:00,97.0615555555556 +2019-11-06 23:00:00,99.91266666666671 +2019-11-07 00:00:00,93.94011111111136 +2019-11-07 01:00:00,88.87744444444444 +2019-11-07 02:00:00,94.99733333333339 +2019-11-07 03:00:00,93.55688888888916 +2019-11-07 04:00:00,83.57411111111128 +2019-11-07 05:00:00,55.84177777777737 +2019-11-07 06:00:00,103.79233333333319 +2019-11-07 07:00:00,81.07500000000003 +2019-11-07 08:00:00,70.84844444444462 +2019-11-07 09:00:00,71.09144444444449 +2019-11-07 10:00:00,75.23688888888908 +2019-11-07 11:00:00,75.94788888888907 +2019-11-07 12:00:00,74.86422222222221 +2019-11-07 13:00:00,70.58511111111113 +2019-11-07 14:00:00,38.00866666666658 +2019-11-07 15:00:00,30.72555555555549 +2019-11-07 16:00:00,47.15777777777753 +2019-11-07 17:00:00,49.10944444444438 +2019-11-07 18:00:00,74.79088888888894 +2019-11-07 19:00:00,92.19766666666672 +2019-11-07 20:00:00,92.77933333333323 +2019-11-07 21:00:00,83.60566666666661 +2019-11-07 22:00:00,60.1013333333334 +2019-11-07 23:00:00,40.12866666666667 +2019-11-08 00:00:00,60.512444444444355 +2019-11-08 01:00:00,57.63088888888888 +2019-11-08 02:00:00,73.93811111111098 +2019-11-08 03:00:00,79.94199999999996 +2019-11-08 04:00:00,70.00833333333343 +2019-11-08 05:00:00,67.06255555555533 +2019-11-08 06:00:00,61.646111111111225 +2019-11-08 07:00:00,31.547000000000132 +2019-11-08 08:00:00,18.51744444444453 +2019-11-08 09:00:00,38.894111111110824 +2019-11-08 10:00:00,31.367777777777786 +2019-11-08 11:00:00,25.681333333333363 +2019-11-08 12:00:00,28.117444444444526 +2019-11-08 13:00:00,37.07611111111113 +2019-11-08 14:00:00,53.352111111110986 +2019-11-08 15:00:00,63.253777777778005 +2019-11-08 16:00:00,53.51533333333319 +2019-11-08 17:00:00,26.135444444444353 +2019-11-08 18:00:00,16.569000000000038 +2019-11-08 19:00:00,25.418444444444376 +2019-11-08 20:00:00,31.010333333333275 +2019-11-08 21:00:00,31.839555555555574 +2019-11-08 22:00:00,34.37022222222225 +2019-11-08 23:00:00,46.21655555555565 +2019-11-09 00:00:00,51.610111111111095 +2019-11-09 01:00:00,62.536888888888896 +2019-11-09 02:00:00,74.03333333333325 +2019-11-09 03:00:00,96.67755555555564 +2019-11-09 04:00:00,104.9372222222222 +2019-11-09 05:00:00,102.20055555555543 +2019-11-09 06:00:00,83.35333333333352 +2019-11-09 07:00:00,60.67111111111137 +2019-11-09 08:00:00,51.77922222222251 +2019-11-09 09:00:00,57.48144444444488 +2019-11-09 10:00:00,52.36133333333366 +2019-11-09 11:00:00,57.667999999999765 +2019-11-09 12:00:00,54.720111111110995 +2019-11-09 13:00:00,58.44211111111105 +2019-11-09 14:00:00,68.6791111111111 +2019-11-09 15:00:00,67.39233333333314 +2019-11-09 16:00:00,55.305111111111145 +2019-11-09 17:00:00,64.5451111111112 +2019-11-09 18:00:00,54.030222222222434 +2019-11-09 19:00:00,63.40300000000027 +2019-11-09 20:00:00,56.029888888888756 +2019-11-09 21:00:00,47.11477777777788 +2019-11-09 22:00:00,46.051333333333275 +2019-11-09 23:00:00,56.56077777777775 +2019-11-10 00:00:00,62.86088888888898 +2019-11-10 01:00:00,64.20833333333326 +2019-11-10 02:00:00,57.46911111111114 +2019-11-10 03:00:00,68.31055555555552 +2019-11-10 04:00:00,66.59599999999988 +2019-11-10 05:00:00,74.53455555555561 +2019-11-10 06:00:00,54.64588888888901 +2019-11-10 07:00:00,58.208000000000084 +2019-11-10 08:00:00,38.619111111110996 +2019-11-10 09:00:00,26.575444444444578 +2019-11-10 10:00:00,22.760999999999974 +2019-11-10 11:00:00,13.16922222222227 +2019-11-10 12:00:00,9.067444444444481 +2019-11-10 13:00:00,7.796222222222241 +2019-11-10 14:00:00,3.0444444444444074 +2019-11-10 15:00:00,1.9878888888888802 +2019-11-10 16:00:00,2.8171111111110863 +2019-11-10 17:00:00,3.214777777777777 +2019-11-10 18:00:00,2.590222222222217 +2019-11-10 19:00:00,5.196333333333267 +2019-11-10 20:00:00,4.813222222222171 +2019-11-10 21:00:00,0.3405555555555569 +2019-11-10 22:00:00,-0.8075555555555487 +2019-11-10 23:00:00,-0.8997777777777648 +2019-11-11 00:00:00,0.16100000000000547 +2019-11-11 01:00:00,1.7908888888888845 +2019-11-11 02:00:00,15.4961111111111 +2019-11-11 03:00:00,46.00088888888884 +2019-11-11 04:00:00,35.78866666666677 +2019-11-11 05:00:00,33.667666666666605 +2019-11-11 06:00:00,25.667222222222208 +2019-11-11 07:00:00,30.612 +2019-11-11 08:00:00,16.940444444444513 +2019-11-11 09:00:00,5.612444444444495 +2019-11-11 10:00:00,10.571222222222271 +2019-11-11 11:00:00,24.841888888888835 +2019-11-11 12:00:00,21.29666666666659 +2019-11-11 13:00:00,20.59255555555559 +2019-11-11 14:00:00,17.298555555555666 +2019-11-11 15:00:00,16.595888888888773 +2019-11-11 16:00:00,21.16200000000005 +2019-11-11 17:00:00,16.90399999999999 +2019-11-11 18:00:00,14.2826666666666 +2019-11-11 19:00:00,13.473333333333338 +2019-11-11 20:00:00,10.709111111111069 +2019-11-11 21:00:00,7.1407777777777035 +2019-11-11 22:00:00,2.9965555555555357 +2019-11-11 23:00:00,1.4428888888888711 +2019-11-12 00:00:00,-0.13344444444444406 +2019-11-12 01:00:00,-0.6937777777777747 +2019-11-12 02:00:00,-0.8239999999999987 +2019-11-12 03:00:00,-0.8275555555555583 +2019-11-12 04:00:00,-0.9845555555555521 +2019-11-12 05:00:00,-0.3527777777777714 +2019-11-12 06:00:00,18.440777777777885 +2019-11-12 07:00:00,19.684222222222036 +2019-11-12 08:00:00,6.604000000000005 +2019-11-12 09:00:00,2.9194444444444576 +2019-11-12 10:00:00,0.48511111111111166 +2019-11-12 11:00:00,2.85244444444443 +2019-11-12 12:00:00,2.983111111111143 +2019-11-12 13:00:00,5.1765555555556 +2019-11-12 14:00:00,10.271333333333263 +2019-11-12 15:00:00,17.95944444444435 +2019-11-12 16:00:00,18.39522222222223 +2019-11-12 17:00:00,25.420888888888904 +2019-11-12 18:00:00,44.21755555555566 +2019-11-12 19:00:00,33.59699999999996 +2019-11-12 20:00:00,24.38222222222213 +2019-11-12 21:00:00,22.50577777777774 +2019-11-12 22:00:00,29.295222222222307 +2019-11-12 23:00:00,45.559111111111164 +2019-11-13 00:00:00,63.195999999999856 +2019-11-13 01:00:00,67.94888888888887 +2019-11-13 02:00:00,81.21677777777805 +2019-11-13 03:00:00,88.65388888888901 +2019-11-13 04:00:00,91.20655555555557 +2019-11-13 05:00:00,90.03255555555565 +2019-11-13 06:00:00,59.60277777777785 +2019-11-13 07:00:00,34.62844444444453 +2019-11-13 08:00:00,23.03999999999982 +2019-11-13 09:00:00,16.803111111111008 +2019-11-13 10:00:00,24.680555555555518 +2019-11-13 11:00:00,23.45044444444428 +2019-11-13 12:00:00,21.431222222222058 +2019-11-13 13:00:00,26.386888888889036 +2019-11-13 14:00:00,25.53488888888911 +2019-11-13 15:00:00,26.69177777777755 +2019-11-13 16:00:00,34.985999999999834 +2019-11-13 17:00:00,22.158444444444306 +2019-11-13 18:00:00,4.7173333333333245 +2019-11-13 19:00:00,7.264111111111104 +2019-11-13 20:00:00,11.596111111111142 +2019-11-13 21:00:00,20.667888888888786 +2019-11-13 22:00:00,29.775999999999954 +2019-11-13 23:00:00,21.975111111111143 +2019-11-14 00:00:00,21.01811111111112 +2019-11-14 01:00:00,27.057777777777815 +2019-11-14 02:00:00,27.06788888888886 +2019-11-14 03:00:00,27.703000000000166 +2019-11-14 04:00:00,18.978555555555538 +2019-11-14 05:00:00,8.576999999999982 +2019-11-14 06:00:00,0.666333333333328 +2019-11-14 07:00:00,-1.0168888888888927 +2019-11-14 08:00:00,-0.940444444444448 +2019-11-14 09:00:00,6.661444444444434 +2019-11-14 10:00:00,24.528666666666574 +2019-11-14 11:00:00,41.45644444444437 +2019-11-14 12:00:00,51.596222222222366 +2019-11-14 13:00:00,67.62677777777775 +2019-11-14 14:00:00,53.876666666666445 +2019-11-14 15:00:00,57.68044444444447 +2019-11-14 16:00:00,70.5657777777778 +2019-11-14 17:00:00,50.6841111111111 +2019-11-14 18:00:00,63.17577777777803 +2019-11-14 19:00:00,43.22399999999999 +2019-11-14 20:00:00,94.87644444444445 +2019-11-14 21:00:00,83.81322222222222 +2019-11-14 22:00:00,70.33888888888869 +2019-11-14 23:00:00,67.14822222222223 +2019-11-15 00:00:00,63.719666666666726 +2019-11-15 01:00:00,55.885888888888836 +2019-11-15 02:00:00,49.36355555555547 +2019-11-15 03:00:00,47.25166666666679 +2019-11-15 04:00:00,46.90722222222219 +2019-11-15 05:00:00,52.33377777777779 +2019-11-15 06:00:00,58.00277777777779 +2019-11-15 07:00:00,63.053222222222104 +2019-11-15 08:00:00,60.83833333333344 +2019-11-15 09:00:00,64.7408888888891 +2019-11-15 10:00:00,70.35266666666689 +2019-11-15 11:00:00,67.03055555555561 +2019-11-15 12:00:00,61.69788888888908 +2019-11-15 13:00:00,67.23488888888888 +2019-11-15 14:00:00,65.00555555555549 +2019-11-15 15:00:00,68.23500000000007 +2019-11-15 16:00:00,71.64211111111103 +2019-11-15 17:00:00,92.42177777777765 +2019-11-15 18:00:00,99.56844444444465 +2019-11-15 19:00:00,101.18000000000004 +2019-11-15 20:00:00,107.7321111111113 +2019-11-15 21:00:00,103.80022222222247 +2019-11-15 22:00:00,106.43622222222238 +2019-11-15 23:00:00,106.12577777777753 +2019-11-16 00:00:00,94.08100000000006 +2019-11-16 01:00:00,87.92922222222228 +2019-11-16 02:00:00,59.93766666666665 +2019-11-16 03:00:00,78.58522222222226 +2019-11-16 04:00:00,83.8434444444446 +2019-11-16 05:00:00,82.27833333333342 +2019-11-16 06:00:00,81.93388888888919 +2019-11-16 07:00:00,69.87333333333322 +2019-11-16 08:00:00,59.01477777777768 +2019-11-16 09:00:00,25.404666666666756 +2019-11-16 10:00:00,9.975444444444443 +2019-11-16 11:00:00,11.165666666666786 +2019-11-16 12:00:00,2.095888888888892 +2019-11-16 13:00:00,7.163111111111141 +2019-11-16 14:00:00,4.443222222222237 +2019-11-16 15:00:00,0.7508888888888893 +2019-11-16 16:00:00,3.5455555555555716 +2019-11-16 17:00:00,0.0023333333333335005 +2019-11-16 18:00:00,-0.6884444444444394 +2019-11-16 19:00:00,0.7512222222222231 +2019-11-16 20:00:00,0.534000000000004 +2019-11-16 21:00:00,-0.7723333333333382 +2019-11-16 22:00:00,0.23255555555555416 +2019-11-16 23:00:00,4.527222222222219 +2019-11-17 00:00:00,11.406333333333317 +2019-11-17 01:00:00,15.824666666666646 +2019-11-17 02:00:00,20.56388888888889 +2019-11-17 03:00:00,29.57522222222219 +2019-11-17 04:00:00,33.50033333333331 +2019-11-17 05:00:00,42.06877777777765 +2019-11-17 06:00:00,50.653000000000205 +2019-11-17 07:00:00,36.28899999999999 +2019-11-17 08:00:00,22.696000000000122 +2019-11-17 09:00:00,28.003555555555575 +2019-11-17 10:00:00,24.026777777777824 +2019-11-17 11:00:00,8.775777777777725 +2019-11-17 12:00:00,11.370888888888993 +2019-11-17 13:00:00,14.666555555555535 +2019-11-17 14:00:00,29.371333333333293 +2019-11-17 15:00:00,19.003555555555508 +2019-11-17 16:00:00,4.563555555555578 +2019-11-17 17:00:00,-0.7615555555555449 +2019-11-17 18:00:00,-0.8999999999999857 +2019-11-17 19:00:00,-0.12288888888889302 +2019-11-17 20:00:00,7.601999999999972 +2019-11-17 21:00:00,13.850888888888923 +2019-11-17 22:00:00,11.700888888888993 +2019-11-17 23:00:00,7.125222222222206 +2019-11-18 00:00:00,10.970222222222223 +2019-11-18 01:00:00,23.344222222222268 +2019-11-18 02:00:00,20.928555555555604 +2019-11-18 03:00:00,25.256888888888906 +2019-11-18 04:00:00,41.808000000000085 +2019-11-18 05:00:00,45.38100000000003 +2019-11-18 06:00:00,37.643555555555565 +2019-11-18 07:00:00,24.425111111111153 +2019-11-18 08:00:00,18.280444444444516 +2019-11-18 09:00:00,13.740222222222334 +2019-11-18 10:00:00,7.464888888888894 +2019-11-18 11:00:00,2.169888888888905 +2019-11-18 12:00:00,2.0868888888889012 +2019-11-18 13:00:00,6.9059999999999535 +2019-11-18 14:00:00,17.17666666666668 +2019-11-18 15:00:00,19.704111111110993 +2019-11-18 16:00:00,18.756999999999962 +2019-11-18 17:00:00,22.459777777777802 +2019-11-18 18:00:00,21.479000000000184 +2019-11-18 19:00:00,8.345777777777766 +2019-11-18 20:00:00,3.8511111111110776 +2019-11-18 21:00:00,2.510222222222218 +2019-11-18 22:00:00,14.120111111111099 +2019-11-18 23:00:00,19.39111111111105 +2019-11-19 00:00:00,23.22933333333334 +2019-11-19 01:00:00,26.6301111111111 +2019-11-19 02:00:00,28.275555555555655 +2019-11-19 03:00:00,37.71677777777772 +2019-11-19 04:00:00,43.38188888888898 +2019-11-19 05:00:00,35.79522222222219 +2019-11-19 06:00:00,23.168111111111173 +2019-11-19 07:00:00,10.410444444444378 +2019-11-19 08:00:00,1.5059999999999958 +2019-11-19 09:00:00,-0.10488888888889246 +2019-11-19 10:00:00,-0.9575555555555483 +2019-11-19 11:00:00,-0.15477777777777774 +2019-11-19 12:00:00,9.464666666666682 +2019-11-19 13:00:00,18.71255555555562 +2019-11-19 14:00:00,56.96844444444454 +2019-11-19 15:00:00,72.24322222222241 +2019-11-19 16:00:00,94.00822222222222 +2019-11-19 17:00:00,85.72577777777778 +2019-11-19 18:00:00,50.77322222222217 +2019-11-19 19:00:00,41.9556666666666 +2019-11-19 20:00:00,68.19733333333336 +2019-11-19 21:00:00,82.45577777777784 +2019-11-19 22:00:00,84.02288888888899 +2019-11-19 23:00:00,52.09533333333329 +2019-11-20 00:00:00,51.39177777777781 +2019-11-20 01:00:00,38.58944444444443 +2019-11-20 02:00:00,90.39155555555533 +2019-11-20 03:00:00,92.94600000000003 +2019-11-20 04:00:00,106.16766666666649 +2019-11-20 05:00:00,88.72533333333331 +2019-11-20 06:00:00,109.5983333333332 +2019-11-20 07:00:00,104.25911111111114 +2019-11-20 08:00:00,94.80344444444445 +2019-11-20 09:00:00,92.97344444444462 +2019-11-20 10:00:00,102.37933333333261 +2019-11-20 11:00:00,110.97299999999986 +2019-11-20 12:00:00,94.4016666666667 +2019-11-20 13:00:00,81.71833333333299 +2019-11-20 14:00:00,80.74866666666674 +2019-11-20 15:00:00,83.96999999999962 +2019-11-20 16:00:00,81.09555555555566 +2019-11-20 17:00:00,68.46622222222237 +2019-11-20 18:00:00,59.31188888888885 +2019-11-20 19:00:00,61.48366666666669 +2019-11-20 20:00:00,72.50066666666663 +2019-11-20 21:00:00,47.31788888888871 +2019-11-20 22:00:00,29.175222222222157 +2019-11-20 23:00:00,33.74611111111105 +2019-11-21 00:00:00,33.99122222222226 +2019-11-21 01:00:00,37.28022222222222 +2019-11-21 02:00:00,39.12677777777776 +2019-11-21 03:00:00,37.006444444444426 +2019-11-21 04:00:00,33.92222222222229 +2019-11-21 05:00:00,25.721777777777792 +2019-11-21 06:00:00,12.127888888888922 +2019-11-21 07:00:00,6.811444444444413 +2019-11-21 08:00:00,6.01877777777786 +2019-11-21 09:00:00,8.56777777777777 +2019-11-21 10:00:00,10.962555555555603 +2019-11-21 11:00:00,15.13077777777775 +2019-11-21 12:00:00,12.443222222222156 +2019-11-21 13:00:00,2.558222222222203 +2019-11-21 14:00:00,1.300888888888893 +2019-11-21 15:00:00,1.149555555555559 +2019-11-21 16:00:00,1.528777777777773 +2019-11-21 17:00:00,8.460555555555612 +2019-11-21 18:00:00,10.76566666666668 +2019-11-21 19:00:00,11.567444444444446 +2019-11-21 20:00:00,22.863333333333397 +2019-11-21 21:00:00,48.50966666666666 +2019-11-21 22:00:00,24.54033333333349 +2019-11-21 23:00:00,19.626000000000037 +2019-11-22 00:00:00,29.680666666666635 +2019-11-22 01:00:00,35.74844444444441 +2019-11-22 02:00:00,48.055999999999976 +2019-11-22 03:00:00,48.99544444444435 +2019-11-22 04:00:00,42.3514444444446 +2019-11-22 05:00:00,34.49400000000002 +2019-11-22 06:00:00,25.18500000000004 +2019-11-22 07:00:00,19.40977777777787 +2019-11-22 08:00:00,17.214222222222148 +2019-11-22 09:00:00,11.176555555555634 +2019-11-22 10:00:00,8.394666666666625 +2019-11-22 11:00:00,2.9083333333333394 +2019-11-22 12:00:00,4.325888888888927 +2019-11-22 13:00:00,-0.3995555555555563 +2019-11-22 14:00:00,-0.8798888888888791 +2019-11-22 15:00:00,-0.093222222222222 +2019-11-22 16:00:00,3.591444444444478 +2019-11-22 17:00:00,11.06566666666667 +2019-11-22 18:00:00,12.762444444444567 +2019-11-22 19:00:00,13.512666666666469 +2019-11-22 20:00:00,10.244222222222174 +2019-11-22 21:00:00,6.929888888888803 +2019-11-22 22:00:00,5.563333333333323 +2019-11-22 23:00:00,37.731444444444435 +2019-11-23 00:00:00,83.9263333333331 +2019-11-23 01:00:00,95.27800000000012 +2019-11-23 02:00:00,64.43566666666683 +2019-11-23 03:00:00,25.18422222222222 +2019-11-23 04:00:00,13.204555555555563 +2019-11-23 05:00:00,30.293888888888908 +2019-11-23 06:00:00,30.990888888888918 +2019-11-23 07:00:00,27.174444444444458 +2019-11-23 08:00:00,32.394222222222275 +2019-11-23 09:00:00,21.082333333333377 +2019-11-23 10:00:00,11.378000000000034 +2019-11-23 11:00:00,0.4683333333333375 +2019-11-23 12:00:00,-0.9085555555555406 +2019-11-23 13:00:00,-0.8999999999999857 +2019-11-23 14:00:00,-0.8999999999999857 +2019-11-23 15:00:00,-0.8999999999999857 +2019-11-23 16:00:00,-0.8913333333333171 +2019-11-23 17:00:00,-0.2835555555555521 +2019-11-23 18:00:00,4.097444444444434 +2019-11-23 19:00:00,-0.24688888888888863 +2019-11-23 20:00:00,3.053222222222239 +2019-11-23 21:00:00,18.145777777777784 +2019-11-23 22:00:00,23.014444444444457 +2019-11-23 23:00:00,71.46766666666676 +2019-11-24 00:00:00,112.16500000000015 +2019-11-24 01:00:00,73.01233333333357 +2019-11-24 02:00:00,82.65644444444439 +2019-11-24 03:00:00,86.10800000000049 +2019-11-24 04:00:00,82.06055555555562 +2019-11-24 05:00:00,16.924444444444475 +2019-11-24 06:00:00,31.195333333333405 +2019-11-24 07:00:00,15.790333333333262 +2019-11-24 08:00:00,9.900000000000018 +2019-11-24 09:00:00,4.341777777777754 +2019-11-24 10:00:00,6.697777777777737 +2019-11-24 11:00:00,8.53066666666666 +2019-11-24 12:00:00,10.099444444444401 +2019-11-24 13:00:00,8.058999999999957 +2019-11-24 14:00:00,18.36333333333327 +2019-11-24 15:00:00,19.74433333333318 +2019-11-24 16:00:00,9.373444444444477 +2019-11-24 17:00:00,3.313222222222221 +2019-11-24 18:00:00,32.5923333333334 +2019-11-24 19:00:00,54.7495555555555 +2019-11-24 20:00:00,63.15311111111117 +2019-11-24 21:00:00,50.10377777777765 +2019-11-24 22:00:00,54.40900000000011 +2019-11-24 23:00:00,82.72611111111107 +2019-11-25 00:00:00,96.43244444444436 +2019-11-25 01:00:00,94.53777777777778 +2019-11-25 02:00:00,90.68388888888902 +2019-11-25 03:00:00,70.91700000000027 +2019-11-25 04:00:00,72.35566666666666 +2019-11-25 05:00:00,53.7722222222222 +2019-11-25 06:00:00,65.76677777777772 +2019-11-25 07:00:00,64.09988888888898 +2019-11-25 08:00:00,68.06622222222227 +2019-11-25 09:00:00,73.8221111111108 +2019-11-25 10:00:00,98.47855555555572 +2019-11-25 11:00:00,98.17877777777771 +2019-11-25 12:00:00,90.91611111111092 +2019-11-25 13:00:00,86.33977777777767 +2019-11-25 14:00:00,89.70799999999963 +2019-11-25 15:00:00,98.43644444444477 +2019-11-25 16:00:00,93.8955555555558 +2019-11-25 17:00:00,89.59622222222252 +2019-11-25 18:00:00,85.08844444444443 +2019-11-25 19:00:00,83.51533333333316 +2019-11-25 20:00:00,81.9546666666662 +2019-11-25 21:00:00,80.89911111111174 +2019-11-25 22:00:00,88.5173333333333 +2019-11-25 23:00:00,84.27944444444475 +2019-11-26 00:00:00,82.05622222222345 +2019-11-26 01:00:00,72.0329999999993 +2019-11-26 02:00:00,67.43344444444429 +2019-11-26 03:00:00,72.60611111111031 +2019-11-26 04:00:00,64.74500000000047 +2019-11-26 05:00:00,66.28044444444427 +2019-11-26 06:00:00,67.34022222222242 +2019-11-26 07:00:00,81.40944444444467 +2019-11-26 08:00:00,80.58199999999911 +2019-11-26 09:00:00,80.09477777777725 +2019-11-26 10:00:00,79.89500000000037 +2019-11-26 11:00:00,81.19333333333351 +2019-11-26 12:00:00,81.81533333333324 +2019-11-26 13:00:00,81.82722222222245 +2019-11-26 14:00:00,70.40522222222233 +2019-11-26 15:00:00,61.942111111111345 +2019-11-26 16:00:00,53.357222222222106 +2019-11-26 17:00:00,56.77322222222255 +2019-11-26 18:00:00,64.54044444444392 +2019-11-26 19:00:00,72.2307777777778 +2019-11-26 20:00:00,76.26688888888849 +2019-11-26 21:00:00,80.99922222222246 +2019-11-26 22:00:00,77.36588888888879 +2019-11-26 23:00:00,77.71977777777825 +2019-11-27 00:00:00,70.92766666666701 +2019-11-27 01:00:00,64.71977777777789 +2019-11-27 02:00:00,74.6313333333336 +2019-11-27 03:00:00,78.77933333333414 +2019-11-27 04:00:00,85.83399999999979 +2019-11-27 05:00:00,94.62699999999973 +2019-11-27 06:00:00,113.07266666666646 +2019-11-27 07:00:00,116.07577777777777 +2019-11-27 08:00:00,113.5373333333334 +2019-11-27 09:00:00,111.81822222222202 +2019-11-27 10:00:00,107.17088888888867 +2019-11-27 11:00:00,99.8956666666665 +2019-11-27 12:00:00,110.92533333333324 +2019-11-27 13:00:00,106.54477777777741 +2019-11-27 14:00:00,103.75422222222215 +2019-11-27 15:00:00,114.0005555555557 +2019-11-27 16:00:00,110.81244444444437 +2019-11-27 17:00:00,112.76333333333346 +2019-11-27 18:00:00,113.23766666666666 +2019-11-27 19:00:00,97.28100000000056 +2019-11-27 20:00:00,67.1703333333335 +2019-11-27 21:00:00,75.66122222222228 +2019-11-27 22:00:00,75.39644444444474 +2019-11-27 23:00:00,24.758999999999777 +2019-11-28 00:00:00,51.970666666666546 +2019-11-28 01:00:00,75.50399999999996 +2019-11-28 02:00:00,83.33177777777783 +2019-11-28 03:00:00,96.21022222222214 +2019-11-28 04:00:00,81.96677777777774 +2019-11-28 05:00:00,62.826666666666476 +2019-11-28 06:00:00,51.53399999999978 +2019-11-28 07:00:00,50.60077777777803 +2019-11-28 08:00:00,50.27344444444435 +2019-11-28 09:00:00,27.921000000000095 +2019-11-28 10:00:00,32.71744444444462 +2019-11-28 11:00:00,39.908444444444385 +2019-11-28 12:00:00,59.57611111111113 +2019-11-28 13:00:00,63.55422222222228 +2019-11-28 14:00:00,64.03999999999981 +2019-11-28 15:00:00,60.535888888888614 +2019-11-28 16:00:00,48.457777777777494 +2019-11-28 17:00:00,47.646555555555295 +2019-11-28 18:00:00,36.83011111111116 +2019-11-28 19:00:00,34.770555555555525 +2019-11-28 20:00:00,42.48311111111115 +2019-11-28 21:00:00,48.520333333333426 +2019-11-28 22:00:00,48.865777777777815 +2019-11-28 23:00:00,53.78166666666641 +2019-11-29 00:00:00,66.22088888888874 +2019-11-29 01:00:00,80.85344444444463 +2019-11-29 02:00:00,89.07200000000003 +2019-11-29 03:00:00,76.21766666666643 +2019-11-29 04:00:00,50.811333333333494 +2019-11-29 05:00:00,18.239777777777835 +2019-11-29 06:00:00,14.528888888888956 +2019-11-29 07:00:00,17.4948888888888 +2019-11-29 08:00:00,20.700111111111227 +2019-11-29 09:00:00,23.399333333333274 +2019-11-29 10:00:00,29.652666666666878 +2019-11-29 11:00:00,31.22077777777793 +2019-11-29 12:00:00,35.1158888888888 +2019-11-29 13:00:00,40.488888888889164 +2019-11-29 14:00:00,45.568444444444054 +2019-11-29 15:00:00,54.46466666666656 +2019-11-29 16:00:00,28.70277777777762 +2019-11-29 17:00:00,16.84188888888889 +2019-11-29 18:00:00,57.768777777777736 +2019-11-29 19:00:00,90.23855555555578 +2019-11-29 20:00:00,98.39155555555568 +2019-11-29 21:00:00,101.00611111111118 +2019-11-29 22:00:00,106.50133333333325 +2019-11-29 23:00:00,110.83622222222226 +2019-11-30 00:00:00,109.3658888888886 +2019-11-30 01:00:00,115.2247777777777 +2019-11-30 02:00:00,102.502777777778 +2019-11-30 03:00:00,82.11188888888877 +2019-11-30 04:00:00,63.81477777777751 +2019-11-30 05:00:00,34.80311111111124 +2019-11-30 06:00:00,18.383222222222354 +2019-11-30 07:00:00,11.686666666666849 +2019-11-30 08:00:00,11.28911111111124 +2019-11-30 09:00:00,12.050777777777782 +2019-11-30 10:00:00,11.72866666666656 +2019-11-30 11:00:00,14.958999999999968 +2019-11-30 12:00:00,15.985666666666635 +2019-11-30 13:00:00,15.62044444444438 +2019-11-30 14:00:00,6.854777777777813 +2019-11-30 15:00:00,10.65644444444447 +2019-11-30 16:00:00,6.943666666666662 +2019-11-30 17:00:00,3.727000000000011 +2019-11-30 18:00:00,11.90555555555548 +2019-11-30 19:00:00,10.19655555555563 +2019-11-30 20:00:00,12.728555555555536 +2019-11-30 21:00:00,8.805888888888873 +2019-11-30 22:00:00,19.636777777777773 +2019-11-30 23:00:00,22.662111111111113 +2019-12-01 00:00:00,34.57488888888899 +2019-12-01 01:00:00,35.909111111111166 +2019-12-01 02:00:00,38.85066666666669 +2019-12-01 03:00:00,45.715333333333376 +2019-12-01 04:00:00,29.60633333333341 +2019-12-01 05:00:00,11.483111111111107 +2019-12-01 06:00:00,9.475666666666669 +2019-12-01 07:00:00,2.0775555555555605 +2019-12-01 08:00:00,0.5147777777777808 +2019-12-01 09:00:00,-0.18166666666666687 +2019-12-01 10:00:00,0.8183333333333432 +2019-12-01 11:00:00,0.7652222222222261 +2019-12-01 12:00:00,-0.18722222222222146 +2019-12-01 13:00:00,1.2060000000000013 +2019-12-01 14:00:00,12.79599999999992 +2019-12-01 15:00:00,26.55611111111126 +2019-12-01 16:00:00,39.61011111111109 +2019-12-01 17:00:00,20.480444444444494 +2019-12-01 18:00:00,13.013222222222298 +2019-12-01 19:00:00,8.4014444444444 +2019-12-01 20:00:00,3.893888888888913 +2019-12-01 21:00:00,0.882000000000006 +2019-12-01 22:00:00,-0.8985555555555453 +2019-12-01 23:00:00,-0.7416666666666666 +2019-12-02 00:00:00,0.4066666666666686 +2019-12-02 01:00:00,1.2935555555555631 +2019-12-02 02:00:00,1.0212222222222174 +2019-12-02 03:00:00,12.9384444444445 +2019-12-02 04:00:00,5.233333333333295 +2019-12-02 05:00:00,3.416333333333333 +2019-12-02 06:00:00,18.13244444444433 +2019-12-02 07:00:00,29.12022222222218 +2019-12-02 08:00:00,49.79099999999998 +2019-12-02 09:00:00,44.20555555555526 +2019-12-02 10:00:00,35.40200000000005 +2019-12-02 11:00:00,32.861888888888885 +2019-12-02 12:00:00,30.517666666666646 +2019-12-02 13:00:00,29.70755555555561 +2019-12-02 14:00:00,33.90588888888889 +2019-12-02 15:00:00,64.31555555555566 +2019-12-02 16:00:00,89.79155555555565 +2019-12-02 17:00:00,88.52666666666691 +2019-12-02 18:00:00,45.01988888888886 +2019-12-02 19:00:00,56.40733333333323 +2019-12-02 20:00:00,35.433111111111096 +2019-12-02 21:00:00,36.08133333333333 +2019-12-02 22:00:00,26.285222222222263 +2019-12-02 23:00:00,22.246333333333347 +2019-12-03 00:00:00,4.630555555555534 +2019-12-03 01:00:00,0.233333333333327 +2019-12-03 02:00:00,-0.3214444444444414 +2019-12-03 03:00:00,2.510111111111115 +2019-12-03 04:00:00,9.673111111111094 +2019-12-03 05:00:00,26.922111111111125 +2019-12-03 06:00:00,58.66199999999996 +2019-12-03 07:00:00,69.76666666666682 +2019-12-03 08:00:00,90.33722222222218 +2019-12-03 09:00:00,88.10155555555558 +2019-12-03 10:00:00,64.04744444444445 +2019-12-03 11:00:00,89.32977777777768 +2019-12-03 12:00:00,115.4394444444445 +2019-12-03 13:00:00,116.98477777777755 +2019-12-03 14:00:00,110.59611111111138 +2019-12-03 15:00:00,105.34399999999992 +2019-12-03 16:00:00,104.56888888888895 +2019-12-03 17:00:00,93.40044444444477 +2019-12-03 18:00:00,75.14755555555563 +2019-12-03 19:00:00,70.25433333333335 +2019-12-03 20:00:00,76.39144444444442 +2019-12-03 21:00:00,66.7161111111113 +2019-12-03 22:00:00,33.31166666666668 +2019-12-03 23:00:00,25.79744444444443 +2019-12-04 00:00:00,13.516444444444316 +2019-12-04 01:00:00,13.684777777777823 +2019-12-04 02:00:00,20.566888888888876 +2019-12-04 03:00:00,20.437111111111065 +2019-12-04 04:00:00,42.50488888888891 +2019-12-04 05:00:00,46.26422222222236 +2019-12-04 06:00:00,16.50400000000002 +2019-12-04 07:00:00,0.8150000000000196 +2019-12-04 08:00:00,1.1405555555555609 +2019-12-04 09:00:00,20.888666666666726 +2019-12-04 10:00:00,15.622666666666717 +2019-12-04 11:00:00,7.150555555555584 +2019-12-04 12:00:00,20.53922222222217 +2019-12-04 13:00:00,25.40377777777775 +2019-12-04 14:00:00,34.22299999999998 +2019-12-04 15:00:00,44.21455555555555 +2019-12-04 16:00:00,18.609111111111112 +2019-12-04 17:00:00,10.277444444444482 +2019-12-04 18:00:00,5.051444444444425 +2019-12-04 19:00:00,1.9465555555555636 +2019-12-04 20:00:00,13.971222222222147 +2019-12-04 21:00:00,26.063666666666617 +2019-12-04 22:00:00,51.011777777777574 +2019-12-04 23:00:00,40.72855555555556 +2019-12-05 00:00:00,16.284444444444443 +2019-12-05 01:00:00,6.530888888888828 +2019-12-05 02:00:00,4.4253333333333025 +2019-12-05 03:00:00,8.391111111111117 +2019-12-05 04:00:00,33.2725555555555 +2019-12-05 05:00:00,37.52388888888881 +2019-12-05 06:00:00,22.796333333333443 +2019-12-05 07:00:00,8.008222222222212 +2019-12-05 08:00:00,3.2793333333333043 +2019-12-05 09:00:00,19.068111111111122 +2019-12-05 10:00:00,30.209888888889015 +2019-12-05 11:00:00,21.14766666666665 +2019-12-05 12:00:00,13.792222222222124 +2019-12-05 13:00:00,5.411333333333356 +2019-12-05 14:00:00,0.2568888888888923 +2019-12-05 15:00:00,-0.8402222222222265 +2019-12-05 16:00:00,3.8506666666666614 +2019-12-05 17:00:00,6.585111111111134 +2019-12-05 18:00:00,2.8483333333332963 +2019-12-05 19:00:00,-0.6198888888888893 +2019-12-05 20:00:00,0.7165555555555648 +2019-12-05 21:00:00,3.2437777777777645 +2019-12-05 22:00:00,2.4665555555555634 +2019-12-05 23:00:00,0.4941111111111143 +2019-12-06 00:00:00,7.775666666666666 +2019-12-06 01:00:00,13.339777777777732 +2019-12-06 02:00:00,2.128666666666668 +2019-12-06 03:00:00,9.054777777777794 +2019-12-06 04:00:00,16.184999999999935 +2019-12-06 05:00:00,67.99511111111123 +2019-12-06 06:00:00,44.30888888888883 +2019-12-06 07:00:00,52.226333333333386 +2019-12-06 08:00:00,82.11388888888887 +2019-12-06 09:00:00,70.04877777777789 +2019-12-06 10:00:00,63.285444444444465 +2019-12-06 11:00:00,74.78722222222211 +2019-12-06 12:00:00,71.00277777777782 +2019-12-06 13:00:00,59.62300000000026 +2019-12-06 14:00:00,57.441888888888926 +2019-12-06 15:00:00,78.90933333333301 +2019-12-06 16:00:00,99.20933333333323 +2019-12-06 17:00:00,98.11399999999975 +2019-12-06 18:00:00,82.34533333333353 +2019-12-06 19:00:00,44.31588888888874 +2019-12-06 20:00:00,41.502444444444556 +2019-12-06 21:00:00,67.4664444444445 +2019-12-06 22:00:00,71.58544444444436 +2019-12-06 23:00:00,78.64188888888896 +2019-12-07 00:00:00,77.00855555555549 +2019-12-07 01:00:00,61.210222222222185 +2019-12-07 02:00:00,54.88877777777768 +2019-12-07 03:00:00,58.27544444444437 +2019-12-07 04:00:00,48.750222222222014 +2019-12-07 05:00:00,69.3162222222224 +2019-12-07 06:00:00,70.20988888888873 +2019-12-07 07:00:00,85.31233333333363 +2019-12-07 08:00:00,93.97833333333348 +2019-12-07 09:00:00,102.78044444444434 +2019-12-07 10:00:00,53.595555555555435 +2019-12-07 11:00:00,38.33855555555562 +2019-12-07 12:00:00,53.57577777777777 +2019-12-07 13:00:00,78.50988888888901 +2019-12-07 14:00:00,59.74699999999976 +2019-12-07 15:00:00,31.29533333333333 +2019-12-07 16:00:00,32.33044444444445 +2019-12-07 17:00:00,32.607444444444475 +2019-12-07 18:00:00,24.673777777777797 +2019-12-07 19:00:00,21.10333333333338 +2019-12-07 20:00:00,32.542555555555516 +2019-12-07 21:00:00,27.945999999999945 +2019-12-07 22:00:00,21.037888888888872 +2019-12-07 23:00:00,25.808333333333305 +2019-12-08 00:00:00,27.664111111111076 +2019-12-08 01:00:00,22.94977777777783 +2019-12-08 02:00:00,18.341222222222267 +2019-12-08 03:00:00,18.619666666666625 +2019-12-08 04:00:00,20.43455555555555 +2019-12-08 05:00:00,30.8085555555555 +2019-12-08 06:00:00,38.36022222222225 +2019-12-08 07:00:00,34.03322222222246 +2019-12-08 08:00:00,11.945444444444487 +2019-12-08 09:00:00,8.195111111111082 +2019-12-08 10:00:00,13.60088888888897 +2019-12-08 11:00:00,10.604777777777816 +2019-12-08 12:00:00,5.924666666666665 +2019-12-08 13:00:00,2.7768888888888625 +2019-12-08 14:00:00,1.295888888888892 +2019-12-08 15:00:00,-0.7025555555555496 +2019-12-08 16:00:00,-0.7926666666666761 +2019-12-08 17:00:00,0.1554444444444436 +2019-12-08 18:00:00,-0.5234444444444443 +2019-12-08 19:00:00,-0.8494444444444389 +2019-12-08 20:00:00,-0.7894444444444343 +2019-12-08 21:00:00,-0.9083333333333183 +2019-12-08 22:00:00,-0.9248888888888752 +2019-12-08 23:00:00,-0.8806666666666542 +2019-12-09 00:00:00,-0.08600000000000148 +2019-12-09 01:00:00,2.7792222222222027 +2019-12-09 02:00:00,5.020333333333297 +2019-12-09 03:00:00,9.869111111111062 +2019-12-09 04:00:00,18.837333333333312 +2019-12-09 05:00:00,25.80977777777784 +2019-12-09 06:00:00,27.779222222222163 +2019-12-09 07:00:00,26.495999999999967 +2019-12-09 08:00:00,11.00999999999992 +2019-12-09 09:00:00,10.475111111111083 +2019-12-09 10:00:00,11.693555555555669 +2019-12-09 11:00:00,14.438999999999957 +2019-12-09 12:00:00,19.268111111111104 +2019-12-09 13:00:00,25.034555555555574 +2019-12-09 14:00:00,23.323555555555636 +2019-12-09 15:00:00,27.945999999999902 +2019-12-09 16:00:00,26.679888888888744 +2019-12-09 17:00:00,26.551777777777705 +2019-12-09 18:00:00,30.83822222222219 +2019-12-09 19:00:00,29.303999999999736 +2019-12-09 20:00:00,23.907888888888852 +2019-12-09 21:00:00,8.778888888888863 +2019-12-09 22:00:00,0.1647777777777788 +2019-12-09 23:00:00,-0.8037777777777712 +2019-12-10 00:00:00,-0.8741111111110981 +2019-12-10 01:00:00,-0.7721111111111136 +2019-12-10 02:00:00,4.535222222222214 +2019-12-10 03:00:00,6.596222222222229 +2019-12-10 04:00:00,4.547555555555538 +2019-12-10 05:00:00,8.158999999999978 +2019-12-10 06:00:00,21.27733333333325 +2019-12-10 07:00:00,34.124333333333325 +2019-12-10 08:00:00,48.18977777777729 +2019-12-10 09:00:00,79.1551111111111 +2019-12-10 10:00:00,72.76955555555571 +2019-12-10 11:00:00,63.29377777777786 +2019-12-10 12:00:00,76.01144444444411 +2019-12-10 13:00:00,71.49466666666646 +2019-12-10 14:00:00,75.4796666666667 +2019-12-10 15:00:00,58.93988888888903 +2019-12-10 16:00:00,69.67055555555531 +2019-12-10 17:00:00,53.59955555555566 +2019-12-10 18:00:00,50.47188888888883 +2019-12-10 19:00:00,48.3793333333332 +2019-12-10 20:00:00,78.98300000000029 +2019-12-10 21:00:00,80.25511111111123 +2019-12-10 22:00:00,81.02233333333349 +2019-12-10 23:00:00,54.88822222222218 +2019-12-11 00:00:00,28.439333333333348 +2019-12-11 01:00:00,39.503111111111146 +2019-12-11 02:00:00,39.08122222222214 +2019-12-11 03:00:00,28.970666666666702 +2019-12-11 04:00:00,27.75211111111115 +2019-12-11 05:00:00,33.17844444444451 +2019-12-11 06:00:00,43.74544444444451 +2019-12-11 07:00:00,10.761777777777858 +2019-12-11 08:00:00,5.187222222222231 +2019-12-11 09:00:00,54.675444444444366 +2019-12-11 10:00:00,103.88577777777743 +2019-12-11 11:00:00,112.10166666666659 +2019-12-11 12:00:00,98.57311111111115 +2019-12-11 13:00:00,92.28333333333356 +2019-12-11 14:00:00,49.1650000000001 +2019-12-11 15:00:00,25.599333333333377 +2019-12-11 16:00:00,25.5347777777778 +2019-12-11 17:00:00,61.94555555555575 +2019-12-11 18:00:00,80.95611111111103 +2019-12-11 19:00:00,97.657 +2019-12-11 20:00:00,99.1902222222222 +2019-12-11 21:00:00,91.08188888888888 +2019-12-11 22:00:00,113.29633333333342 +2019-12-11 23:00:00,95.756222222222 +2019-12-12 00:00:00,60.21788888888879 +2019-12-12 01:00:00,60.238222222222305 +2019-12-12 02:00:00,41.933888888888895 +2019-12-12 03:00:00,6.925333333333296 +2019-12-12 04:00:00,46.42444444444457 +2019-12-12 05:00:00,41.45422222222227 +2019-12-12 06:00:00,62.51144444444458 +2019-12-12 07:00:00,62.43488888888879 +2019-12-12 08:00:00,48.140888888888966 +2019-12-12 09:00:00,34.98466666666673 +2019-12-12 10:00:00,44.96966666666675 +2019-12-12 11:00:00,53.26188888888915 +2019-12-12 12:00:00,44.86433333333327 +2019-12-12 13:00:00,56.086777777777854 +2019-12-12 14:00:00,55.55600000000004 +2019-12-12 15:00:00,48.19033333333317 +2019-12-12 16:00:00,58.33755555555557 +2019-12-12 17:00:00,75.48922222222208 +2019-12-12 18:00:00,91.66900000000015 +2019-12-12 19:00:00,103.42655555555547 +2019-12-12 20:00:00,93.99255555555561 +2019-12-12 21:00:00,78.7610000000001 +2019-12-12 22:00:00,67.53688888888874 +2019-12-12 23:00:00,77.3895555555558 +2019-12-13 00:00:00,52.10944444444447 +2019-12-13 01:00:00,59.7993333333334 +2019-12-13 02:00:00,75.02988888888862 +2019-12-13 03:00:00,56.29522222222196 +2019-12-13 04:00:00,55.39577777777789 +2019-12-13 05:00:00,38.976555555555656 +2019-12-13 06:00:00,49.40444444444448 +2019-12-13 07:00:00,68.72688888888847 +2019-12-13 08:00:00,78.47888888888878 +2019-12-13 09:00:00,73.1096666666667 +2019-12-13 10:00:00,75.58311111111102 +2019-12-13 11:00:00,95.04733333333323 +2019-12-13 12:00:00,78.92366666666653 +2019-12-13 13:00:00,50.431999999999924 +2019-12-13 14:00:00,37.407444444444444 +2019-12-13 15:00:00,34.112666666666605 +2019-12-13 16:00:00,31.841333333333406 +2019-12-13 17:00:00,33.458222222222204 +2019-12-13 18:00:00,29.087444444444472 +2019-12-13 19:00:00,21.807444444444425 +2019-12-13 20:00:00,11.834222222222333 +2019-12-13 21:00:00,2.8910000000000204 +2019-12-13 22:00:00,2.4115555555555845 +2019-12-13 23:00:00,1.6186666666666631 +2019-12-14 00:00:00,-0.9492222222222189 +2019-12-14 01:00:00,-0.8426666666666625 +2019-12-14 02:00:00,-0.5067777777777834 +2019-12-14 03:00:00,0.8238888888888978 +2019-12-14 04:00:00,3.160222222222206 +2019-12-14 05:00:00,18.606888888888914 +2019-12-14 06:00:00,18.54288888888894 +2019-12-14 07:00:00,18.57177777777773 +2019-12-14 08:00:00,10.494666666666726 +2019-12-14 09:00:00,17.429444444444535 +2019-12-14 10:00:00,13.383000000000065 +2019-12-14 11:00:00,21.829888888888824 +2019-12-14 12:00:00,25.3193333333334 +2019-12-14 13:00:00,21.080444444444527 +2019-12-14 14:00:00,18.774111111111186 +2019-12-14 15:00:00,18.880999999999986 +2019-12-14 16:00:00,14.24388888888889 +2019-12-14 17:00:00,11.480555555555677 +2019-12-14 18:00:00,6.556111111111023 +2019-12-14 19:00:00,6.83211111111115 +2019-12-14 20:00:00,9.389888888888894 +2019-12-14 21:00:00,6.437000000000042 +2019-12-14 22:00:00,16.3388888888889 +2019-12-14 23:00:00,11.715777777777785 +2019-12-15 00:00:00,3.94333333333332 +2019-12-15 01:00:00,1.1105555555555617 +2019-12-15 02:00:00,0.6306666666666573 +2019-12-15 03:00:00,0.8986666666666708 +2019-12-15 04:00:00,2.319444444444436 +2019-12-15 05:00:00,7.040777777777739 +2019-12-15 06:00:00,18.020777777777795 +2019-12-15 07:00:00,35.444111111111106 +2019-12-15 08:00:00,67.28955555555568 +2019-12-15 09:00:00,67.7615555555556 +2019-12-15 10:00:00,87.75688888888907 +2019-12-15 11:00:00,100.14044444444457 +2019-12-15 12:00:00,98.7834444444444 +2019-12-15 13:00:00,85.80133333333322 +2019-12-15 14:00:00,99.87055555555554 +2019-12-15 15:00:00,95.7263333333333 +2019-12-15 16:00:00,105.67477777777793 +2019-12-15 17:00:00,100.04711111111098 +2019-12-15 18:00:00,96.54688888888887 +2019-12-15 19:00:00,76.21577777777773 +2019-12-15 20:00:00,49.16177777777784 +2019-12-15 21:00:00,38.75455555555553 +2019-12-15 22:00:00,35.88288888888885 +2019-12-15 23:00:00,34.96944444444444 +2019-12-16 00:00:00,28.61311111111108 +2019-12-16 01:00:00,11.595111111111107 +2019-12-16 02:00:00,4.317111111111105 +2019-12-16 03:00:00,4.855444444444435 +2019-12-16 04:00:00,7.240888888888888 +2019-12-16 05:00:00,14.74511111111108 +2019-12-16 06:00:00,19.112333333333336 +2019-12-16 07:00:00,21.68077777777773 +2019-12-16 08:00:00,28.919111111111135 +2019-12-16 09:00:00,44.52288888888896 +2019-12-16 10:00:00,69.06266666666687 +2019-12-16 11:00:00,64.10288888888886 +2019-12-16 12:00:00,56.84377777777793 +2019-12-16 13:00:00,46.313333333333595 +2019-12-16 14:00:00,50.079111111111 +2019-12-16 15:00:00,75.65944444444432 +2019-12-16 16:00:00,96.15844444444433 +2019-12-16 17:00:00,96.39188888888886 +2019-12-16 18:00:00,95.49211111111104 +2019-12-16 19:00:00,85.61299999999993 +2019-12-16 20:00:00,72.81655555555557 +2019-12-16 21:00:00,63.840222222222145 +2019-12-16 22:00:00,63.54900000000013 +2019-12-16 23:00:00,48.46733333333331 +2019-12-17 00:00:00,40.345111111111166 +2019-12-17 01:00:00,32.38111111111114 +2019-12-17 02:00:00,25.322555555555578 +2019-12-17 03:00:00,22.32066666666672 +2019-12-17 04:00:00,18.461444444444425 +2019-12-17 05:00:00,9.36988888888898 +2019-12-17 06:00:00,3.9738888888889066 +2019-12-17 07:00:00,11.418777777777834 +2019-12-17 08:00:00,8.743777777777867 +2019-12-17 09:00:00,39.574111111111044 +2019-12-17 10:00:00,67.80411111111127 +2019-12-17 11:00:00,61.74744444444463 +2019-12-17 12:00:00,76.23044444444444 +2019-12-17 13:00:00,108.57022222222214 +2019-12-17 14:00:00,105.63488888888877 +2019-12-17 15:00:00,65.23133333333335 +2019-12-17 16:00:00,13.96577777777777 +2019-12-17 17:00:00,36.9292222222221 +2019-12-17 18:00:00,25.705333333333204 +2019-12-17 19:00:00,43.24888888888875 +2019-12-17 20:00:00,67.42922222222252 +2019-12-17 21:00:00,84.05533333333314 +2019-12-17 22:00:00,96.07055555555549 +2019-12-17 23:00:00,109.35911111111129 +2019-12-18 00:00:00,112.44188888888908 +2019-12-18 01:00:00,118.49966666666673 +2019-12-18 02:00:00,114.92799999999981 +2019-12-18 03:00:00,94.09511111111107 +2019-12-18 04:00:00,80.6918888888891 +2019-12-18 05:00:00,69.37500000000001 +2019-12-18 06:00:00,65.41255555555563 +2019-12-18 07:00:00,39.97788888888906 +2019-12-18 08:00:00,38.20777777777786 +2019-12-18 09:00:00,42.590888888889125 +2019-12-18 10:00:00,58.64388888888883 +2019-12-18 11:00:00,45.57455555555565 +2019-12-18 12:00:00,32.6368888888889 +2019-12-18 13:00:00,21.139333333333354 +2019-12-18 14:00:00,19.359888888888864 +2019-12-18 15:00:00,14.233555555555611 +2019-12-18 16:00:00,29.90744444444454 +2019-12-18 17:00:00,29.894555555555442 +2019-12-18 18:00:00,21.83233333333333 +2019-12-18 19:00:00,23.621999999999893 +2019-12-18 20:00:00,25.507888888889 +2019-12-18 21:00:00,13.060555555555531 +2019-12-18 22:00:00,10.059777777777759 +2019-12-18 23:00:00,10.10199999999997 +2019-12-19 00:00:00,8.594222222222195 +2019-12-19 01:00:00,8.995111111111067 +2019-12-19 02:00:00,10.685000000000045 +2019-12-19 03:00:00,12.81277777777782 +2019-12-19 04:00:00,26.18088888888884 +2019-12-19 05:00:00,30.850222222222175 +2019-12-19 06:00:00,40.76855555555562 +2019-12-19 07:00:00,73.77366666666659 +2019-12-19 08:00:00,75.33633333333343 +2019-12-19 09:00:00,64.88177777777759 +2019-12-19 10:00:00,56.80366666666673 +2019-12-19 11:00:00,85.82099999999993 +2019-12-19 12:00:00,98.35500000000002 +2019-12-19 13:00:00,100.79200000000003 +2019-12-19 14:00:00,103.6327777777776 +2019-12-19 15:00:00,117.82588888888897 +2019-12-19 16:00:00,119.16622222222223 +2019-12-19 17:00:00,118.16611111111119 +2019-12-19 18:00:00,119.8253333333334 +2019-12-19 19:00:00,117.7298888888889 +2019-12-19 20:00:00,94.81077777777762 +2019-12-19 21:00:00,63.09122222222223 +2019-12-19 22:00:00,37.61822222222223 +2019-12-19 23:00:00,34.4961111111111 +2019-12-20 00:00:00,34.16155555555553 +2019-12-20 01:00:00,30.82211111111112 +2019-12-20 02:00:00,24.061222222222206 +2019-12-20 03:00:00,21.29966666666673 +2019-12-20 04:00:00,18.855444444444483 +2019-12-20 05:00:00,14.915666666666688 +2019-12-20 06:00:00,23.668888888888862 +2019-12-20 07:00:00,36.36477777777781 +2019-12-20 08:00:00,48.5067777777779 +2019-12-20 09:00:00,30.23522222222224 +2019-12-20 10:00:00,35.19022222222217 +2019-12-20 11:00:00,35.96644444444448 +2019-12-20 12:00:00,25.86499999999995 +2019-12-20 13:00:00,24.35611111111117 +2019-12-20 14:00:00,27.253666666666522 +2019-12-20 15:00:00,34.78777777777776 +2019-12-20 16:00:00,29.734222222222275 +2019-12-20 17:00:00,11.615555555555602 +2019-12-20 18:00:00,12.008555555555558 +2019-12-20 19:00:00,12.639555555555491 +2019-12-20 20:00:00,7.673666666666726 +2019-12-20 21:00:00,1.6233333333333304 +2019-12-20 22:00:00,-0.946777777777776 +2019-12-20 23:00:00,-0.643444444444447 +2019-12-21 00:00:00,2.0902222222222244 +2019-12-21 01:00:00,3.7735555555555447 +2019-12-21 02:00:00,6.595666666666682 +2019-12-21 03:00:00,8.444555555555569 +2019-12-21 04:00:00,25.139999999999983 +2019-12-21 05:00:00,31.92588888888889 +2019-12-21 06:00:00,24.2908888888888 +2019-12-21 07:00:00,22.91611111111089 +2019-12-21 08:00:00,18.407999999999976 +2019-12-21 09:00:00,31.037777777777862 +2019-12-21 10:00:00,45.10377777777802 +2019-12-21 11:00:00,42.4492222222224 +2019-12-21 12:00:00,47.82599999999988 +2019-12-21 13:00:00,57.59299999999987 +2019-12-21 14:00:00,59.419222222222075 +2019-12-21 15:00:00,49.27644444444442 +2019-12-21 16:00:00,32.31544444444451 +2019-12-21 17:00:00,24.74255555555542 +2019-12-21 18:00:00,12.988444444444589 +2019-12-21 19:00:00,9.247888888888877 +2019-12-21 20:00:00,5.558666666666669 +2019-12-21 21:00:00,0.6441111111111093 +2019-12-21 22:00:00,-0.7614444444444408 +2019-12-21 23:00:00,-0.8072222222222217 +2019-12-22 00:00:00,-0.5153333333333285 +2019-12-22 01:00:00,1.3375555555555534 +2019-12-22 02:00:00,8.149333333333312 +2019-12-22 03:00:00,44.09055555555546 +2019-12-22 04:00:00,40.11355555555547 +2019-12-22 05:00:00,38.433222222222206 +2019-12-22 06:00:00,64.43655555555569 +2019-12-22 07:00:00,32.23888888888898 +2019-12-22 08:00:00,16.141777777777786 +2019-12-22 09:00:00,12.299000000000023 +2019-12-22 10:00:00,14.722111111111161 +2019-12-22 11:00:00,22.537777777777837 +2019-12-22 12:00:00,18.75100000000006 +2019-12-22 13:00:00,13.775999999999884 +2019-12-22 14:00:00,20.16900000000005 +2019-12-22 15:00:00,15.058777777777866 +2019-12-22 16:00:00,6.995999999999963 +2019-12-22 17:00:00,0.258777777777794 +2019-12-22 18:00:00,-0.5256666666666603 +2019-12-22 19:00:00,0.28211111111112136 +2019-12-22 20:00:00,0.10944444444444063 +2019-12-22 21:00:00,-0.3622222222222271 +2019-12-22 22:00:00,5.311111111111127 +2019-12-22 23:00:00,20.993222222222233 +2019-12-23 00:00:00,45.667555555555595 +2019-12-23 01:00:00,67.7766666666666 +2019-12-23 02:00:00,77.86055555555559 +2019-12-23 03:00:00,99.56044444444443 +2019-12-23 04:00:00,100.55744444444454 +2019-12-23 05:00:00,106.07399999999994 +2019-12-23 06:00:00,77.88966666666649 +2019-12-23 07:00:00,46.53977777777769 +2019-12-23 08:00:00,28.821888888888875 +2019-12-23 09:00:00,31.32111111111122 +2019-12-23 10:00:00,53.4871111111111 +2019-12-23 11:00:00,29.971888888888838 +2019-12-23 12:00:00,7.054222222222205 +2019-12-23 13:00:00,9.808444444444502 +2019-12-23 14:00:00,14.511222222222186 +2019-12-23 15:00:00,15.513111111111138 +2019-12-23 16:00:00,11.03100000000005 +2019-12-23 17:00:00,7.245444444444418 +2019-12-23 18:00:00,14.25977777777781 +2019-12-23 19:00:00,27.810222222222283 +2019-12-23 20:00:00,42.262111111111146 +2019-12-23 21:00:00,41.10211111111124 +2019-12-23 22:00:00,38.229222222222226 +2019-12-23 23:00:00,38.12911111111117 +2019-12-24 00:00:00,32.58188888888891 +2019-12-24 01:00:00,28.87155555555551 +2019-12-24 02:00:00,23.759777777777796 +2019-12-24 03:00:00,17.058777777777753 +2019-12-24 04:00:00,22.55333333333329 +2019-12-24 05:00:00,38.08777777777777 +2019-12-24 06:00:00,34.71788888888876 +2019-12-24 07:00:00,40.987000000000116 +2019-12-24 08:00:00,46.25277777777755 +2019-12-24 09:00:00,35.120333333333434 +2019-12-24 10:00:00,47.77755555555554 +2019-12-24 11:00:00,51.30177777777769 +2019-12-24 12:00:00,70.65011111111076 +2019-12-24 13:00:00,89.99166666666657 +2019-12-24 14:00:00,97.15755555555558 +2019-12-24 15:00:00,79.34033333333333 +2019-12-24 16:00:00,59.297000000000025 +2019-12-24 17:00:00,47.014777777777795 +2019-12-24 18:00:00,43.47022222222215 +2019-12-24 19:00:00,47.228999999999886 +2019-12-24 20:00:00,52.39966666666683 +2019-12-24 21:00:00,51.259000000000064 +2019-12-24 22:00:00,38.03366666666664 +2019-12-24 23:00:00,24.488000000000067 +2019-12-25 00:00:00,21.092333333333393 +2019-12-25 01:00:00,21.562777777777757 +2019-12-25 02:00:00,24.168666666666713 +2019-12-25 03:00:00,19.03877777777779 +2019-12-25 04:00:00,13.179555555555616 +2019-12-25 05:00:00,7.06177777777784 +2019-12-25 06:00:00,7.64388888888885 +2019-12-25 07:00:00,14.785666666666637 +2019-12-25 08:00:00,24.005111111111248 +2019-12-25 09:00:00,12.074666666666708 +2019-12-25 10:00:00,8.03255555555556 +2019-12-25 11:00:00,9.195555555555558 +2019-12-25 12:00:00,3.0428888888888777 +2019-12-25 13:00:00,1.1861111111110985 +2019-12-25 14:00:00,3.851777777777752 +2019-12-25 15:00:00,11.795111111111105 +2019-12-25 16:00:00,22.226555555555542 +2019-12-25 17:00:00,12.232000000000046 +2019-12-25 18:00:00,11.477000000000054 +2019-12-25 19:00:00,15.20544444444438 +2019-12-25 20:00:00,8.603111111111025 +2019-12-25 21:00:00,3.838666666666687 +2019-12-25 22:00:00,4.583111111111107 +2019-12-25 23:00:00,0.8367777777777777 +2019-12-26 00:00:00,0.042111111111109635 +2019-12-26 01:00:00,0.9810000000000045 +2019-12-26 02:00:00,1.032777777777786 +2019-12-26 03:00:00,4.389222222222227 +2019-12-26 04:00:00,10.544111111111102 +2019-12-26 05:00:00,19.922999999999977 +2019-12-26 06:00:00,92.72700000000023 +2019-12-26 07:00:00,56.92422222222212 +2019-12-26 08:00:00,31.7172222222222 +2019-12-26 09:00:00,7.368333333333349 +2019-12-26 10:00:00,5.471444444444432 +2019-12-26 11:00:00,3.7499999999999702 +2019-12-26 12:00:00,-0.8573333333333215 +2019-12-26 13:00:00,-0.1727777777777777 +2019-12-26 14:00:00,2.459888888888862 +2019-12-26 15:00:00,0.28788888888888947 +2019-12-26 16:00:00,1.1273333333333357 +2019-12-26 17:00:00,9.14900000000006 +2019-12-26 18:00:00,13.08688888888889 +2019-12-26 19:00:00,2.340666666666679 +2019-12-26 20:00:00,9.889333333333353 +2019-12-26 21:00:00,25.40622222222215 +2019-12-26 22:00:00,9.256333333333307 +2019-12-26 23:00:00,13.100444444444364 +2019-12-27 00:00:00,8.720888888888876 +2019-12-27 01:00:00,74.01700000000017 +2019-12-27 02:00:00,57.24155555555555 +2019-12-27 03:00:00,68.9458888888889 +2019-12-27 04:00:00,77.6865555555555 +2019-12-27 05:00:00,86.99655555555589 +2019-12-27 06:00:00,93.09344444444393 +2019-12-27 07:00:00,90.18111111111143 +2019-12-27 08:00:00,88.66388888888886 +2019-12-27 09:00:00,96.8317777777776 +2019-12-27 10:00:00,81.24633333333324 +2019-12-27 11:00:00,86.15044444444459 +2019-12-27 12:00:00,101.53511111111114 +2019-12-27 13:00:00,95.46766666666677 +2019-12-27 14:00:00,42.985555555555585 +2019-12-27 15:00:00,36.125666666666675 +2019-12-27 16:00:00,39.07211111111109 +2019-12-27 17:00:00,43.03011111111111 +2019-12-27 18:00:00,50.48188888888897 +2019-12-27 19:00:00,77.60511111111086 +2019-12-27 20:00:00,76.50066666666672 +2019-12-27 21:00:00,77.94699999999983 +2019-12-27 22:00:00,82.20511111111115 +2019-12-27 23:00:00,76.31899999999989 +2019-12-28 00:00:00,59.77477777777761 +2019-12-28 01:00:00,57.02033333333324 +2019-12-28 02:00:00,74.72711111111127 +2019-12-28 03:00:00,88.63444444444448 +2019-12-28 04:00:00,82.90999999999995 +2019-12-28 05:00:00,72.77100000000003 +2019-12-28 06:00:00,64.76099999999992 +2019-12-28 07:00:00,55.1827777777774 +2019-12-28 08:00:00,35.13855555555555 +2019-12-28 09:00:00,22.534222222222244 +2019-12-28 10:00:00,12.145666666666628 +2019-12-28 11:00:00,5.032111111111141 +2019-12-28 12:00:00,3.417333333333351 +2019-12-28 13:00:00,2.62655555555555 +2019-12-28 14:00:00,1.3468888888888788 +2019-12-28 15:00:00,0.9070000000000054 +2019-12-28 16:00:00,-0.8445555555555424 +2019-12-28 17:00:00,-0.9086666666666544 +2019-12-28 18:00:00,-0.7879999999999944 +2019-12-28 19:00:00,6.543777777777786 +2019-12-28 20:00:00,5.398555555555554 +2019-12-28 21:00:00,4.571444444444427 +2019-12-28 22:00:00,10.486666666666734 +2019-12-28 23:00:00,9.634111111111116 +2019-12-29 00:00:00,17.582888888888913 +2019-12-29 01:00:00,22.242111111111075 +2019-12-29 02:00:00,30.61622222222229 +2019-12-29 03:00:00,43.02700000000002 +2019-12-29 04:00:00,59.048111111111076 +2019-12-29 05:00:00,36.90377777777786 +2019-12-29 06:00:00,44.10166666666647 +2019-12-29 07:00:00,22.591777777777526 +2019-12-29 08:00:00,16.014333333333415 +2019-12-29 09:00:00,37.39099999999989 +2019-12-29 10:00:00,53.05533333333344 +2019-12-29 11:00:00,84.31011111111096 +2019-12-29 12:00:00,73.4684444444445 +2019-12-29 13:00:00,64.53488888888886 +2019-12-29 14:00:00,103.01644444444457 +2019-12-29 15:00:00,111.81444444444442 +2019-12-29 16:00:00,113.93111111111129 +2019-12-29 17:00:00,105.09766666666658 +2019-12-29 18:00:00,89.5967777777781 +2019-12-29 19:00:00,92.38888888888881 +2019-12-29 20:00:00,85.4763333333337 +2019-12-29 21:00:00,80.40122222222257 +2019-12-29 22:00:00,91.19055555555593 +2019-12-29 23:00:00,86.71866666666612 +2019-12-30 00:00:00,82.32611111111083 +2019-12-30 01:00:00,87.40611111111095 +2019-12-30 02:00:00,88.2344444444446 +2019-12-30 03:00:00,96.0017777777778 +2019-12-30 04:00:00,98.23522222222218 +2019-12-30 05:00:00,75.33911111111115 +2019-12-30 06:00:00,79.20144444444442 +2019-12-30 07:00:00,60.806444444444494 +2019-12-30 08:00:00,49.560777777777645 +2019-12-30 09:00:00,46.301333333333 +2019-12-30 10:00:00,66.17111111111107 +2019-12-30 11:00:00,105.18266666666663 +2019-12-30 12:00:00,114.51211111111049 +2019-12-30 13:00:00,99.03344444444429 +2019-12-30 14:00:00,94.33255555555577 +2019-12-30 15:00:00,89.31155555555564 +2019-12-30 16:00:00,83.73199999999962 +2019-12-30 17:00:00,80.94400000000043 +2019-12-30 18:00:00,83.5335555555552 +2019-12-30 19:00:00,73.93533333333306 +2019-12-30 20:00:00,79.09366666666706 +2019-12-30 21:00:00,70.60088888888814 +2019-12-30 22:00:00,71.71466666666748 +2019-12-30 23:00:00,51.527555555555246 +2019-12-31 00:00:00,104.79088888888985 +2019-12-31 01:00:00,58.57511111111112 +2019-12-31 02:00:00,121.9102222222223 +2019-12-31 03:00:00,110.37422222222219 +2019-12-31 04:00:00,62.82144444444438 +2019-12-31 05:00:00,82.89677777777791 +2019-12-31 06:00:00,85.1556666666666 +2019-12-31 07:00:00,86.0327777777776 +2019-12-31 08:00:00,76.38388888888862 +2019-12-31 09:00:00,86.63722222222194 +2019-12-31 10:00:00,92.3382222222224 +2019-12-31 11:00:00,69.08933333333341 +2019-12-31 12:00:00,65.99733333333317 +2019-12-31 13:00:00,33.12466666666666 +2019-12-31 14:00:00,43.40177777777741 +2019-12-31 15:00:00,42.432000000000286 +2019-12-31 16:00:00,37.140111111111054 +2019-12-31 17:00:00,39.85044444444437 +2019-12-31 18:00:00,32.63077777777774 +2019-12-31 19:00:00,27.925333333333388 +2019-12-31 20:00:00,27.10866666666671 +2019-12-31 21:00:00,24.96377777777782 +2019-12-31 22:00:00,26.63799999999993 +2019-12-31 23:00:00,22.017555555555642 +2020-01-01 00:00:00,22.975444444444477 +2020-01-01 01:00:00,33.777888888888924 +2020-01-01 02:00:00,40.144111111111066 +2020-01-01 03:00:00,47.923444444444435 +2020-01-01 04:00:00,37.989222222222175 +2020-01-01 05:00:00,36.88188888888881 +2020-01-01 06:00:00,37.72199999999995 +2020-01-01 07:00:00,23.931333333333473 +2020-01-01 08:00:00,16.981111111110938 +2020-01-01 09:00:00,13.852444444444302 +2020-01-01 10:00:00,6.810333333333331 +2020-01-01 11:00:00,3.491444444444433 +2020-01-01 12:00:00,1.406333333333348 +2020-01-01 13:00:00,-0.866888888888876 +2020-01-01 14:00:00,-0.8999999999999857 +2020-01-01 15:00:00,-0.8752222222222071 +2020-01-01 16:00:00,-0.4322222222222263 +2020-01-01 17:00:00,0.09766666666666729 +2020-01-01 18:00:00,-0.5437777777777768 +2020-01-01 19:00:00,-0.9132222222222072 +2020-01-01 20:00:00,-0.9322222222222136 +2020-01-01 21:00:00,4.289444444444437 +2020-01-01 22:00:00,13.933222222222142 +2020-01-01 23:00:00,20.32722222222219 +2020-01-02 00:00:00,24.509555555555636 +2020-01-02 01:00:00,19.042555555555595 +2020-01-02 02:00:00,15.392444444444532 +2020-01-02 03:00:00,14.061999999999973 +2020-01-02 04:00:00,15.0664444444445 +2020-01-02 05:00:00,17.900888888888925 +2020-01-02 06:00:00,29.782444444444284 +2020-01-02 07:00:00,36.20533333333326 +2020-01-02 08:00:00,16.340999999999976 +2020-01-02 09:00:00,10.065222222222168 +2020-01-02 10:00:00,4.896666666666688 +2020-01-02 11:00:00,3.653222222222202 +2020-01-02 12:00:00,2.248111111111104 +2020-01-02 13:00:00,3.1726666666666614 +2020-01-02 14:00:00,1.6366666666666574 +2020-01-02 15:00:00,0.21688888888889035 +2020-01-02 16:00:00,-0.8984444444444367 +2020-01-02 17:00:00,-0.9117777777777661 +2020-01-02 18:00:00,1.9328888888888875 +2020-01-02 19:00:00,3.2533333333333343 +2020-01-02 20:00:00,-0.712999999999994 +2020-01-02 21:00:00,-0.9412222222222137 +2020-01-02 22:00:00,-0.7906666666666649 +2020-01-02 23:00:00,3.823111111111123 +2020-01-03 00:00:00,7.270777777777747 +2020-01-03 01:00:00,16.32933333333337 +2020-01-03 02:00:00,15.513888888888966 +2020-01-03 03:00:00,25.514999999999937 +2020-01-03 04:00:00,23.413777777777852 +2020-01-03 05:00:00,18.276888888888887 +2020-01-03 06:00:00,23.473666666666766 +2020-01-03 07:00:00,25.075222222222287 +2020-01-03 08:00:00,31.09266666666672 +2020-01-03 09:00:00,10.547111111111093 +2020-01-03 10:00:00,6.768111111111069 +2020-01-03 11:00:00,10.856777777777742 +2020-01-03 12:00:00,11.108777777777936 +2020-01-03 13:00:00,10.14511111111093 +2020-01-03 14:00:00,8.612666666666557 +2020-01-03 15:00:00,4.7338888888889405 +2020-01-03 16:00:00,1.8480000000000116 +2020-01-03 17:00:00,0.7633333333333325 +2020-01-03 18:00:00,0.8806666666666713 +2020-01-03 19:00:00,0.9047777777777773 +2020-01-03 20:00:00,-0.5333333333333315 +2020-01-03 21:00:00,-0.6371111111111171 +2020-01-03 22:00:00,1.0613333333333337 +2020-01-03 23:00:00,19.92177777777776 +2020-01-04 00:00:00,21.806999999999977 +2020-01-04 01:00:00,12.675666666666686 +2020-01-04 02:00:00,13.193777777777797 +2020-01-04 03:00:00,15.071777777777703 +2020-01-04 04:00:00,24.246666666666727 +2020-01-04 05:00:00,20.384555555555444 +2020-01-04 06:00:00,16.591444444444345 +2020-01-04 07:00:00,23.81033333333342 +2020-01-04 08:00:00,19.12933333333343 +2020-01-04 09:00:00,8.055333333333348 +2020-01-04 10:00:00,-0.5952222222222241 +2020-01-04 11:00:00,-0.9507777777777736 +2020-01-04 12:00:00,-0.7534444444444386 +2020-01-04 13:00:00,1.2466666666666661 +2020-01-04 14:00:00,1.4499999999999833 +2020-01-04 15:00:00,1.2128888888888985 +2020-01-04 16:00:00,5.091333333333305 +2020-01-04 17:00:00,3.6077777777777915 +2020-01-04 18:00:00,1.015888888888893 +2020-01-04 19:00:00,-0.49199999999999344 +2020-01-04 20:00:00,-0.9408888888888818 +2020-01-04 21:00:00,-0.9332222222222143 +2020-01-04 22:00:00,-0.7155555555555614 +2020-01-04 23:00:00,-0.47200000000000597 +2020-01-05 00:00:00,2.2581111111111105 +2020-01-05 01:00:00,5.457555555555583 +2020-01-05 02:00:00,12.31033333333326 +2020-01-05 03:00:00,13.420999999999994 +2020-01-05 04:00:00,9.79099999999989 +2020-01-05 05:00:00,5.543555555555553 +2020-01-05 06:00:00,11.847222222222191 +2020-01-05 07:00:00,9.369888888888855 +2020-01-05 08:00:00,27.998999999999864 +2020-01-05 09:00:00,48.01911111111099 +2020-01-05 10:00:00,56.58399999999988 +2020-01-05 11:00:00,52.80499999999984 +2020-01-05 12:00:00,51.94622222222225 +2020-01-05 13:00:00,40.94488888888899 +2020-01-05 14:00:00,37.42388888888887 +2020-01-05 15:00:00,39.454000000000036 +2020-01-05 16:00:00,46.38099999999993 +2020-01-05 17:00:00,70.20611111111114 +2020-01-05 18:00:00,79.89544444444475 +2020-01-05 19:00:00,74.71611111111139 +2020-01-05 20:00:00,37.07011111111108 +2020-01-05 21:00:00,38.00377777777775 +2020-01-05 22:00:00,46.23888888888883 +2020-01-05 23:00:00,50.07577777777779 +2020-01-06 00:00:00,46.62555555555561 +2020-01-06 01:00:00,25.022333333333304 +2020-01-06 02:00:00,12.578111111111074 +2020-01-06 03:00:00,5.508222222222221 +2020-01-06 04:00:00,4.323333333333324 +2020-01-06 05:00:00,5.540111111111128 +2020-01-06 06:00:00,5.69266666666664 +2020-01-06 07:00:00,8.154444444444442 +2020-01-06 08:00:00,18.266666666666705 +2020-01-06 09:00:00,7.902888888888867 +2020-01-06 10:00:00,25.608888888888863 +2020-01-06 11:00:00,73.21433333333327 +2020-01-06 12:00:00,73.00033333333319 +2020-01-06 13:00:00,64.21600000000026 +2020-01-06 14:00:00,55.77755555555572 +2020-01-06 15:00:00,54.85855555555555 +2020-01-06 16:00:00,53.66799999999968 +2020-01-06 17:00:00,71.36133333333326 +2020-01-06 18:00:00,77.65222222222211 +2020-01-06 19:00:00,63.619888888888646 +2020-01-06 20:00:00,66.6112222222223 +2020-01-06 21:00:00,67.10355555555574 +2020-01-06 22:00:00,61.43255555555558 +2020-01-06 23:00:00,41.47655555555557 +2020-01-07 00:00:00,21.695000000000107 +2020-01-07 01:00:00,17.678555555555544 +2020-01-07 02:00:00,8.640444444444466 +2020-01-07 03:00:00,6.838333333333353 +2020-01-07 04:00:00,3.464333333333296 +2020-01-07 05:00:00,4.6466666666666905 +2020-01-07 06:00:00,1.15355555555556 +2020-01-07 07:00:00,3.5819999999999763 +2020-01-07 08:00:00,6.84455555555559 +2020-01-07 09:00:00,7.4035555555555135 +2020-01-07 10:00:00,21.131888888888856 +2020-01-07 11:00:00,20.476222222222294 +2020-01-07 12:00:00,10.252999999999995 +2020-01-07 13:00:00,52.481666666666555 +2020-01-07 14:00:00,57.156 +2020-01-07 15:00:00,45.667444444444264 +2020-01-07 16:00:00,59.26011111111121 +2020-01-07 17:00:00,41.34177777777775 +2020-01-07 18:00:00,24.44188888888899 +2020-01-07 19:00:00,37.96033333333334 +2020-01-07 20:00:00,90.37866666666667 +2020-01-07 21:00:00,99.55755555555528 +2020-01-07 22:00:00,81.21355555555559 +2020-01-07 23:00:00,28.13011111111106 +2020-01-08 00:00:00,68.03466666666652 +2020-01-08 01:00:00,26.14066666666668 +2020-01-08 02:00:00,74.04477777777778 +2020-01-08 03:00:00,74.38088888888883 +2020-01-08 04:00:00,70.13211111111097 +2020-01-08 05:00:00,69.84388888888887 +2020-01-08 06:00:00,72.895111111111 +2020-01-08 07:00:00,50.25088888888883 +2020-01-08 08:00:00,36.01644444444444 +2020-01-08 09:00:00,14.565111111111097 +2020-01-08 10:00:00,1.5930000000000086 +2020-01-08 11:00:00,7.337666666666688 +2020-01-08 12:00:00,0.0 +2020-01-08 13:00:00,2.970444444444443 +2020-01-08 14:00:00,22.737666666666566 +2020-01-08 15:00:00,66.12811111111118 +2020-01-08 16:00:00,7.303444444444441 +2020-01-08 17:00:00,-0.4653333333333295 +2020-01-08 18:00:00,0.02555555555555562 +2020-01-08 19:00:00,12.395555555555573 +2020-01-08 20:00:00,34.94122222222243 +2020-01-08 21:00:00,19.032999999999983 +2020-01-08 22:00:00,13.483333333333409 +2020-01-08 23:00:00,17.296666666666734 +2020-01-09 00:00:00,24.165555555555652 +2020-01-09 01:00:00,35.31911111111097 +2020-01-09 02:00:00,8.553 +2020-01-09 03:00:00,-0.9919999999999994 +2020-01-09 04:00:00,3.4543333333333366 +2020-01-09 05:00:00,38.98977777777765 +2020-01-09 06:00:00,48.23211111111101 +2020-01-09 07:00:00,38.56099999999988 +2020-01-09 08:00:00,37.31977777777779 +2020-01-09 09:00:00,29.3589999999999 +2020-01-09 10:00:00,22.601777777777816 +2020-01-09 11:00:00,25.539888888889017 +2020-01-09 12:00:00,37.15744444444458 +2020-01-09 13:00:00,53.68155555555561 +2020-01-09 14:00:00,30.5535555555557 +2020-01-09 15:00:00,51.09377777777784 +2020-01-09 16:00:00,23.183888888889044 +2020-01-09 17:00:00,37.627111111111105 +2020-01-09 18:00:00,48.415555555555855 +2020-01-09 19:00:00,27.271222222222274 +2020-01-09 20:00:00,8.946666666666676 +2020-01-09 21:00:00,6.281111111111143 +2020-01-09 22:00:00,-1.0 +2020-01-09 23:00:00,-0.9837777777777741 +2020-01-10 00:00:00,-0.9426666666666582 +2020-01-10 01:00:00,-0.9544444444444375 +2020-01-10 02:00:00,-0.9916666666666648 +2020-01-10 03:00:00,-0.9848888888888879 +2020-01-10 04:00:00,-0.9443333333333283 +2020-01-10 05:00:00,55.37777777777758 +2020-01-10 06:00:00,52.68822222222205 +2020-01-10 07:00:00,52.243666666666904 +2020-01-10 08:00:00,34.90388888888892 +2020-01-10 09:00:00,36.10777777777781 +2020-01-10 10:00:00,56.879888888888914 +2020-01-10 11:00:00,40.56888888888888 +2020-01-10 12:00:00,53.79566666666675 +2020-01-10 13:00:00,13.975666666666637 +2020-01-10 14:00:00,3.243999999999963 +2020-01-10 15:00:00,1.748777777777783 +2020-01-10 16:00:00,12.495555555555487 +2020-01-10 17:00:00,29.76699999999998 +2020-01-10 18:00:00,16.466333333333395 +2020-01-10 19:00:00,9.642888888888933 +2020-01-10 20:00:00,14.968666666666682 +2020-01-10 21:00:00,9.471666666666714 +2020-01-10 22:00:00,8.939888888888895 +2020-01-10 23:00:00,8.62944444444444 +2020-01-11 00:00:00,6.344777777777695 +2020-01-11 01:00:00,3.809888888888909 +2020-01-11 02:00:00,-0.8274444444444445 +2020-01-11 03:00:00,-0.9913333333333314 +2020-01-11 04:00:00,0.0767777777777794 +2020-01-11 05:00:00,21.580888888888904 +2020-01-11 06:00:00,26.96477777777772 +2020-01-11 07:00:00,41.36877777777782 +2020-01-11 08:00:00,47.522111111110966 +2020-01-11 09:00:00,42.99588888888884 +2020-01-11 10:00:00,-0.5039999999999963 +2020-01-11 11:00:00,16.101000000000088 +2020-01-11 12:00:00,48.68977777777777 +2020-01-11 13:00:00,-0.31155555555555553 +2020-01-11 14:00:00,-0.8999999999999857 +2020-01-11 15:00:00,28.386111111110658 +2020-01-11 16:00:00,15.310333333333421 +2020-01-11 17:00:00,58.428444444444395 +2020-01-11 18:00:00,68.2373333333334 +2020-01-11 19:00:00,43.3186666666665 +2020-01-11 20:00:00,12.295333333333454 +2020-01-11 21:00:00,-0.9222222222222212 +2020-01-11 22:00:00,-0.9328888888888784 +2020-01-11 23:00:00,-0.8999999999999857 +2020-01-12 00:00:00,4.7109999999999985 +2020-01-12 01:00:00,3.233333333333327 +2020-01-12 02:00:00,9.58899999999995 +2020-01-12 03:00:00,15.117444444444525 +2020-01-12 04:00:00,16.56099999999998 +2020-01-12 05:00:00,24.680222222222127 +2020-01-12 06:00:00,29.68100000000008 +2020-01-12 07:00:00,35.20222222222219 +2020-01-12 08:00:00,44.487000000000094 +2020-01-12 09:00:00,42.97422222222217 +2020-01-12 10:00:00,44.90833333333326 +2020-01-12 11:00:00,44.72711111111112 +2020-01-12 12:00:00,41.59866666666657 +2020-01-12 13:00:00,49.78500000000046 +2020-01-12 14:00:00,60.706333333333426 +2020-01-12 15:00:00,59.39188888888893 +2020-01-12 16:00:00,49.89433333333332 +2020-01-12 17:00:00,51.81177777777782 +2020-01-12 18:00:00,65.28788888888879 +2020-01-12 19:00:00,58.68488888888893 +2020-01-12 20:00:00,17.15088888888881 +2020-01-12 21:00:00,5.964222222222331 +2020-01-12 22:00:00,3.5519999999999774 +2020-01-12 23:00:00,15.35011111111109 +2020-01-13 00:00:00,15.848555555555413 +2020-01-13 01:00:00,9.681111111111154 +2020-01-13 02:00:00,8.538999999999962 +2020-01-13 03:00:00,10.193333333333367 +2020-01-13 04:00:00,16.074333333333243 +2020-01-13 05:00:00,16.943111111111136 +2020-01-13 06:00:00,19.990111111111126 +2020-01-13 07:00:00,41.37722222222216 +2020-01-13 08:00:00,28.341777777777736 +2020-01-13 09:00:00,23.423999999999957 +2020-01-13 10:00:00,21.51511111111126 +2020-01-13 11:00:00,24.978333333333243 +2020-01-13 12:00:00,31.629111111111378 +2020-01-13 13:00:00,31.648333333333586 +2020-01-13 14:00:00,34.365333333333176 +2020-01-13 15:00:00,42.80777777777779 +2020-01-13 16:00:00,67.07277777777779 +2020-01-13 17:00:00,66.20633333333336 +2020-01-13 18:00:00,36.11799999999996 +2020-01-13 19:00:00,45.982333333333514 +2020-01-13 20:00:00,14.014666666666672 +2020-01-13 21:00:00,14.340888888888895 +2020-01-13 22:00:00,11.679222222222187 +2020-01-13 23:00:00,16.642333333333337 +2020-01-14 00:00:00,24.515555555555608 +2020-01-14 01:00:00,18.81811111111109 +2020-01-14 02:00:00,15.626444444444513 +2020-01-14 03:00:00,15.185111111111043 +2020-01-14 04:00:00,11.361555555555654 +2020-01-14 05:00:00,10.631666666666655 +2020-01-14 06:00:00,28.71766666666668 +2020-01-14 07:00:00,58.349444444444515 +2020-01-14 08:00:00,87.0591111111112 +2020-01-14 09:00:00,86.14222222222192 +2020-01-14 10:00:00,61.59633333333322 +2020-01-14 11:00:00,64.66022222222223 +2020-01-14 12:00:00,55.36511111111102 +2020-01-14 13:00:00,106.89222222222229 +2020-01-14 14:00:00,90.17544444444457 +2020-01-14 15:00:00,72.84122222222219 +2020-01-14 16:00:00,65.01366666666638 +2020-01-14 17:00:00,65.6227777777778 +2020-01-14 18:00:00,36.7328888888888 +2020-01-14 19:00:00,43.11011111111105 +2020-01-14 20:00:00,46.73222222222221 +2020-01-14 21:00:00,37.6584444444444 +2020-01-14 22:00:00,20.52566666666667 +2020-01-14 23:00:00,-0.14866666666666575 +2020-01-15 00:00:00,4.359111111111106 +2020-01-15 01:00:00,32.48755555555549 +2020-01-15 02:00:00,40.16888888888898 +2020-01-15 03:00:00,40.3675555555557 +2020-01-15 04:00:00,45.820777777777934 +2020-01-15 05:00:00,65.73755555555547 +2020-01-15 06:00:00,82.63622222222192 +2020-01-15 07:00:00,79.18600000000006 +2020-01-15 08:00:00,66.03544444444431 +2020-01-15 09:00:00,70.26455555555562 +2020-01-15 10:00:00,26.72666666666661 +2020-01-15 11:00:00,48.409999999999734 +2020-01-15 12:00:00,68.60855555555531 +2020-01-15 13:00:00,76.51255555555545 +2020-01-15 14:00:00,71.99777777777733 +2020-01-15 15:00:00,71.71955555555533 +2020-01-15 16:00:00,52.26944444444432 +2020-01-15 17:00:00,71.67844444444461 +2020-01-15 18:00:00,90.89355555555574 +2020-01-15 19:00:00,71.99077777777771 +2020-01-15 20:00:00,50.35900000000002 +2020-01-15 21:00:00,41.920222222222186 +2020-01-15 22:00:00,33.042222222222286 +2020-01-15 23:00:00,35.45466666666654 +2020-01-16 00:00:00,51.80677777777787 +2020-01-16 01:00:00,64.26599999999999 +2020-01-16 02:00:00,67.86099999999998 +2020-01-16 03:00:00,69.06333333333332 +2020-01-16 04:00:00,71.357888888889 +2020-01-16 05:00:00,64.36577777777771 +2020-01-16 06:00:00,66.82255555555572 +2020-01-16 07:00:00,64.52700000000006 +2020-01-16 08:00:00,58.295 +2020-01-16 09:00:00,52.27222222222259 +2020-01-16 10:00:00,80.65422222222213 +2020-01-16 11:00:00,100.2944444444443 +2020-01-16 12:00:00,103.58588888888886 +2020-01-16 13:00:00,101.74977777777808 +2020-01-16 14:00:00,93.69911111111112 +2020-01-16 15:00:00,68.33788888888883 +2020-01-16 16:00:00,51.59477777777799 +2020-01-16 17:00:00,64.637888888889 +2020-01-16 18:00:00,59.80000000000017 +2020-01-16 19:00:00,78.9382222222222 +2020-01-16 20:00:00,79.73855555555566 +2020-01-16 21:00:00,66.53833333333321 +2020-01-16 22:00:00,71.00888888888885 +2020-01-16 23:00:00,53.25711111111134 +2020-01-17 00:00:00,8.026777777777786 +2020-01-17 01:00:00,83.01999999999978 +2020-01-17 02:00:00,61.94577777777772 +2020-01-17 03:00:00,60.10311111111127 +2020-01-17 04:00:00,78.86977777777788 +2020-01-17 05:00:00,60.370888888888814 +2020-01-17 06:00:00,34.66100000000004 +2020-01-17 07:00:00,15.365444444444512 +2020-01-17 08:00:00,10.073222222222325 +2020-01-17 09:00:00,10.179777777777877 +2020-01-17 10:00:00,7.845111111111082 +2020-01-17 11:00:00,3.1931111111111505 +2020-01-17 12:00:00,-0.750222222222212 +2020-01-17 13:00:00,-0.9083333333333189 +2020-01-17 14:00:00,-0.9085555555555432 +2020-01-17 15:00:00,-0.8405555555555433 +2020-01-17 16:00:00,0.5906666666666675 +2020-01-17 17:00:00,8.349666666666673 +2020-01-17 18:00:00,7.3892222222221635 +2020-01-17 19:00:00,5.8782222222222735 +2020-01-17 20:00:00,0.3594444444444525 +2020-01-17 21:00:00,-0.9747777777777742 +2020-01-17 22:00:00,-1.0 +2020-01-17 23:00:00,-0.9161111111110986 +2020-01-18 00:00:00,4.909555555555568 +2020-01-18 01:00:00,68.14088888888885 +2020-01-18 02:00:00,83.11377777777786 +2020-01-18 03:00:00,96.66699999999994 +2020-01-18 04:00:00,99.15911111111105 +2020-01-18 05:00:00,100.08600000000024 +2020-01-18 06:00:00,92.90711111111116 +2020-01-18 07:00:00,70.81444444444443 +2020-01-18 08:00:00,56.96388888888866 +2020-01-18 09:00:00,45.64988888888877 +2020-01-18 10:00:00,31.157666666666547 +2020-01-18 11:00:00,39.15577777777766 +2020-01-18 12:00:00,37.77288888888905 +2020-01-18 13:00:00,27.29677777777766 +2020-01-18 14:00:00,30.78166666666649 +2020-01-18 15:00:00,23.59000000000011 +2020-01-18 16:00:00,19.254000000000023 +2020-01-18 17:00:00,20.61955555555557 +2020-01-18 18:00:00,17.597222222222253 +2020-01-18 19:00:00,12.899111111111084 +2020-01-18 20:00:00,11.003444444444446 +2020-01-18 21:00:00,13.395333333333335 +2020-01-18 22:00:00,21.538000000000046 +2020-01-18 23:00:00,38.311666666666675 +2020-01-19 00:00:00,38.25866666666669 +2020-01-19 01:00:00,43.2139999999999 +2020-01-19 02:00:00,45.52211111111106 +2020-01-19 03:00:00,65.1164444444444 +2020-01-19 04:00:00,32.37733333333336 +2020-01-19 05:00:00,50.95622222222217 +2020-01-19 06:00:00,71.95422222222227 +2020-01-19 07:00:00,47.05622222222178 +2020-01-19 08:00:00,27.78244444444448 +2020-01-19 09:00:00,8.09999999999997 +2020-01-19 10:00:00,8.018333333333363 +2020-01-19 11:00:00,9.906444444444489 +2020-01-19 12:00:00,17.164555555555616 +2020-01-19 13:00:00,40.17666666666664 +2020-01-19 14:00:00,62.24677777777756 +2020-01-19 15:00:00,60.89433333333363 +2020-01-19 16:00:00,65.82955555555563 +2020-01-19 17:00:00,55.620111111111235 +2020-01-19 18:00:00,23.960888888888924 +2020-01-19 19:00:00,21.54422222222218 +2020-01-19 20:00:00,23.628111111111043 +2020-01-19 21:00:00,20.761444444444493 +2020-01-19 22:00:00,11.473666666666734 +2020-01-19 23:00:00,12.439888888888834 +2020-01-20 00:00:00,9.614888888888853 +2020-01-20 01:00:00,13.562222222222239 +2020-01-20 02:00:00,-0.08099999999999903 +2020-01-20 03:00:00,0.6985555555555595 +2020-01-20 04:00:00,15.811555555555605 +2020-01-20 05:00:00,18.44700000000003 +2020-01-20 06:00:00,21.398444444444422 +2020-01-20 07:00:00,29.69566666666659 +2020-01-20 08:00:00,14.54388888888884 +2020-01-20 09:00:00,10.106777777777836 +2020-01-20 10:00:00,11.366555555555482 +2020-01-20 11:00:00,13.245777777777715 +2020-01-20 12:00:00,22.048111111111055 +2020-01-20 13:00:00,38.04977777777792 +2020-01-20 14:00:00,31.175888888889205 +2020-01-20 15:00:00,18.45955555555554 +2020-01-20 16:00:00,17.342666666666698 +2020-01-20 17:00:00,25.535111111111174 +2020-01-20 18:00:00,26.686666666666543 +2020-01-20 19:00:00,23.17811111111117 +2020-01-20 20:00:00,6.197777777777808 +2020-01-20 21:00:00,2.0605555555555366 +2020-01-20 22:00:00,-0.064111111111109 +2020-01-20 23:00:00,-0.885777777777778 +2020-01-21 00:00:00,-0.5485555555555544 +2020-01-21 01:00:00,0.2353333333333331 +2020-01-21 02:00:00,-0.5501111111111094 +2020-01-21 03:00:00,0.6037777777777805 +2020-01-21 04:00:00,39.435111111111176 +2020-01-21 05:00:00,33.16544444444443 +2020-01-21 06:00:00,26.862666666666648 +2020-01-21 07:00:00,31.143777777777924 +2020-01-21 08:00:00,18.561888888888852 +2020-01-21 09:00:00,12.105666666666767 +2020-01-21 10:00:00,10.11800000000002 +2020-01-21 11:00:00,3.3043333333333598 +2020-01-21 12:00:00,0.5745555555555546 +2020-01-21 13:00:00,-0.7636666666666623 +2020-01-21 14:00:00,-0.5894444444444462 +2020-01-21 15:00:00,-0.653333333333334 +2020-01-21 16:00:00,-0.25244444444444536 +2020-01-21 17:00:00,3.990777777777787 +2020-01-21 18:00:00,16.07000000000002 +2020-01-21 19:00:00,12.404666666666692 +2020-01-21 20:00:00,20.679222222222382 +2020-01-21 21:00:00,24.286777777777775 +2020-01-21 22:00:00,39.10933333333322 +2020-01-21 23:00:00,22.360444444444337 +2020-01-22 00:00:00,26.90433333333335 +2020-01-22 01:00:00,20.831888888888926 +2020-01-22 02:00:00,93.62588888888871 +2020-01-22 03:00:00,100.91211111111093 +2020-01-22 04:00:00,89.4478888888886 +2020-01-22 05:00:00,88.26333333333342 +2020-01-22 06:00:00,77.81977777777757 +2020-01-22 07:00:00,64.92655555555532 +2020-01-22 08:00:00,35.15277777777766 +2020-01-22 09:00:00,29.685444444444425 +2020-01-22 10:00:00,27.156777777777688 +2020-01-22 11:00:00,28.807444444444375 +2020-01-22 12:00:00,20.376000000000026 +2020-01-22 13:00:00,16.75366666666673 +2020-01-22 14:00:00,17.997111111111195 +2020-01-22 15:00:00,15.311666666666623 +2020-01-22 16:00:00,14.514666666666665 +2020-01-22 17:00:00,6.606444444444451 +2020-01-22 18:00:00,11.630333333333425 +2020-01-22 19:00:00,16.11666666666664 +2020-01-22 20:00:00,19.484666666666566 +2020-01-22 21:00:00,3.9939999999999967 +2020-01-22 22:00:00,24.90055555555552 +2020-01-22 23:00:00,18.156888888888943 +2020-01-23 00:00:00,15.51466666666663 +2020-01-23 01:00:00,12.099333333333385 +2020-01-23 02:00:00,15.949333333333337 +2020-01-23 03:00:00,22.934777777777644 +2020-01-23 04:00:00,19.537222222222162 +2020-01-23 05:00:00,23.091999999999963 +2020-01-23 06:00:00,13.283555555555607 +2020-01-23 07:00:00,9.869111111111055 +2020-01-23 08:00:00,10.35866666666674 +2020-01-23 09:00:00,8.934333333333283 +2020-01-23 10:00:00,6.917888888888852 +2020-01-23 11:00:00,5.993000000000079 +2020-01-23 12:00:00,11.91144444444455 +2020-01-23 13:00:00,16.170000000000066 +2020-01-23 14:00:00,22.307777777777694 +2020-01-23 15:00:00,14.557444444444368 +2020-01-23 16:00:00,15.178888888888903 +2020-01-23 17:00:00,12.005777777777704 +2020-01-23 18:00:00,10.001555555555601 +2020-01-23 19:00:00,3.1984444444444398 +2020-01-23 20:00:00,0.3493333333333331 +2020-01-23 21:00:00,-0.7291111111111059 +2020-01-23 22:00:00,-0.9316666666666581 +2020-01-23 23:00:00,-0.8876666666666607 +2020-01-24 00:00:00,1.6030000000000018 +2020-01-24 01:00:00,7.7663333333333515 +2020-01-24 02:00:00,8.890222222222212 +2020-01-24 03:00:00,7.65977777777776 +2020-01-24 04:00:00,17.63211111111113 +2020-01-24 05:00:00,19.10088888888887 +2020-01-24 06:00:00,9.35944444444448 +2020-01-24 07:00:00,10.216666666666727 +2020-01-24 08:00:00,6.80599999999988 +2020-01-24 09:00:00,0.9616666666666728 +2020-01-24 10:00:00,-0.9489999999999884 +2020-01-24 11:00:00,-0.942333333333327 +2020-01-24 12:00:00,-0.8309999999999913 +2020-01-24 13:00:00,0.5377777777777782 +2020-01-24 14:00:00,1.9625555555555727 +2020-01-24 15:00:00,4.099999999999979 +2020-01-24 16:00:00,6.176111111111102 +2020-01-24 17:00:00,0.7502222222222168 +2020-01-24 18:00:00,1.9624444444444362 +2020-01-24 19:00:00,0.8482222222222211 +2020-01-24 20:00:00,-0.8891111111111124 +2020-01-24 21:00:00,-0.2506666666666688 +2020-01-24 22:00:00,2.580888888888879 +2020-01-24 23:00:00,7.524666666666691 +2020-01-25 00:00:00,19.954888888888938 +2020-01-25 01:00:00,17.383999999999993 +2020-01-25 02:00:00,19.858555555555565 +2020-01-25 03:00:00,20.270333333333365 +2020-01-25 04:00:00,14.407000000000044 +2020-01-25 05:00:00,19.925666666666704 +2020-01-25 06:00:00,13.830000000000057 +2020-01-25 07:00:00,5.801555555555571 +2020-01-25 08:00:00,-0.295888888888886 +2020-01-25 09:00:00,-0.8267777777777787 +2020-01-25 10:00:00,4.406222222222242 +2020-01-25 11:00:00,18.673333333333304 +2020-01-25 12:00:00,18.99555555555557 +2020-01-25 13:00:00,19.035666666666675 +2020-01-25 14:00:00,17.93588888888903 +2020-01-25 15:00:00,62.83155555555553 +2020-01-25 16:00:00,105.62655555555556 +2020-01-25 17:00:00,112.64344444444433 +2020-01-25 18:00:00,112.31844444444437 +2020-01-25 19:00:00,109.26866666666645 +2020-01-25 20:00:00,95.61655555555569 +2020-01-25 21:00:00,115.90588888888902 +2020-01-25 22:00:00,111.42922222222205 +2020-01-25 23:00:00,118.48533333333343 +2020-01-26 00:00:00,118.4217777777776 +2020-01-26 01:00:00,96.01166666666661 +2020-01-26 02:00:00,86.84366666666719 +2020-01-26 03:00:00,116.77111111111111 +2020-01-26 04:00:00,113.60644444444493 +2020-01-26 05:00:00,96.8228888888882 +2020-01-26 06:00:00,89.86122222222215 +2020-01-26 07:00:00,91.58266666666692 +2020-01-26 08:00:00,77.57944444444443 +2020-01-26 09:00:00,60.51766666666661 +2020-01-26 10:00:00,66.87611111111121 +2020-01-26 11:00:00,41.445666666666526 +2020-01-26 12:00:00,43.893333333333395 +2020-01-26 13:00:00,23.92022222222216 +2020-01-26 14:00:00,19.354555555555567 +2020-01-26 15:00:00,12.267333333333362 +2020-01-26 16:00:00,23.41355555555544 +2020-01-26 17:00:00,30.023777777777664 +2020-01-26 18:00:00,16.175333333333295 +2020-01-26 19:00:00,4.59311111111114 +2020-01-26 20:00:00,7.927333333333323 +2020-01-26 21:00:00,7.489222222222175 +2020-01-26 22:00:00,11.755222222222221 +2020-01-26 23:00:00,7.191444444444407 +2020-01-27 00:00:00,6.102333333333366 +2020-01-27 01:00:00,8.259111111111102 +2020-01-27 02:00:00,4.5826666666666815 +2020-01-27 03:00:00,1.8332222222222219 +2020-01-27 04:00:00,10.20799999999998 +2020-01-27 05:00:00,22.54911111111108 +2020-01-27 06:00:00,28.781777777777776 +2020-01-27 07:00:00,19.25844444444444 +2020-01-27 08:00:00,24.077666666666723 +2020-01-27 09:00:00,29.099888888888817 +2020-01-27 10:00:00,40.22711111111123 +2020-01-27 11:00:00,27.494666666666472 +2020-01-27 12:00:00,22.73744444444454 +2020-01-27 13:00:00,21.240777777777726 +2020-01-27 14:00:00,22.233444444444466 +2020-01-27 15:00:00,37.05499999999996 +2020-01-27 16:00:00,60.0126666666668 +2020-01-27 17:00:00,33.543333333333294 +2020-01-27 18:00:00,18.603222222222314 +2020-01-27 19:00:00,27.675000000000058 +2020-01-27 20:00:00,37.17888888888873 +2020-01-27 21:00:00,29.495222222222147 +2020-01-27 22:00:00,16.299777777777777 +2020-01-27 23:00:00,7.927777777777737 +2020-01-28 00:00:00,3.1127777777777728 +2020-01-28 01:00:00,1.5346666666666622 +2020-01-28 02:00:00,2.3221111111111132 +2020-01-28 03:00:00,5.170888888888857 +2020-01-28 04:00:00,3.5665555555555613 +2020-01-28 05:00:00,5.331000000000014 +2020-01-28 06:00:00,9.63111111111113 +2020-01-28 07:00:00,9.193333333333351 +2020-01-28 08:00:00,14.703999999999958 +2020-01-28 09:00:00,17.783444444444406 +2020-01-28 10:00:00,20.920333333333474 +2020-01-28 11:00:00,26.344999999999754 +2020-01-28 12:00:00,28.155333333333214 +2020-01-28 13:00:00,20.731000000000307 +2020-01-28 14:00:00,23.925000000000065 +2020-01-28 15:00:00,29.33955555555548 +2020-01-28 16:00:00,42.692666666666625 +2020-01-28 17:00:00,48.880333333333525 +2020-01-28 18:00:00,68.32955555555559 +2020-01-28 19:00:00,57.989222222222075 +2020-01-28 20:00:00,45.43788888888901 +2020-01-28 21:00:00,27.487555555555467 +2020-01-28 22:00:00,12.657999999999857 +2020-01-28 23:00:00,7.650000000000046 +2020-01-29 00:00:00,8.711666666666671 +2020-01-29 01:00:00,15.723000000000003 +2020-01-29 02:00:00,15.580666666666609 +2020-01-29 03:00:00,15.22788888888882 +2020-01-29 04:00:00,20.065777777777782 +2020-01-29 05:00:00,25.987555555555524 +2020-01-29 06:00:00,37.03577777777776 +2020-01-29 07:00:00,57.77111111111134 +2020-01-29 08:00:00,47.49188888888902 +2020-01-29 09:00:00,44.793222222222205 +2020-01-29 10:00:00,46.29033333333376 +2020-01-29 11:00:00,43.17188888888886 +2020-01-29 12:00:00,64.19011111111101 +2020-01-29 13:00:00,67.65466666666669 +2020-01-29 14:00:00,70.29355555555549 +2020-01-29 15:00:00,20.319777777777865 +2020-01-29 16:00:00,45.981222222222286 +2020-01-29 17:00:00,80.5285555555553 +2020-01-29 18:00:00,58.61599999999992 +2020-01-29 19:00:00,38.81088888888888 +2020-01-29 20:00:00,25.716666666666704 +2020-01-29 21:00:00,23.959333333333312 +2020-01-29 22:00:00,24.07388888888886 +2020-01-29 23:00:00,12.471333333333373 +2020-01-30 00:00:00,2.4994444444444204 +2020-01-30 01:00:00,1.0912222222222152 +2020-01-30 02:00:00,1.30833333333334 +2020-01-30 03:00:00,2.5379999999999923 +2020-01-30 04:00:00,6.02688888888884 +2020-01-30 05:00:00,5.234111111111092 +2020-01-30 06:00:00,9.232111111111093 +2020-01-30 07:00:00,17.644222222222126 +2020-01-30 08:00:00,33.40355555555565 +2020-01-30 09:00:00,56.27711111111128 +2020-01-30 10:00:00,65.8705555555557 +2020-01-30 11:00:00,52.28955555555503 +2020-01-30 12:00:00,34.53677777777764 +2020-01-30 13:00:00,30.63011111111111 +2020-01-30 14:00:00,16.871555555555535 +2020-01-30 15:00:00,6.896444444444355 +2020-01-30 16:00:00,4.7311111111111295 +2020-01-30 17:00:00,11.693777777777765 +2020-01-30 18:00:00,17.032666666666646 +2020-01-30 19:00:00,23.485444444444486 +2020-01-30 20:00:00,17.448444444444455 +2020-01-30 21:00:00,10.681111111111084 +2020-01-30 22:00:00,12.13033333333338 +2020-01-30 23:00:00,1.3898888888888796 +2020-01-31 00:00:00,0.23222222222222333 +2020-01-31 01:00:00,0.5614444444444486 +2020-01-31 02:00:00,1.140666666666672 +2020-01-31 03:00:00,0.2762222222222264 +2020-01-31 04:00:00,2.0162222222222255 +2020-01-31 05:00:00,5.516111111111112 +2020-01-31 06:00:00,5.494222222222237 +2020-01-31 07:00:00,14.042333333333435 +2020-01-31 08:00:00,13.870111111111147 +2020-01-31 09:00:00,21.322222222222045 +2020-01-31 10:00:00,25.002555555555723 +2020-01-31 11:00:00,16.703999999999976 +2020-01-31 12:00:00,31.71622222222225 +2020-01-31 13:00:00,36.425555555555455 +2020-01-31 14:00:00,56.898555555555525 +2020-01-31 15:00:00,67.51855555555554 +2020-01-31 16:00:00,35.813666666666684 +2020-01-31 17:00:00,18.709555555555585 +2020-01-31 18:00:00,20.6366666666667 +2020-01-31 19:00:00,40.012333333333025 +2020-01-31 20:00:00,20.017999999999947 +2020-01-31 21:00:00,6.418111111111086 +2020-01-31 22:00:00,4.782111111111111 +2020-01-31 23:00:00,3.9987777777777733 +2020-02-01 00:00:00,2.5724444444444416 +2020-02-01 01:00:00,3.289444444444437 +2020-02-01 02:00:00,12.62533333333329 +2020-02-01 03:00:00,21.763444444444414 +2020-02-01 04:00:00,33.32377777777769 +2020-02-01 05:00:00,39.5335555555555 +2020-02-01 06:00:00,31.487888888889135 +2020-02-01 07:00:00,15.942333333333186 +2020-02-01 08:00:00,11.00644444444439 +2020-02-01 09:00:00,5.881555555555631 +2020-02-01 10:00:00,4.838888888888876 +2020-02-01 11:00:00,1.362777777777792 +2020-02-01 12:00:00,-0.7814444444444417 +2020-02-01 13:00:00,-0.8658888888888837 +2020-02-01 14:00:00,-0.9396666666666555 +2020-02-01 15:00:00,-0.8596666666666717 +2020-02-01 16:00:00,-0.4313333333333301 +2020-02-01 17:00:00,2.1737777777777656 +2020-02-01 18:00:00,2.3361111111111206 +2020-02-01 19:00:00,2.37544444444444 +2020-02-01 20:00:00,1.0932222222222217 +2020-02-01 21:00:00,3.4153333333333267 +2020-02-01 22:00:00,14.576000000000116 +2020-02-01 23:00:00,17.406777777777737 +2020-02-02 00:00:00,25.699444444444463 +2020-02-02 01:00:00,48.453888888888955 +2020-02-02 02:00:00,18.999111111111137 +2020-02-02 03:00:00,50.09533333333328 +2020-02-02 04:00:00,51.242000000000004 +2020-02-02 05:00:00,65.3095555555557 +2020-02-02 06:00:00,45.63677777777812 +2020-02-02 07:00:00,29.050888888889 +2020-02-02 08:00:00,34.022444444444574 +2020-02-02 09:00:00,29.67066666666654 +2020-02-02 10:00:00,23.997333333333287 +2020-02-02 11:00:00,22.101333333333287 +2020-02-02 12:00:00,27.665444444444475 +2020-02-02 13:00:00,36.991888888888674 +2020-02-02 14:00:00,42.352333333333306 +2020-02-02 15:00:00,36.96188888888884 +2020-02-02 16:00:00,53.05766666666645 +2020-02-02 17:00:00,68.46455555555579 +2020-02-02 18:00:00,59.64788888888882 +2020-02-02 19:00:00,70.0526666666667 +2020-02-02 20:00:00,72.90444444444435 +2020-02-02 21:00:00,60.20366666666655 +2020-02-02 22:00:00,56.0450000000002 +2020-02-02 23:00:00,43.75011111111104 +2020-02-03 00:00:00,33.70444444444452 +2020-02-03 01:00:00,29.846444444444387 +2020-02-03 02:00:00,18.355777777777856 +2020-02-03 03:00:00,17.753777777777835 +2020-02-03 04:00:00,22.524111111111132 +2020-02-03 05:00:00,45.25399999999992 +2020-02-03 06:00:00,52.97244444444438 +2020-02-03 07:00:00,29.12255555555549 +2020-02-03 08:00:00,21.27355555555541 +2020-02-03 09:00:00,23.339555555555567 +2020-02-03 10:00:00,10.126222222222216 +2020-02-03 11:00:00,5.126555555555606 +2020-02-03 12:00:00,7.0566666666666755 +2020-02-03 13:00:00,9.716666666666729 +2020-02-03 14:00:00,4.05711111111116 +2020-02-03 15:00:00,5.914888888888907 +2020-02-03 16:00:00,7.692888888888838 +2020-02-03 17:00:00,14.92911111111091 +2020-02-03 18:00:00,11.795777777777692 +2020-02-03 19:00:00,4.997777777777753 +2020-02-03 20:00:00,3.2717777777777726 +2020-02-03 21:00:00,5.9275555555556 +2020-02-03 22:00:00,3.9403333333333364 +2020-02-03 23:00:00,9.915666666666704 +2020-02-04 00:00:00,22.220666666666713 +2020-02-04 01:00:00,37.43377777777771 +2020-02-04 02:00:00,48.45677777777779 +2020-02-04 03:00:00,36.974222222221975 +2020-02-04 04:00:00,44.423222222222094 +2020-02-04 05:00:00,71.64022222222216 +2020-02-04 06:00:00,52.42611111111119 +2020-02-04 07:00:00,46.68933333333335 +2020-02-04 08:00:00,25.46866666666662 +2020-02-04 09:00:00,20.113555555555585 +2020-02-04 10:00:00,31.306111111111083 +2020-02-04 11:00:00,21.573555555555505 +2020-02-04 12:00:00,35.208333333333286 +2020-02-04 13:00:00,32.97855555555559 +2020-02-04 14:00:00,21.375111111111124 +2020-02-04 15:00:00,15.432222222222126 +2020-02-04 16:00:00,8.537777777777787 +2020-02-04 17:00:00,5.125666666666686 +2020-02-04 18:00:00,4.986111111111114 +2020-02-04 19:00:00,0.7924444444444472 +2020-02-04 20:00:00,4.693666666666651 +2020-02-04 21:00:00,2.216777777777783 +2020-02-04 22:00:00,1.1563333333333299 +2020-02-04 23:00:00,0.7807777777777722 +2020-02-05 00:00:00,-0.3928888888888884 +2020-02-05 01:00:00,-0.5570000000000004 +2020-02-05 02:00:00,-0.551333333333331 +2020-02-05 03:00:00,0.6152222222222227 +2020-02-05 04:00:00,1.581222222222218 +2020-02-05 05:00:00,10.998111111111083 +2020-02-05 06:00:00,24.26555555555557 +2020-02-05 07:00:00,16.800999999999913 +2020-02-05 08:00:00,9.340111111111142 +2020-02-05 09:00:00,3.736111111111163 +2020-02-05 10:00:00,5.161999999999991 +2020-02-05 11:00:00,7.536444444444453 +2020-02-05 12:00:00,5.233555555555528 +2020-02-05 13:00:00,1.8594444444444598 +2020-02-05 14:00:00,6.346777777777803 +2020-02-05 15:00:00,10.556222222222237 +2020-02-05 16:00:00,20.766777777777683 +2020-02-05 17:00:00,21.61911111111115 +2020-02-05 18:00:00,21.207222222222306 +2020-02-05 19:00:00,22.941555555555585 +2020-02-05 20:00:00,10.534222222222322 +2020-02-05 21:00:00,5.36333333333333 +2020-02-05 22:00:00,0.7591111111111093 +2020-02-05 23:00:00,1.498333333333326 +2020-02-06 00:00:00,8.178444444444438 +2020-02-06 01:00:00,8.809666666666695 +2020-02-06 02:00:00,8.003888888888921 +2020-02-06 03:00:00,9.713777777777723 +2020-02-06 04:00:00,5.188333333333311 +2020-02-06 05:00:00,10.900333333333379 +2020-02-06 06:00:00,13.952111111111174 +2020-02-06 07:00:00,23.892444444444468 +2020-02-06 08:00:00,7.0475555555555625 +2020-02-06 09:00:00,0.8438888888888801 +2020-02-06 10:00:00,-0.949444444444433 +2020-02-06 11:00:00,3.228222222222247 +2020-02-06 12:00:00,6.994777777777697 +2020-02-06 13:00:00,10.85488888888888 +2020-02-06 14:00:00,15.693777777777859 +2020-02-06 15:00:00,18.64311111111111 +2020-02-06 16:00:00,21.20700000000005 +2020-02-06 17:00:00,50.186444444444604 +2020-02-06 18:00:00,77.95188888888926 +2020-02-06 19:00:00,81.58388888888862 +2020-02-06 20:00:00,63.83733333333331 +2020-02-06 21:00:00,99.79822222222236 +2020-02-06 22:00:00,98.84355555555568 +2020-02-06 23:00:00,85.89233333333343 +2020-02-07 00:00:00,105.42177777777799 +2020-02-07 01:00:00,89.8939999999999 +2020-02-07 02:00:00,98.4763333333333 +2020-02-07 03:00:00,104.33111111111116 +2020-02-07 04:00:00,117.07933333333335 +2020-02-07 05:00:00,102.66199999999893 +2020-02-07 06:00:00,62.54011111111105 +2020-02-07 07:00:00,54.90788888888902 +2020-02-07 08:00:00,25.13311111111104 +2020-02-07 09:00:00,55.98711111111129 +2020-02-07 10:00:00,36.57377777777781 +2020-02-07 11:00:00,10.568777777777807 +2020-02-07 12:00:00,8.95633333333333 +2020-02-07 13:00:00,23.774444444444395 +2020-02-07 14:00:00,19.33199999999996 +2020-02-07 15:00:00,40.62888888888893 +2020-02-07 16:00:00,66.00666666666656 +2020-02-07 17:00:00,69.37155555555569 +2020-02-07 18:00:00,61.429999999999914 +2020-02-07 19:00:00,84.59644444444427 +2020-02-07 20:00:00,65.2925555555553 +2020-02-07 21:00:00,79.85655555555574 +2020-02-07 22:00:00,61.18988888888882 +2020-02-07 23:00:00,67.71477777777766 +2020-02-08 00:00:00,15.249777777777789 +2020-02-08 01:00:00,8.617555555555553 +2020-02-08 02:00:00,18.06166666666674 +2020-02-08 03:00:00,-1.0022222222222221 +2020-02-08 04:00:00,31.274777777777697 +2020-02-08 05:00:00,45.068777777777605 +2020-02-08 06:00:00,53.63733333333333 +2020-02-08 07:00:00,63.02388888888908 +2020-02-08 08:00:00,69.71355555555569 +2020-02-08 09:00:00,76.44444444444451 +2020-02-08 10:00:00,71.74366666666656 +2020-02-08 11:00:00,63.65377777777779 +2020-02-08 12:00:00,68.28711111111106 +2020-02-08 13:00:00,34.894000000000005 +2020-02-08 14:00:00,38.54222222222222 +2020-02-08 15:00:00,58.50244444444446 +2020-02-08 16:00:00,84.14544444444441 +2020-02-08 17:00:00,74.24733333333306 +2020-02-08 18:00:00,96.74511111111109 +2020-02-08 19:00:00,102.77999999999987 +2020-02-08 20:00:00,87.4289999999999 +2020-02-08 21:00:00,47.495111111111044 +2020-02-08 22:00:00,33.66888888888904 +2020-02-08 23:00:00,42.40022222222228 +2020-02-09 00:00:00,58.43255555555547 +2020-02-09 01:00:00,37.592888888888815 +2020-02-09 02:00:00,19.059777777777715 +2020-02-09 03:00:00,11.947777777777773 +2020-02-09 04:00:00,14.161888888888821 +2020-02-09 05:00:00,12.068888888888871 +2020-02-09 06:00:00,1.5904444444444505 +2020-02-09 07:00:00,0.5656666666666621 +2020-02-09 08:00:00,4.803888888888894 +2020-02-09 09:00:00,11.556888888888913 +2020-02-09 10:00:00,10.524222222222251 +2020-02-09 11:00:00,20.494000000000074 +2020-02-09 12:00:00,16.06955555555559 +2020-02-09 13:00:00,23.553222222222036 +2020-02-09 14:00:00,15.977777777777826 +2020-02-09 15:00:00,20.862888888888904 +2020-02-09 16:00:00,9.980666666666693 +2020-02-09 17:00:00,7.341222222222245 +2020-02-09 18:00:00,9.562555555555438 +2020-02-09 19:00:00,12.210777777777702 +2020-02-09 20:00:00,5.458111111111089 +2020-02-09 21:00:00,26.712555555555525 +2020-02-09 22:00:00,20.485111111110974 +2020-02-09 23:00:00,18.340222222222135 +2020-02-10 00:00:00,20.363000000000074 +2020-02-10 01:00:00,12.29355555555554 +2020-02-10 02:00:00,19.513999999999978 +2020-02-10 03:00:00,23.55433333333334 +2020-02-10 04:00:00,24.047000000000004 +2020-02-10 05:00:00,9.878444444444508 +2020-02-10 06:00:00,10.651777777777786 +2020-02-10 07:00:00,14.973888888888794 +2020-02-10 08:00:00,10.844999999999953 +2020-02-10 09:00:00,5.769111111111087 +2020-02-10 10:00:00,7.094000000000067 +2020-02-10 11:00:00,2.8706666666666654 +2020-02-10 12:00:00,0.22866666666667962 +2020-02-10 13:00:00,-0.10688888888888733 +2020-02-10 14:00:00,0.41999999999999804 +2020-02-10 15:00:00,1.0246666666666624 +2020-02-10 16:00:00,11.410888888888902 +2020-02-10 17:00:00,19.561444444444334 +2020-02-10 18:00:00,28.35988888888877 +2020-02-10 19:00:00,24.98488888888886 +2020-02-10 20:00:00,25.63477777777791 +2020-02-10 21:00:00,24.87488888888889 +2020-02-10 22:00:00,22.305555555555603 +2020-02-10 23:00:00,19.15922222222215 +2020-02-11 00:00:00,24.655111111111125 +2020-02-11 01:00:00,40.00466666666658 +2020-02-11 02:00:00,58.866888888889115 +2020-02-11 03:00:00,48.88488888888872 +2020-02-11 04:00:00,53.689333333333174 +2020-02-11 05:00:00,55.428222222222246 +2020-02-11 06:00:00,50.425222222222445 +2020-02-11 07:00:00,45.4048888888886 +2020-02-11 08:00:00,37.96555555555547 +2020-02-11 09:00:00,26.22355555555593 +2020-02-11 10:00:00,14.600999999999967 +2020-02-11 11:00:00,7.378555555555586 +2020-02-11 12:00:00,6.758444444444407 +2020-02-11 13:00:00,7.553444444444411 +2020-02-11 14:00:00,15.145111111111149 +2020-02-11 15:00:00,15.164666666666768 +2020-02-11 16:00:00,17.090888888888802 +2020-02-11 17:00:00,12.000333333333378 +2020-02-11 18:00:00,9.25855555555559 +2020-02-11 19:00:00,5.197888888888918 +2020-02-11 20:00:00,16.29900000000001 +2020-02-11 21:00:00,17.331555555555497 +2020-02-11 22:00:00,8.64433333333325 +2020-02-11 23:00:00,6.407111111111127 +2020-02-12 00:00:00,6.914222222222233 +2020-02-12 01:00:00,8.713333333333303 +2020-02-12 02:00:00,13.718111111111092 +2020-02-12 03:00:00,9.353444444444467 +2020-02-12 04:00:00,7.3227777777777785 +2020-02-12 05:00:00,7.769555555555587 +2020-02-12 06:00:00,8.130000000000024 +2020-02-12 07:00:00,9.170444444444506 +2020-02-12 08:00:00,10.790666666666631 +2020-02-12 09:00:00,23.80944444444434 +2020-02-12 10:00:00,24.12966666666671 +2020-02-12 11:00:00,50.06333333333332 +2020-02-12 12:00:00,52.938777777777794 +2020-02-12 13:00:00,75.38866666666662 +2020-02-12 14:00:00,95.96933333333303 +2020-02-12 15:00:00,63.29011111111089 +2020-02-12 16:00:00,38.97544444444446 +2020-02-12 17:00:00,63.94111111111113 +2020-02-12 18:00:00,81.19666666666672 +2020-02-12 19:00:00,53.60922222222226 +2020-02-12 20:00:00,34.25311111111114 +2020-02-12 21:00:00,32.14888888888895 +2020-02-12 22:00:00,29.900333333333272 +2020-02-12 23:00:00,10.220111111111136 +2020-02-13 00:00:00,5.19755555555556 +2020-02-13 01:00:00,4.920000000000034 +2020-02-13 02:00:00,8.368000000000002 +2020-02-13 03:00:00,11.213777777777807 +2020-02-13 04:00:00,20.778888888888893 +2020-02-13 05:00:00,22.08733333333323 +2020-02-13 06:00:00,31.424444444444486 +2020-02-13 07:00:00,41.72811111111098 +2020-02-13 08:00:00,44.450666666666805 +2020-02-13 09:00:00,39.5505555555556 +2020-02-13 10:00:00,40.23899999999986 +2020-02-13 11:00:00,33.241888888889065 +2020-02-13 12:00:00,32.81611111111118 +2020-02-13 13:00:00,43.40566666666669 +2020-02-13 14:00:00,64.82255555555565 +2020-02-13 15:00:00,86.51988888888906 +2020-02-13 16:00:00,89.8377777777779 +2020-02-13 17:00:00,78.49633333333331 +2020-02-13 18:00:00,44.59977777777782 +2020-02-13 19:00:00,31.636666666666628 +2020-02-13 20:00:00,26.352666666666696 +2020-02-13 21:00:00,17.74066666666672 +2020-02-13 22:00:00,9.761333333333253 +2020-02-13 23:00:00,19.916666666666682 +2020-02-14 00:00:00,7.82322222222224 +2020-02-14 01:00:00,5.699888888888916 +2020-02-14 02:00:00,5.710111111111148 +2020-02-14 03:00:00,7.284444444444477 +2020-02-14 04:00:00,15.086222222222228 +2020-02-14 05:00:00,46.94688888888899 +2020-02-14 06:00:00,43.86255555555558 +2020-02-14 07:00:00,30.485000000000117 +2020-02-14 08:00:00,30.411999999999995 +2020-02-14 09:00:00,38.69344444444437 +2020-02-14 10:00:00,44.5134444444443 +2020-02-14 11:00:00,51.615555555555574 +2020-02-14 12:00:00,60.73777777777796 +2020-02-14 13:00:00,68.10300000000011 +2020-02-14 14:00:00,64.05711111111123 +2020-02-14 15:00:00,66.08566666666674 +2020-02-14 16:00:00,53.0466666666665 +2020-02-14 17:00:00,48.10144444444472 +2020-02-14 18:00:00,23.19599999999999 +2020-02-14 19:00:00,15.414666666666726 +2020-02-14 20:00:00,11.82777777777776 +2020-02-14 21:00:00,18.92422222222214 +2020-02-14 22:00:00,30.416222222222224 +2020-02-14 23:00:00,32.39866666666663 +2020-02-15 00:00:00,18.081222222222266 +2020-02-15 01:00:00,19.70544444444448 +2020-02-15 02:00:00,23.044555555555565 +2020-02-15 03:00:00,19.02044444444448 +2020-02-15 04:00:00,18.947999999999993 +2020-02-15 05:00:00,26.59500000000011 +2020-02-15 06:00:00,28.597444444444434 +2020-02-15 07:00:00,21.59866666666683 +2020-02-15 08:00:00,23.85033333333336 +2020-02-15 09:00:00,21.231777777777708 +2020-02-15 10:00:00,20.698777777777742 +2020-02-15 11:00:00,14.549222222222275 +2020-02-15 12:00:00,25.008444444444685 +2020-02-15 13:00:00,24.634999999999895 +2020-02-15 14:00:00,26.141222222222293 +2020-02-15 15:00:00,52.06888888888892 +2020-02-15 16:00:00,68.29911111111116 +2020-02-15 17:00:00,56.46922222222211 +2020-02-15 18:00:00,23.241777777777827 +2020-02-15 19:00:00,27.34055555555557 +2020-02-15 20:00:00,15.238777777777633 +2020-02-15 21:00:00,16.94711111111112 +2020-02-15 22:00:00,23.545999999999992 +2020-02-15 23:00:00,22.90633333333332 +2020-02-16 00:00:00,11.20399999999998 +2020-02-16 01:00:00,5.412888888888891 +2020-02-16 02:00:00,3.3528888888889123 +2020-02-16 03:00:00,1.227555555555556 +2020-02-16 04:00:00,0.07055555555555634 +2020-02-16 05:00:00,7.677555555555551 +2020-02-16 06:00:00,4.951111111111182 +2020-02-16 07:00:00,5.8685555555555595 +2020-02-16 08:00:00,3.872111111111062 +2020-02-16 09:00:00,0.6835555555555575 +2020-02-16 10:00:00,5.12711111111115 +2020-02-16 11:00:00,18.235777777777713 +2020-02-16 12:00:00,23.187444444444466 +2020-02-16 13:00:00,19.43377777777762 +2020-02-16 14:00:00,14.465999999999848 +2020-02-16 15:00:00,13.495666666666619 +2020-02-16 16:00:00,15.851000000000008 +2020-02-16 17:00:00,22.66177777777778 +2020-02-16 18:00:00,47.569111111111084 +2020-02-16 19:00:00,47.65733333333344 +2020-02-16 20:00:00,23.2641111111111 +2020-02-16 21:00:00,17.720222222222194 +2020-02-16 22:00:00,29.65822222222215 +2020-02-16 23:00:00,29.493888888888936 +2020-02-17 00:00:00,33.351222222222205 +2020-02-17 01:00:00,14.313111111111045 +2020-02-17 02:00:00,11.417000000000016 +2020-02-17 03:00:00,4.51722222222222 +2020-02-17 04:00:00,2.2186666666666834 +2020-02-17 05:00:00,2.955000000000009 +2020-02-17 06:00:00,12.155666666666772 +2020-02-17 07:00:00,15.771888888888922 +2020-02-17 08:00:00,28.50944444444449 +2020-02-17 09:00:00,34.81122222222208 +2020-02-17 10:00:00,37.64788888888898 +2020-02-17 11:00:00,46.87444444444465 +2020-02-17 12:00:00,44.37166666666647 +2020-02-17 13:00:00,43.12388888888898 +2020-02-17 14:00:00,53.67066666666659 +2020-02-17 15:00:00,47.62044444444425 +2020-02-17 16:00:00,41.08955555555549 +2020-02-17 17:00:00,39.14911111111121 +2020-02-17 18:00:00,31.18533333333339 +2020-02-17 19:00:00,50.79577777777786 +2020-02-17 20:00:00,35.8155555555556 +2020-02-17 21:00:00,66.58322222222222 +2020-02-17 22:00:00,41.55811111111097 +2020-02-17 23:00:00,21.312444444444466 +2020-02-18 00:00:00,17.125000000000046 +2020-02-18 01:00:00,13.718999999999973 +2020-02-18 02:00:00,10.338777777777779 +2020-02-18 03:00:00,14.914111111111165 +2020-02-18 04:00:00,1.547222222222237 +2020-02-18 05:00:00,4.256555555555527 +2020-02-18 06:00:00,0.6266666666666834 +2020-02-18 07:00:00,0.5394444444444463 +2020-02-18 08:00:00,17.89788888888891 +2020-02-18 09:00:00,17.537888888888897 +2020-02-18 10:00:00,26.558111111111018 +2020-02-18 11:00:00,24.391777777777833 +2020-02-18 12:00:00,24.17844444444442 +2020-02-18 13:00:00,44.71077777777788 +2020-02-18 14:00:00,71.73088888888877 +2020-02-18 15:00:00,71.69977777777751 +2020-02-18 16:00:00,16.913888888888657 +2020-02-18 17:00:00,7.4338888888888786 +2020-02-18 18:00:00,22.931000000000108 +2020-02-18 19:00:00,24.072444444444564 +2020-02-18 20:00:00,37.88599999999999 +2020-02-18 21:00:00,37.10833333333321 +2020-02-18 22:00:00,47.76333333333335 +2020-02-18 23:00:00,67.32733333333331 +2020-02-19 00:00:00,70.12777777777794 +2020-02-19 01:00:00,61.82166666666658 +2020-02-19 02:00:00,58.59066666666671 +2020-02-19 03:00:00,47.602999999999916 +2020-02-19 04:00:00,38.771444444444406 +2020-02-19 05:00:00,32.04066666666676 +2020-02-19 06:00:00,53.64377777777772 +2020-02-19 07:00:00,53.008888888889004 +2020-02-19 08:00:00,47.62822222222223 +2020-02-19 09:00:00,68.37033333333336 +2020-02-19 10:00:00,91.34222222222226 +2020-02-19 11:00:00,93.5876666666669 +2020-02-19 12:00:00,93.50133333333427 +2020-02-19 13:00:00,93.78533333333269 +2020-02-19 14:00:00,94.48444444444458 +2020-02-19 15:00:00,94.62633333333233 +2020-02-19 16:00:00,94.90411111111085 +2020-02-19 17:00:00,96.34377777777783 +2020-02-19 18:00:00,99.2057777777773 +2020-02-19 19:00:00,95.00844444444449 +2020-02-19 20:00:00,87.82688888888973 +2020-02-19 21:00:00,90.8703333333331 +2020-02-19 22:00:00,63.218333333333234 +2020-02-19 23:00:00,91.6341111111113 +2020-02-20 00:00:00,54.21744444444465 +2020-02-20 01:00:00,60.154888888888976 +2020-02-20 02:00:00,80.75722222222224 +2020-02-20 03:00:00,54.95711111111114 +2020-02-20 04:00:00,70.78188888888909 +2020-02-20 05:00:00,57.299666666666674 +2020-02-20 06:00:00,64.36377777777771 +2020-02-20 07:00:00,58.242222222222146 +2020-02-20 08:00:00,60.826444444444206 +2020-02-20 09:00:00,61.34911111111115 +2020-02-20 10:00:00,79.33200000000005 +2020-02-20 11:00:00,98.21555555555561 +2020-02-20 12:00:00,108.37166666666668 +2020-02-20 13:00:00,106.29777777777724 +2020-02-20 14:00:00,115.69444444444468 +2020-02-20 15:00:00,111.23055555555568 +2020-02-20 16:00:00,99.06333333333328 +2020-02-20 17:00:00,82.3041111111111 +2020-02-20 18:00:00,68.84733333333325 +2020-02-20 19:00:00,30.32544444444448 +2020-02-20 20:00:00,74.69811111111129 +2020-02-20 21:00:00,89.95566666666676 +2020-02-20 22:00:00,70.77500000000025 +2020-02-20 23:00:00,58.20300000000007 +2020-02-21 00:00:00,52.177000000000014 +2020-02-21 01:00:00,50.29711111111121 +2020-02-21 02:00:00,53.34455555555546 +2020-02-21 03:00:00,52.36577777777776 +2020-02-21 04:00:00,52.74600000000002 +2020-02-21 05:00:00,48.28422222222215 +2020-02-21 06:00:00,46.79677777777767 +2020-02-21 07:00:00,56.963888888888846 +2020-02-21 08:00:00,61.01211111111111 +2020-02-21 09:00:00,57.81500000000009 +2020-02-21 10:00:00,29.793111111111163 +2020-02-21 11:00:00,51.68233333333345 +2020-02-21 12:00:00,47.71755555555544 +2020-02-21 13:00:00,57.912555555555585 +2020-02-21 14:00:00,64.90133333333323 +2020-02-21 15:00:00,70.14977777777754 +2020-02-21 16:00:00,58.38822222222208 +2020-02-21 17:00:00,71.20155555555536 +2020-02-21 18:00:00,67.60777777777761 +2020-02-21 19:00:00,68.27188888888882 +2020-02-21 20:00:00,52.24899999999994 +2020-02-21 21:00:00,31.314777777777657 +2020-02-21 22:00:00,37.02988888888896 +2020-02-21 23:00:00,51.972666666666754 +2020-02-22 00:00:00,43.22255555555551 +2020-02-22 01:00:00,20.680222222222238 +2020-02-22 02:00:00,15.611111111111121 +2020-02-22 03:00:00,13.440333333333355 +2020-02-22 04:00:00,13.355222222222222 +2020-02-22 05:00:00,11.323111111111137 +2020-02-22 06:00:00,12.282999999999907 +2020-02-22 07:00:00,5.395111111111097 +2020-02-22 08:00:00,9.579444444444382 +2020-02-22 09:00:00,34.2357777777777 +2020-02-22 10:00:00,58.41777777777806 +2020-02-22 11:00:00,53.89466666666687 +2020-02-22 12:00:00,48.64022222222205 +2020-02-22 13:00:00,59.02077777777773 +2020-02-22 14:00:00,70.60188888888855 +2020-02-22 15:00:00,68.90811111111141 +2020-02-22 16:00:00,64.54911111111126 +2020-02-22 17:00:00,68.82177777777724 +2020-02-22 18:00:00,73.44877777777761 +2020-02-22 19:00:00,58.75744444444441 +2020-02-22 20:00:00,42.09099999999989 +2020-02-22 21:00:00,22.990777777777808 +2020-02-22 22:00:00,20.910666666666682 +2020-02-22 23:00:00,12.212777777777816 +2020-02-23 00:00:00,8.175222222222233 +2020-02-23 01:00:00,11.489777777777745 +2020-02-23 02:00:00,6.5955555555555545 +2020-02-23 03:00:00,1.0746666666666729 +2020-02-23 04:00:00,3.5164444444444665 +2020-02-23 05:00:00,0.029000000000001573 +2020-02-23 06:00:00,-0.9032222222222053 +2020-02-23 07:00:00,0.08888888888888659 +2020-02-23 08:00:00,-0.9589999999999942 +2020-02-23 09:00:00,-0.9696666666666623 +2020-02-23 10:00:00,-0.020888888888882257 +2020-02-23 11:00:00,30.894111111111034 +2020-02-23 12:00:00,67.74155555555548 +2020-02-23 13:00:00,73.72088888888887 +2020-02-23 14:00:00,97.72388888888894 +2020-02-23 15:00:00,104.97800000000012 +2020-02-23 16:00:00,109.40766666666663 +2020-02-23 17:00:00,101.3243333333332 +2020-02-23 18:00:00,102.94055555555538 +2020-02-23 19:00:00,110.37644444444453 +2020-02-23 20:00:00,74.35855555555547 +2020-02-23 21:00:00,63.491555555555685 +2020-02-23 22:00:00,51.440000000000104 +2020-02-23 23:00:00,32.27333333333326 +2020-02-24 00:00:00,11.8503333333333 +2020-02-24 01:00:00,6.923777777777788 +2020-02-24 02:00:00,2.863777777777767 +2020-02-24 03:00:00,1.2515555555555598 +2020-02-24 04:00:00,0.3242222222222204 +2020-02-24 05:00:00,1.524888888888894 +2020-02-24 06:00:00,2.19688888888889 +2020-02-24 07:00:00,4.724111111111114 +2020-02-24 08:00:00,7.252666666666713 +2020-02-24 09:00:00,15.390666666666661 +2020-02-24 10:00:00,16.912555555555613 +2020-02-24 11:00:00,12.359666666666696 +2020-02-24 12:00:00,4.426999999999996 +2020-02-24 13:00:00,22.8967777777778 +2020-02-24 14:00:00,93.69222222222243 +2020-02-24 15:00:00,118.91211111111113 +2020-02-24 16:00:00,108.73788888888838 +2020-02-24 17:00:00,104.33200000000004 +2020-02-24 18:00:00,103.89766666666662 +2020-02-24 19:00:00,110.73544444444478 +2020-02-24 20:00:00,103.93722222222196 +2020-02-24 21:00:00,99.13411111111115 +2020-02-24 22:00:00,99.61622222222249 +2020-02-24 23:00:00,96.64700000000015 +2020-02-25 00:00:00,94.78944444444468 +2020-02-25 01:00:00,89.61644444444464 +2020-02-25 02:00:00,79.9661111111114 +2020-02-25 03:00:00,70.81666666666683 +2020-02-25 04:00:00,81.31399999999992 +2020-02-25 05:00:00,73.75744444444445 +2020-02-25 06:00:00,60.718555555555405 +2020-02-25 07:00:00,57.14388888888869 +2020-02-25 08:00:00,40.77877777777809 +2020-02-25 09:00:00,34.93688888888892 +2020-02-25 10:00:00,38.846333333333305 +2020-02-25 11:00:00,43.72199999999981 +2020-02-25 12:00:00,52.70799999999994 +2020-02-25 13:00:00,49.237444444444584 +2020-02-25 14:00:00,49.57988888888864 +2020-02-25 15:00:00,47.30111111111142 +2020-02-25 16:00:00,39.0882222222223 +2020-02-25 17:00:00,40.45544444444466 +2020-02-25 18:00:00,60.19977777777763 +2020-02-25 19:00:00,67.60299999999994 +2020-02-25 20:00:00,77.00088888888902 +2020-02-25 21:00:00,81.09566666666665 +2020-02-25 22:00:00,75.55744444444444 +2020-02-25 23:00:00,61.86166666666658 +2020-02-26 00:00:00,40.76577777777771 +2020-02-26 01:00:00,35.994000000000064 +2020-02-26 02:00:00,41.579555555555544 +2020-02-26 03:00:00,27.828888888888844 +2020-02-26 04:00:00,18.30811111111105 +2020-02-26 05:00:00,10.053444444444429 +2020-02-26 06:00:00,9.31211111111105 +2020-02-26 07:00:00,13.077888888888948 +2020-02-26 08:00:00,7.133777777777786 +2020-02-26 09:00:00,0.3227777777777786 +2020-02-26 10:00:00,8.229999999999968 +2020-02-26 11:00:00,11.066444444444475 +2020-02-26 12:00:00,19.23544444444439 +2020-02-26 13:00:00,30.326333333333334 +2020-02-26 14:00:00,29.355888888888842 +2020-02-26 15:00:00,35.3294444444444 +2020-02-26 16:00:00,32.80277777777782 +2020-02-26 17:00:00,38.152999999999935 +2020-02-26 18:00:00,43.539888888888605 +2020-02-26 19:00:00,59.620444444444225 +2020-02-26 20:00:00,33.52000000000001 +2020-02-26 21:00:00,24.798333333333385 +2020-02-26 22:00:00,10.569222222222054 +2020-02-26 23:00:00,1.0534444444444544 +2020-02-27 00:00:00,1.0149999999999992 +2020-02-27 01:00:00,3.4890000000000096 +2020-02-27 02:00:00,23.773222222222174 +2020-02-27 03:00:00,62.143888888889 +2020-02-27 04:00:00,47.03500000000008 +2020-02-27 05:00:00,28.90788888888909 +2020-02-27 06:00:00,22.012777777777817 +2020-02-27 07:00:00,20.55455555555557 +2020-02-27 08:00:00,19.77644444444441 +2020-02-27 09:00:00,11.700666666666582 +2020-02-27 10:00:00,7.177666666666721 +2020-02-27 11:00:00,8.155444444444376 +2020-02-27 12:00:00,5.230555555555565 +2020-02-27 13:00:00,2.0619999999999847 +2020-02-27 14:00:00,1.69322222222223 +2020-02-27 15:00:00,3.8873333333333298 +2020-02-27 16:00:00,1.263555555555566 +2020-02-27 17:00:00,4.481666666666638 +2020-02-27 18:00:00,8.64544444444444 +2020-02-27 19:00:00,19.86533333333336 +2020-02-27 20:00:00,16.954888888888913 +2020-02-27 21:00:00,15.61122222222236 +2020-02-27 22:00:00,8.50888888888887 +2020-02-27 23:00:00,4.965666666666654 +2020-02-28 00:00:00,6.972777777777821 +2020-02-28 01:00:00,7.566999999999999 +2020-02-28 02:00:00,6.695000000000017 +2020-02-28 03:00:00,8.669333333333324 +2020-02-28 04:00:00,17.614111111111132 +2020-02-28 05:00:00,38.17977777777781 +2020-02-28 06:00:00,51.83944444444422 +2020-02-28 07:00:00,54.955 +2020-02-28 08:00:00,49.554444444444236 +2020-02-28 09:00:00,55.00988888888898 +2020-02-28 10:00:00,42.67022222222223 +2020-02-28 11:00:00,72.17055555555551 +2020-02-28 12:00:00,72.69900000000018 +2020-02-28 13:00:00,99.20055555555533 +2020-02-28 14:00:00,106.20366666666578 +2020-02-28 15:00:00,106.65300000000053 +2020-02-28 16:00:00,117.6074444444447 +2020-02-28 17:00:00,119.49999999999962 +2020-02-28 18:00:00,119.54299999999995 +2020-02-28 19:00:00,103.02666666666683 +2020-02-28 20:00:00,86.33599999999998 +2020-02-28 21:00:00,73.36177777777785 +2020-02-28 22:00:00,56.25800000000006 +2020-02-28 23:00:00,52.775555555555464 +2020-02-29 00:00:00,33.77588888888884 +2020-02-29 01:00:00,19.9572222222223 +2020-02-29 02:00:00,5.98133333333325 +2020-02-29 03:00:00,3.910111111111083 +2020-02-29 04:00:00,3.5107777777777875 +2020-02-29 05:00:00,10.216999999999976 +2020-02-29 06:00:00,15.081666666666695 +2020-02-29 07:00:00,30.443111111111143 +2020-02-29 08:00:00,52.37488888888878 +2020-02-29 09:00:00,46.366333333333145 +2020-02-29 10:00:00,28.558555555555525 +2020-02-29 11:00:00,48.66011111111101 +2020-02-29 12:00:00,55.79366666666661 +2020-02-29 13:00:00,31.91255555555566 +2020-02-29 14:00:00,25.411999999999978 +2020-02-29 15:00:00,29.05577777777762 +2020-02-29 16:00:00,30.608555555555487 +2020-02-29 17:00:00,20.715333333333266 +2020-02-29 18:00:00,23.681333333333367 +2020-02-29 19:00:00,17.220444444444414 +2020-02-29 20:00:00,9.511444444444477 +2020-02-29 21:00:00,5.717222222222247 +2020-02-29 22:00:00,5.635333333333334 +2020-02-29 23:00:00,2.6322222222222367 +2020-03-01 00:00:00,6.72222222222221 +2020-03-01 01:00:00,1.0703333333333307 +2020-03-01 02:00:00,-0.8581111111111001 +2020-03-01 03:00:00,-0.9173333333333198 +2020-03-01 04:00:00,-0.646111111111108 +2020-03-01 05:00:00,2.1256666666666706 +2020-03-01 06:00:00,3.012222222222196 +2020-03-01 07:00:00,3.5784444444444494 +2020-03-01 08:00:00,4.499333333333307 +2020-03-01 09:00:00,8.71611111111115 +2020-03-01 10:00:00,10.525777777777712 +2020-03-01 11:00:00,23.58533333333324 +2020-03-01 12:00:00,12.856222222222263 +2020-03-01 13:00:00,11.328999999999938 +2020-03-01 14:00:00,17.351444444444365 +2020-03-01 15:00:00,23.886444444444397 +2020-03-01 16:00:00,24.667444444444417 +2020-03-01 17:00:00,20.80611111111104 +2020-03-01 18:00:00,27.569666666666777 +2020-03-01 19:00:00,34.33000000000005 +2020-03-01 20:00:00,33.970111111111144 +2020-03-01 21:00:00,47.306555555555555 +2020-03-01 22:00:00,36.45755555555543 +2020-03-01 23:00:00,35.09300000000016 +2020-03-02 00:00:00,25.48255555555548 +2020-03-02 01:00:00,18.50077777777774 +2020-03-02 02:00:00,17.72655555555554 +2020-03-02 03:00:00,20.94411111111111 +2020-03-02 04:00:00,43.667888888888925 +2020-03-02 05:00:00,46.460111111111296 +2020-03-02 06:00:00,46.595444444444176 +2020-03-02 07:00:00,54.50311111111132 +2020-03-02 08:00:00,56.71755555555567 +2020-03-02 09:00:00,55.152333333333424 +2020-03-02 10:00:00,63.55566666666666 +2020-03-02 11:00:00,80.76733333333335 +2020-03-02 12:00:00,88.30499999999985 +2020-03-02 13:00:00,89.98877777777784 +2020-03-02 14:00:00,86.6922222222224 +2020-03-02 15:00:00,78.24122222222225 +2020-03-02 16:00:00,64.27488888888873 +2020-03-02 17:00:00,67.72433333333322 +2020-03-02 18:00:00,54.22077777777791 +2020-03-02 19:00:00,36.75277777777762 +2020-03-02 20:00:00,29.09266666666667 +2020-03-02 21:00:00,18.303666666666608 +2020-03-02 22:00:00,15.693555555555532 +2020-03-02 23:00:00,15.827888888888863 +2020-03-03 00:00:00,15.241111111111081 +2020-03-03 01:00:00,11.575111111111113 +2020-03-03 02:00:00,5.4124444444444455 +2020-03-03 03:00:00,4.475777777777768 +2020-03-03 04:00:00,4.0351111111111235 +2020-03-03 05:00:00,7.238666666666633 +2020-03-03 06:00:00,12.484555555555401 +2020-03-03 07:00:00,16.952111111111126 +2020-03-03 08:00:00,23.016666666666765 +2020-03-03 09:00:00,31.762333333333384 +2020-03-03 10:00:00,27.505000000000027 +2020-03-03 11:00:00,24.384111111111196 +2020-03-03 12:00:00,18.540999999999983 +2020-03-03 13:00:00,11.699444444444389 +2020-03-03 14:00:00,7.75988888888889 +2020-03-03 15:00:00,10.407555555555648 +2020-03-03 16:00:00,7.128666666666729 +2020-03-03 17:00:00,5.7322222222221875 +2020-03-03 18:00:00,2.755555555555569 +2020-03-03 19:00:00,0.5775555555555636 +2020-03-03 20:00:00,-0.6987777777777746 +2020-03-03 21:00:00,2.164333333333336 +2020-03-03 22:00:00,5.693111111111133 +2020-03-03 23:00:00,2.631000000000012 +2020-03-04 00:00:00,1.1779999999999988 +2020-03-04 01:00:00,-0.0997777777777757 +2020-03-04 02:00:00,-0.4862222222222197 +2020-03-04 03:00:00,-0.4971111111111139 +2020-03-04 04:00:00,-0.18944444444444472 +2020-03-04 05:00:00,2.3145555555555575 +2020-03-04 06:00:00,9.26666666666667 +2020-03-04 07:00:00,16.209444444444497 +2020-03-04 08:00:00,13.059555555555558 +2020-03-04 09:00:00,13.31533333333328 +2020-03-04 10:00:00,11.337333333333289 +2020-03-04 11:00:00,9.504111111111166 +2020-03-04 12:00:00,13.910555555555591 +2020-03-04 13:00:00,14.51666666666657 +2020-03-04 14:00:00,9.90555555555551 +2020-03-04 15:00:00,13.41366666666652 +2020-03-04 16:00:00,12.311111111111073 +2020-03-04 17:00:00,17.823666666666735 +2020-03-04 18:00:00,22.62744444444442 +2020-03-04 19:00:00,19.93200000000012 +2020-03-04 20:00:00,13.464666666666549 +2020-03-04 21:00:00,23.129666666666623 +2020-03-04 22:00:00,24.664777777777758 +2020-03-04 23:00:00,24.65655555555552 +2020-03-05 00:00:00,29.978999999999978 +2020-03-05 01:00:00,32.544999999999995 +2020-03-05 02:00:00,25.248333333333353 +2020-03-05 03:00:00,28.01111111111128 +2020-03-05 04:00:00,26.27977777777783 +2020-03-05 05:00:00,25.430666666666813 +2020-03-05 06:00:00,13.140888888888751 +2020-03-05 07:00:00,11.739444444444356 +2020-03-05 08:00:00,9.549888888888866 +2020-03-05 09:00:00,4.817555555555543 +2020-03-05 10:00:00,19.432888888888897 +2020-03-05 11:00:00,34.05533333333335 +2020-03-05 12:00:00,41.36633333333322 +2020-03-05 13:00:00,67.28688888888892 +2020-03-05 14:00:00,74.47199999999994 +2020-03-05 15:00:00,80.81899999999975 +2020-03-05 16:00:00,81.87822222222185 +2020-03-05 17:00:00,91.97122222222296 +2020-03-05 18:00:00,103.72988888888813 +2020-03-05 19:00:00,91.73888888888905 +2020-03-05 20:00:00,86.4474444444449 +2020-03-05 21:00:00,61.46477777777772 +2020-03-05 22:00:00,118.73033333333315 +2020-03-05 23:00:00,112.22233333333318 +2020-03-06 00:00:00,89.14244444444454 +2020-03-06 01:00:00,32.80766666666699 +2020-03-06 02:00:00,43.424444444444475 +2020-03-06 03:00:00,33.11966666666675 +2020-03-06 04:00:00,31.03133333333327 +2020-03-06 05:00:00,25.136555555555574 +2020-03-06 06:00:00,28.527222222222555 +2020-03-06 07:00:00,29.893888888888824 +2020-03-06 08:00:00,36.50633333333347 +2020-03-06 09:00:00,58.58833333333349 +2020-03-06 10:00:00,52.15299999999995 +2020-03-06 11:00:00,54.05822222222197 +2020-03-06 12:00:00,60.619111111111074 +2020-03-06 13:00:00,73.62144444444422 +2020-03-06 14:00:00,99.52266666666675 +2020-03-06 15:00:00,97.36299999999993 +2020-03-06 16:00:00,50.01422222222213 +2020-03-06 17:00:00,27.634777777777735 +2020-03-06 18:00:00,15.643555555555425 +2020-03-06 19:00:00,5.697000000000016 +2020-03-06 20:00:00,3.428666666666663 +2020-03-06 21:00:00,20.253777777777774 +2020-03-06 22:00:00,39.161000000000065 +2020-03-06 23:00:00,27.649666666666622 +2020-03-07 00:00:00,24.309888888888956 +2020-03-07 01:00:00,33.37788888888887 +2020-03-07 02:00:00,25.82755555555552 +2020-03-07 03:00:00,26.951999999999934 +2020-03-07 04:00:00,27.645444444444454 +2020-03-07 05:00:00,22.39499999999997 +2020-03-07 06:00:00,16.890666666666576 +2020-03-07 07:00:00,11.515777777777867 +2020-03-07 08:00:00,16.427111111111188 +2020-03-07 09:00:00,3.977000000000055 +2020-03-07 10:00:00,0.2910000000000004 +2020-03-07 11:00:00,0.7432222222222273 +2020-03-07 12:00:00,-0.18833333333333052 +2020-03-07 13:00:00,0.16388888888889025 +2020-03-07 14:00:00,-0.4802222222222176 +2020-03-07 15:00:00,-0.9193333333333235 +2020-03-07 16:00:00,-0.93155555555554 +2020-03-07 17:00:00,-0.908333333333319 +2020-03-07 18:00:00,-0.9254444444444336 +2020-03-07 19:00:00,-0.5049999999999958 +2020-03-07 20:00:00,0.9366666666666627 +2020-03-07 21:00:00,3.089555555555553 +2020-03-07 22:00:00,6.604333333333347 +2020-03-07 23:00:00,3.54166666666671 +2020-03-08 00:00:00,0.1580000000000001 +2020-03-08 01:00:00,-0.3763333333333332 +2020-03-08 02:00:00,0.025444444444444457 +2020-03-08 03:00:00,0.6212222222222222 +2020-03-08 04:00:00,3.0875555555555567 +2020-03-08 05:00:00,9.067444444444407 +2020-03-08 06:00:00,15.682000000000071 +2020-03-08 07:00:00,14.039222222222076 +2020-03-08 08:00:00,19.019444444444414 +2020-03-08 09:00:00,42.43777777777786 +2020-03-08 10:00:00,99.07677777777805 +2020-03-08 11:00:00,93.04544444444454 +2020-03-08 12:00:00,88.76588888888914 +2020-03-08 13:00:00,113.09766666666674 +2020-03-08 14:00:00,97.11322222222226 +2020-03-08 15:00:00,97.64622222222197 +2020-03-08 16:00:00,97.44166666666685 +2020-03-08 17:00:00,94.99677777777768 +2020-03-08 18:00:00,109.90399999999994 +2020-03-08 19:00:00,105.80933333333336 +2020-03-08 20:00:00,88.86644444444464 +2020-03-08 21:00:00,82.05599999999993 +2020-03-08 22:00:00,79.29022222222221 +2020-03-08 23:00:00,94.64888888888876 +2020-03-09 00:00:00,64.07566666666652 +2020-03-09 01:00:00,43.39866666666669 +2020-03-09 02:00:00,35.68288888888892 +2020-03-09 03:00:00,35.30799999999998 +2020-03-09 04:00:00,36.35411111111101 +2020-03-09 05:00:00,30.548000000000087 +2020-03-09 06:00:00,22.6631111111113 +2020-03-09 07:00:00,12.525555555555547 +2020-03-09 08:00:00,5.389777777777788 +2020-03-09 09:00:00,6.9836666666667 +2020-03-09 10:00:00,0.46222222222221915 +2020-03-09 11:00:00,-0.4232222222222214 +2020-03-09 12:00:00,-0.39555555555555744 +2020-03-09 13:00:00,1.8705555555555438 +2020-03-09 14:00:00,5.692333333333327 +2020-03-09 15:00:00,6.023000000000053 +2020-03-09 16:00:00,0.8397777777777847 +2020-03-09 17:00:00,-0.6893333333333238 +2020-03-09 18:00:00,-0.8999999999999857 +2020-03-09 19:00:00,-0.8401111111110914 +2020-03-09 20:00:00,-0.8999999999999857 +2020-03-09 21:00:00,-0.8999999999999857 +2020-03-09 22:00:00,-0.8305555555555502 +2020-03-09 23:00:00,2.7946666666666755 +2020-03-10 00:00:00,5.6214444444444425 +2020-03-10 01:00:00,8.871000000000038 +2020-03-10 02:00:00,9.068111111111122 +2020-03-10 03:00:00,17.328666666666706 +2020-03-10 04:00:00,16.037111111111145 +2020-03-10 05:00:00,15.604777777777779 +2020-03-10 06:00:00,13.792888888888998 +2020-03-10 07:00:00,7.177999999999945 +2020-03-10 08:00:00,-0.9833333333333295 +2020-03-10 09:00:00,0.7901111111111128 +2020-03-10 10:00:00,9.987555555555474 +2020-03-10 11:00:00,15.658666666666646 +2020-03-10 12:00:00,30.22377777777781 +2020-03-10 13:00:00,17.17177777777779 +2020-03-10 14:00:00,29.594777777777676 +2020-03-10 15:00:00,59.94177777777775 +2020-03-10 16:00:00,49.75566666666663 +2020-03-10 17:00:00,46.74666666666678 +2020-03-10 18:00:00,58.92488888888905 +2020-03-10 19:00:00,34.489999999999895 +2020-03-10 20:00:00,26.85044444444449 +2020-03-10 21:00:00,42.469000000000136 +2020-03-10 22:00:00,85.21055555555557 +2020-03-10 23:00:00,92.74544444444452 +2020-03-11 00:00:00,76.4634444444447 +2020-03-11 01:00:00,74.14255555555592 +2020-03-11 02:00:00,72.74944444444404 +2020-03-11 03:00:00,82.86344444444401 +2020-03-11 04:00:00,103.34066666666703 +2020-03-11 05:00:00,113.89177777777722 +2020-03-11 06:00:00,110.25866666666651 +2020-03-11 07:00:00,113.04344444444445 +2020-03-11 08:00:00,110.23788888888912 +2020-03-11 09:00:00,117.45633333333289 +2020-03-11 10:00:00,113.99166666666707 +2020-03-11 11:00:00,87.39766666666647 +2020-03-11 12:00:00,113.15011111111126 +2020-03-11 13:00:00,79.86099999999959 +2020-03-11 14:00:00,83.59266666666721 +2020-03-11 15:00:00,83.77744444444424 +2020-03-11 16:00:00,79.52133333333259 +2020-03-11 17:00:00,84.95922222222192 +2020-03-11 18:00:00,82.19322222222144 +2020-03-11 19:00:00,79.0661111111112 +2020-03-11 20:00:00,80.96722222222152 +2020-03-11 21:00:00,76.04300000000028 +2020-03-11 22:00:00,101.82211111111087 +2020-03-11 23:00:00,75.84299999999995 +2020-03-12 00:00:00,45.587111111111 +2020-03-12 01:00:00,62.03533333333304 +2020-03-12 02:00:00,47.01911111111093 +2020-03-12 03:00:00,87.40777777777683 +2020-03-12 04:00:00,54.92188888888911 +2020-03-12 05:00:00,114.22811111111096 +2020-03-12 06:00:00,104.1771111111112 +2020-03-12 07:00:00,97.00822222222209 +2020-03-12 08:00:00,97.38933333333307 +2020-03-12 09:00:00,97.61077777777774 +2020-03-12 10:00:00,91.43544444444427 +2020-03-12 11:00:00,103.1731111111111 +2020-03-12 12:00:00,101.65500000000074 +2020-03-12 13:00:00,101.11488888888903 +2020-03-12 14:00:00,101.03066666666732 +2020-03-12 15:00:00,109.50922222222245 +2020-03-12 16:00:00,111.8221111111111 +2020-03-12 17:00:00,112.4802222222224 +2020-03-12 18:00:00,110.36277777777823 +2020-03-12 19:00:00,117.43488888888847 +2020-03-12 20:00:00,117.44277777777742 +2020-03-12 21:00:00,120.51966666666566 +2020-03-12 22:00:00,116.3931111111116 +2020-03-12 23:00:00,114.33344444444408 +2020-03-13 00:00:00,84.21800000000017 +2020-03-13 01:00:00,94.36833333333351 +2020-03-13 02:00:00,85.67688888888803 +2020-03-13 03:00:00,80.64166666666682 +2020-03-13 04:00:00,98.78355555555535 +2020-03-13 05:00:00,97.02100000000002 +2020-03-13 06:00:00,81.55455555555572 +2020-03-13 07:00:00,71.09277777777793 +2020-03-13 08:00:00,70.66966666666666 +2020-03-13 09:00:00,72.83244444444442 +2020-03-13 10:00:00,57.136999999999944 +2020-03-13 11:00:00,59.09300000000021 +2020-03-13 12:00:00,54.651222222222295 +2020-03-13 13:00:00,34.73388888888896 +2020-03-13 14:00:00,22.065777777777903 +2020-03-13 15:00:00,14.300888888888833 +2020-03-13 16:00:00,9.715444444444493 +2020-03-13 17:00:00,1.391333333333337 +2020-03-13 18:00:00,-0.8399999999999858 +2020-03-13 19:00:00,0.578888888888887 +2020-03-13 20:00:00,0.1738888888888871 +2020-03-13 21:00:00,-0.3016666666666686 +2020-03-13 22:00:00,-0.6085555555555566 +2020-03-13 23:00:00,0.14488888888888762 +2020-03-14 00:00:00,-0.5624444444444422 +2020-03-14 01:00:00,0.8544444444444479 +2020-03-14 02:00:00,2.608555555555541 +2020-03-14 03:00:00,1.6482222222222416 +2020-03-14 04:00:00,0.3651111111111088 +2020-03-14 05:00:00,-0.16522222222222324 +2020-03-14 06:00:00,-0.2985555555555598 +2020-03-14 07:00:00,-0.6788888888888813 +2020-03-14 08:00:00,0.7040000000000025 +2020-03-14 09:00:00,7.547222222222253 +2020-03-14 10:00:00,7.893888888888913 +2020-03-14 11:00:00,13.84266666666663 +2020-03-14 12:00:00,10.19811111111116 +2020-03-14 13:00:00,9.631666666666604 +2020-03-14 14:00:00,11.436666666666552 +2020-03-14 15:00:00,9.961111111111125 +2020-03-14 16:00:00,6.9674444444444505 +2020-03-14 17:00:00,8.47611111111117 +2020-03-14 18:00:00,10.08877777777774 +2020-03-14 19:00:00,10.276444444444365 +2020-03-14 20:00:00,6.557000000000004 +2020-03-14 21:00:00,0.5092222222222316 +2020-03-14 22:00:00,-0.900222222222208 +2020-03-14 23:00:00,-0.9167777777777713 +2020-03-15 00:00:00,-0.9341111111111019 +2020-03-15 01:00:00,-0.9169999999999885 +2020-03-15 02:00:00,-0.9003333333333186 +2020-03-15 03:00:00,-0.9517777777777681 +2020-03-15 04:00:00,-0.8993333333333264 +2020-03-15 05:00:00,-0.9143333333333223 +2020-03-15 06:00:00,-0.9364444444444352 +2020-03-15 07:00:00,4.60266666666666 +2020-03-15 08:00:00,32.317888888888945 +2020-03-15 09:00:00,36.82244444444452 +2020-03-15 10:00:00,32.96744444444442 +2020-03-15 11:00:00,26.18900000000018 +2020-03-15 12:00:00,42.54222222222212 +2020-03-15 13:00:00,18.296999999999887 +2020-03-15 14:00:00,19.002444444444507 +2020-03-15 15:00:00,31.43499999999989 +2020-03-15 16:00:00,69.16366666666664 +2020-03-15 17:00:00,70.49833333333342 +2020-03-15 18:00:00,60.236555555555675 +2020-03-15 19:00:00,34.463000000000015 +2020-03-15 20:00:00,41.97511111111107 +2020-03-15 21:00:00,43.758999999999794 +2020-03-15 22:00:00,33.78744444444445 +2020-03-15 23:00:00,14.499444444444455 +2020-03-16 00:00:00,2.711111111111113 +2020-03-16 01:00:00,0.7074444444444387 +2020-03-16 02:00:00,2.918555555555549 +2020-03-16 03:00:00,7.735222222222251 +2020-03-16 04:00:00,15.594888888888915 +2020-03-16 05:00:00,23.309111111111076 +2020-03-16 06:00:00,19.976888888889082 +2020-03-16 07:00:00,25.494222222222344 +2020-03-16 08:00:00,36.34444444444415 +2020-03-16 09:00:00,46.032333333333504 +2020-03-16 10:00:00,48.36533333333338 +2020-03-16 11:00:00,61.11955555555562 +2020-03-16 12:00:00,56.90055555555571 +2020-03-16 13:00:00,51.92988888888884 +2020-03-16 14:00:00,30.583777777777932 +2020-03-16 15:00:00,38.70100000000001 +2020-03-16 16:00:00,21.66688888888899 +2020-03-16 17:00:00,13.478000000000034 +2020-03-16 18:00:00,11.257555555555584 +2020-03-16 19:00:00,7.3908888888888145 +2020-03-16 20:00:00,7.156111111111061 +2020-03-16 21:00:00,6.213777777777787 +2020-03-16 22:00:00,10.887777777777785 +2020-03-16 23:00:00,9.528333333333334 +2020-03-17 00:00:00,7.379555555555554 +2020-03-17 01:00:00,2.295777777777777 +2020-03-17 02:00:00,0.9373333333333455 +2020-03-17 03:00:00,1.4383333333333466 +2020-03-17 04:00:00,0.06588888888889222 +2020-03-17 05:00:00,-0.41188888888889147 +2020-03-17 06:00:00,2.3696666666666624 +2020-03-17 07:00:00,2.1123333333333383 +2020-03-17 08:00:00,1.1476666666666724 +2020-03-17 09:00:00,-0.2544444444444457 +2020-03-17 10:00:00,-0.8999999999999857 +2020-03-17 11:00:00,-0.8999999999999857 +2020-03-17 12:00:00,-0.8999999999999857 +2020-03-17 13:00:00,-0.882999999999989 +2020-03-17 14:00:00,0.771222222222224 +2020-03-17 15:00:00,6.352444444444434 +2020-03-17 16:00:00,13.015222222222151 +2020-03-17 17:00:00,21.005999999999986 +2020-03-17 18:00:00,28.193222222222087 +2020-03-17 19:00:00,53.166000000000395 +2020-03-17 20:00:00,47.64077777777777 +2020-03-17 21:00:00,48.332111111111054 +2020-03-17 22:00:00,90.21344444444452 +2020-03-17 23:00:00,97.69355555555568 +2020-03-18 00:00:00,66.73111111111116 +2020-03-18 01:00:00,51.634666666666654 +2020-03-18 02:00:00,80.87844444444461 +2020-03-18 03:00:00,110.36022222222215 +2020-03-18 04:00:00,107.65788888888878 +2020-03-18 05:00:00,95.82377777777756 +2020-03-18 06:00:00,93.31711111111099 +2020-03-18 07:00:00,81.27233333333272 +2020-03-18 08:00:00,73.35355555555563 +2020-03-18 09:00:00,79.84233333333314 +2020-03-18 10:00:00,101.16355555555538 +2020-03-18 11:00:00,112.81666666666675 +2020-03-18 12:00:00,93.27155555555488 +2020-03-18 13:00:00,86.9182222222227 +2020-03-18 14:00:00,86.12333333333234 +2020-03-18 15:00:00,88.5195555555552 +2020-03-18 16:00:00,94.35288888888903 +2020-03-18 17:00:00,92.70644444444518 +2020-03-18 18:00:00,93.17933333333345 +2020-03-18 19:00:00,87.76155555555579 +2020-03-18 20:00:00,82.63444444444454 +2020-03-18 21:00:00,73.96588888888886 +2020-03-18 22:00:00,82.25933333333337 +2020-03-18 23:00:00,41.50155555555534 +2020-03-19 00:00:00,38.319555555555624 +2020-03-19 01:00:00,41.70855555555573 +2020-03-19 02:00:00,59.931222222222196 +2020-03-19 03:00:00,62.703111111111085 +2020-03-19 04:00:00,51.114555555555455 +2020-03-19 05:00:00,39.2542222222223 +2020-03-19 06:00:00,30.694333333333276 +2020-03-19 07:00:00,17.109666666666648 +2020-03-19 08:00:00,20.406666666666744 +2020-03-19 09:00:00,26.94799999999997 +2020-03-19 10:00:00,22.47500000000009 +2020-03-19 11:00:00,22.728222222222268 +2020-03-19 12:00:00,24.433555555555756 +2020-03-19 13:00:00,20.397111111111304 +2020-03-19 14:00:00,19.077444444444325 +2020-03-19 15:00:00,22.968444444444316 +2020-03-19 16:00:00,20.669444444444625 +2020-03-19 17:00:00,17.056333333333292 +2020-03-19 18:00:00,22.601333333333304 +2020-03-19 19:00:00,30.13566666666662 +2020-03-19 20:00:00,47.71644444444433 +2020-03-19 21:00:00,44.37055555555551 +2020-03-19 22:00:00,30.483111111111032 +2020-03-19 23:00:00,16.509777777777714 +2020-03-20 00:00:00,3.5974444444444282 +2020-03-20 01:00:00,-0.563666666666662 +2020-03-20 02:00:00,-0.5263333333333358 +2020-03-20 03:00:00,-0.8906666666666551 +2020-03-20 04:00:00,-0.1622222222222125 +2020-03-20 05:00:00,5.801000000000046 +2020-03-20 06:00:00,9.492000000000003 +2020-03-20 07:00:00,18.51522222222221 +2020-03-20 08:00:00,21.07888888888895 +2020-03-20 09:00:00,17.452777777777804 +2020-03-20 10:00:00,17.829111111111015 +2020-03-20 11:00:00,20.192555555555494 +2020-03-20 12:00:00,31.575777777777816 +2020-03-20 13:00:00,32.23633333333318 +2020-03-20 14:00:00,26.130111111110978 +2020-03-20 15:00:00,27.934000000000022 +2020-03-20 16:00:00,29.124666666666727 +2020-03-20 17:00:00,24.15833333333353 +2020-03-20 18:00:00,16.819333333333322 +2020-03-20 19:00:00,19.25000000000005 +2020-03-20 20:00:00,13.570666666666561 +2020-03-20 21:00:00,5.40799999999999 +2020-03-20 22:00:00,12.518666666666578 +2020-03-20 23:00:00,4.50655555555555 +2020-03-21 00:00:00,1.8819999999999846 +2020-03-21 01:00:00,0.8816666666666787 +2020-03-21 02:00:00,1.4610000000000023 +2020-03-21 03:00:00,1.991555555555545 +2020-03-21 04:00:00,-0.8465555555555533 +2020-03-21 05:00:00,0.3406666666666671 +2020-03-21 06:00:00,1.87188888888889 +2020-03-21 07:00:00,-0.8665555555555543 +2020-03-21 08:00:00,-0.7563333333333306 +2020-03-21 09:00:00,-0.4118888888888848 +2020-03-21 10:00:00,24.041444444444476 +2020-03-21 11:00:00,82.17377777777841 +2020-03-21 12:00:00,43.243222222222116 +2020-03-21 13:00:00,19.153111111111127 +2020-03-21 14:00:00,40.34822222222209 +2020-03-21 15:00:00,60.76899999999983 +2020-03-21 16:00:00,50.64433333333351 +2020-03-21 17:00:00,64.28544444444425 +2020-03-21 18:00:00,42.8866666666665 +2020-03-21 19:00:00,28.53877777777793 +2020-03-21 20:00:00,15.184999999999887 +2020-03-21 21:00:00,5.415222222222214 +2020-03-21 22:00:00,0.7090000000000029 +2020-03-21 23:00:00,0.4090000000000043 +2020-03-22 00:00:00,-0.6448888888888872 +2020-03-22 01:00:00,-0.7092222222222204 +2020-03-22 02:00:00,1.4594444444444576 +2020-03-22 03:00:00,6.735000000000051 +2020-03-22 04:00:00,14.1176666666667 +2020-03-22 05:00:00,18.005555555555485 +2020-03-22 06:00:00,21.156111111110906 +2020-03-22 07:00:00,33.10100000000017 +2020-03-22 08:00:00,40.55033333333347 +2020-03-22 09:00:00,51.48888888888895 +2020-03-22 10:00:00,18.686222222222238 +2020-03-22 11:00:00,29.889777777777788 +2020-03-22 12:00:00,41.86633333333338 +2020-03-22 13:00:00,36.355222222222245 +2020-03-22 14:00:00,65.22677777777785 +2020-03-22 15:00:00,99.07977777777774 +2020-03-22 16:00:00,110.02533333333332 +2020-03-22 17:00:00,111.67477777777854 +2020-03-22 18:00:00,110.08811111111136 +2020-03-22 19:00:00,99.14199999999997 +2020-03-22 20:00:00,92.33622222222257 +2020-03-22 21:00:00,75.8642222222222 +2020-03-22 22:00:00,67.77077777777797 +2020-03-22 23:00:00,71.1143333333333 +2020-03-23 00:00:00,73.04877777777773 +2020-03-23 01:00:00,66.13333333333337 +2020-03-23 02:00:00,49.50133333333326 +2020-03-23 03:00:00,43.542444444444435 +2020-03-23 04:00:00,52.49777777777772 +2020-03-23 05:00:00,46.8379999999997 +2020-03-23 06:00:00,50.05977777777773 +2020-03-23 07:00:00,66.49211111111153 +2020-03-23 08:00:00,65.48655555555537 +2020-03-23 09:00:00,53.060222222222286 +2020-03-23 10:00:00,70.76144444444431 +2020-03-23 11:00:00,105.06344444444426 +2020-03-23 12:00:00,112.932 +2020-03-23 13:00:00,83.63611111111138 +2020-03-23 14:00:00,45.52833333333361 +2020-03-23 15:00:00,31.005777777778153 +2020-03-23 16:00:00,19.718000000000078 +2020-03-23 17:00:00,11.872555555555675 +2020-03-23 18:00:00,24.98555555555562 +2020-03-23 19:00:00,47.21266666666653 +2020-03-23 20:00:00,74.51622222222245 +2020-03-23 21:00:00,82.23177777777764 +2020-03-23 22:00:00,92.980222222222 +2020-03-23 23:00:00,84.89699999999998 +2020-03-24 00:00:00,89.18333333333335 +2020-03-24 01:00:00,81.59222222222209 +2020-03-24 02:00:00,77.78977777777757 +2020-03-24 03:00:00,65.88533333333316 +2020-03-24 04:00:00,47.87155555555558 +2020-03-24 05:00:00,63.878555555555536 +2020-03-24 06:00:00,36.25566666666683 +2020-03-24 07:00:00,23.48711111111111 +2020-03-24 08:00:00,18.410999999999923 +2020-03-24 09:00:00,28.210222222222114 +2020-03-24 10:00:00,40.19177777777801 +2020-03-24 11:00:00,34.23877777777775 +2020-03-24 12:00:00,29.75833333333322 +2020-03-24 13:00:00,41.89444444444476 +2020-03-24 14:00:00,49.19566666666633 +2020-03-24 15:00:00,66.18455555555568 +2020-03-24 16:00:00,85.17922222222185 +2020-03-24 17:00:00,80.07511111111076 +2020-03-24 18:00:00,70.84844444444474 +2020-03-24 19:00:00,53.806555555555654 +2020-03-24 20:00:00,24.383777777777745 +2020-03-24 21:00:00,33.54455555555569 +2020-03-24 22:00:00,27.371666666666634 +2020-03-24 23:00:00,25.045555555555506 +2020-03-25 00:00:00,25.881999999999998 +2020-03-25 01:00:00,30.57677777777775 +2020-03-25 02:00:00,30.358222222222178 +2020-03-25 03:00:00,32.175888888888906 +2020-03-25 04:00:00,36.956555555555575 +2020-03-25 05:00:00,45.21588888888902 +2020-03-25 06:00:00,28.834333333333372 +2020-03-25 07:00:00,18.738999999999958 +2020-03-25 08:00:00,9.911888888888946 +2020-03-25 09:00:00,8.90488888888887 +2020-03-25 10:00:00,4.132444444444427 +2020-03-25 11:00:00,0.9901111111111057 +2020-03-25 12:00:00,0.8081111111111132 +2020-03-25 13:00:00,2.616333333333314 +2020-03-25 14:00:00,7.412666666666652 +2020-03-25 15:00:00,7.158111111111172 +2020-03-25 16:00:00,2.6231111111111263 +2020-03-25 17:00:00,6.089555555555535 +2020-03-25 18:00:00,0.4875555555555429 +2020-03-25 19:00:00,-0.9086666666666544 +2020-03-25 20:00:00,0.533888888888887 +2020-03-25 21:00:00,2.153999999999988 +2020-03-25 22:00:00,6.477333333333258 +2020-03-25 23:00:00,8.212444444444369 +2020-03-26 00:00:00,18.58866666666669 +2020-03-26 01:00:00,34.128111111111195 +2020-03-26 02:00:00,29.2473333333334 +2020-03-26 03:00:00,14.051999999999989 +2020-03-26 04:00:00,15.762777777777739 +2020-03-26 05:00:00,16.168888888888866 +2020-03-26 06:00:00,4.580999999999979 +2020-03-26 07:00:00,3.5111111111111137 +2020-03-26 08:00:00,4.49255555555558 +2020-03-26 09:00:00,10.07088888888887 +2020-03-26 10:00:00,14.641000000000194 +2020-03-26 11:00:00,15.52055555555558 +2020-03-26 12:00:00,19.593333333333522 +2020-03-26 13:00:00,17.74966666666666 +2020-03-26 14:00:00,20.361333333333384 +2020-03-26 15:00:00,4.5616666666666505 +2020-03-26 16:00:00,-0.5224444444444467 +2020-03-26 17:00:00,-0.2590000000000026 +2020-03-26 18:00:00,-0.7297777777777698 +2020-03-26 19:00:00,-0.8192222222222282 +2020-03-26 20:00:00,-0.8744444444444356 +2020-03-26 21:00:00,-0.7982222222222184 +2020-03-26 22:00:00,1.2295555555555562 +2020-03-26 23:00:00,10.072111111111132 +2020-03-27 00:00:00,18.908666666666686 +2020-03-27 01:00:00,34.51355555555555 +2020-03-27 02:00:00,42.83355555555543 +2020-03-27 03:00:00,55.21877777777785 +2020-03-27 04:00:00,30.206222222222085 +2020-03-27 05:00:00,48.25211111111109 +2020-03-27 06:00:00,66.022 +2020-03-27 07:00:00,53.927000000000014 +2020-03-27 08:00:00,88.65544444444576 +2020-03-27 09:00:00,88.43599999999914 +2020-03-27 10:00:00,89.22577777777654 +2020-03-27 11:00:00,78.14522222222261 +2020-03-27 12:00:00,73.99466666666743 +2020-03-27 13:00:00,60.38633333333296 +2020-03-27 14:00:00,71.09099999999984 +2020-03-27 15:00:00,80.12200000000018 +2020-03-27 16:00:00,80.25022222222213 +2020-03-27 17:00:00,81.97366666666674 +2020-03-27 18:00:00,91.72455555555496 +2020-03-27 19:00:00,113.89622222222273 +2020-03-27 20:00:00,106.2601111111112 +2020-03-27 21:00:00,80.24544444444439 +2020-03-27 22:00:00,53.44499999999999 +2020-03-27 23:00:00,57.69066666666674 +2020-03-28 00:00:00,67.64999999999996 +2020-03-28 01:00:00,72.32688888888882 +2020-03-28 02:00:00,70.9446666666666 +2020-03-28 03:00:00,70.97722222222225 +2020-03-28 04:00:00,38.63933333333363 +2020-03-28 05:00:00,24.34922222222218 +2020-03-28 06:00:00,14.136666666666875 +2020-03-28 07:00:00,8.560444444444522 +2020-03-28 08:00:00,10.344777777777834 +2020-03-28 09:00:00,1.1555555555555457 +2020-03-28 10:00:00,-0.7382222222222188 +2020-03-28 11:00:00,-0.8857777777777618 +2020-03-28 12:00:00,0.5695555555555548 +2020-03-28 13:00:00,3.0630000000000144 +2020-03-28 14:00:00,6.342888888888945 +2020-03-28 15:00:00,10.54188888888894 +2020-03-28 16:00:00,12.333222222222254 +2020-03-28 17:00:00,15.9176666666665 +2020-03-28 18:00:00,9.302111111111198 +2020-03-28 19:00:00,12.10799999999996 +2020-03-28 20:00:00,20.30677777777774 +2020-03-28 21:00:00,33.90255555555553 +2020-03-28 22:00:00,62.00655555555556 +2020-03-28 23:00:00,60.4892222222224 +2020-03-29 00:00:00,69.45311111111113 +2020-03-29 01:00:00,90.24255555555561 +2020-03-29 02:00:00,94.87844444444451 +2020-03-29 03:00:00,107.1261111111111 +2020-03-29 04:00:00,95.91999999999989 +2020-03-29 05:00:00,78.5881111111111 +2020-03-29 06:00:00,66.6657777777778 +2020-03-29 07:00:00,42.678444444444466 +2020-03-29 08:00:00,31.19588888888922 +2020-03-29 09:00:00,25.104000000000028 +2020-03-29 10:00:00,22.426000000000002 +2020-03-29 11:00:00,21.433777777777728 +2020-03-29 12:00:00,21.954444444444444 +2020-03-29 13:00:00,34.66277777777773 +2020-03-29 14:00:00,29.855888888889087 +2020-03-29 15:00:00,28.6929999999998 +2020-03-29 16:00:00,35.901666666666806 +2020-03-29 17:00:00,20.64677777777758 +2020-03-29 18:00:00,1.4882222222222004 +2020-03-29 19:00:00,-0.7382222222222236 +2020-03-29 20:00:00,-0.7613333333333262 +2020-03-29 21:00:00,-0.46066666666666867 +2020-03-29 22:00:00,7.794999999999983 +2020-03-29 23:00:00,26.828444444444465 +2020-03-30 00:00:00,41.85333333333335 +2020-03-30 01:00:00,51.70188888888884 +2020-03-30 02:00:00,63.78133333333345 +2020-03-30 03:00:00,70.06733333333344 +2020-03-30 04:00:00,74.62888888888858 +2020-03-30 05:00:00,63.667555555555495 +2020-03-30 06:00:00,40.46333333333294 +2020-03-30 07:00:00,11.738888888888813 +2020-03-30 08:00:00,2.088222222222238 +2020-03-30 09:00:00,1.2955555555555616 +2020-03-30 10:00:00,1.5216666666666554 +2020-03-30 11:00:00,11.468666666666623 +2020-03-30 12:00:00,23.154111111111185 +2020-03-30 13:00:00,59.13344444444456 +2020-03-30 14:00:00,83.37344444444442 +2020-03-30 15:00:00,73.23899999999978 +2020-03-30 16:00:00,73.81622222222218 +2020-03-30 17:00:00,85.69655555555575 +2020-03-30 18:00:00,97.87355555555582 +2020-03-30 19:00:00,99.74333333333364 +2020-03-30 20:00:00,94.1227777777772 +2020-03-30 21:00:00,90.41566666666655 +2020-03-30 22:00:00,109.70355555555571 +2020-03-30 23:00:00,61.10922222222231 +2020-03-31 00:00:00,17.292000000000073 +2020-03-31 01:00:00,5.955555555555535 +2020-03-31 02:00:00,53.831333333333404 +2020-03-31 03:00:00,77.09399999999984 +2020-03-31 04:00:00,75.52733333333329 +2020-03-31 05:00:00,55.67488888888867 +2020-03-31 06:00:00,66.49844444444437 +2020-03-31 07:00:00,76.25644444444464 +2020-03-31 08:00:00,96.32566666666646 +2020-03-31 09:00:00,78.75477777777776 +2020-03-31 10:00:00,52.05566666666675 +2020-03-31 11:00:00,57.31044444444428 +2020-03-31 12:00:00,54.048444444444506 +2020-03-31 13:00:00,44.283333333333005 +2020-03-31 14:00:00,40.37411111111125 +2020-03-31 15:00:00,29.48500000000013 +2020-03-31 16:00:00,29.375999999999944 +2020-03-31 17:00:00,18.047999999999888 +2020-03-31 18:00:00,9.328555555555678 +2020-03-31 19:00:00,14.897222222222286 +2020-03-31 20:00:00,20.062777777777846 +2020-03-31 21:00:00,11.963222222222214 +2020-03-31 22:00:00,6.465111111111062 +2020-03-31 23:00:00,4.620222222222185 +2020-04-01 00:00:00,5.651111111111074 +2020-04-01 01:00:00,2.9205555555555596 +2020-04-01 02:00:00,0.20944444444444454 +2020-04-01 03:00:00,-0.7513333333333305 +2020-04-01 04:00:00,-0.9467777777777702 +2020-04-01 05:00:00,-0.8893333333333174 +2020-04-01 06:00:00,0.6821111111111073 +2020-04-01 07:00:00,0.7068888888888875 +2020-04-01 08:00:00,0.7961111111111135 +2020-04-01 09:00:00,2.661000000000003 +2020-04-01 10:00:00,3.6053333333333577 +2020-04-01 11:00:00,9.871777777777778 +2020-04-01 12:00:00,25.90444444444444 +2020-04-01 13:00:00,15.950333333333253 +2020-04-01 14:00:00,34.591888888888775 +2020-04-01 15:00:00,31.925666666666803 +2020-04-01 16:00:00,26.621444444444663 +2020-04-01 17:00:00,23.358999999999938 +2020-04-01 18:00:00,43.25555555555577 +2020-04-01 19:00:00,41.24577777777756 +2020-04-01 20:00:00,65.488222222222 +2020-04-01 21:00:00,58.36022222222243 +2020-04-01 22:00:00,41.09733333333315 +2020-04-01 23:00:00,43.60033333333334 +2020-04-02 00:00:00,51.50233333333347 +2020-04-02 01:00:00,68.68088888888887 +2020-04-02 02:00:00,92.2828888888893 +2020-04-02 03:00:00,80.00755555555551 +2020-04-02 04:00:00,41.11866666666662 +2020-04-02 05:00:00,12.885333333333314 +2020-04-02 06:00:00,5.631000000000012 +2020-04-02 07:00:00,1.844333333333328 +2020-04-02 08:00:00,1.6402222222222185 +2020-04-02 09:00:00,-0.3758888888888863 +2020-04-02 10:00:00,29.01122222222225 +2020-04-02 11:00:00,85.29688888888883 +2020-04-02 12:00:00,107.648111111111 +2020-04-02 13:00:00,49.27677777777769 +2020-04-02 14:00:00,59.205 +2020-04-02 15:00:00,49.19455555555535 +2020-04-02 16:00:00,26.511888888888826 +2020-04-02 17:00:00,27.656666666666965 +2020-04-02 18:00:00,29.064555555555316 +2020-04-02 19:00:00,25.19944444444454 +2020-04-02 20:00:00,39.65666666666662 +2020-04-02 21:00:00,31.56022222222236 +2020-04-02 22:00:00,36.72611111111119 +2020-04-02 23:00:00,44.926222222222286 +2020-04-03 00:00:00,45.1168888888889 +2020-04-03 01:00:00,47.05477777777772 +2020-04-03 02:00:00,45.91599999999991 +2020-04-03 03:00:00,36.69977777777772 +2020-04-03 04:00:00,20.66233333333338 +2020-04-03 05:00:00,13.13000000000006 +2020-04-03 06:00:00,12.884666666666627 +2020-04-03 07:00:00,6.326111111111026 +2020-04-03 08:00:00,1.2268888888888854 +2020-04-03 09:00:00,0.5208888888888937 +2020-04-03 10:00:00,4.0623333333333465 +2020-04-03 11:00:00,5.2714444444444695 +2020-04-03 12:00:00,8.06155555555555 +2020-04-03 13:00:00,1.9325555555555423 +2020-04-03 14:00:00,5.1338888888888565 +2020-04-03 15:00:00,5.353777777777836 +2020-04-03 16:00:00,4.755111111111136 +2020-04-03 17:00:00,3.432666666666709 +2020-04-03 18:00:00,4.925666666666663 +2020-04-03 19:00:00,17.378333333333313 +2020-04-03 20:00:00,23.199111111111055 +2020-04-03 21:00:00,39.467555555555585 +2020-04-03 22:00:00,33.689333333333444 +2020-04-03 23:00:00,16.96899999999995 +2020-04-04 00:00:00,8.639555555555576 +2020-04-04 01:00:00,3.5079999999999827 +2020-04-04 02:00:00,3.24755555555556 +2020-04-04 03:00:00,4.487444444444436 +2020-04-04 04:00:00,4.967222222222265 +2020-04-04 05:00:00,10.10733333333329 +2020-04-04 06:00:00,15.738999999999976 +2020-04-04 07:00:00,21.52188888888901 +2020-04-04 08:00:00,26.971777777777753 +2020-04-04 09:00:00,39.47388888888889 +2020-04-04 10:00:00,50.4532222222223 +2020-04-04 11:00:00,54.87744444444468 +2020-04-04 12:00:00,59.9435555555555 +2020-04-04 13:00:00,56.75433333333344 +2020-04-04 14:00:00,52.98188888888917 +2020-04-04 15:00:00,64.59077777777784 +2020-04-04 16:00:00,70.20322222222212 +2020-04-04 17:00:00,65.55511111111127 +2020-04-04 18:00:00,48.06866666666665 +2020-04-04 19:00:00,42.808888888888895 +2020-04-04 20:00:00,28.83555555555547 +2020-04-04 21:00:00,45.58399999999992 +2020-04-04 22:00:00,28.138555555555726 +2020-04-04 23:00:00,30.617444444444445 +2020-04-05 00:00:00,45.73077777777789 +2020-04-05 01:00:00,67.48955555555563 +2020-04-05 02:00:00,36.19099999999996 +2020-04-05 03:00:00,28.006888888889105 +2020-04-05 04:00:00,18.327333333333346 +2020-04-05 05:00:00,50.04211111111121 +2020-04-05 06:00:00,82.8775555555557 +2020-04-05 07:00:00,84.50055555555568 +2020-04-05 08:00:00,92.07511111111116 +2020-04-05 09:00:00,98.17077777777787 +2020-04-05 10:00:00,86.86566666666668 +2020-04-05 11:00:00,94.52122222222262 +2020-04-05 12:00:00,90.29100000000068 +2020-04-05 13:00:00,103.66388888888888 +2020-04-05 14:00:00,103.81888888888848 +2020-04-05 15:00:00,117.42577777777741 +2020-04-05 16:00:00,116.30688888888871 +2020-04-05 17:00:00,110.39666666666628 +2020-04-05 18:00:00,104.1543333333331 +2020-04-05 19:00:00,87.36066666666642 +2020-04-05 20:00:00,80.32566666666662 +2020-04-05 21:00:00,102.49711111111114 +2020-04-05 22:00:00,116.49355555555584 +2020-04-05 23:00:00,104.20844444444408 +2020-04-06 00:00:00,83.62488888888899 +2020-04-06 01:00:00,66.92444444444426 +2020-04-06 02:00:00,85.55955555555549 +2020-04-06 03:00:00,74.47966666666655 +2020-04-06 04:00:00,56.01333333333358 +2020-04-06 05:00:00,57.19166666666661 +2020-04-06 06:00:00,9.547333333333372 +2020-04-06 07:00:00,17.185666666666545 +2020-04-06 08:00:00,37.83322222222233 +2020-04-06 09:00:00,55.546444444444155 +2020-04-06 10:00:00,3.847111111111138 +2020-04-06 11:00:00,0.8947777777777727 +2020-04-06 12:00:00,9.57611111111112 +2020-04-06 13:00:00,21.496888888889046 +2020-04-06 14:00:00,17.760333333333342 +2020-04-06 15:00:00,12.30166666666666 +2020-04-06 16:00:00,25.4535555555555 +2020-04-06 17:00:00,32.85955555555543 +2020-04-06 18:00:00,25.563666666666794 +2020-04-06 19:00:00,29.619222222222003 +2020-04-06 20:00:00,31.678333333333303 +2020-04-06 21:00:00,28.033222222222136 +2020-04-06 22:00:00,36.20500000000017 +2020-04-06 23:00:00,47.158111111111054 +2020-04-07 00:00:00,88.01955555555556 +2020-04-07 01:00:00,100.88866666666686 +2020-04-07 02:00:00,87.38611111111122 +2020-04-07 03:00:00,87.99899999999991 +2020-04-07 04:00:00,93.853666666667 +2020-04-07 05:00:00,96.98599999999924 +2020-04-07 06:00:00,102.04222222222224 +2020-04-07 07:00:00,98.70866666666666 +2020-04-07 08:00:00,108.26688888888896 +2020-04-07 09:00:00,108.49055555555559 +2020-04-07 10:00:00,109.24711111111098 +2020-04-07 11:00:00,116.9283333333334 +2020-04-07 12:00:00,120.61899999999969 +2020-04-07 13:00:00,120.60877777777836 +2020-04-07 14:00:00,116.30822222222199 +2020-04-07 15:00:00,92.95877777777794 +2020-04-07 16:00:00,98.49666666666685 +2020-04-07 17:00:00,115.23055555555563 +2020-04-07 18:00:00,123.0578888888891 +2020-04-07 19:00:00,122.57411111111102 +2020-04-07 20:00:00,115.57155555555576 +2020-04-07 21:00:00,89.79388888888765 +2020-04-07 22:00:00,84.5119999999996 +2020-04-07 23:00:00,83.97933333333249 +2020-04-08 00:00:00,81.65444444444438 +2020-04-08 01:00:00,79.87244444444381 +2020-04-08 02:00:00,80.11677777777805 +2020-04-08 03:00:00,78.19733333333355 +2020-04-08 04:00:00,82.47688888888919 +2020-04-08 05:00:00,85.28388888889029 +2020-04-08 06:00:00,86.4563333333334 +2020-04-08 07:00:00,86.33644444444468 +2020-04-08 08:00:00,85.55788888888948 +2020-04-08 09:00:00,87.12999999999921 +2020-04-08 10:00:00,85.57766666666645 +2020-04-08 11:00:00,87.91744444444564 +2020-04-08 12:00:00,86.16144444444497 +2020-04-08 13:00:00,86.74299999999994 +2020-04-08 14:00:00,86.83066666666763 +2020-04-08 15:00:00,84.68377777777708 +2020-04-08 16:00:00,87.01722222222226 +2020-04-08 17:00:00,87.11400000000025 +2020-04-08 18:00:00,87.17555555555553 +2020-04-08 19:00:00,89.323222222223 +2020-04-08 20:00:00,90.95233333333327 +2020-04-08 21:00:00,92.109222222223 +2020-04-08 22:00:00,82.19655555555617 +2020-04-08 23:00:00,78.41166666666658 +2020-04-09 00:00:00,80.47322222222208 +2020-04-09 01:00:00,83.91433333333357 +2020-04-09 02:00:00,87.26566666666662 +2020-04-09 03:00:00,88.51433333333252 +2020-04-09 04:00:00,97.19577777777808 +2020-04-09 05:00:00,95.38500000000013 +2020-04-09 06:00:00,69.0404444444444 +2020-04-09 07:00:00,54.25677777777753 +2020-04-09 08:00:00,39.88677777777777 +2020-04-09 09:00:00,41.62688888888904 +2020-04-09 10:00:00,39.690111111111165 +2020-04-09 11:00:00,29.37677777777795 +2020-04-09 12:00:00,19.730444444444373 +2020-04-09 13:00:00,10.104444444444347 +2020-04-09 14:00:00,2.5105555555555568 +2020-04-09 15:00:00,1.147888888888892 +2020-04-09 16:00:00,2.8008888888888985 +2020-04-09 17:00:00,1.771111111111108 +2020-04-09 18:00:00,-0.3671111111111122 +2020-04-09 19:00:00,-0.9011111111110969 +2020-04-09 20:00:00,-0.8917777777777657 +2020-04-09 21:00:00,-0.8827777777777613 +2020-04-09 22:00:00,-0.9256666666666588 +2020-04-09 23:00:00,-0.8612222222222136 +2020-04-10 00:00:00,-0.792555555555549 +2020-04-10 01:00:00,0.39377777777777845 +2020-04-10 02:00:00,1.1558888888888983 +2020-04-10 03:00:00,0.23522222222221942 +2020-04-10 04:00:00,1.3228888888888886 +2020-04-10 05:00:00,5.109666666666659 +2020-04-10 06:00:00,3.6656666666667226 +2020-04-10 07:00:00,0.83055555555555 +2020-04-10 08:00:00,1.1864444444444397 +2020-04-10 09:00:00,-0.26866666666666583 +2020-04-10 10:00:00,-0.8999999999999857 +2020-04-10 11:00:00,-0.2955555555555562 +2020-04-10 12:00:00,1.897000000000008 +2020-04-10 13:00:00,4.663666666666668 +2020-04-10 14:00:00,6.088222222222218 +2020-04-10 15:00:00,10.055222222222197 +2020-04-10 16:00:00,10.914111111111186 +2020-04-10 17:00:00,10.605000000000109 +2020-04-10 18:00:00,10.452111111111131 +2020-04-10 19:00:00,10.026888888888793 +2020-04-10 20:00:00,8.709888888888818 +2020-04-10 21:00:00,12.530777777777764 +2020-04-10 22:00:00,13.081777777777837 +2020-04-10 23:00:00,7.523666666666597 +2020-04-11 00:00:00,4.351666666666677 +2020-04-11 01:00:00,-0.19922222222222383 +2020-04-11 02:00:00,-0.5396666666666654 +2020-04-11 03:00:00,-0.5345555555555567 +2020-04-11 04:00:00,0.829999999999998 +2020-04-11 05:00:00,3.993333333333322 +2020-04-11 06:00:00,14.067555555555396 +2020-04-11 07:00:00,17.91188888888895 +2020-04-11 08:00:00,26.534333333333297 +2020-04-11 09:00:00,24.030111111110973 +2020-04-11 10:00:00,24.339666666666705 +2020-04-11 11:00:00,24.365777777777716 +2020-04-11 12:00:00,21.84555555555541 +2020-04-11 13:00:00,29.543777777777667 +2020-04-11 14:00:00,34.494666666666674 +2020-04-11 15:00:00,32.62955555555543 +2020-04-11 16:00:00,25.651777777777745 +2020-04-11 17:00:00,32.01311111111122 +2020-04-11 18:00:00,32.28077777777789 +2020-04-11 19:00:00,29.236888888889 +2020-04-11 20:00:00,31.971333333333508 +2020-04-11 21:00:00,18.863333333333212 +2020-04-11 22:00:00,4.000444444444461 +2020-04-11 23:00:00,6.970222222222213 +2020-04-12 00:00:00,4.637666666666703 +2020-04-12 01:00:00,6.408222222222269 +2020-04-12 02:00:00,8.027444444444432 +2020-04-12 03:00:00,2.355666666666673 +2020-04-12 04:00:00,3.3898888888888696 +2020-04-12 05:00:00,4.1367777777777475 +2020-04-12 06:00:00,1.1066666666666796 +2020-04-12 07:00:00,5.224000000000025 +2020-04-12 08:00:00,9.376888888888903 +2020-04-12 09:00:00,13.183999999999907 +2020-04-12 10:00:00,22.17066666666663 +2020-04-12 11:00:00,32.933555555555614 +2020-04-12 12:00:00,23.043222222222255 +2020-04-12 13:00:00,23.06255555555556 +2020-04-12 14:00:00,30.91522222222218 +2020-04-12 15:00:00,38.56866666666673 +2020-04-12 16:00:00,51.591555555555566 +2020-04-12 17:00:00,85.48044444444444 +2020-04-12 18:00:00,88.28488888888857 +2020-04-12 19:00:00,85.92944444444454 +2020-04-12 20:00:00,78.93755555555543 +2020-04-12 21:00:00,73.18955555555571 +2020-04-12 22:00:00,74.27455555555562 +2020-04-12 23:00:00,76.13644444444446 +2020-04-13 00:00:00,73.04600000000023 +2020-04-13 01:00:00,63.86666666666671 +2020-04-13 02:00:00,54.89644444444441 +2020-04-13 03:00:00,24.457222222222175 +2020-04-13 04:00:00,20.6124444444445 +2020-04-13 05:00:00,59.91766666666671 +2020-04-13 06:00:00,64.69411111111083 +2020-04-13 07:00:00,77.29333333333217 +2020-04-13 08:00:00,74.1748888888889 +2020-04-13 09:00:00,61.008111111111134 +2020-04-13 10:00:00,79.77911111111145 +2020-04-13 11:00:00,77.06355555555604 +2020-04-13 12:00:00,77.77011111111109 +2020-04-13 13:00:00,78.13466666666659 +2020-04-13 14:00:00,88.90711111111149 +2020-04-13 15:00:00,117.38599999999991 +2020-04-13 16:00:00,95.1362222222225 +2020-04-13 17:00:00,38.31022222222208 +2020-04-13 18:00:00,25.845555555555592 +2020-04-13 19:00:00,85.18599999999951 +2020-04-13 20:00:00,83.61655555555546 +2020-04-13 21:00:00,75.65877777777753 +2020-04-13 22:00:00,74.06644444444532 +2020-04-13 23:00:00,74.07488888888895 +2020-04-14 00:00:00,39.093111111111 +2020-04-14 01:00:00,98.2526666666662 +2020-04-14 02:00:00,87.16122222222162 +2020-04-14 03:00:00,75.52711111111068 +2020-04-14 04:00:00,76.69922222222193 +2020-04-14 05:00:00,83.23733333333308 +2020-04-14 06:00:00,87.63899999999983 +2020-04-14 07:00:00,74.57711111111121 +2020-04-14 08:00:00,74.09988888888883 +2020-04-14 09:00:00,94.56022222222222 +2020-04-14 10:00:00,99.76444444444456 +2020-04-14 11:00:00,92.90577777777776 +2020-04-14 12:00:00,87.7771111111113 +2020-04-14 13:00:00,78.84855555555572 +2020-04-14 14:00:00,75.39911111111097 +2020-04-14 15:00:00,58.420222222222144 +2020-04-14 16:00:00,57.96844444444397 +2020-04-14 17:00:00,42.04655555555534 +2020-04-14 18:00:00,39.47800000000014 +2020-04-14 19:00:00,40.889666666666656 +2020-04-14 20:00:00,41.48188888888894 +2020-04-14 21:00:00,47.45211111111121 +2020-04-14 22:00:00,55.85966666666646 +2020-04-14 23:00:00,48.593666666666714 +2020-04-15 00:00:00,45.04555555555562 +2020-04-15 01:00:00,53.60122222222242 +2020-04-15 02:00:00,66.79155555555559 +2020-04-15 03:00:00,64.88255555555534 +2020-04-15 04:00:00,53.66188888888903 +2020-04-15 05:00:00,53.244888888888624 +2020-04-15 06:00:00,44.11800000000003 +2020-04-15 07:00:00,50.61677777777816 +2020-04-15 08:00:00,88.27433333333384 +2020-04-15 09:00:00,89.15199999999967 +2020-04-15 10:00:00,88.92611111111145 +2020-04-15 11:00:00,91.79755555555586 +2020-04-15 12:00:00,108.97866666666728 +2020-04-15 13:00:00,105.75155555555526 +2020-04-15 14:00:00,86.13555555555627 +2020-04-15 15:00:00,84.99766666666665 +2020-04-15 16:00:00,91.79322222222193 +2020-04-15 17:00:00,83.49488888888848 +2020-04-15 18:00:00,87.59322222222214 +2020-04-15 19:00:00,97.71677777777745 +2020-04-15 20:00:00,86.4722222222219 +2020-04-15 21:00:00,76.62788888888866 +2020-04-15 22:00:00,43.38511111111149 +2020-04-15 23:00:00,64.66866666666667 +2020-04-16 00:00:00,60.77077777777809 +2020-04-16 01:00:00,83.03011111111161 +2020-04-16 02:00:00,74.99411111111077 +2020-04-16 03:00:00,75.97299999999987 +2020-04-16 04:00:00,82.08100000000017 +2020-04-16 05:00:00,86.1795555555557 +2020-04-16 06:00:00,75.31044444444451 +2020-04-16 07:00:00,64.78299999999962 +2020-04-16 08:00:00,61.049222222222504 +2020-04-16 09:00:00,44.13399999999992 +2020-04-16 10:00:00,38.209777777777965 +2020-04-16 11:00:00,30.412999999999958 +2020-04-16 12:00:00,31.106777777777673 +2020-04-16 13:00:00,46.30466666666659 +2020-04-16 14:00:00,41.49677777777792 +2020-04-16 15:00:00,27.042999999999882 +2020-04-16 16:00:00,10.724666666666684 +2020-04-16 17:00:00,12.3017777777777 +2020-04-16 18:00:00,6.824888888888899 +2020-04-16 19:00:00,5.499999999999984 +2020-04-16 20:00:00,1.842888888888927 +2020-04-16 21:00:00,0.488333333333333 +2020-04-16 22:00:00,3.890444444444429 +2020-04-16 23:00:00,15.212000000000112 +2020-04-17 00:00:00,13.801222222222098 +2020-04-17 01:00:00,4.290777777777729 +2020-04-17 02:00:00,11.054333333333316 +2020-04-17 03:00:00,11.70699999999991 +2020-04-17 04:00:00,16.097888888888804 +2020-04-17 05:00:00,14.572444444444471 +2020-04-17 06:00:00,2.8122222222222173 +2020-04-17 07:00:00,1.8223333333333505 +2020-04-17 08:00:00,-0.9085555555555411 +2020-04-17 09:00:00,-0.6666666666666572 +2020-04-17 10:00:00,-0.5638888888888848 +2020-04-17 11:00:00,-0.8999999999999857 +2020-04-17 12:00:00,-0.8999999999999857 +2020-04-17 13:00:00,-0.8999999999999857 +2020-04-17 14:00:00,-0.8807777777777667 +2020-04-17 15:00:00,-0.8767777777777639 +2020-04-17 16:00:00,-0.8486666666666601 +2020-04-17 17:00:00,-0.8572222222222189 +2020-04-17 18:00:00,-0.8472222222222121 +2020-04-17 19:00:00,-0.0062222222222228455 +2020-04-17 20:00:00,1.1745555555555651 +2020-04-17 21:00:00,3.102555555555551 +2020-04-17 22:00:00,4.103777777777835 +2020-04-17 23:00:00,6.072222222222229 +2020-04-18 00:00:00,10.955555555555543 +2020-04-18 01:00:00,12.794000000000171 +2020-04-18 02:00:00,11.726444444444423 +2020-04-18 03:00:00,8.638333333333309 +2020-04-18 04:00:00,8.61466666666671 +2020-04-18 05:00:00,7.233444444444483 +2020-04-18 06:00:00,5.023444444444447 +2020-04-18 07:00:00,7.695666666666747 +2020-04-18 08:00:00,3.405777777777758 +2020-04-18 09:00:00,1.2188888888888842 +2020-04-18 10:00:00,2.3205555555555506 +2020-04-18 11:00:00,6.265666666666663 +2020-04-18 12:00:00,28.78133333333328 +2020-04-18 13:00:00,76.89822222222234 +2020-04-18 14:00:00,83.67488888888892 +2020-04-18 15:00:00,79.93755555555538 +2020-04-18 16:00:00,66.32444444444435 +2020-04-18 17:00:00,74.19455555555544 +2020-04-18 18:00:00,88.81744444444458 +2020-04-18 19:00:00,97.75277777777791 +2020-04-18 20:00:00,95.57588888888883 +2020-04-18 21:00:00,85.41577777777805 +2020-04-18 22:00:00,95.8985555555556 +2020-04-18 23:00:00,86.06066666666622 +2020-04-19 00:00:00,91.02811111111123 +2020-04-19 01:00:00,89.14577777777778 +2020-04-19 02:00:00,83.92866666666662 +2020-04-19 03:00:00,68.779 +2020-04-19 04:00:00,52.955222222221764 +2020-04-19 05:00:00,36.12055555555556 +2020-04-19 06:00:00,49.21844444444471 +2020-04-19 07:00:00,75.9340000000006 +2020-04-19 08:00:00,74.02066666666654 +2020-04-19 09:00:00,48.980333333333604 +2020-04-19 10:00:00,20.91077777777788 +2020-04-19 11:00:00,14.865222222222071 +2020-04-19 12:00:00,17.101222222222226 +2020-04-19 13:00:00,19.26477777777764 +2020-04-19 14:00:00,17.601444444444553 +2020-04-19 15:00:00,10.414444444444456 +2020-04-19 16:00:00,4.38344444444445 +2020-04-19 17:00:00,3.814888888888901 +2020-04-19 18:00:00,6.992555555555521 +2020-04-19 19:00:00,4.915555555555545 +2020-04-19 20:00:00,7.334111111111066 +2020-04-19 21:00:00,7.141555555555569 +2020-04-19 22:00:00,8.031111111111121 +2020-04-19 23:00:00,5.824666666666597 +2020-04-20 00:00:00,13.03855555555562 +2020-04-20 01:00:00,15.431444444444406 +2020-04-20 02:00:00,18.441666666666663 +2020-04-20 03:00:00,22.25466666666662 +2020-04-20 04:00:00,20.71266666666668 +2020-04-20 05:00:00,20.019555555555623 +2020-04-20 06:00:00,21.015777777777753 +2020-04-20 07:00:00,15.214222222222302 +2020-04-20 08:00:00,13.516444444444621 +2020-04-20 09:00:00,6.8428888888889015 +2020-04-20 10:00:00,8.97433333333335 +2020-04-20 11:00:00,7.022888888888955 +2020-04-20 12:00:00,7.353111111111032 +2020-04-20 13:00:00,3.375222222222225 +2020-04-20 14:00:00,4.774555555555529 +2020-04-20 15:00:00,1.7055555555555646 +2020-04-20 16:00:00,1.74644444444445 +2020-04-20 17:00:00,6.646666666666703 +2020-04-20 18:00:00,11.107777777777889 +2020-04-20 19:00:00,8.816777777777723 +2020-04-20 20:00:00,7.310000000000006 +2020-04-20 21:00:00,7.200555555555573 +2020-04-20 22:00:00,4.239777777777741 +2020-04-20 23:00:00,0.40722222222221993 +2020-04-21 00:00:00,-0.5987777777777766 +2020-04-21 01:00:00,-0.8938888888888779 +2020-04-21 02:00:00,-0.8806666666666492 +2020-04-21 03:00:00,-0.8379999999999851 +2020-04-21 04:00:00,-0.3749999999999956 +2020-04-21 05:00:00,4.292444444444433 +2020-04-21 06:00:00,14.960333333333462 +2020-04-21 07:00:00,19.579222222222107 +2020-04-21 08:00:00,22.195555555555483 +2020-04-21 09:00:00,29.165555555555613 +2020-04-21 10:00:00,34.85355555555544 +2020-04-21 11:00:00,24.217222222222233 +2020-04-21 12:00:00,18.565333333333314 +2020-04-21 13:00:00,13.059666666666777 +2020-04-21 14:00:00,12.319555555555606 +2020-04-21 15:00:00,7.430333333333285 +2020-04-21 16:00:00,5.272222222222287 +2020-04-21 17:00:00,5.014555555555579 +2020-04-21 18:00:00,6.0836666666666686 +2020-04-21 19:00:00,5.092333333333288 +2020-04-21 20:00:00,4.7764444444443965 +2020-04-21 21:00:00,6.751222222222184 +2020-04-21 22:00:00,11.898555555555502 +2020-04-21 23:00:00,12.04355555555554 +2020-04-22 00:00:00,6.054777777777732 +2020-04-22 01:00:00,0.9859999999999958 +2020-04-22 02:00:00,-0.4301111111111132 +2020-04-22 03:00:00,-0.5795555555555585 +2020-04-22 04:00:00,2.017444444444439 +2020-04-22 05:00:00,8.537777777777787 +2020-04-22 06:00:00,19.35955555555559 +2020-04-22 07:00:00,17.65333333333323 +2020-04-22 08:00:00,16.283111111111058 +2020-04-22 09:00:00,12.021888888888903 +2020-04-22 10:00:00,4.986333333333368 +2020-04-22 11:00:00,12.062222222222122 +2020-04-22 12:00:00,18.520000000000103 +2020-04-22 13:00:00,26.5426666666668 +2020-04-22 14:00:00,20.854777777777855 +2020-04-22 15:00:00,10.685777777777734 +2020-04-22 16:00:00,8.921666666666754 +2020-04-22 17:00:00,6.247888888888909 +2020-04-22 18:00:00,5.7074444444445 +2020-04-22 19:00:00,3.438555555555522 +2020-04-22 20:00:00,7.519333333333344 +2020-04-22 21:00:00,7.807444444444408 +2020-04-22 22:00:00,6.281777777777817 +2020-04-22 23:00:00,1.8366666666666778 +2020-04-23 00:00:00,0.4591111111111082 +2020-04-23 01:00:00,1.1526666666666654 +2020-04-23 02:00:00,0.005777777777779474 +2020-04-23 03:00:00,-0.4068888888888868 +2020-04-23 04:00:00,-0.6574444444444483 +2020-04-23 05:00:00,6.109666666666665 +2020-04-23 06:00:00,15.671222222222356 +2020-04-23 07:00:00,14.977444444444455 +2020-04-23 08:00:00,19.75299999999993 +2020-04-23 09:00:00,16.1403333333333 +2020-04-23 10:00:00,8.83066666666671 +2020-04-23 11:00:00,16.734444444444392 +2020-04-23 12:00:00,16.65733333333342 +2020-04-23 13:00:00,15.004444444444491 +2020-04-23 14:00:00,17.702444444444435 +2020-04-23 15:00:00,14.402333333333258 +2020-04-23 16:00:00,10.455111111110952 +2020-04-23 17:00:00,12.18844444444445 +2020-04-23 18:00:00,12.521888888889036 +2020-04-23 19:00:00,10.165555555555626 +2020-04-23 20:00:00,5.907111111111105 +2020-04-23 21:00:00,2.7790000000000012 +2020-04-23 22:00:00,4.379666666666654 +2020-04-23 23:00:00,8.490999999999985 +2020-04-24 00:00:00,14.913111111111224 +2020-04-24 01:00:00,16.245999999999984 +2020-04-24 02:00:00,18.93755555555549 +2020-04-24 03:00:00,22.1675555555556 +2020-04-24 04:00:00,22.452222222222098 +2020-04-24 05:00:00,15.817333333333403 +2020-04-24 06:00:00,9.512999999999943 +2020-04-24 07:00:00,18.94566666666664 +2020-04-24 08:00:00,54.28422222222215 +2020-04-24 09:00:00,78.69966666666676 +2020-04-24 10:00:00,92.82855555555554 +2020-04-24 11:00:00,83.7478888888891 +2020-04-24 12:00:00,71.55166666666685 +2020-04-24 13:00:00,69.7621111111113 +2020-04-24 14:00:00,58.85855555555534 +2020-04-24 15:00:00,50.36888888888908 +2020-04-24 16:00:00,55.607000000000134 +2020-04-24 17:00:00,68.39788888888877 +2020-04-24 18:00:00,67.8843333333336 +2020-04-24 19:00:00,70.73566666666672 +2020-04-24 20:00:00,48.23122222222229 +2020-04-24 21:00:00,24.204111111111196 +2020-04-24 22:00:00,18.58177777777791 +2020-04-24 23:00:00,20.973333333333475 +2020-04-25 00:00:00,17.4052222222222 +2020-04-25 01:00:00,32.981555555555545 +2020-04-25 02:00:00,25.476999999999943 +2020-04-25 03:00:00,18.612666666666843 +2020-04-25 04:00:00,11.85633333333324 +2020-04-25 05:00:00,11.902999999999984 +2020-04-25 06:00:00,25.39977777777785 +2020-04-25 07:00:00,42.26188888888892 +2020-04-25 08:00:00,60.72066666666656 +2020-04-25 09:00:00,69.96555555555575 +2020-04-25 10:00:00,63.18511111111094 +2020-04-25 11:00:00,61.85422222222216 +2020-04-25 12:00:00,69.25522222222233 +2020-04-25 13:00:00,75.84577777777764 +2020-04-25 14:00:00,88.48266666666643 +2020-04-25 15:00:00,89.16688888888889 +2020-04-25 16:00:00,67.3074444444444 +2020-04-25 17:00:00,53.6588888888889 +2020-04-25 18:00:00,63.30155555555547 +2020-04-25 19:00:00,90.45077777777776 +2020-04-25 20:00:00,85.94188888888917 +2020-04-25 21:00:00,66.06200000000004 +2020-04-25 22:00:00,75.02577777777772 +2020-04-25 23:00:00,85.85844444444461 +2020-04-26 00:00:00,85.78266666666754 +2020-04-26 01:00:00,56.85799999999988 +2020-04-26 02:00:00,108.89855555555513 +2020-04-26 03:00:00,106.23744444444431 +2020-04-26 04:00:00,105.24311111111167 +2020-04-26 05:00:00,113.86966666666594 +2020-04-26 06:00:00,107.22355555555549 +2020-04-26 07:00:00,104.68633333333311 +2020-04-26 08:00:00,120.7284444444443 +2020-04-26 09:00:00,117.4188888888883 +2020-04-26 10:00:00,125.04211111111086 +2020-04-26 11:00:00,124.65566666666709 +2020-04-26 12:00:00,122.40566666666669 +2020-04-26 13:00:00,111.07522222222227 +2020-04-26 14:00:00,87.7607777777777 +2020-04-26 15:00:00,62.88188888888925 +2020-04-26 16:00:00,33.43011111111125 +2020-04-26 17:00:00,38.45077777777753 +2020-04-26 18:00:00,41.99655555555568 +2020-04-26 19:00:00,56.5517777777777 +2020-04-26 20:00:00,77.43899999999985 +2020-04-26 21:00:00,79.15033333333331 +2020-04-26 22:00:00,100.3036666666665 +2020-04-26 23:00:00,115.96922222222216 +2020-04-27 00:00:00,117.70433333333284 +2020-04-27 01:00:00,116.389111111111 +2020-04-27 02:00:00,115.77622222222232 +2020-04-27 03:00:00,119.44311111111125 +2020-04-27 04:00:00,118.12000000000018 +2020-04-27 05:00:00,119.93822222222205 +2020-04-27 06:00:00,121.5215555555555 +2020-04-27 07:00:00,112.48766666666704 +2020-04-27 08:00:00,118.18099999999981 +2020-04-27 09:00:00,118.70111111111105 +2020-04-27 10:00:00,116.1616666666666 +2020-04-27 11:00:00,66.8148888888889 +2020-04-27 12:00:00,46.86077777777811 +2020-04-27 13:00:00,51.77533333333349 +2020-04-27 14:00:00,33.07633333333325 +2020-04-27 15:00:00,26.03544444444438 +2020-04-27 16:00:00,36.328777777777994 +2020-04-27 17:00:00,28.274666666666636 +2020-04-27 18:00:00,30.24911111111096 +2020-04-27 19:00:00,32.13100000000006 +2020-04-27 20:00:00,20.53588888888882 +2020-04-27 21:00:00,19.879777777777765 +2020-04-27 22:00:00,26.598888888888876 +2020-04-27 23:00:00,32.29944444444442 +2020-04-28 00:00:00,36.23855555555553 +2020-04-28 01:00:00,46.62955555555564 +2020-04-28 02:00:00,45.378666666666696 +2020-04-28 03:00:00,34.938000000000024 +2020-04-28 04:00:00,26.408666666666555 +2020-04-28 05:00:00,39.05111111111105 +2020-04-28 06:00:00,36.79744444444448 +2020-04-28 07:00:00,23.70100000000013 +2020-04-28 08:00:00,21.858222222222224 +2020-04-28 09:00:00,9.888222222222176 +2020-04-28 10:00:00,12.18533333333345 +2020-04-28 11:00:00,16.26344444444424 +2020-04-28 12:00:00,12.875111111111114 +2020-04-28 13:00:00,4.293333333333348 +2020-04-28 14:00:00,7.6817777777778105 +2020-04-28 15:00:00,9.752333333333356 +2020-04-28 16:00:00,10.628666666666641 +2020-04-28 17:00:00,16.983000000000118 +2020-04-28 18:00:00,23.455888888889092 +2020-04-28 19:00:00,34.77422222222219 +2020-04-28 20:00:00,30.71033333333333 +2020-04-28 21:00:00,30.328444444444475 +2020-04-28 22:00:00,39.51277777777781 +2020-04-28 23:00:00,46.02277777777782 +2020-04-29 00:00:00,47.31922222222231 +2020-04-29 01:00:00,44.463555555555615 +2020-04-29 02:00:00,40.14733333333297 +2020-04-29 03:00:00,50.605888888888956 +2020-04-29 04:00:00,49.749888888888954 +2020-04-29 05:00:00,53.8963333333333 +2020-04-29 06:00:00,47.52166666666665 +2020-04-29 07:00:00,42.51366666666668 +2020-04-29 08:00:00,48.44511111111077 +2020-04-29 09:00:00,34.68922222222223 +2020-04-29 10:00:00,28.299999999999855 +2020-04-29 11:00:00,34.32566666666679 +2020-04-29 12:00:00,41.37233333333332 +2020-04-29 13:00:00,30.047333333333512 +2020-04-29 14:00:00,23.561666666666582 +2020-04-29 15:00:00,15.392444444444445 +2020-04-29 16:00:00,25.844666666666683 +2020-04-29 17:00:00,34.68566666666668 +2020-04-29 18:00:00,32.35022222222232 +2020-04-29 19:00:00,22.309444444444527 +2020-04-29 20:00:00,15.749222222222274 +2020-04-29 21:00:00,8.916999999999936 +2020-04-29 22:00:00,9.99322222222224 +2020-04-29 23:00:00,12.048666666666684 +2020-04-30 00:00:00,17.123777777777754 +2020-04-30 01:00:00,20.292555555555538 +2020-04-30 02:00:00,32.33444444444434 +2020-04-30 03:00:00,50.539555555555616 +2020-04-30 04:00:00,52.57433333333339 +2020-04-30 05:00:00,56.74744444444422 +2020-04-30 06:00:00,41.70677777777777 +2020-04-30 07:00:00,32.965111111111014 +2020-04-30 08:00:00,20.713555555555484 +2020-04-30 09:00:00,16.56233333333343 +2020-04-30 10:00:00,17.95455555555553 +2020-04-30 11:00:00,18.452444444444406 +2020-04-30 12:00:00,21.732000000000028 +2020-04-30 13:00:00,14.674333333333209 +2020-04-30 14:00:00,15.084888888888957 +2020-04-30 15:00:00,15.406888888888911 +2020-04-30 16:00:00,11.288111111111114 +2020-04-30 17:00:00,10.313888888888924 +2020-04-30 18:00:00,16.551000000000002 +2020-04-30 19:00:00,20.383000000000052 +2020-04-30 20:00:00,17.792222222222144 +2020-04-30 21:00:00,21.203444444444493 +2020-04-30 22:00:00,20.694888888888887 +2020-04-30 23:00:00,12.294666666666602 +2020-05-01 00:00:00,10.810111111111182 +2020-05-01 01:00:00,11.889777777777846 +2020-05-01 02:00:00,11.446999999999923 +2020-05-01 03:00:00,10.481222222222303 +2020-05-01 04:00:00,6.415666666666622 +2020-05-01 05:00:00,4.806555555555555 +2020-05-01 06:00:00,12.019777777777778 +2020-05-01 07:00:00,14.578000000000106 +2020-05-01 08:00:00,7.79944444444439 +2020-05-01 09:00:00,15.89255555555563 +2020-05-01 10:00:00,17.22122222222218 +2020-05-01 11:00:00,19.171555555555734 +2020-05-01 12:00:00,35.39988888888885 +2020-05-01 13:00:00,84.36655555555554 +2020-05-01 14:00:00,86.74866666666699 +2020-05-01 15:00:00,105.51377777777796 +2020-05-01 16:00:00,117.86000000000003 +2020-05-01 17:00:00,104.86433333333338 +2020-05-01 18:00:00,31.57400000000006 +2020-05-01 19:00:00,16.0710000000001 +2020-05-01 20:00:00,9.423222222222188 +2020-05-01 21:00:00,14.937555555555637 +2020-05-01 22:00:00,13.268333333333326 +2020-05-01 23:00:00,9.318333333333289 +2020-05-02 00:00:00,4.275666666666657 +2020-05-02 01:00:00,3.4444444444444433 +2020-05-02 02:00:00,5.25788888888888 +2020-05-02 03:00:00,7.672111111111165 +2020-05-02 04:00:00,31.674444444444426 +2020-05-02 05:00:00,33.620000000000005 +2020-05-02 06:00:00,70.59188888888886 +2020-05-02 07:00:00,110.07811111111118 +2020-05-02 08:00:00,107.12566666666683 +2020-05-02 09:00:00,93.54488888888886 +2020-05-02 10:00:00,103.76299999999999 +2020-05-02 11:00:00,83.94566666666665 +2020-05-02 12:00:00,62.44988888888881 +2020-05-02 13:00:00,67.29588888888901 +2020-05-02 14:00:00,98.5116666666668 +2020-05-02 15:00:00,47.63833333333346 +2020-05-02 16:00:00,42.59355555555546 +2020-05-02 17:00:00,102.19388888888861 +2020-05-02 18:00:00,75.32644444444448 +2020-05-02 19:00:00,45.51788888888887 +2020-05-02 20:00:00,49.630888888888975 +2020-05-02 21:00:00,53.83766666666673 +2020-05-02 22:00:00,58.44244444444454 +2020-05-02 23:00:00,49.1448888888888 +2020-05-03 00:00:00,27.94577777777774 +2020-05-03 01:00:00,14.49322222222221 +2020-05-03 02:00:00,13.308777777777808 +2020-05-03 03:00:00,8.863000000000028 +2020-05-03 04:00:00,16.36622222222225 +2020-05-03 05:00:00,28.77522222222224 +2020-05-03 06:00:00,31.82233333333341 +2020-05-03 07:00:00,19.24288888888901 +2020-05-03 08:00:00,45.287222222222134 +2020-05-03 09:00:00,64.14933333333316 +2020-05-03 10:00:00,71.44422222222222 +2020-05-03 11:00:00,79.32888888888898 +2020-05-03 12:00:00,66.12033333333339 +2020-05-03 13:00:00,94.94988888888874 +2020-05-03 14:00:00,106.18600000000009 +2020-05-03 15:00:00,88.45477777777803 +2020-05-03 16:00:00,74.12388888888897 +2020-05-03 17:00:00,54.45711111111108 +2020-05-03 18:00:00,47.34411111111125 +2020-05-03 19:00:00,60.73644444444479 +2020-05-03 20:00:00,67.28033333333353 +2020-05-03 21:00:00,56.70966666666651 +2020-05-03 22:00:00,72.3866666666667 +2020-05-03 23:00:00,63.62666666666659 +2020-05-04 00:00:00,54.295666666666776 +2020-05-04 01:00:00,40.96955555555559 +2020-05-04 02:00:00,40.00744444444437 +2020-05-04 03:00:00,32.625777777777934 +2020-05-04 04:00:00,36.44455555555551 +2020-05-04 05:00:00,33.64444444444451 +2020-05-04 06:00:00,16.257222222222286 +2020-05-04 07:00:00,23.785222222222423 +2020-05-04 08:00:00,16.1327777777778 +2020-05-04 09:00:00,4.353555555555556 +2020-05-04 10:00:00,8.276333333333357 +2020-05-04 11:00:00,16.590444444444376 +2020-05-04 12:00:00,16.185888888888897 +2020-05-04 13:00:00,10.4305555555556 +2020-05-04 14:00:00,4.177111111111128 +2020-05-04 15:00:00,3.485666666666657 +2020-05-04 16:00:00,6.387333333333342 +2020-05-04 17:00:00,11.691777777777755 +2020-05-04 18:00:00,13.610333333333429 +2020-05-04 19:00:00,13.798777777777726 +2020-05-04 20:00:00,9.603555555555682 +2020-05-04 21:00:00,7.477666666666606 +2020-05-04 22:00:00,16.116444444444415 +2020-05-04 23:00:00,15.664222222222271 +2020-05-05 00:00:00,18.932111111111112 +2020-05-05 01:00:00,16.82077777777777 +2020-05-05 02:00:00,16.038777777777607 +2020-05-05 03:00:00,12.858111111111121 +2020-05-05 04:00:00,17.404888888888934 +2020-05-05 05:00:00,9.693666666666603 +2020-05-05 06:00:00,8.512444444444517 +2020-05-05 07:00:00,13.27311111111122 +2020-05-05 08:00:00,8.281666666666656 +2020-05-05 09:00:00,1.6463333333333543 +2020-05-05 10:00:00,1.5043333333333473 +2020-05-05 11:00:00,4.304666666666661 +2020-05-05 12:00:00,3.138777777777793 +2020-05-05 13:00:00,3.198111111111115 +2020-05-05 14:00:00,1.838888888888909 +2020-05-05 15:00:00,-0.3195555555555572 +2020-05-05 16:00:00,2.690888888888884 +2020-05-05 17:00:00,6.347888888888863 +2020-05-05 18:00:00,7.714333333333299 +2020-05-05 19:00:00,16.200888888888958 +2020-05-05 20:00:00,39.155555555555466 +2020-05-05 21:00:00,43.69588888888888 +2020-05-05 22:00:00,29.77922222222217 +2020-05-05 23:00:00,49.21422222222209 +2020-05-06 00:00:00,51.54099999999991 +2020-05-06 01:00:00,43.08700000000004 +2020-05-06 02:00:00,33.28677777777761 +2020-05-06 03:00:00,23.258111111111155 +2020-05-06 04:00:00,12.38811111111097 +2020-05-06 05:00:00,13.837777777777745 +2020-05-06 06:00:00,18.3793333333333 +2020-05-06 07:00:00,25.10933333333345 +2020-05-06 08:00:00,26.409000000000066 +2020-05-06 09:00:00,24.32788888888882 +2020-05-06 10:00:00,35.463444444444356 +2020-05-06 11:00:00,59.1476666666668 +2020-05-06 12:00:00,61.18855555555552 +2020-05-06 13:00:00,74.44922222222255 +2020-05-06 14:00:00,76.09911111111103 +2020-05-06 15:00:00,75.99100000000008 +2020-05-06 16:00:00,76.3145555555562 +2020-05-06 17:00:00,75.91755555555623 +2020-05-06 18:00:00,75.08655555555454 +2020-05-06 19:00:00,74.93788888888842 +2020-05-06 20:00:00,68.63788888888845 +2020-05-06 21:00:00,66.93633333333345 +2020-05-06 22:00:00,87.58811111111127 +2020-05-06 23:00:00,78.0162222222227 +2020-05-07 00:00:00,88.69066666666718 +2020-05-07 01:00:00,77.42077777777779 +2020-05-07 02:00:00,75.55722222222305 +2020-05-07 03:00:00,75.85255555555602 +2020-05-07 04:00:00,73.62455555555582 +2020-05-07 05:00:00,75.15966666666702 +2020-05-07 06:00:00,75.87833333333428 +2020-05-07 07:00:00,78.98155555555584 +2020-05-07 08:00:00,87.56544444444431 +2020-05-07 09:00:00,93.5023333333333 +2020-05-07 10:00:00,85.73999999999937 +2020-05-07 11:00:00,85.11533333333344 +2020-05-07 12:00:00,71.98499999999993 +2020-05-07 13:00:00,71.76399999999977 +2020-05-07 14:00:00,61.78755555555581 +2020-05-07 15:00:00,72.48966666666644 +2020-05-07 16:00:00,66.05133333333329 +2020-05-07 17:00:00,65.1354444444443 +2020-05-07 18:00:00,41.680555555555564 +2020-05-07 19:00:00,37.928222222222104 +2020-05-07 20:00:00,31.105111111111135 +2020-05-07 21:00:00,52.13211111111121 +2020-05-07 22:00:00,54.48722222222228 +2020-05-07 23:00:00,50.442333333333444 +2020-05-08 00:00:00,75.14822222222229 +2020-05-08 01:00:00,81.82222222222201 +2020-05-08 02:00:00,80.52344444444446 +2020-05-08 03:00:00,89.03244444444483 +2020-05-08 04:00:00,84.41000000000007 +2020-05-08 05:00:00,91.08422222222224 +2020-05-08 06:00:00,79.35033333333413 +2020-05-08 07:00:00,76.11555555555421 +2020-05-08 08:00:00,76.80055555555595 +2020-05-08 09:00:00,78.98211111111101 +2020-05-08 10:00:00,85.34722222222238 +2020-05-08 11:00:00,89.74899999999971 +2020-05-08 12:00:00,78.72466666666655 +2020-05-08 13:00:00,79.92988888888901 +2020-05-08 14:00:00,79.79344444444449 +2020-05-08 15:00:00,80.05922222222306 +2020-05-08 16:00:00,80.852333333334 +2020-05-08 17:00:00,79.38922222222276 +2020-05-08 18:00:00,75.9446666666662 +2020-05-08 19:00:00,78.7498888888888 +2020-05-08 20:00:00,80.56611111111157 +2020-05-08 21:00:00,82.74255555555519 +2020-05-08 22:00:00,82.4331111111117 +2020-05-08 23:00:00,74.67377777777764 +2020-05-09 00:00:00,79.10711111111114 +2020-05-09 01:00:00,80.96822222222191 +2020-05-09 02:00:00,82.78088888888884 +2020-05-09 03:00:00,100.77488888888904 +2020-05-09 04:00:00,72.39455555555536 +2020-05-09 05:00:00,62.597222222222584 +2020-05-09 06:00:00,51.13955555555532 +2020-05-09 07:00:00,65.04155555555549 +2020-05-09 08:00:00,78.7559999999999 +2020-05-09 09:00:00,80.44644444444432 +2020-05-09 10:00:00,68.59711111111115 +2020-05-09 11:00:00,79.76422222222219 +2020-05-09 12:00:00,62.747555555555714 +2020-05-09 13:00:00,55.47788888888893 +2020-05-09 14:00:00,56.00644444444458 +2020-05-09 15:00:00,79.95733333333298 +2020-05-09 16:00:00,87.36777777777753 +2020-05-09 17:00:00,88.95444444444448 +2020-05-09 18:00:00,88.76666666666652 +2020-05-09 19:00:00,86.50044444444443 +2020-05-09 20:00:00,80.28577777777774 +2020-05-09 21:00:00,83.09888888888906 +2020-05-09 22:00:00,83.25844444444422 +2020-05-09 23:00:00,89.56422222222213 +2020-05-10 00:00:00,84.11566666666656 +2020-05-10 01:00:00,92.03544444444434 +2020-05-10 02:00:00,91.96322222222189 +2020-05-10 03:00:00,98.91388888888913 +2020-05-10 04:00:00,86.82988888888906 +2020-05-10 05:00:00,77.75633333333332 +2020-05-10 06:00:00,86.73266666666662 +2020-05-10 07:00:00,77.0541111111111 +2020-05-10 08:00:00,64.09222222222239 +2020-05-10 09:00:00,59.75000000000013 +2020-05-10 10:00:00,57.62566666666686 +2020-05-10 11:00:00,62.06099999999982 +2020-05-10 12:00:00,57.195555555555615 +2020-05-10 13:00:00,53.01666666666654 +2020-05-10 14:00:00,67.34611111111099 +2020-05-10 15:00:00,50.98944444444434 +2020-05-10 16:00:00,34.01699999999994 +2020-05-10 17:00:00,8.60666666666667 +2020-05-10 18:00:00,5.247999999999957 +2020-05-10 19:00:00,16.65722222222218 +2020-05-10 20:00:00,23.805000000000085 +2020-05-10 21:00:00,24.413000000000086 +2020-05-10 22:00:00,31.23399999999999 +2020-05-10 23:00:00,27.75155555555557 +2020-05-11 00:00:00,24.645000000000007 +2020-05-11 01:00:00,16.43188888888887 +2020-05-11 02:00:00,11.277111111110987 +2020-05-11 03:00:00,9.163111111111109 +2020-05-11 04:00:00,11.90344444444446 +2020-05-11 05:00:00,16.335999999999917 +2020-05-11 06:00:00,21.891000000000115 +2020-05-11 07:00:00,35.99900000000006 +2020-05-11 08:00:00,25.418888888888787 +2020-05-11 09:00:00,34.09299999999999 +2020-05-11 10:00:00,41.9665555555555 +2020-05-11 11:00:00,48.077777777777754 +2020-05-11 12:00:00,39.7405555555556 +2020-05-11 13:00:00,50.64866666666683 +2020-05-11 14:00:00,63.3108888888887 +2020-05-11 15:00:00,61.827999999999975 +2020-05-11 16:00:00,75.5298888888888 +2020-05-11 17:00:00,93.26466666666667 +2020-05-11 18:00:00,96.577 +2020-05-11 19:00:00,66.28911111111115 +2020-05-11 20:00:00,53.4073333333336 +2020-05-11 21:00:00,37.073111111111096 +2020-05-11 22:00:00,31.98766666666661 +2020-05-11 23:00:00,28.946111111111133 +2020-05-12 00:00:00,15.312333333333354 +2020-05-12 01:00:00,1.6454444444444143 +2020-05-12 02:00:00,-0.43844444444444375 +2020-05-12 03:00:00,-0.7548888888888914 +2020-05-12 04:00:00,0.6984444444444557 +2020-05-12 05:00:00,8.091222222222251 +2020-05-12 06:00:00,11.949888888888774 +2020-05-12 07:00:00,10.885777777777829 +2020-05-12 08:00:00,18.51344444444446 +2020-05-12 09:00:00,17.22055555555561 +2020-05-12 10:00:00,9.602333333333348 +2020-05-12 11:00:00,16.508222222222326 +2020-05-12 12:00:00,25.718555555555387 +2020-05-12 13:00:00,26.72611111111113 +2020-05-12 14:00:00,17.9693333333335 +2020-05-12 15:00:00,10.92955555555554 +2020-05-12 16:00:00,7.57133333333335 +2020-05-12 17:00:00,9.076555555555482 +2020-05-12 18:00:00,10.234222222222256 +2020-05-12 19:00:00,13.595444444444581 +2020-05-12 20:00:00,9.956222222222172 +2020-05-12 21:00:00,5.794111111111131 +2020-05-12 22:00:00,2.614333333333338 +2020-05-12 23:00:00,-0.15977777777777455 +2020-05-13 00:00:00,-0.8082222222222241 +2020-05-13 01:00:00,-0.5561111111111073 +2020-05-13 02:00:00,-0.055666666666666496 +2020-05-13 03:00:00,0.3527777777777765 +2020-05-13 04:00:00,1.3858888888889032 +2020-05-13 05:00:00,2.7419999999999938 +2020-05-13 06:00:00,-0.4176666666666629 +2020-05-13 07:00:00,-0.908333333333321 +2020-05-13 08:00:00,-0.8736666666666514 +2020-05-13 09:00:00,-0.8753333333333227 +2020-05-13 10:00:00,-0.9085555555555432 +2020-05-13 11:00:00,-0.8662222222222111 +2020-05-13 12:00:00,-0.9085555555555432 +2020-05-13 13:00:00,-0.8842222222222044 +2020-05-13 14:00:00,-0.8677777777777586 +2020-05-13 15:00:00,-0.8766666666666498 +2020-05-13 16:00:00,-0.8605555555555381 +2020-05-13 17:00:00,-0.8583333333333208 +2020-05-13 18:00:00,-0.8593333333333263 +2020-05-13 19:00:00,-0.8768888888888722 +2020-05-13 20:00:00,-0.8864444444444306 +2020-05-13 21:00:00,-0.9007777777777616 +2020-05-13 22:00:00,-0.8849999999999874 +2020-05-13 23:00:00,-0.675444444444436 +2020-05-14 00:00:00,1.7483333333333282 +2020-05-14 01:00:00,5.02911111111114 +2020-05-14 02:00:00,1.6972222222222146 +2020-05-14 03:00:00,0.5651111111111093 +2020-05-14 04:00:00,1.2911111111111233 +2020-05-14 05:00:00,1.9722222222222354 +2020-05-14 06:00:00,3.806222222222214 +2020-05-14 07:00:00,1.7214444444444454 +2020-05-14 08:00:00,6.269666666666629 +2020-05-14 09:00:00,13.798333333333419 +2020-05-14 10:00:00,8.293777777777796 +2020-05-14 11:00:00,11.112000000000025 +2020-05-14 12:00:00,17.6744444444443 +2020-05-14 13:00:00,33.93788888888883 +2020-05-14 14:00:00,50.85555555555549 +2020-05-14 15:00:00,53.98066666666678 +2020-05-14 16:00:00,49.457444444444754 +2020-05-14 17:00:00,45.829111111111196 +2020-05-14 18:00:00,31.327444444444495 +2020-05-14 19:00:00,25.707888888888945 +2020-05-14 20:00:00,14.973777777777611 +2020-05-14 21:00:00,14.082666666666695 +2020-05-14 22:00:00,11.792555555555614 +2020-05-14 23:00:00,25.485111111111127 +2020-05-15 00:00:00,19.956444444444383 +2020-05-15 01:00:00,15.071111111111069 +2020-05-15 02:00:00,5.474666666666649 +2020-05-15 03:00:00,3.6454444444444687 +2020-05-15 04:00:00,3.9314444444444696 +2020-05-15 05:00:00,8.728888888888873 +2020-05-15 06:00:00,15.064999999999939 +2020-05-15 07:00:00,30.862555555555318 +2020-05-15 08:00:00,41.1646666666669 +2020-05-15 09:00:00,61.81388888888892 +2020-05-15 10:00:00,50.57099999999992 +2020-05-15 11:00:00,44.33544444444435 +2020-05-15 12:00:00,43.40644444444465 +2020-05-15 13:00:00,63.46377777777768 +2020-05-15 14:00:00,42.19766666666665 +2020-05-15 15:00:00,43.54733333333328 +2020-05-15 16:00:00,34.515666666666824 +2020-05-15 17:00:00,37.96444444444427 +2020-05-15 18:00:00,34.09522222222215 +2020-05-15 19:00:00,26.183222222222224 +2020-05-15 20:00:00,19.07255555555557 +2020-05-15 21:00:00,19.533222222222225 +2020-05-15 22:00:00,17.983444444444395 +2020-05-15 23:00:00,15.719555555555509 +2020-05-16 00:00:00,11.464888888888872 +2020-05-16 01:00:00,10.295222222222181 +2020-05-16 02:00:00,12.794222222222167 +2020-05-16 03:00:00,15.30644444444457 +2020-05-16 04:00:00,15.60655555555551 +2020-05-16 05:00:00,20.469888888888786 +2020-05-16 06:00:00,27.528444444444286 +2020-05-16 07:00:00,36.400333333333336 +2020-05-16 08:00:00,55.73399999999967 +2020-05-16 09:00:00,63.208111111111194 +2020-05-16 10:00:00,80.23622222222217 +2020-05-16 11:00:00,96.29988888888904 +2020-05-16 12:00:00,87.8148888888888 +2020-05-16 13:00:00,81.42400000000016 +2020-05-16 14:00:00,78.2085555555554 +2020-05-16 15:00:00,65.62977777777782 +2020-05-16 16:00:00,70.92566666666663 +2020-05-16 17:00:00,72.73533333333329 +2020-05-16 18:00:00,66.1672222222223 +2020-05-16 19:00:00,63.07533333333348 +2020-05-16 20:00:00,61.58199999999999 +2020-05-16 21:00:00,38.563000000000045 +2020-05-16 22:00:00,18.83244444444441 +2020-05-16 23:00:00,2.8793333333333546 +2020-05-17 00:00:00,1.290777777777778 +2020-05-17 01:00:00,0.19088888888889252 +2020-05-17 02:00:00,-0.869444444444439 +2020-05-17 03:00:00,-0.9258888888888779 +2020-05-17 04:00:00,-0.8999999999999857 +2020-05-17 05:00:00,-0.29322222222222155 +2020-05-17 06:00:00,5.950222222222269 +2020-05-17 07:00:00,8.899666666666706 +2020-05-17 08:00:00,7.2915555555555445 +2020-05-17 09:00:00,6.686000000000045 +2020-05-17 10:00:00,11.883000000000086 +2020-05-17 11:00:00,15.297999999999975 +2020-05-17 12:00:00,18.881555555555426 +2020-05-17 13:00:00,15.868555555555556 +2020-05-17 14:00:00,20.980222222222206 +2020-05-17 15:00:00,23.1646666666668 +2020-05-17 16:00:00,24.31811111111117 +2020-05-17 17:00:00,17.164222222222158 +2020-05-17 18:00:00,11.606111111111101 +2020-05-17 19:00:00,13.503222222222197 +2020-05-17 20:00:00,14.444555555555466 +2020-05-17 21:00:00,9.225555555555431 +2020-05-17 22:00:00,5.511555555555573 +2020-05-17 23:00:00,5.468333333333403 +2020-05-18 00:00:00,4.869111111111137 +2020-05-18 01:00:00,5.572000000000037 +2020-05-18 02:00:00,3.6913333333333114 +2020-05-18 03:00:00,0.1929999999999984 +2020-05-18 04:00:00,-0.8999999999999857 +2020-05-18 05:00:00,-0.8999999999999857 +2020-05-18 06:00:00,-0.8545555555555415 +2020-05-18 07:00:00,-0.8591111111111007 +2020-05-18 08:00:00,-0.8407777777777671 +2020-05-18 09:00:00,-0.8611111111110953 +2020-05-18 10:00:00,-0.5867777777777828 +2020-05-18 11:00:00,-0.5232222222222256 +2020-05-18 12:00:00,0.0045555555555553936 +2020-05-18 13:00:00,2.594555555555552 +2020-05-18 14:00:00,7.33911111111111 +2020-05-18 15:00:00,9.173888888888804 +2020-05-18 16:00:00,12.545111111111218 +2020-05-18 17:00:00,11.793888888888878 +2020-05-18 18:00:00,12.043999999999919 +2020-05-18 19:00:00,11.371777777777751 +2020-05-18 20:00:00,10.043555555555413 +2020-05-18 21:00:00,2.3843333333333434 +2020-05-18 22:00:00,0.40644444444443917 +2020-05-18 23:00:00,-0.024333333333334296 +2020-05-19 00:00:00,0.2309999999999983 +2020-05-19 01:00:00,-0.5412222222222205 +2020-05-19 02:00:00,-0.1562222222222232 +2020-05-19 03:00:00,2.884777777777762 +2020-05-19 04:00:00,4.441888888888859 +2020-05-19 05:00:00,3.9851111111111495 +2020-05-19 06:00:00,6.45177777777775 +2020-05-19 07:00:00,13.434999999999935 +2020-05-19 08:00:00,23.159777777777723 +2020-05-19 09:00:00,31.838333333333253 +2020-05-19 10:00:00,46.94788888888908 +2020-05-19 11:00:00,63.864000000000225 +2020-05-19 12:00:00,65.77444444444443 +2020-05-19 13:00:00,66.29288888888875 +2020-05-19 14:00:00,65.39766666666657 +2020-05-19 15:00:00,47.423111111111 +2020-05-19 16:00:00,53.998333333333385 +2020-05-19 17:00:00,26.68055555555558 +2020-05-19 18:00:00,26.31544444444436 +2020-05-19 19:00:00,20.47166666666653 +2020-05-19 20:00:00,20.65344444444441 +2020-05-19 21:00:00,16.52177777777783 +2020-05-19 22:00:00,16.541111111111142 +2020-05-19 23:00:00,27.980444444444394 +2020-05-20 00:00:00,24.89822222222226 +2020-05-20 01:00:00,28.96166666666663 +2020-05-20 02:00:00,21.770888888888756 +2020-05-20 03:00:00,19.049111111111248 +2020-05-20 04:00:00,11.535222222222176 +2020-05-20 05:00:00,33.127111111111134 +2020-05-20 06:00:00,51.2204444444441 +2020-05-20 07:00:00,79.13533333333359 +2020-05-20 08:00:00,104.0047777777773 +2020-05-20 09:00:00,99.33177777777811 +2020-05-20 10:00:00,58.197444444444535 +2020-05-20 11:00:00,72.67322222222222 +2020-05-20 12:00:00,73.515777777778 +2020-05-20 13:00:00,73.9626666666667 +2020-05-20 14:00:00,75.42266666666666 +2020-05-20 15:00:00,73.84499999999977 +2020-05-20 16:00:00,74.19988888888905 +2020-05-20 17:00:00,74.82477777777783 +2020-05-20 18:00:00,74.02499999999979 +2020-05-20 19:00:00,75.21588888888921 +2020-05-20 20:00:00,73.84788888888912 +2020-05-20 21:00:00,73.1924444444445 +2020-05-20 22:00:00,73.9103333333333 +2020-05-20 23:00:00,74.87022222222251 +2020-05-21 00:00:00,77.33988888888946 +2020-05-21 01:00:00,81.24833333333302 +2020-05-21 02:00:00,78.86422222222237 +2020-05-21 03:00:00,78.51522222222243 +2020-05-21 04:00:00,80.18900000000033 +2020-05-21 05:00:00,87.08000000000041 +2020-05-21 06:00:00,104.71866666666673 +2020-05-21 07:00:00,85.91866666666775 +2020-05-21 08:00:00,79.07811111111107 +2020-05-21 09:00:00,81.3123333333341 +2020-05-21 10:00:00,85.6592222222222 +2020-05-21 11:00:00,85.31544444444557 +2020-05-21 12:00:00,84.73922222222129 +2020-05-21 13:00:00,87.47133333333299 +2020-05-21 14:00:00,82.99299999999997 +2020-05-21 15:00:00,75.439 +2020-05-21 16:00:00,62.596444444444124 +2020-05-21 17:00:00,58.449999999999825 +2020-05-21 18:00:00,57.35133333333298 +2020-05-21 19:00:00,68.36711111111104 +2020-05-21 20:00:00,89.28088888888901 +2020-05-21 21:00:00,90.4245555555558 +2020-05-21 22:00:00,79.81666666666653 +2020-05-21 23:00:00,72.00055555555548 +2020-05-22 00:00:00,71.3352222222225 +2020-05-22 01:00:00,71.1285555555553 +2020-05-22 02:00:00,77.25233333333324 +2020-05-22 03:00:00,78.67277777777821 +2020-05-22 04:00:00,85.6191111111116 +2020-05-22 05:00:00,81.55922222222274 +2020-05-22 06:00:00,81.30933333333401 +2020-05-22 07:00:00,80.97277777777789 +2020-05-22 08:00:00,80.04722222222111 +2020-05-22 09:00:00,78.90166666666725 +2020-05-22 10:00:00,77.97277777777768 +2020-05-22 11:00:00,79.38077777777806 +2020-05-22 12:00:00,80.06644444444554 +2020-05-22 13:00:00,84.03088888888915 +2020-05-22 14:00:00,84.87744444444365 +2020-05-22 15:00:00,82.9541111111111 +2020-05-22 16:00:00,85.06344444444393 +2020-05-22 17:00:00,88.07288888888831 +2020-05-22 18:00:00,84.92322222222244 +2020-05-22 19:00:00,103.4573333333332 +2020-05-22 20:00:00,123.02677777777774 +2020-05-22 21:00:00,117.95088888888905 +2020-05-22 22:00:00,112.19422222222215 +2020-05-22 23:00:00,107.83166666666688 +2020-05-23 00:00:00,96.3614444444445 +2020-05-23 01:00:00,72.82644444444438 +2020-05-23 02:00:00,77.63955555555575 +2020-05-23 03:00:00,87.72900000000031 +2020-05-23 04:00:00,76.94022222222219 +2020-05-23 05:00:00,82.41788888888912 +2020-05-23 06:00:00,96.95955555555547 +2020-05-23 07:00:00,104.04933333333325 +2020-05-23 08:00:00,97.46422222222229 +2020-05-23 09:00:00,107.1598888888892 +2020-05-23 10:00:00,112.6248888888889 +2020-05-23 11:00:00,115.84211111111135 +2020-05-23 12:00:00,108.95488888888885 +2020-05-23 13:00:00,102.66433333333323 +2020-05-23 14:00:00,102.8096666666666 +2020-05-23 15:00:00,97.27588888888889 +2020-05-23 16:00:00,96.30533333333376 +2020-05-23 17:00:00,85.07044444444462 +2020-05-23 18:00:00,97.95522222222232 +2020-05-23 19:00:00,123.05777777777834 +2020-05-23 20:00:00,122.78133333333395 +2020-05-23 21:00:00,117.9335555555555 +2020-05-23 22:00:00,116.29211111111097 +2020-05-23 23:00:00,107.85977777777808 +2020-05-24 00:00:00,104.63077777777762 +2020-05-24 01:00:00,109.66111111111101 +2020-05-24 02:00:00,98.59377777777796 +2020-05-24 03:00:00,81.54100000000005 +2020-05-24 04:00:00,44.178888888888835 +2020-05-24 05:00:00,65.01855555555542 +2020-05-24 06:00:00,42.28766666666658 +2020-05-24 07:00:00,13.564888888888841 +2020-05-24 08:00:00,17.500777777777817 +2020-05-24 09:00:00,9.53144444444442 +2020-05-24 10:00:00,8.611444444444484 +2020-05-24 11:00:00,15.373333333333365 +2020-05-24 12:00:00,17.52966666666671 +2020-05-24 13:00:00,11.936333333333431 +2020-05-24 14:00:00,4.326333333333293 +2020-05-24 15:00:00,-0.25466666666666654 +2020-05-24 16:00:00,-0.8747777777777661 +2020-05-24 17:00:00,-0.925777777777764 +2020-05-24 18:00:00,-0.8914444444444332 +2020-05-24 19:00:00,-0.8869999999999828 +2020-05-24 20:00:00,-0.1914444444444398 +2020-05-24 21:00:00,-0.4197777777777807 +2020-05-24 22:00:00,2.9778888888888866 +2020-05-24 23:00:00,6.831000000000003 +2020-05-25 00:00:00,5.002333333333357 +2020-05-25 01:00:00,4.566000000000013 +2020-05-25 02:00:00,2.566777777777763 +2020-05-25 03:00:00,4.230999999999997 +2020-05-25 04:00:00,6.644333333333377 +2020-05-25 05:00:00,13.158222222222228 +2020-05-25 06:00:00,25.094999999999988 +2020-05-25 07:00:00,35.10311111111114 +2020-05-25 08:00:00,40.231888888889024 +2020-05-25 09:00:00,42.90033333333367 +2020-05-25 10:00:00,60.015000000000114 +2020-05-25 11:00:00,68.54333333333355 +2020-05-25 12:00:00,84.86300000000016 +2020-05-25 13:00:00,88.624 +2020-05-25 14:00:00,100.4126666666665 +2020-05-25 15:00:00,97.28100000000013 +2020-05-25 16:00:00,87.51411111111078 +2020-05-25 17:00:00,90.26322222222251 +2020-05-25 18:00:00,88.91788888888894 +2020-05-25 19:00:00,91.4219999999997 +2020-05-25 20:00:00,76.20822222222239 +2020-05-25 21:00:00,68.82077777777762 +2020-05-25 22:00:00,75.91911111111098 +2020-05-25 23:00:00,73.68911111111103 +2020-05-26 00:00:00,55.26311111111101 +2020-05-26 01:00:00,49.74177777777775 +2020-05-26 02:00:00,57.42988888888874 +2020-05-26 03:00:00,59.3616666666667 +2020-05-26 04:00:00,42.178777777777775 +2020-05-26 05:00:00,37.17999999999987 +2020-05-26 06:00:00,64.49222222222227 +2020-05-26 07:00:00,93.2894444444441 +2020-05-26 08:00:00,112.68977777777738 +2020-05-26 09:00:00,122.41822222222241 +2020-05-26 10:00:00,115.5303333333334 +2020-05-26 11:00:00,77.62333333333332 +2020-05-26 12:00:00,82.78400000000032 +2020-05-26 13:00:00,84.58188888888957 +2020-05-26 14:00:00,87.62066666666719 +2020-05-26 15:00:00,88.83877777777779 +2020-05-26 16:00:00,88.25411111111202 +2020-05-26 17:00:00,92.01655555555674 +2020-05-26 18:00:00,120.64022222222215 +2020-05-26 19:00:00,122.17233333333296 +2020-05-26 20:00:00,114.39777777777836 +2020-05-26 21:00:00,116.30966666666632 +2020-05-26 22:00:00,109.36500000000017 +2020-05-26 23:00:00,110.67433333333354 +2020-05-27 00:00:00,115.22199999999943 +2020-05-27 01:00:00,120.4971111111116 +2020-05-27 02:00:00,117.13222222222224 +2020-05-27 03:00:00,66.4954444444444 +2020-05-27 04:00:00,43.322111111111134 +2020-05-27 05:00:00,35.721666666666835 +2020-05-27 06:00:00,51.5893333333333 +2020-05-27 07:00:00,74.39200000000004 +2020-05-27 08:00:00,73.0321111111111 +2020-05-27 09:00:00,83.18399999999993 +2020-05-27 10:00:00,79.4137777777781 +2020-05-27 11:00:00,75.32211111111116 +2020-05-27 12:00:00,67.47666666666672 +2020-05-27 13:00:00,55.17244444444442 +2020-05-27 14:00:00,49.52388888888891 +2020-05-27 15:00:00,59.71033333333353 +2020-05-27 16:00:00,55.0613333333332 +2020-05-27 17:00:00,45.614777777777796 +2020-05-27 18:00:00,47.68344444444446 +2020-05-27 19:00:00,56.3162222222221 +2020-05-27 20:00:00,57.91222222222224 +2020-05-27 21:00:00,57.638222222222275 +2020-05-27 22:00:00,62.65277777777779 +2020-05-27 23:00:00,61.756666666666696 +2020-05-28 00:00:00,40.93400000000004 +2020-05-28 01:00:00,53.05599999999996 +2020-05-28 02:00:00,63.01466666666676 +2020-05-28 03:00:00,75.99922222222202 +2020-05-28 04:00:00,69.79322222222208 +2020-05-28 05:00:00,68.8489999999999 +2020-05-28 06:00:00,63.3118888888891 +2020-05-28 07:00:00,75.13911111111118 +2020-05-28 08:00:00,88.581333333333 +2020-05-28 09:00:00,91.33922222222226 +2020-05-28 10:00:00,91.43822222222259 +2020-05-28 11:00:00,91.50511111111047 +2020-05-28 12:00:00,91.53722222222298 +2020-05-28 13:00:00,91.47444444444383 +2020-05-28 14:00:00,88.18788888888936 +2020-05-28 15:00:00,90.69200000000028 +2020-05-28 16:00:00,90.56555555555515 +2020-05-28 17:00:00,90.37822222222228 +2020-05-28 18:00:00,87.47177777777759 +2020-05-28 19:00:00,88.8942222222222 +2020-05-28 20:00:00,87.6525555555557 +2020-05-28 21:00:00,86.5876666666666 +2020-05-28 22:00:00,86.22877777777776 +2020-05-28 23:00:00,83.85144444444423 +2020-05-29 00:00:00,82.76688888888911 +2020-05-29 01:00:00,83.31144444444469 +2020-05-29 02:00:00,82.60511111111116 +2020-05-29 03:00:00,76.97155555555551 +2020-05-29 04:00:00,58.62655555555547 +2020-05-29 05:00:00,62.497111111111074 +2020-05-29 06:00:00,62.56788888888874 +2020-05-29 07:00:00,63.620333333333264 +2020-05-29 08:00:00,72.68000000000033 +2020-05-29 09:00:00,66.42711111111124 +2020-05-29 10:00:00,72.89411111111094 +2020-05-29 11:00:00,64.38755555555562 +2020-05-29 12:00:00,56.02377777777797 +2020-05-29 13:00:00,46.7679999999999 +2020-05-29 14:00:00,47.903777777777634 +2020-05-29 15:00:00,38.971666666666536 +2020-05-29 16:00:00,43.0864444444445 +2020-05-29 17:00:00,83.10122222222228 +2020-05-29 18:00:00,86.25244444444411 +2020-05-29 19:00:00,83.57944444444415 +2020-05-29 20:00:00,73.69511111111116 +2020-05-29 21:00:00,82.50866666666668 +2020-05-29 22:00:00,87.89766666666651 +2020-05-29 23:00:00,90.03755555555546 +2020-05-30 00:00:00,90.2831111111111 +2020-05-30 01:00:00,91.3434444444444 +2020-05-30 02:00:00,88.09733333333305 +2020-05-30 03:00:00,86.88299999999985 +2020-05-30 04:00:00,80.30944444444462 +2020-05-30 05:00:00,75.3025555555557 +2020-05-30 06:00:00,66.70511111111108 +2020-05-30 07:00:00,57.35000000000002 +2020-05-30 08:00:00,61.045222222222286 +2020-05-30 09:00:00,60.931666666666466 +2020-05-30 10:00:00,56.829555555555416 +2020-05-30 11:00:00,57.079111111111125 +2020-05-30 12:00:00,47.59877777777779 +2020-05-30 13:00:00,46.81299999999998 +2020-05-30 14:00:00,54.60966666666648 +2020-05-30 15:00:00,56.89355555555547 +2020-05-30 16:00:00,59.5729999999996 +2020-05-30 17:00:00,71.65333333333332 +2020-05-30 18:00:00,57.47733333333318 +2020-05-30 19:00:00,55.37677777777766 +2020-05-30 20:00:00,44.59955555555556 +2020-05-30 21:00:00,38.88644444444449 +2020-05-30 22:00:00,46.00733333333344 +2020-05-30 23:00:00,32.79866666666672 +2020-05-31 00:00:00,28.761444444444532 +2020-05-31 01:00:00,26.085888888888793 +2020-05-31 02:00:00,35.565111111111236 +2020-05-31 03:00:00,28.415666666666738 +2020-05-31 04:00:00,26.110555555555518 +2020-05-31 05:00:00,18.443777777778 +2020-05-31 06:00:00,12.533555555555496 +2020-05-31 07:00:00,7.682333333333344 +2020-05-31 08:00:00,5.593111111111084 +2020-05-31 09:00:00,3.0915555555555425 +2020-05-31 10:00:00,0.19911111111111218 +2020-05-31 11:00:00,-0.6691111111111099 +2020-05-31 12:00:00,-0.6831111111111149 +2020-05-31 13:00:00,-0.6884444444444439 +2020-05-31 14:00:00,0.789444444444442 +2020-05-31 15:00:00,1.191111111111102 +2020-05-31 16:00:00,5.053111111111164 +2020-05-31 17:00:00,6.4116666666667 +2020-05-31 18:00:00,13.319777777777592 +2020-05-31 19:00:00,9.948777777777753 +2020-05-31 20:00:00,6.618333333333317 +2020-05-31 21:00:00,3.824333333333346 +2020-05-31 22:00:00,0.07122222222222573 +2020-05-31 23:00:00,1.958444444444428 +2020-06-01 00:00:00,6.172555555555571 +2020-06-01 01:00:00,9.182555555555595 +2020-06-01 02:00:00,11.295555555555488 +2020-06-01 03:00:00,10.601555555555482 +2020-06-01 04:00:00,7.931888888888863 +2020-06-01 05:00:00,9.222666666666653 +2020-06-01 06:00:00,12.242222222222223 +2020-06-01 07:00:00,14.968111111111153 +2020-06-01 08:00:00,18.62066666666667 +2020-06-01 09:00:00,33.86022222222232 +2020-06-01 10:00:00,59.50922222222214 +2020-06-01 11:00:00,64.15255555555571 +2020-06-01 12:00:00,61.140555555555935 +2020-06-01 13:00:00,60.93577777777792 +2020-06-01 14:00:00,63.48355555555529 +2020-06-01 15:00:00,74.77455555555579 +2020-06-01 16:00:00,75.06811111111084 +2020-06-01 17:00:00,81.72855555555594 +2020-06-01 18:00:00,86.31166666666675 +2020-06-01 19:00:00,76.69855555555611 +2020-06-01 20:00:00,38.26255555555541 +2020-06-01 21:00:00,10.629333333333362 +2020-06-01 22:00:00,7.200555555555619 +2020-06-01 23:00:00,9.268666666666647 +2020-06-02 00:00:00,16.157999999999987 +2020-06-02 01:00:00,17.09988888888887 +2020-06-02 02:00:00,22.50477777777773 +2020-06-02 03:00:00,26.79344444444462 +2020-06-02 04:00:00,20.63322222222208 +2020-06-02 05:00:00,20.444111111111127 +2020-06-02 06:00:00,15.350222222222197 +2020-06-02 07:00:00,8.578555555555512 +2020-06-02 08:00:00,1.4163333333333437 +2020-06-02 09:00:00,-0.6503333333333341 +2020-06-02 10:00:00,-0.6914444444444463 +2020-06-02 11:00:00,-0.7083333333333354 +2020-06-02 12:00:00,-0.7000000000000021 +2020-06-02 13:00:00,-0.7000000000000021 +2020-06-02 14:00:00,-0.7000000000000021 +2020-06-02 15:00:00,-0.7000000000000021 +2020-06-02 16:00:00,-0.7000000000000021 +2020-06-02 17:00:00,-0.7000000000000021 +2020-06-02 18:00:00,-0.7000000000000021 +2020-06-02 19:00:00,-0.7000000000000021 +2020-06-02 20:00:00,-0.6884444444444451 +2020-06-02 21:00:00,0.007777777777776765 +2020-06-02 22:00:00,-0.5893333333333302 +2020-06-02 23:00:00,-0.5672222222222152 +2020-06-03 00:00:00,0.86066666666667 +2020-06-03 01:00:00,0.2383333333333345 +2020-06-03 02:00:00,-0.4886666666666621 +2020-06-03 03:00:00,-0.7000000000000021 +2020-06-03 04:00:00,-0.7000000000000021 +2020-06-03 05:00:00,-0.7000000000000021 +2020-06-03 06:00:00,-0.600111111111112 +2020-06-03 07:00:00,-0.28155555555555994 +2020-06-03 08:00:00,-0.26944444444444454 +2020-06-03 09:00:00,1.316333333333343 +2020-06-03 10:00:00,11.9737777777778 +2020-06-03 11:00:00,19.632555555555385 +2020-06-03 12:00:00,19.977222222222238 +2020-06-03 13:00:00,16.74077777777777 +2020-06-03 14:00:00,15.022333333333396 +2020-06-03 15:00:00,14.309777777777775 +2020-06-03 16:00:00,9.509111111111231 +2020-06-03 17:00:00,2.423444444444435 +2020-06-03 18:00:00,0.5136666666666652 +2020-06-03 19:00:00,6.629666666666634 +2020-06-03 20:00:00,16.752999999999943 +2020-06-03 21:00:00,13.449111111111167 +2020-06-03 22:00:00,4.788777777777731 +2020-06-03 23:00:00,2.3081111111110957 +2020-06-04 00:00:00,1.2253333333333245 +2020-06-04 01:00:00,0.8782222222222229 +2020-06-04 02:00:00,-0.042777777777777345 +2020-06-04 03:00:00,-0.4331111111111143 +2020-06-04 04:00:00,-0.695333333333335 +2020-06-04 05:00:00,-0.7000000000000021 +2020-06-04 06:00:00,-0.7000000000000021 +2020-06-04 07:00:00,-0.7000000000000021 +2020-06-04 08:00:00,-0.7000000000000021 +2020-06-04 09:00:00,-0.7000000000000021 +2020-06-04 10:00:00,-0.7000000000000021 +2020-06-04 11:00:00,-0.6988888888888907 +2020-06-04 12:00:00,-0.04122222222221963 +2020-06-04 13:00:00,5.585666666666638 +2020-06-04 14:00:00,15.888666666666698 +2020-06-04 15:00:00,15.696222222222184 +2020-06-04 16:00:00,8.404333333333248 +2020-06-04 17:00:00,3.1161111111111164 +2020-06-04 18:00:00,4.717888888888916 +2020-06-04 19:00:00,5.672444444444485 +2020-06-04 20:00:00,5.693777777777783 +2020-06-04 21:00:00,2.616222222222211 +2020-06-04 22:00:00,0.8195555555555647 +2020-06-04 23:00:00,0.39477777777778134 +2020-06-05 00:00:00,0.03511111111111182 +2020-06-05 01:00:00,-0.5083333333333317 +2020-06-05 02:00:00,-0.6743333333333316 +2020-06-05 03:00:00,-0.6382222222222227 +2020-06-05 04:00:00,1.9122222222222087 +2020-06-05 05:00:00,12.33233333333322 +2020-06-05 06:00:00,11.850444444444543 +2020-06-05 07:00:00,14.46566666666665 +2020-06-05 08:00:00,29.954111111111143 +2020-06-05 09:00:00,56.18777777777779 +2020-06-05 10:00:00,60.7597777777777 +2020-06-05 11:00:00,51.93222222222211 +2020-06-05 12:00:00,57.51122222222214 +2020-06-05 13:00:00,82.42811111111119 +2020-06-05 14:00:00,96.7642222222224 +2020-06-05 15:00:00,95.35866666666648 +2020-06-05 16:00:00,71.5968888888888 +2020-06-05 17:00:00,87.81688888888854 +2020-06-05 18:00:00,90.03055555555525 +2020-06-05 19:00:00,66.7947777777777 +2020-06-05 20:00:00,37.48233333333333 +2020-06-05 21:00:00,32.196000000000005 +2020-06-05 22:00:00,13.47377777777776 +2020-06-05 23:00:00,6.524777777777811 +2020-06-06 00:00:00,8.233888888888913 +2020-06-06 01:00:00,13.039555555555527 +2020-06-06 02:00:00,15.993999999999978 +2020-06-06 03:00:00,36.16777777777781 +2020-06-06 04:00:00,33.44211111111116 +2020-06-06 05:00:00,32.66455555555534 +2020-06-06 06:00:00,44.82166666666672 +2020-06-06 07:00:00,61.12499999999999 +2020-06-06 08:00:00,59.62199999999964 +2020-06-06 09:00:00,38.15488888888874 +2020-06-06 10:00:00,52.67933333333319 +2020-06-06 11:00:00,63.99677777777788 +2020-06-06 12:00:00,70.8544444444445 +2020-06-06 13:00:00,77.20088888888887 +2020-06-06 14:00:00,80.31511111111114 +2020-06-06 15:00:00,74.23622222222238 +2020-06-06 16:00:00,84.30733333333313 +2020-06-06 17:00:00,81.80322222222134 +2020-06-06 18:00:00,70.54966666666692 +2020-06-06 19:00:00,74.91577777777779 +2020-06-06 20:00:00,69.16699999999973 +2020-06-06 21:00:00,72.70588888888882 +2020-06-06 22:00:00,73.12022222222214 +2020-06-06 23:00:00,78.59033333333387 +2020-06-07 00:00:00,80.07766666666649 +2020-06-07 01:00:00,67.13933333333335 +2020-06-07 02:00:00,56.78488888888878 +2020-06-07 03:00:00,41.72544444444457 +2020-06-07 04:00:00,22.158333333333417 +2020-06-07 05:00:00,25.21144444444455 +2020-06-07 06:00:00,33.71522222222227 +2020-06-07 07:00:00,34.856000000000186 +2020-06-07 08:00:00,43.130222222222116 +2020-06-07 09:00:00,49.044888888889616 +2020-06-07 10:00:00,51.28811111111146 +2020-06-07 11:00:00,48.75455555555521 +2020-06-07 12:00:00,39.21733333333332 +2020-06-07 13:00:00,52.27655555555523 +2020-06-07 14:00:00,60.53933333333292 +2020-06-07 15:00:00,80.93566666666706 +2020-06-07 16:00:00,85.57166666666726 +2020-06-07 17:00:00,82.54888888888894 +2020-06-07 18:00:00,79.26577777777624 +2020-06-07 19:00:00,77.12244444444424 +2020-06-07 20:00:00,73.52199999999944 +2020-06-07 21:00:00,72.37666666666692 +2020-06-07 22:00:00,61.322000000000024 +2020-06-07 23:00:00,69.68033333333304 +2020-06-08 00:00:00,71.80799999999998 +2020-06-08 01:00:00,73.82500000000006 +2020-06-08 02:00:00,75.65855555555505 +2020-06-08 03:00:00,75.32166666666681 +2020-06-08 04:00:00,79.10622222222199 +2020-06-08 05:00:00,77.5888888888885 +2020-06-08 06:00:00,81.82044444444522 +2020-06-08 07:00:00,85.95355555555543 +2020-06-08 08:00:00,86.8426666666664 +2020-06-08 09:00:00,83.78677777777746 +2020-06-08 10:00:00,90.04588888888773 +2020-06-08 11:00:00,86.47200000000032 +2020-06-08 12:00:00,72.42444444444428 +2020-06-08 13:00:00,47.932333333333496 +2020-06-08 14:00:00,85.48711111111125 +2020-06-08 15:00:00,81.58033333333356 +2020-06-08 16:00:00,77.9017777777776 +2020-06-08 17:00:00,65.73411111111109 +2020-06-08 18:00:00,72.46911111111096 +2020-06-08 19:00:00,62.690999999999875 +2020-06-08 20:00:00,47.60577777777774 +2020-06-08 21:00:00,62.58788888888882 +2020-06-08 22:00:00,68.5283333333334 +2020-06-08 23:00:00,71.99844444444466 +2020-06-09 00:00:00,75.55977777777782 +2020-06-09 01:00:00,75.83122222222184 +2020-06-09 02:00:00,75.79666666666677 +2020-06-09 03:00:00,84.37888888888884 +2020-06-09 04:00:00,77.57544444444447 +2020-06-09 05:00:00,66.40877777777786 +2020-06-09 06:00:00,78.11744444444479 +2020-06-09 07:00:00,79.96111111111084 +2020-06-09 08:00:00,68.52255555555575 +2020-06-09 09:00:00,59.55100000000018 +2020-06-09 10:00:00,55.95777777777836 +2020-06-09 11:00:00,68.59933333333308 +2020-06-09 12:00:00,80.84333333333335 +2020-06-09 13:00:00,78.52833333333352 +2020-06-09 14:00:00,70.17877777777791 +2020-06-09 15:00:00,60.62433333333323 +2020-06-09 16:00:00,53.985888888888894 +2020-06-09 17:00:00,53.579888888889066 +2020-06-09 18:00:00,57.73511111111104 +2020-06-09 19:00:00,81.21477777777773 +2020-06-09 20:00:00,77.38966666666661 +2020-06-09 21:00:00,76.7394444444448 +2020-06-09 22:00:00,77.96833333333304 +2020-06-09 23:00:00,74.6245555555558 +2020-06-10 00:00:00,76.62433333333324 +2020-06-10 01:00:00,89.92066666666658 +2020-06-10 02:00:00,82.71444444444431 +2020-06-10 03:00:00,77.31955555555548 +2020-06-10 04:00:00,82.49233333333322 +2020-06-10 05:00:00,73.02433333333327 +2020-06-10 06:00:00,57.443555555555626 +2020-06-10 07:00:00,50.773888888888976 +2020-06-10 08:00:00,48.39744444444434 +2020-06-10 09:00:00,50.70344444444441 +2020-06-10 10:00:00,58.844777777778226 +2020-06-10 11:00:00,44.2094444444445 +2020-06-10 12:00:00,34.176555555555524 +2020-06-10 13:00:00,25.865222222222396 +2020-06-10 14:00:00,23.38122222222234 +2020-06-10 15:00:00,24.986444444444487 +2020-06-10 16:00:00,28.67066666666666 +2020-06-10 17:00:00,25.731444444444314 +2020-06-10 18:00:00,21.12877777777784 +2020-06-10 19:00:00,17.711666666666634 +2020-06-10 20:00:00,18.03977777777785 +2020-06-10 21:00:00,19.688888888888815 +2020-06-10 22:00:00,25.833999999999996 +2020-06-10 23:00:00,17.11433333333326 +2020-06-11 00:00:00,31.788222222222142 +2020-06-11 01:00:00,38.34711111111124 +2020-06-11 02:00:00,34.45855555555565 +2020-06-11 03:00:00,29.55844444444447 +2020-06-11 04:00:00,26.390777777777867 +2020-06-11 05:00:00,21.570888888888657 +2020-06-11 06:00:00,21.351444444444443 +2020-06-11 07:00:00,28.913444444444515 +2020-06-11 08:00:00,32.97555555555563 +2020-06-11 09:00:00,23.749777777777894 +2020-06-11 10:00:00,20.716888888888725 +2020-06-11 11:00:00,23.704888888888892 +2020-06-11 12:00:00,21.1476666666667 +2020-06-11 13:00:00,21.513111111111044 +2020-06-11 14:00:00,23.056333333333416 +2020-06-11 15:00:00,25.25988888888886 +2020-06-11 16:00:00,32.10155555555565 +2020-06-11 17:00:00,33.469222222222285 +2020-06-11 18:00:00,28.91488888888902 +2020-06-11 19:00:00,23.807777777777815 +2020-06-11 20:00:00,22.635 +2020-06-11 21:00:00,19.00477777777777 +2020-06-11 22:00:00,20.265333333333423 +2020-06-11 23:00:00,13.336555555555504 +2020-06-12 00:00:00,11.47255555555567 +2020-06-12 01:00:00,10.338444444444487 +2020-06-12 02:00:00,8.753666666666618 +2020-06-12 03:00:00,2.6537777777777687 +2020-06-12 04:00:00,5.2953333333333 +2020-06-12 05:00:00,8.737666666666712 +2020-06-12 06:00:00,7.379111111111144 +2020-06-12 07:00:00,4.576111111111114 +2020-06-12 08:00:00,1.04788888888889 +2020-06-12 09:00:00,0.14677777777777967 +2020-06-12 10:00:00,2.2568888888888936 +2020-06-12 11:00:00,0.4915555555555544 +2020-06-12 12:00:00,3.0723333333333307 +2020-06-12 13:00:00,5.534111111111097 +2020-06-12 14:00:00,11.260333333333305 +2020-06-12 15:00:00,21.44811111111111 +2020-06-12 16:00:00,22.305444444444348 +2020-06-12 17:00:00,33.459444444444486 +2020-06-12 18:00:00,34.26299999999999 +2020-06-12 19:00:00,28.666444444444473 +2020-06-12 20:00:00,40.23200000000001 +2020-06-12 21:00:00,51.07088888888882 +2020-06-12 22:00:00,49.72233333333344 +2020-06-12 23:00:00,41.77666666666653 +2020-06-13 00:00:00,43.6175555555557 +2020-06-13 01:00:00,25.53599999999992 +2020-06-13 02:00:00,22.908888888888892 +2020-06-13 03:00:00,21.815999999999875 +2020-06-13 04:00:00,15.26855555555563 +2020-06-13 05:00:00,17.168666666666603 +2020-06-13 06:00:00,34.94811111111098 +2020-06-13 07:00:00,69.03188888888886 +2020-06-13 08:00:00,93.6740000000001 +2020-06-13 09:00:00,105.21266666666668 +2020-06-13 10:00:00,109.64877777777782 +2020-06-13 11:00:00,111.82566666666669 +2020-06-13 12:00:00,105.16199999999989 +2020-06-13 13:00:00,88.73788888888888 +2020-06-13 14:00:00,78.29400000000007 +2020-06-13 15:00:00,59.07022222222228 +2020-06-13 16:00:00,56.350555555555594 +2020-06-13 17:00:00,59.3553333333335 +2020-06-13 18:00:00,79.54166666666663 +2020-06-13 19:00:00,65.02922222222213 +2020-06-13 20:00:00,50.20255555555547 +2020-06-13 21:00:00,36.675555555555476 +2020-06-13 22:00:00,26.170222222222268 +2020-06-13 23:00:00,16.262333333333384 +2020-06-14 00:00:00,10.319777777777832 +2020-06-14 01:00:00,4.392333333333345 +2020-06-14 02:00:00,1.5466666666666624 +2020-06-14 03:00:00,1.509777777777785 +2020-06-14 04:00:00,4.738333333333354 +2020-06-14 05:00:00,14.613999999999987 +2020-06-14 06:00:00,10.02555555555554 +2020-06-14 07:00:00,15.033333333333234 +2020-06-14 08:00:00,24.868666666666627 +2020-06-14 09:00:00,32.880444444444514 +2020-06-14 10:00:00,48.42077777777773 +2020-06-14 11:00:00,68.13233333333358 +2020-06-14 12:00:00,60.40644444444453 +2020-06-14 13:00:00,62.60577777777789 +2020-06-14 14:00:00,59.03688888888895 +2020-06-14 15:00:00,51.016333333333236 +2020-06-14 16:00:00,41.2522222222222 +2020-06-14 17:00:00,29.273777777777905 +2020-06-14 18:00:00,38.12444444444455 +2020-06-14 19:00:00,32.785222222221876 +2020-06-14 20:00:00,14.409888888888874 +2020-06-14 21:00:00,12.781444444444451 +2020-06-14 22:00:00,4.098888888888957 +2020-06-14 23:00:00,0.4028888888888928 +2020-06-15 00:00:00,-0.2674444444444455 +2020-06-15 01:00:00,-0.45333333333333026 +2020-06-15 02:00:00,-0.07288888888888793 +2020-06-15 03:00:00,1.2402222222222166 +2020-06-15 04:00:00,7.832555555555545 +2020-06-15 05:00:00,15.83844444444444 +2020-06-15 06:00:00,20.473666666666652 +2020-06-15 07:00:00,23.51399999999987 +2020-06-15 08:00:00,32.6486666666667 +2020-06-15 09:00:00,32.89799999999971 +2020-06-15 10:00:00,20.947333333333205 +2020-06-15 11:00:00,42.49388888888889 +2020-06-15 12:00:00,36.46511111111104 +2020-06-15 13:00:00,29.105777777777774 +2020-06-15 14:00:00,35.31666666666674 +2020-06-15 15:00:00,42.55122222222212 +2020-06-15 16:00:00,37.6800000000003 +2020-06-15 17:00:00,39.06088888888877 +2020-06-15 18:00:00,27.906555555555723 +2020-06-15 19:00:00,34.02599999999981 +2020-06-15 20:00:00,32.610777777777926 +2020-06-15 21:00:00,22.6311111111111 +2020-06-15 22:00:00,15.66166666666658 +2020-06-15 23:00:00,15.856888888888976 +2020-06-16 00:00:00,14.685222222222153 +2020-06-16 01:00:00,8.168888888888773 +2020-06-16 02:00:00,2.850000000000014 +2020-06-16 03:00:00,0.9600000000000098 +2020-06-16 04:00:00,10.673333333333376 +2020-06-16 05:00:00,17.362999999999975 +2020-06-16 06:00:00,23.258777777777794 +2020-06-16 07:00:00,40.643444444444434 +2020-06-16 08:00:00,31.098555555555645 +2020-06-16 09:00:00,40.89533333333357 +2020-06-16 10:00:00,33.00644444444451 +2020-06-16 11:00:00,21.769222222222147 +2020-06-16 12:00:00,19.351666666666638 +2020-06-16 13:00:00,29.409000000000024 +2020-06-16 14:00:00,50.49033333333335 +2020-06-16 15:00:00,77.77722222222185 +2020-06-16 16:00:00,89.72022222222229 +2020-06-16 17:00:00,87.35055555555556 +2020-06-16 18:00:00,87.61533333333303 +2020-06-16 19:00:00,73.98566666666663 +2020-06-16 20:00:00,68.52600000000037 +2020-06-16 21:00:00,52.660444444444394 +2020-06-16 22:00:00,29.39244444444453 +2020-06-16 23:00:00,49.486666666666835 +2020-06-17 00:00:00,14.102555555555687 +2020-06-17 01:00:00,2.232777777777771 +2020-06-17 02:00:00,2.7881111111111214 +2020-06-17 03:00:00,0.04011111111111126 +2020-06-17 04:00:00,17.131222222222245 +2020-06-17 05:00:00,29.112777777777705 +2020-06-17 06:00:00,73.38766666666658 +2020-06-17 07:00:00,65.71388888888892 +2020-06-17 08:00:00,6.139888888888965 +2020-06-17 09:00:00,43.78899999999997 +2020-06-17 10:00:00,75.71899999999998 +2020-06-17 11:00:00,80.92366666666649 +2020-06-17 12:00:00,76.1616666666664 +2020-06-17 13:00:00,74.92277777777785 +2020-06-17 14:00:00,52.3150000000001 +2020-06-17 15:00:00,45.34011111111121 +2020-06-17 16:00:00,38.025444444444325 +2020-06-17 17:00:00,47.3353333333331 +2020-06-17 18:00:00,35.72777777777785 +2020-06-17 19:00:00,30.801666666666627 +2020-06-17 20:00:00,34.55155555555553 +2020-06-17 21:00:00,20.99511111111122 +2020-06-17 22:00:00,16.40588888888874 +2020-06-17 23:00:00,9.969777777777812 +2020-06-18 00:00:00,8.539000000000039 +2020-06-18 01:00:00,2.6293333333333697 +2020-06-18 02:00:00,-0.26622222222222175 +2020-06-18 03:00:00,0.2747777777777774 +2020-06-18 04:00:00,6.254000000000082 +2020-06-18 05:00:00,5.369444444444467 +2020-06-18 06:00:00,14.121000000000036 +2020-06-18 07:00:00,25.14722222222241 +2020-06-18 08:00:00,18.24833333333343 +2020-06-18 09:00:00,13.604888888888835 +2020-06-18 10:00:00,17.786222222222168 +2020-06-18 11:00:00,22.446555555555484 +2020-06-18 12:00:00,27.57100000000017 +2020-06-18 13:00:00,34.69066666666659 +2020-06-18 14:00:00,28.105444444444647 +2020-06-18 15:00:00,34.101222222222255 +2020-06-18 16:00:00,50.53655555555545 +2020-06-18 17:00:00,62.95322222222224 +2020-06-18 18:00:00,62.853222222222186 +2020-06-18 19:00:00,37.817555555555614 +2020-06-18 20:00:00,19.25866666666667 +2020-06-18 21:00:00,18.67255555555562 +2020-06-18 22:00:00,12.257333333333422 +2020-06-18 23:00:00,13.66655555555553 +2020-06-19 00:00:00,16.07477777777774 +2020-06-19 01:00:00,12.938777777777753 +2020-06-19 02:00:00,10.2586666666666 +2020-06-19 03:00:00,13.880111111111141 +2020-06-19 04:00:00,11.179666666666659 +2020-06-19 05:00:00,5.386000000000019 +2020-06-19 06:00:00,6.4549999999999725 +2020-06-19 07:00:00,7.969666666666631 +2020-06-19 08:00:00,13.926444444444472 +2020-06-19 09:00:00,14.51955555555559 +2020-06-19 10:00:00,14.728888888888852 +2020-06-19 11:00:00,23.6147777777778 +2020-06-19 12:00:00,25.547777777777963 +2020-06-19 13:00:00,31.35366666666676 +2020-06-19 14:00:00,16.125111111111 +2020-06-19 15:00:00,9.45366666666664 +2020-06-19 16:00:00,18.996222222222414 +2020-06-19 17:00:00,17.917444444444584 +2020-06-19 18:00:00,27.59111111111114 +2020-06-19 19:00:00,34.582777777777956 +2020-06-19 20:00:00,28.512888888888927 +2020-06-19 21:00:00,12.187666666666768 +2020-06-19 22:00:00,8.915333333333399 +2020-06-19 23:00:00,5.011111111111184 +2020-06-20 00:00:00,1.8755555555555528 +2020-06-20 01:00:00,2.734222222222221 +2020-06-20 02:00:00,4.519555555555527 +2020-06-20 03:00:00,2.876222222222224 +2020-06-20 04:00:00,4.284555555555557 +2020-06-20 05:00:00,8.629333333333415 +2020-06-20 06:00:00,3.1336666666666506 +2020-06-20 07:00:00,2.561444444444441 +2020-06-20 08:00:00,3.8418888888888874 +2020-06-20 09:00:00,5.9660000000000055 +2020-06-20 10:00:00,12.27977777777775 +2020-06-20 11:00:00,21.835444444444526 +2020-06-20 12:00:00,26.359666666666644 +2020-06-20 13:00:00,23.09999999999986 +2020-06-20 14:00:00,9.33755555555557 +2020-06-20 15:00:00,7.703777777777699 +2020-06-20 16:00:00,8.82122222222211 +2020-06-20 17:00:00,7.894333333333338 +2020-06-20 18:00:00,4.453555555555528 +2020-06-20 19:00:00,14.498777777777843 +2020-06-20 20:00:00,13.802555555555415 +2020-06-20 21:00:00,6.837000000000047 +2020-06-20 22:00:00,7.613666666666652 +2020-06-20 23:00:00,1.7892222222222267 +2020-06-21 00:00:00,-0.43411111111110845 +2020-06-21 01:00:00,-0.8999999999999857 +2020-06-21 02:00:00,-0.8867777777777605 +2020-06-21 03:00:00,-0.8537777777777654 +2020-06-21 04:00:00,-0.8651111111110983 +2020-06-21 05:00:00,4.386333333333314 +2020-06-21 06:00:00,10.188555555555602 +2020-06-21 07:00:00,11.914666666666623 +2020-06-21 08:00:00,12.888111111111217 +2020-06-21 09:00:00,15.11277777777766 +2020-06-21 10:00:00,14.030888888888839 +2020-06-21 11:00:00,12.357111111111196 +2020-06-21 12:00:00,13.164999999999976 +2020-06-21 13:00:00,16.14955555555542 +2020-06-21 14:00:00,13.932666666666474 +2020-06-21 15:00:00,9.785444444444462 +2020-06-21 16:00:00,8.445444444444423 +2020-06-21 17:00:00,13.778111111111157 +2020-06-21 18:00:00,14.93299999999994 +2020-06-21 19:00:00,17.487777777777797 +2020-06-21 20:00:00,25.20811111111109 +2020-06-21 21:00:00,26.0144444444444 +2020-06-21 22:00:00,14.562555555555695 +2020-06-21 23:00:00,16.35366666666673 +2020-06-22 00:00:00,11.502777777777693 +2020-06-22 01:00:00,8.477777777777753 +2020-06-22 02:00:00,8.015666666666647 +2020-06-22 03:00:00,9.622999999999939 +2020-06-22 04:00:00,13.84022222222215 +2020-06-22 05:00:00,14.639666666666688 +2020-06-22 06:00:00,18.131333333333394 +2020-06-22 07:00:00,29.04544444444427 +2020-06-22 08:00:00,41.2638888888893 +2020-06-22 09:00:00,58.04955555555485 +2020-06-22 10:00:00,67.91755555555568 +2020-06-22 11:00:00,62.538000000000565 +2020-06-22 12:00:00,49.18722222222218 +2020-06-22 13:00:00,50.681111111111434 +2020-06-22 14:00:00,55.190444444444566 +2020-06-22 15:00:00,57.64188888888865 +2020-06-22 16:00:00,64.86355555555582 +2020-06-22 17:00:00,76.52266666666692 +2020-06-22 18:00:00,54.08555555555482 +2020-06-22 19:00:00,52.410000000000046 +2020-06-22 20:00:00,35.70822222222246 +2020-06-22 21:00:00,11.182999999999891 +2020-06-22 22:00:00,3.583999999999979 +2020-06-22 23:00:00,-0.18877777777777827 +2020-06-23 00:00:00,-0.891333333333322 +2020-06-23 01:00:00,-0.8999999999999857 +2020-06-23 02:00:00,-0.8913333333333171 +2020-06-23 03:00:00,-0.8408888888888773 +2020-06-23 04:00:00,-0.883111111111093 +2020-06-23 05:00:00,-0.8656666666666545 +2020-06-23 06:00:00,-0.8501111111110968 +2020-06-23 07:00:00,0.156000000000003 +2020-06-23 08:00:00,4.365333333333357 +2020-06-23 09:00:00,11.875888888888808 +2020-06-23 10:00:00,17.078444444444546 +2020-06-23 11:00:00,21.459999999999795 +2020-06-23 12:00:00,22.575555555555603 +2020-06-23 13:00:00,18.191333333333304 +2020-06-23 14:00:00,20.39077777777775 +2020-06-23 15:00:00,17.233111111111125 +2020-06-23 16:00:00,13.325555555555795 +2020-06-23 17:00:00,8.638222222222156 +2020-06-23 18:00:00,7.327111111111069 +2020-06-23 19:00:00,16.602777777777614 +2020-06-23 20:00:00,20.70022222222228 +2020-06-23 21:00:00,15.072444444444605 +2020-06-23 22:00:00,11.082666666666604 +2020-06-23 23:00:00,15.642444444444399 +2020-06-24 00:00:00,20.99533333333331 +2020-06-24 01:00:00,19.676222222222286 +2020-06-24 02:00:00,6.709222222222161 +2020-06-24 03:00:00,1.1701111111111129 +2020-06-24 04:00:00,1.8920000000000001 +2020-06-24 05:00:00,2.2755555555555236 +2020-06-24 06:00:00,0.9944444444444449 +2020-06-24 07:00:00,19.146444444444416 +2020-06-24 08:00:00,46.451222222221986 +2020-06-24 09:00:00,68.38277777777779 +2020-06-24 10:00:00,42.64011111111111 +2020-06-24 11:00:00,70.78144444444465 +2020-06-24 12:00:00,85.47311111111051 +2020-06-24 13:00:00,77.61211111111065 +2020-06-24 14:00:00,66.35722222222223 +2020-06-24 15:00:00,78.20566666666659 +2020-06-24 16:00:00,79.79655555555595 +2020-06-24 17:00:00,79.59355555555568 +2020-06-24 18:00:00,79.00677777777753 +2020-06-24 19:00:00,78.11688888888891 +2020-06-24 20:00:00,73.88277777777834 +2020-06-24 21:00:00,68.33844444444476 +2020-06-24 22:00:00,69.93344444444433 +2020-06-24 23:00:00,77.73733333333354 +2020-06-25 00:00:00,74.84399999999994 +2020-06-25 01:00:00,69.26099999999985 +2020-06-25 02:00:00,68.14966666666666 +2020-06-25 03:00:00,74.77599999999994 +2020-06-25 04:00:00,103.79011111111095 +2020-06-25 05:00:00,105.59177777777774 +2020-06-25 06:00:00,111.40266666666632 +2020-06-25 07:00:00,105.50911111111103 +2020-06-25 08:00:00,69.72077777777756 +2020-06-25 09:00:00,37.850111111111104 +2020-06-25 10:00:00,28.06988888888875 +2020-06-25 11:00:00,38.85911111111134 +2020-06-25 12:00:00,40.21211111111075 +2020-06-25 13:00:00,50.556666666666366 +2020-06-25 14:00:00,68.14099999999988 +2020-06-25 15:00:00,86.88688888888888 +2020-06-25 16:00:00,100.5626666666665 +2020-06-25 17:00:00,90.84688888888839 +2020-06-25 18:00:00,83.60466666666659 +2020-06-25 19:00:00,79.14800000000001 +2020-06-25 20:00:00,75.41011111111135 +2020-06-25 21:00:00,68.11877777777869 +2020-06-25 22:00:00,67.84966666666656 +2020-06-25 23:00:00,66.54577777777807 +2020-06-26 00:00:00,69.9220000000004 +2020-06-26 01:00:00,69.34366666666693 +2020-06-26 02:00:00,92.14833333333266 +2020-06-26 03:00:00,94.09422222222273 +2020-06-26 04:00:00,114.4987777777779 +2020-06-26 05:00:00,108.37322222222205 +2020-06-26 06:00:00,107.20755555555567 +2020-06-26 07:00:00,70.86644444444447 +2020-06-26 08:00:00,65.33966666666659 +2020-06-26 09:00:00,60.61066666666663 +2020-06-26 10:00:00,64.0925555555553 +2020-06-26 11:00:00,59.595444444444645 +2020-06-26 12:00:00,29.3250000000001 +2020-06-26 13:00:00,68.84388888888904 +2020-06-26 14:00:00,43.77944444444459 +2020-06-26 15:00:00,20.72488888888883 +2020-06-26 16:00:00,13.02244444444442 +2020-06-26 17:00:00,8.779000000000014 +2020-06-26 18:00:00,4.222111111111128 +2020-06-26 19:00:00,1.2267777777777769 +2020-06-26 20:00:00,2.896888888888876 +2020-06-26 21:00:00,-0.5888888888888865 +2020-06-26 22:00:00,-0.8907777777777639 +2020-06-26 23:00:00,-0.6283333333333314 +2020-06-27 00:00:00,0.5446666666666653 +2020-06-27 01:00:00,3.8477777777777784 +2020-06-27 02:00:00,2.2443333333333184 +2020-06-27 03:00:00,2.0006666666666746 +2020-06-27 04:00:00,2.528222222222224 +2020-06-27 05:00:00,0.5576666666666673 +2020-06-27 06:00:00,-0.20166666666666885 +2020-06-27 07:00:00,0.7171111111111146 +2020-06-27 08:00:00,7.479444444444507 +2020-06-27 09:00:00,6.514333333333342 +2020-06-27 10:00:00,11.458555555555511 +2020-06-27 11:00:00,11.848666666666672 +2020-06-27 12:00:00,12.712666666666777 +2020-06-27 13:00:00,11.238777777777798 +2020-06-27 14:00:00,16.267222222222234 +2020-06-27 15:00:00,12.193555555555676 +2020-06-27 16:00:00,7.955333333333355 +2020-06-27 17:00:00,9.54922222222224 +2020-06-27 18:00:00,8.0463333333334 +2020-06-27 19:00:00,8.573888888888945 +2020-06-27 20:00:00,4.519888888888847 +2020-06-27 21:00:00,4.007111111111094 +2020-06-27 22:00:00,2.1361111111111155 +2020-06-27 23:00:00,-0.8771111111110971 +2020-06-28 00:00:00,-0.9085555555555432 +2020-06-28 01:00:00,-0.8994444444444301 +2020-06-28 02:00:00,-0.7667777777777716 +2020-06-28 03:00:00,-0.41655555555555956 +2020-06-28 04:00:00,5.608555555555555 +2020-06-28 05:00:00,16.472222222222257 +2020-06-28 06:00:00,25.386666666666567 +2020-06-28 07:00:00,26.134666666666384 +2020-06-28 08:00:00,25.733333333333334 +2020-06-28 09:00:00,20.665444444444415 +2020-06-28 10:00:00,21.469555555555477 +2020-06-28 11:00:00,16.43266666666661 +2020-06-28 12:00:00,18.95677777777776 +2020-06-28 13:00:00,18.199111111111115 +2020-06-28 14:00:00,23.44111111111113 +2020-06-28 15:00:00,26.944000000000088 +2020-06-28 16:00:00,31.72044444444425 +2020-06-28 17:00:00,32.25066666666656 +2020-06-28 18:00:00,31.051555555555513 +2020-06-28 19:00:00,23.90777777777767 +2020-06-28 20:00:00,20.899111111111072 +2020-06-28 21:00:00,21.741888888888926 +2020-06-28 22:00:00,13.331444444444438 +2020-06-28 23:00:00,4.1900000000000635 +2020-06-29 00:00:00,1.1884444444444446 +2020-06-29 01:00:00,0.3686666666666758 +2020-06-29 02:00:00,-0.8911111111110973 +2020-06-29 03:00:00,-0.8001111111111079 +2020-06-29 04:00:00,2.1703333333333346 +2020-06-29 05:00:00,15.280999999999882 +2020-06-29 06:00:00,19.199777777777822 +2020-06-29 07:00:00,29.435999999999968 +2020-06-29 08:00:00,43.79066666666664 +2020-06-29 09:00:00,46.08811111111117 +2020-06-29 10:00:00,39.37200000000014 +2020-06-29 11:00:00,41.11855555555567 +2020-06-29 12:00:00,57.163000000000096 +2020-06-29 13:00:00,44.59555555555564 +2020-06-29 14:00:00,48.17166666666665 +2020-06-29 15:00:00,43.05633333333332 +2020-06-29 16:00:00,54.539444444444605 +2020-06-29 17:00:00,74.81144444444438 +2020-06-29 18:00:00,54.44322222222213 +2020-06-29 19:00:00,38.871888888888925 +2020-06-29 20:00:00,47.638777777777904 +2020-06-29 21:00:00,36.568777777777704 +2020-06-29 22:00:00,27.367999999999935 +2020-06-29 23:00:00,24.137444444444327 +2020-06-30 00:00:00,8.537111111111125 +2020-06-30 01:00:00,3.92500000000002 +2020-06-30 02:00:00,0.9108888888888882 +2020-06-30 03:00:00,1.7006666666666634 +2020-06-30 04:00:00,7.67144444444446 +2020-06-30 05:00:00,18.149222222222257 +2020-06-30 06:00:00,28.619222222222085 +2020-06-30 07:00:00,44.41044444444433 +2020-06-30 08:00:00,56.24822222222217 +2020-06-30 09:00:00,72.04522222222215 +2020-06-30 10:00:00,83.45822222222209 +2020-06-30 11:00:00,88.76966666666671 +2020-06-30 12:00:00,103.32988888888872 +2020-06-30 13:00:00,90.31844444444435 +2020-06-30 14:00:00,57.27066666666667 +2020-06-30 15:00:00,39.535444444444494 +2020-06-30 16:00:00,69.51655555555544 +2020-06-30 17:00:00,81.1872222222224 +2020-06-30 18:00:00,67.47444444444447 +2020-06-30 19:00:00,62.14577777777771 +2020-06-30 20:00:00,53.68633333333329 +2020-06-30 21:00:00,30.270555555555543 +2020-06-30 22:00:00,16.03722222222222 +2020-06-30 23:00:00,29.351666666666603 +2020-07-01 00:00:00,37.779222222222074 +2020-07-01 01:00:00,24.577444444444485 +2020-07-01 02:00:00,9.430666666666614 +2020-07-01 03:00:00,3.8670000000000098 +2020-07-01 04:00:00,0.5619999999999978 +2020-07-01 05:00:00,1.38522222222223 +2020-07-01 06:00:00,-0.11466666666666915 +2020-07-01 07:00:00,4.234555555555529 +2020-07-01 08:00:00,8.48355555555552 +2020-07-01 09:00:00,7.906555555555504 +2020-07-01 10:00:00,5.887111111111097 +2020-07-01 11:00:00,5.689111111111126 +2020-07-01 12:00:00,2.9837777777777883 +2020-07-01 13:00:00,2.76755555555556 +2020-07-01 14:00:00,3.5913333333333384 +2020-07-01 15:00:00,0.6953333333333275 +2020-07-01 16:00:00,-0.37644444444444447 +2020-07-01 17:00:00,-0.025444444444446344 +2020-07-01 18:00:00,-0.8997777777777645 +2020-07-01 19:00:00,-0.9116666666666551 +2020-07-01 20:00:00,-0.837666666666663 +2020-07-01 21:00:00,-0.7975555555555495 +2020-07-01 22:00:00,-0.8027777777777674 +2020-07-01 23:00:00,0.5563333333333306 +2020-07-02 00:00:00,10.107444444444411 +2020-07-02 01:00:00,13.422777777777746 +2020-07-02 02:00:00,8.528333333333306 +2020-07-02 03:00:00,11.34044444444457 +2020-07-02 04:00:00,13.967444444444318 +2020-07-02 05:00:00,11.037666666666615 +2020-07-02 06:00:00,7.465666666666677 +2020-07-02 07:00:00,12.976000000000036 +2020-07-02 08:00:00,16.883111111111234 +2020-07-02 09:00:00,23.336222222222002 +2020-07-02 10:00:00,6.191666666666611 +2020-07-02 11:00:00,6.182555555555578 +2020-07-02 12:00:00,9.478666666666701 +2020-07-02 13:00:00,6.52300000000001 +2020-07-02 14:00:00,7.067444444444438 +2020-07-02 15:00:00,2.428222222222221 +2020-07-02 16:00:00,-0.7321111111110989 +2020-07-02 17:00:00,-0.9172222222222067 +2020-07-02 18:00:00,-0.8999999999999857 +2020-07-02 19:00:00,-0.8999999999999857 +2020-07-02 20:00:00,1.3202222222222089 +2020-07-02 21:00:00,0.7623333333333313 +2020-07-02 22:00:00,2.9487777777777713 +2020-07-02 23:00:00,7.761999999999986 +2020-07-03 00:00:00,4.090444444444449 +2020-07-03 01:00:00,18.15866666666661 +2020-07-03 02:00:00,26.992111111111228 +2020-07-03 03:00:00,36.444999999999936 +2020-07-03 04:00:00,37.3904444444444 +2020-07-03 05:00:00,18.764111111111053 +2020-07-03 06:00:00,11.749888888889062 +2020-07-03 07:00:00,18.485888888888926 +2020-07-03 08:00:00,19.05333333333358 +2020-07-03 09:00:00,13.845333333333357 +2020-07-03 10:00:00,17.985111111111113 +2020-07-03 11:00:00,21.575222222222262 +2020-07-03 12:00:00,25.146333333333168 +2020-07-03 13:00:00,25.71088888888888 +2020-07-03 14:00:00,33.7614444444445 +2020-07-03 15:00:00,38.828777777777916 +2020-07-03 16:00:00,47.97477777777783 +2020-07-03 17:00:00,44.11833333333339 +2020-07-03 18:00:00,48.33688888888874 +2020-07-03 19:00:00,26.338555555555473 +2020-07-03 20:00:00,20.877555555555556 +2020-07-03 21:00:00,10.100333333333356 +2020-07-03 22:00:00,15.896222222222322 +2020-07-03 23:00:00,17.442222222222213 +2020-07-04 00:00:00,11.920555555555627 +2020-07-04 01:00:00,14.50877777777779 +2020-07-04 02:00:00,17.48822222222227 +2020-07-04 03:00:00,14.526666666666712 +2020-07-04 04:00:00,14.155000000000024 +2020-07-04 05:00:00,27.72199999999989 +2020-07-04 06:00:00,58.10055555555517 +2020-07-04 07:00:00,38.6746666666667 +2020-07-04 08:00:00,66.56988888888897 +2020-07-04 09:00:00,49.6512222222223 +2020-07-04 10:00:00,27.280555555555605 +2020-07-04 11:00:00,31.260666666666722 +2020-07-04 12:00:00,37.38666666666671 +2020-07-04 13:00:00,31.568222222222413 +2020-07-04 14:00:00,18.945444444444266 +2020-07-04 15:00:00,16.615333333333393 +2020-07-04 16:00:00,21.80522222222207 +2020-07-04 17:00:00,22.850777777777814 +2020-07-04 18:00:00,21.33733333333338 +2020-07-04 19:00:00,7.308999999999959 +2020-07-04 20:00:00,3.898666666666658 +2020-07-04 21:00:00,-0.406111111111109 +2020-07-04 22:00:00,-0.8999999999999857 +2020-07-04 23:00:00,-0.8833333333333196 +2020-07-05 00:00:00,-0.8829999999999834 +2020-07-05 01:00:00,8.146444444444468 +2020-07-05 02:00:00,17.049333333333166 +2020-07-05 03:00:00,15.66700000000012 +2020-07-05 04:00:00,-0.051111111111112495 +2020-07-05 05:00:00,3.9961111111110994 +2020-07-05 06:00:00,13.671000000000085 +2020-07-05 07:00:00,4.997555555555569 +2020-07-05 08:00:00,21.06722222222217 +2020-07-05 09:00:00,31.80522222222207 +2020-07-05 10:00:00,31.017777777777738 +2020-07-05 11:00:00,14.302555555555504 +2020-07-05 12:00:00,8.464444444444341 +2020-07-05 13:00:00,18.47977777777781 +2020-07-05 14:00:00,41.123444444444594 +2020-07-05 15:00:00,29.999444444444247 +2020-07-05 16:00:00,14.607777777777581 +2020-07-05 17:00:00,13.577333333333323 +2020-07-05 18:00:00,25.578999999999965 +2020-07-05 19:00:00,22.761888888889033 +2020-07-05 20:00:00,28.799555555555607 +2020-07-05 21:00:00,24.793111111111134 +2020-07-05 22:00:00,23.61388888888896 +2020-07-05 23:00:00,28.23233333333334 +2020-07-06 00:00:00,29.91622222222221 +2020-07-06 01:00:00,42.62266666666649 +2020-07-06 02:00:00,42.72411111111106 +2020-07-06 03:00:00,30.78888888888872 +2020-07-06 04:00:00,15.199333333333309 +2020-07-06 05:00:00,28.332777777777643 +2020-07-06 06:00:00,21.67655555555539 +2020-07-06 07:00:00,21.949000000000208 +2020-07-06 08:00:00,8.696444444444438 +2020-07-06 09:00:00,7.789222222222265 +2020-07-06 10:00:00,1.8941111111110942 +2020-07-06 11:00:00,-0.8649999999999853 +2020-07-06 12:00:00,1.5988888888888833 +2020-07-06 13:00:00,1.8478888888888811 +2020-07-06 14:00:00,2.255555555555554 +2020-07-06 15:00:00,2.218777777777767 +2020-07-06 16:00:00,4.9978888888888875 +2020-07-06 17:00:00,6.98622222222225 +2020-07-06 18:00:00,9.493777777777828 +2020-07-06 19:00:00,9.527999999999937 +2020-07-06 20:00:00,2.1473333333333255 +2020-07-06 21:00:00,-0.5933333333333326 +2020-07-06 22:00:00,-0.8966666666666516 +2020-07-06 23:00:00,-0.908333333333321 +2020-07-07 00:00:00,-0.8553333333333258 +2020-07-07 01:00:00,-0.8762222222222111 +2020-07-07 02:00:00,-0.8588888888888838 +2020-07-07 03:00:00,-0.6897777777777758 +2020-07-07 04:00:00,6.638666666666682 +2020-07-07 05:00:00,6.4879999999999605 +2020-07-07 06:00:00,6.909111111111217 +2020-07-07 07:00:00,13.09822222222218 +2020-07-07 08:00:00,32.08244444444445 +2020-07-07 09:00:00,30.380777777777766 +2020-07-07 10:00:00,23.657333333333206 +2020-07-07 11:00:00,25.05155555555564 +2020-07-07 12:00:00,16.08899999999999 +2020-07-07 13:00:00,18.123555555555523 +2020-07-07 14:00:00,22.94288888888881 +2020-07-07 15:00:00,25.790777777777706 +2020-07-07 16:00:00,42.052333333333394 +2020-07-07 17:00:00,47.79966666666701 +2020-07-07 18:00:00,50.92166666666666 +2020-07-07 19:00:00,23.376777777777765 +2020-07-07 20:00:00,15.685333333333327 +2020-07-07 21:00:00,23.98766666666667 +2020-07-07 22:00:00,24.944111111111173 +2020-07-07 23:00:00,17.284888888888894 +2020-07-08 00:00:00,19.034444444444443 +2020-07-08 01:00:00,16.666888888888867 +2020-07-08 02:00:00,19.665333333333287 +2020-07-08 03:00:00,21.111444444444462 +2020-07-08 04:00:00,21.088666666666665 +2020-07-08 05:00:00,18.325555555555724 +2020-07-08 06:00:00,12.261333333333392 +2020-07-08 07:00:00,6.56233333333337 +2020-07-08 08:00:00,5.474888888888919 +2020-07-08 09:00:00,2.2238888888888897 +2020-07-08 10:00:00,8.89666666666666 +2020-07-08 11:00:00,10.300000000000008 diff --git a/greykite/data/monthly/monthly_fred_housing.csv b/greykite/data/monthly/monthly_fred_housing.csv new file mode 100644 index 0000000..40aab15 --- /dev/null +++ b/greykite/data/monthly/monthly_fred_housing.csv @@ -0,0 +1,708 @@ +ts,y +1963-01-01,4.7 +1963-02-01,6.6 +1963-03-01,6.4 +1963-04-01,5.3 +1963-05-01,5.1 +1963-06-01,6 +1963-07-01,4.6 +1963-08-01,5.6 +1963-09-01,5.4 +1963-10-01,5.9 +1963-11-01,5.5 +1963-12-01,6.1 +1964-01-01,5.8 +1964-02-01,5.5 +1964-03-01,5.8 +1964-04-01,6 +1964-05-01,6.2 +1964-06-01,5.7 +1964-07-01,5.5 +1964-08-01,5.4 +1964-09-01,5.4 +1964-10-01,5.3 +1964-11-01,5.6 +1964-12-01,5.5 +1965-01-01,5.6 +1965-02-01,5.5 +1965-03-01,5.4 +1965-04-01,5.6 +1965-05-01,5.3 +1965-06-01,4.7 +1965-07-01,5.2 +1965-08-01,4.6 +1965-09-01,4.9 +1965-10-01,5 +1965-11-01,4.6 +1965-12-01,4.4 +1966-01-01,4.7 +1966-02-01,4.9 +1966-03-01,5 +1966-04-01,5.1 +1966-05-01,5.3 +1966-06-01,6 +1966-07-01,5.9 +1966-08-01,6.8 +1966-09-01,7.2 +1966-10-01,6.3 +1966-11-01,6.2 +1966-12-01,6.3 +1967-01-01,5.7 +1967-02-01,5.7 +1967-03-01,5.4 +1967-04-01,4.9 +1967-05-01,4.5 +1967-06-01,4.6 +1967-07-01,4.4 +1967-08-01,4.4 +1967-09-01,4.3 +1967-10-01,4.1 +1967-11-01,4.6 +1967-12-01,4.7 +1968-01-01,4.7 +1968-02-01,4.1 +1968-03-01,4.8 +1968-04-01,4.9 +1968-05-01,5.5 +1968-06-01,5.5 +1968-07-01,5.1 +1968-08-01,5 +1968-09-01,5.1 +1968-10-01,5.2 +1968-11-01,5.6 +1968-12-01,5.2 +1969-01-01,5.5 +1969-02-01,4.9 +1969-03-01,5.7 +1969-04-01,6 +1969-05-01,6.1 +1969-06-01,5.8 +1969-07-01,6.3 +1969-08-01,6.5 +1969-09-01,6.9 +1969-10-01,7 +1969-11-01,6.2 +1969-12-01,6.1 +1970-01-01,5.5 +1970-02-01,7.2 +1970-03-01,6.8 +1970-04-01,6 +1970-05-01,5.7 +1970-06-01,5.5 +1970-07-01,5.4 +1970-08-01,5.1 +1970-09-01,4.7 +1970-10-01,4.8 +1970-11-01,4.6 +1970-12-01,4.7 +1971-01-01,4.3 +1971-02-01,4.4 +1971-03-01,4 +1971-04-01,4.2 +1971-05-01,4.6 +1971-06-01,4.7 +1971-07-01,4.1 +1971-08-01,4.7 +1971-09-01,5.2 +1971-10-01,5 +1971-11-01,4.9 +1971-12-01,5.1 +1972-01-01,5.2 +1972-02-01,5.4 +1972-03-01,6.1 +1972-04-01,5.8 +1972-05-01,6.1 +1972-06-01,6.3 +1972-07-01,6.3 +1972-08-01,6 +1972-09-01,6.2 +1972-10-01,5.7 +1972-11-01,6.8 +1972-12-01,6.5 +1973-01-01,6.5 +1973-02-01,6.8 +1973-03-01,7 +1973-04-01,7.7 +1973-05-01,7.5 +1973-06-01,7.8 +1973-07-01,8.7 +1973-08-01,9.4 +1973-09-01,9.5 +1973-10-01,9.4 +1973-11-01,9.6 +1973-12-01,10.1 +1974-01-01,9.7 +1974-02-01,9.6 +1974-03-01,8.8 +1974-04-01,9.1 +1974-05-01,8 +1974-06-01,8.9 +1974-07-01,8.8 +1974-08-01,9.3 +1974-09-01,9.1 +1974-10-01,9.8 +1974-11-01,9.7 +1974-12-01,10.3 +1975-01-01,9.9 +1975-02-01,10.4 +1975-03-01,8.9 +1975-04-01,7.2 +1975-05-01,6.8 +1975-06-01,7.2 +1975-07-01,7 +1975-08-01,6.8 +1975-09-01,7.3 +1975-10-01,6.6 +1975-11-01,5.8 +1975-12-01,5.8 +1976-01-01,6.4 +1976-02-01,5.9 +1976-03-01,6.8 +1976-04-01,6.4 +1976-05-01,7 +1976-06-01,6.9 +1976-07-01,6.4 +1976-08-01,6.2 +1976-09-01,6.2 +1976-10-01,5.8 +1976-11-01,6 +1976-12-01,5.6 +1977-01-01,5.3 +1977-02-01,5.1 +1977-03-01,5 +1977-04-01,5.5 +1977-05-01,5.4 +1977-06-01,5.5 +1977-07-01,6.1 +1977-08-01,5.8 +1977-09-01,5.9 +1977-10-01,6.1 +1977-11-01,6 +1977-12-01,6 +1978-01-01,5.9 +1978-02-01,6.3 +1978-03-01,6.1 +1978-04-01,5.8 +1978-05-01,5.9 +1978-06-01,6.2 +1978-07-01,6.6 +1978-08-01,6.6 +1978-09-01,5.9 +1978-10-01,5.7 +1978-11-01,6.5 +1978-12-01,6.1 +1979-01-01,6.6 +1979-02-01,6.8 +1979-03-01,6.6 +1979-04-01,6.8 +1979-05-01,7.1 +1979-06-01,7.4 +1979-07-01,7.1 +1979-08-01,6.9 +1979-09-01,7.4 +1979-10-01,7.4 +1979-11-01,8.3 +1979-12-01,8.6 +1980-01-01,7.9 +1980-02-01,8.6 +1980-03-01,9.8 +1980-04-01,11.6 +1980-05-01,9.2 +1980-06-01,7.6 +1980-07-01,6.5 +1980-08-01,6 +1980-09-01,7.3 +1980-10-01,7.3 +1980-11-01,7.4 +1980-12-01,7.6 +1981-01-01,8 +1981-02-01,8.1 +1981-03-01,7.7 +1981-04-01,8.6 +1981-05-01,8.4 +1981-06-01,9.2 +1981-07-01,9 +1981-08-01,9.8 +1981-09-01,11.3 +1981-10-01,10.3 +1981-11-01,9.1 +1981-12-01,7.1 +1982-01-01,8.9 +1982-02-01,9.2 +1982-03-01,8.7 +1982-04-01,9.4 +1982-05-01,8.3 +1982-06-01,8.3 +1982-07-01,8.2 +1982-08-01,7.1 +1982-09-01,6.7 +1982-10-01,6.2 +1982-11-01,5.4 +1982-12-01,5.8 +1983-01-01,5.4 +1983-02-01,5.6 +1983-03-01,5.4 +1983-04-01,5.1 +1983-05-01,4.9 +1983-06-01,5.3 +1983-07-01,5.8 +1983-08-01,6.2 +1983-09-01,6.2 +1983-10-01,5.6 +1983-11-01,5.8 +1983-12-01,4.7 +1984-01-01,5.3 +1984-02-01,5.1 +1984-03-01,6.1 +1984-04-01,6 +1984-05-01,6.7 +1984-06-01,6.6 +1984-07-01,6.7 +1984-08-01,7.5 +1984-09-01,6.5 +1984-10-01,6 +1984-11-01,7.2 +1984-12-01,7.3 +1985-01-01,6.7 +1985-02-01,6.5 +1985-03-01,6.4 +1985-04-01,6.9 +1985-05-01,6.4 +1985-06-01,6 +1985-07-01,5.6 +1985-08-01,5.8 +1985-09-01,6.3 +1985-10-01,6.4 +1985-11-01,5.9 +1985-12-01,5.8 +1986-01-01,5.7 +1986-02-01,6 +1986-03-01,4.7 +1986-04-01,4.7 +1986-05-01,5.2 +1986-06-01,5.7 +1986-07-01,6.1 +1986-08-01,7 +1986-09-01,5.8 +1986-10-01,6.5 +1986-11-01,6.1 +1986-12-01,5.5 +1987-01-01,6 +1987-02-01,6.2 +1987-03-01,6 +1987-04-01,6 +1987-05-01,6.7 +1987-06-01,6.9 +1987-07-01,6.7 +1987-08-01,6.8 +1987-09-01,6.8 +1987-10-01,6.8 +1987-11-01,7 +1987-12-01,7.6 +1988-01-01,7.5 +1988-02-01,6.6 +1988-03-01,6.6 +1988-04-01,6.4 +1988-05-01,6.6 +1988-06-01,6.2 +1988-07-01,6.6 +1988-08-01,6.6 +1988-09-01,6.5 +1988-10-01,6 +1988-11-01,7.2 +1988-12-01,6.8 +1989-01-01,6.2 +1989-02-01,7.5 +1989-03-01,8.2 +1989-04-01,7.4 +1989-05-01,7.1 +1989-06-01,7.2 +1989-07-01,6.1 +1989-08-01,6.4 +1989-09-01,7.1 +1989-10-01,6.9 +1989-11-01,6.6 +1989-12-01,7 +1990-01-01,7 +1990-02-01,7.6 +1990-03-01,7.8 +1990-04-01,8.3 +1990-05-01,8.2 +1990-06-01,7.9 +1990-07-01,7.8 +1990-08-01,8.2 +1990-09-01,8.4 +1990-10-01,8.7 +1990-11-01,8.2 +1990-12-01,8.5 +1991-01-01,9.4 +1991-02-01,7.9 +1991-03-01,7.3 +1991-04-01,7.3 +1991-05-01,7 +1991-06-01,7 +1991-07-01,7.1 +1991-08-01,6.8 +1991-09-01,7.4 +1991-10-01,6.7 +1991-11-01,6.2 +1991-12-01,6.2 +1992-01-01,5.2 +1992-02-01,4.9 +1992-03-01,6.1 +1992-04-01,6.1 +1992-05-01,6 +1992-06-01,5.6 +1992-07-01,5.3 +1992-08-01,5.2 +1992-09-01,5 +1992-10-01,5.1 +1992-11-01,5.4 +1992-12-01,5 +1993-01-01,5.4 +1993-02-01,5.3 +1993-03-01,5.4 +1993-04-01,4.7 +1993-05-01,5.3 +1993-06-01,5.2 +1993-07-01,5.3 +1993-08-01,5.5 +1993-09-01,4.9 +1993-10-01,5 +1993-11-01,4.8 +1993-12-01,4.5 +1994-01-01,5.9 +1994-02-01,5 +1994-03-01,4.8 +1994-04-01,5.2 +1994-05-01,5.3 +1994-06-01,6.2 +1994-07-01,6.3 +1994-08-01,6.1 +1994-09-01,6 +1994-10-01,5.6 +1994-11-01,6.3 +1994-12-01,6.6 +1995-01-01,6.8 +1995-02-01,7.3 +1995-03-01,6.8 +1995-04-01,6.7 +1995-05-01,6.3 +1995-06-01,5.8 +1995-07-01,5.6 +1995-08-01,6.1 +1995-09-01,6.3 +1995-10-01,6.3 +1995-11-01,6.8 +1995-12-01,6.4 +1996-01-01,6.4 +1996-02-01,5.3 +1996-03-01,6.2 +1996-04-01,6 +1996-05-01,5.9 +1996-06-01,6 +1996-07-01,5.7 +1996-08-01,5 +1996-09-01,5.2 +1996-10-01,5.6 +1996-11-01,5.2 +1996-12-01,5 +1997-01-01,4.7 +1997-02-01,4.5 +1997-03-01,4.1 +1997-04-01,4.7 +1997-05-01,4.6 +1997-06-01,4.4 +1997-07-01,4.4 +1997-08-01,4.3 +1997-09-01,4.2 +1997-10-01,4.3 +1997-11-01,3.9 +1997-12-01,4.4 +1998-01-01,4 +1998-02-01,3.9 +1998-03-01,4.1 +1998-04-01,4 +1998-05-01,3.9 +1998-06-01,3.8 +1998-07-01,4 +1998-08-01,4.1 +1998-09-01,4.1 +1998-10-01,4 +1998-11-01,3.5 +1998-12-01,3.8 +1999-01-01,3.9 +1999-02-01,4 +1999-03-01,4.1 +1999-04-01,3.9 +1999-05-01,4 +1999-06-01,3.9 +1999-07-01,4 +1999-08-01,4 +1999-09-01,4.5 +1999-10-01,4.2 +1999-11-01,4.3 +1999-12-01,4.3 +2000-01-01,4.3 +2000-02-01,4.3 +2000-03-01,4.3 +2000-04-01,4.4 +2000-05-01,4.4 +2000-06-01,4.8 +2000-07-01,4.1 +2000-08-01,4.4 +2000-09-01,4 +2000-10-01,4 +2000-11-01,4.2 +2000-12-01,3.6 +2001-01-01,3.8 +2001-02-01,3.7 +2001-03-01,3.8 +2001-04-01,3.9 +2001-05-01,4 +2001-06-01,4.2 +2001-07-01,4.2 +2001-08-01,4.4 +2001-09-01,4.4 +2001-10-01,4.3 +2001-11-01,4.1 +2001-12-01,3.8 +2002-01-01,4.2 +2002-02-01,4 +2002-03-01,4.1 +2002-04-01,4.3 +2002-05-01,4 +2002-06-01,4.2 +2002-07-01,4.2 +2002-08-01,4 +2002-09-01,3.9 +2002-10-01,4 +2002-11-01,4 +2002-12-01,4 +2003-01-01,4 +2003-02-01,4.5 +2003-03-01,4.1 +2003-04-01,4.1 +2003-05-01,3.9 +2003-06-01,3.5 +2003-07-01,3.6 +2003-08-01,3.5 +2003-09-01,3.8 +2003-10-01,3.8 +2003-11-01,4.1 +2003-12-01,4 +2004-01-01,3.8 +2004-02-01,3.7 +2004-03-01,3.6 +2004-04-01,4 +2004-05-01,3.8 +2004-06-01,3.9 +2004-07-01,4.5 +2004-08-01,4.3 +2004-09-01,4.1 +2004-10-01,3.9 +2004-11-01,4.3 +2004-12-01,4.1 +2005-01-01,4.4 +2005-02-01,4.3 +2005-03-01,4.1 +2005-04-01,4.3 +2005-05-01,4.2 +2005-06-01,4.3 +2005-07-01,4.2 +2005-08-01,4.5 +2005-09-01,4.7 +2005-10-01,4.5 +2005-11-01,5 +2005-12-01,4.9 +2006-01-01,5.3 +2006-02-01,6.1 +2006-03-01,5.9 +2006-04-01,6.3 +2006-05-01,6.2 +2006-06-01,6.3 +2006-07-01,7.3 +2006-08-01,6.7 +2006-09-01,6.7 +2006-10-01,7.3 +2006-11-01,6.6 +2006-12-01,6.5 +2007-01-01,7.2 +2007-02-01,7.9 +2007-03-01,7.9 +2007-04-01,7.4 +2007-05-01,7.8 +2007-06-01,8.2 +2007-07-01,8.3 +2007-08-01,9.2 +2007-09-01,9.2 +2007-10-01,8.5 +2007-11-01,9.4 +2007-12-01,9.6 +2008-01-01,9.3 +2008-02-01,9.7 +2008-03-01,10.5 +2008-04-01,10.3 +2008-05-01,10.7 +2008-06-01,10.7 +2008-07-01,10.5 +2008-08-01,11.3 +2008-09-01,10.9 +2008-10-01,11.6 +2008-11-01,11.4 +2008-12-01,11.2 +2009-01-01,12.2 +2009-02-01,10.5 +2009-03-01,11 +2009-04-01,10.7 +2009-05-01,9.3 +2009-06-01,8.5 +2009-07-01,7.9 +2009-08-01,7.5 +2009-09-01,7.8 +2009-10-01,7.4 +2009-11-01,7.6 +2009-12-01,8 +2010-01-01,8.1 +2010-02-01,8.3 +2010-03-01,7.1 +2010-04-01,6.2 +2010-05-01,9.3 +2010-06-01,8.3 +2010-07-01,8.9 +2010-08-01,8.8 +2010-09-01,7.6 +2010-10-01,8.2 +2010-11-01,8.2 +2010-12-01,7 +2011-01-01,7.3 +2011-02-01,8.1 +2011-03-01,7.2 +2011-04-01,6.7 +2011-05-01,6.6 +2011-06-01,6.6 +2011-07-01,6.7 +2011-08-01,6.5 +2011-09-01,6.3 +2011-10-01,6 +2011-11-01,5.7 +2011-12-01,5.3 +2012-01-01,5.3 +2012-02-01,4.8 +2012-03-01,4.9 +2012-04-01,4.9 +2012-05-01,4.7 +2012-06-01,4.8 +2012-07-01,4.6 +2012-08-01,4.6 +2012-09-01,4.5 +2012-10-01,4.9 +2012-11-01,4.6 +2012-12-01,4.5 +2013-01-01,4 +2013-02-01,4.1 +2013-03-01,4.2 +2013-04-01,4.4 +2013-05-01,4.6 +2013-06-01,4.1 +2013-07-01,5.5 +2013-08-01,5.5 +2013-09-01,5.4 +2013-10-01,4.9 +2013-11-01,5 +2013-12-01,5.2 +2014-01-01,5.1 +2014-02-01,5.3 +2014-03-01,5.6 +2014-04-01,5.7 +2014-05-01,5.2 +2014-06-01,5.7 +2014-07-01,6.2 +2014-08-01,5.4 +2014-09-01,5.4 +2014-10-01,5.3 +2014-11-01,5.7 +2014-12-01,5.1 +2015-01-01,4.8 +2015-02-01,4.5 +2015-03-01,5.1 +2015-04-01,4.9 +2015-05-01,5 +2015-06-01,5.4 +2015-07-01,5.2 +2015-08-01,5 +2015-09-01,5.9 +2015-10-01,5.6 +2015-11-01,5.5 +2015-12-01,5.1 +2016-01-01,5.6 +2016-02-01,5.5 +2016-03-01,5.5 +2016-04-01,5 +2016-05-01,5.1 +2016-06-01,5.3 +2016-07-01,4.5 +2016-08-01,5 +2016-09-01,5.2 +2016-10-01,5.2 +2016-11-01,5.2 +2016-12-01,5.4 +2017-01-01,5.3 +2017-02-01,5.2 +2017-03-01,4.9 +2017-04-01,5.3 +2017-05-01,5.2 +2017-06-01,5.4 +2017-07-01,6 +2017-08-01,6.2 +2017-09-01,5.5 +2017-10-01,5.5 +2017-11-01,4.8 +2017-12-01,5.3 +2018-01-01,5.7 +2018-02-01,5.5 +2018-03-01,5.2 +2018-04-01,5.5 +2018-05-01,5.3 +2018-06-01,6.2 +2018-07-01,6.3 +2018-08-01,6.6 +2018-09-01,6.7 +2018-10-01,7.3 +2018-11-01,6.5 +2018-12-01,7.3 +2019-01-01,6.6 +2019-02-01,6 +2019-03-01,5.6 +2019-04-01,5.8 +2019-05-01,6.5 +2019-06-01,5.6 +2019-07-01,6.2 +2019-08-01,5.8 +2019-09-01,5.5 +2019-10-01,5.5 +2019-11-01,5.5 +2019-12-01,5.3 +2020-01-01,5.1 +2020-02-01,5.3 +2020-03-01,6.3 +2020-04-01,6.6 +2020-05-01,5.3 +2020-06-01,4.3 +2020-07-01,3.6 +2020-08-01,3.5 +2020-09-01,3.5 +2020-10-01,3.5 +2020-11-01,4 +2020-12-01,3.8 +2021-01-01,3.6 +2021-02-01,4.5 +2021-03-01,4.2 +2021-04-01,4.8 +2021-05-01,5.4 +2021-06-01,6.1 +2021-07-01,6.2 +2021-08-01,6.8 +2021-09-01,6.3 +2021-10-01,7.1 +2021-11-01,6.5 diff --git a/greykite/data/monthly/monthly_sunspot_monash.csv b/greykite/data/monthly/monthly_sunspot_monash.csv new file mode 100644 index 0000000..e53f463 --- /dev/null +++ b/greykite/data/monthly/monthly_sunspot_monash.csv @@ -0,0 +1,2430 @@ +ts,y +1818-01-01,60.458333333333336 +1818-02-01,33.857142857142854 +1818-03-01,39.0 +1818-04-01,56.13333333333333 +1818-05-01,86.09677419354838 +1818-06-01,56.666666666666664 +1818-07-01,47.483870967741936 +1818-08-01,61.16129032258065 +1818-09-01,40.0 +1818-10-01,57.225806451612904 +1818-11-01,24.666666666666668 +1818-12-01,43.516129032258064 +1819-01-01,56.064516129032256 +1819-02-01,33.785714285714285 +1819-03-01,9.96774193548387 +1819-04-01,40.13333333333333 +1819-05-01,32.61290322580645 +1819-06-01,64.9 +1819-07-01,75.51612903225806 +1819-08-01,51.67741935483871 +1819-09-01,25.5 +1819-10-01,50.0 +1819-11-01,39.43333333333333 +1819-12-01,53.225806451612904 +1820-01-01,32.193548387096776 +1820-02-01,38.48275862068966 +1820-03-01,17.06451612903226 +1820-04-01,27.933333333333334 +1820-05-01,37.58064516129032 +1820-06-01,20.266666666666666 +1820-07-01,28.838709677419356 +1820-08-01,37.483870967741936 +1820-09-01,11.633333333333333 +1820-10-01,20.129032258064516 +1820-11-01,20.8 +1820-12-01,27.161290322580644 +1821-01-01,21.096774193548388 +1821-02-01,8.142857142857142 +1821-03-01,10.96774193548387 +1821-04-01,15.9 +1821-05-01,2.806451612903226 +1821-06-01,3.8 +1821-07-01,7.870967741935484 +1821-08-01,11.0 +1821-09-01,7.966666666666667 +1821-10-01,32.0 +1821-11-01,8.1 +1821-12-01,0.41935483870967744 +1822-01-01,0.0 +1822-02-01,1.5 +1822-03-01,27.0 +1822-04-01,22.466666666666665 +1822-05-01,3.225806451612903 +1822-06-01,9.933333333333334 +1822-07-01,16.129032258064516 +1822-08-01,3.4193548387096775 +1822-09-01,0.0 +1822-10-01,0.5806451612903226 +1822-11-01,0.0 +1822-12-01,0.0 +1823-01-01,0.0 +1823-02-01,0.0 +1823-03-01,2.7096774193548385 +1823-04-01,0.0 +1823-05-01,0.0 +1823-06-01,0.0 +1823-07-01,1.1612903225806452 +1823-08-01,0.0 +1823-09-01,0.0 +1823-10-01,0.0 +1823-11-01,0.0 +1823-12-01,33.0 +1824-01-01,37.12903225806452 +1824-02-01,38.0 +1824-03-01,2.4516129032258065 +1824-04-01,37.833333333333336 +1824-05-01,9.096774193548388 +1824-06-01,0.0 +1824-07-01,0.0 +1824-08-01,4.516129032258065 +1824-09-01,22.366666666666667 +1824-10-01,38.064516129032256 +1824-11-01,6.666666666666667 +1824-12-01,1.1612903225806452 +1825-01-01,10.096774193548388 +1825-02-01,23.214285714285715 +1825-03-01,35.61290322580645 +1825-04-01,5.2 +1825-05-01,25.774193548387096 +1825-06-01,25.266666666666666 +1825-07-01,51.935483870967744 +1825-08-01,42.58064516129032 +1825-09-01,30.866666666666667 +1825-10-01,27.193548387096776 +1825-11-01,22.4 +1825-12-01,36.29032258064516 +1826-01-01,24.548387096774192 +1826-02-01,31.892857142857142 +1826-03-01,60.96774193548387 +1826-04-01,38.266666666666666 +1826-05-01,54.58064516129032 +1826-06-01,60.36666666666667 +1826-07-01,85.54838709677419 +1826-08-01,66.03225806451613 +1826-09-01,31.566666666666666 +1826-10-01,86.16129032258064 +1826-11-01,75.46666666666667 +1826-12-01,120.25806451612904 +1827-01-01,59.03225806451613 +1827-02-01,80.17857142857143 +1827-03-01,98.29032258064517 +1827-04-01,76.7 +1827-05-01,94.2258064516129 +1827-06-01,86.33333333333333 +1827-07-01,70.38709677419355 +1827-08-01,88.09677419354838 +1827-09-01,82.63333333333334 +1827-10-01,87.35483870967742 +1827-11-01,81.46666666666667 +1827-12-01,72.2258064516129 +1828-01-01,85.41935483870968 +1828-02-01,105.82758620689656 +1828-03-01,109.41935483870968 +1828-04-01,99.3 +1828-05-01,149.29032258064515 +1828-06-01,156.2 +1828-07-01,90.35483870967742 +1828-08-01,127.3225806451613 +1828-09-01,83.93333333333334 +1828-10-01,97.0 +1828-11-01,95.63333333333334 +1828-12-01,71.58064516129032 +1829-01-01,72.3225806451613 +1829-02-01,80.14285714285714 +1829-03-01,122.54838709677419 +1829-04-01,158.23333333333332 +1829-05-01,111.58064516129032 +1829-06-01,120.8 +1829-07-01,151.25806451612902 +1829-08-01,128.0 +1829-09-01,87.96666666666667 +1829-10-01,97.09677419354838 +1829-11-01,118.0 +1829-12-01,95.16129032258064 +1830-01-01,92.45161290322581 +1830-02-01,125.25 +1830-03-01,132.61290322580646 +1830-04-01,175.86666666666667 +1830-05-01,115.6774193548387 +1830-06-01,109.76666666666667 +1830-07-01,71.35483870967742 +1830-08-01,79.90322580645162 +1830-09-01,105.3 +1830-10-01,143.5483870967742 +1830-11-01,136.66666666666666 +1830-12-01,135.96774193548387 +1831-01-01,79.06451612903226 +1831-02-01,84.14285714285714 +1831-03-01,158.90322580645162 +1831-04-01,94.36666666666666 +1831-05-01,63.38709677419355 +1831-06-01,57.5 +1831-07-01,76.6774193548387 +1831-08-01,91.35483870967742 +1831-09-01,65.06666666666666 +1831-10-01,86.35483870967742 +1831-11-01,70.83333333333333 +1831-12-01,48.87096774193548 +1832-01-01,55.483870967741936 +1832-02-01,84.41379310344827 +1832-03-01,89.19354838709677 +1832-04-01,48.8 +1832-05-01,68.41935483870968 +1832-06-01,46.43333333333333 +1832-07-01,25.419354838709676 +1832-08-01,14.774193548387096 +1832-09-01,13.966666666666667 +1832-10-01,32.38709677419355 +1832-11-01,22.766666666666666 +1832-12-01,50.935483870967744 +1833-01-01,27.64516129032258 +1833-02-01,27.5 +1833-03-01,24.70967741935484 +1833-04-01,5.766666666666667 +1833-05-01,23.612903225806452 +1833-06-01,1.6666666666666667 +1833-07-01,12.290322580645162 +1833-08-01,10.0 +1833-09-01,41.43333333333333 +1833-10-01,13.290322580645162 +1833-11-01,9.333333333333334 +1833-12-01,16.419354838709676 +1834-01-01,6.258064516129032 +1834-02-01,26.821428571428573 +1834-03-01,8.451612903225806 +1834-04-01,7.866666666666666 +1834-05-01,14.290322580645162 +1834-06-01,14.2 +1834-07-01,20.70967741935484 +1834-08-01,7.225806451612903 +1834-09-01,22.766666666666666 +1834-10-01,44.516129032258064 +1834-11-01,66.93333333333334 +1834-12-01,56.70967741935484 +1835-01-01,14.35483870967742 +1835-02-01,41.392857142857146 +1835-03-01,35.03225806451613 +1835-04-01,99.63333333333334 +1835-05-01,80.03225806451613 +1835-06-01,60.3 +1835-07-01,112.2258064516129 +1835-08-01,92.41935483870968 +1835-09-01,145.7 +1835-10-01,176.58064516129033 +1835-11-01,173.13333333333333 +1835-12-01,121.64516129032258 +1836-01-01,144.32258064516128 +1836-02-01,182.55172413793105 +1836-03-01,172.96774193548387 +1836-04-01,239.06666666666666 +1836-05-01,189.51612903225808 +1836-06-01,202.96666666666667 +1836-07-01,201.32258064516128 +1836-08-01,166.67741935483872 +1836-09-01,164.06666666666666 +1836-10-01,224.67741935483872 +1836-11-01,208.93333333333334 +1836-12-01,338.2903225806452 +1837-01-01,304.2258064516129 +1837-02-01,307.89285714285717 +1837-03-01,235.2258064516129 +1837-04-01,248.2 +1837-05-01,190.2258064516129 +1837-06-01,252.66666666666666 +1837-07-01,277.4516129032258 +1837-08-01,232.8709677419355 +1837-09-01,164.8 +1837-10-01,205.3548387096774 +1837-11-01,177.5 +1837-12-01,200.1290322580645 +1838-01-01,241.74193548387098 +1838-02-01,152.17857142857142 +1838-03-01,225.0 +1838-04-01,245.43333333333334 +1838-05-01,233.93548387096774 +1838-06-01,161.63333333333333 +1838-07-01,184.90322580645162 +1838-08-01,128.6451612903226 +1838-09-01,130.63333333333333 +1838-10-01,148.4516129032258 +1838-11-01,135.0 +1838-12-01,137.38709677419354 +1839-01-01,171.5483870967742 +1839-02-01,174.71428571428572 +1839-03-01,143.25806451612902 +1839-04-01,105.1 +1839-05-01,91.70967741935483 +1839-06-01,92.96666666666667 +1839-07-01,143.58064516129033 +1839-08-01,215.29032258064515 +1839-09-01,223.96666666666667 +1839-10-01,158.38709677419354 +1839-11-01,117.1 +1839-12-01,95.41935483870968 +1840-01-01,140.25806451612902 +1840-02-01,133.10344827586206 +1840-03-01,111.45161290322581 +1840-04-01,115.66666666666667 +1840-05-01,116.48387096774194 +1840-06-01,80.23333333333333 +1840-07-01,94.25806451612904 +1840-08-01,93.70967741935483 +1840-09-01,123.9 +1840-10-01,99.93548387096774 +1840-11-01,92.43333333333334 +1840-12-01,91.93548387096774 +1841-01-01,57.903225806451616 +1841-02-01,49.214285714285715 +1841-03-01,50.54838709677419 +1841-04-01,67.13333333333334 +1841-05-01,112.35483870967742 +1841-06-01,93.2 +1841-07-01,52.58064516129032 +1841-08-01,64.7741935483871 +1841-09-01,60.3 +1841-10-01,47.41935483870968 +1841-11-01,33.56666666666667 +1841-12-01,61.16129032258065 +1842-01-01,31.032258064516128 +1842-02-01,30.857142857142858 +1842-03-01,42.32258064516129 +1842-04-01,44.93333333333333 +1842-05-01,41.38709677419355 +1842-06-01,34.166666666666664 +1842-07-01,21.032258064516128 +1842-08-01,44.41935483870968 +1842-09-01,30.4 +1842-10-01,63.54838709677419 +1842-11-01,64.0 +1842-12-01,31.032258064516128 +1843-01-01,25.387096774193548 +1843-02-01,7.75 +1843-03-01,13.838709677419354 +1843-04-01,16.233333333333334 +1843-05-01,35.29032258064516 +1843-06-01,17.566666666666666 +1843-07-01,15.870967741935484 +1843-08-01,19.580645161290324 +1843-09-01,6.933333333333334 +1843-10-01,8.870967741935484 +1843-11-01,32.6 +1843-12-01,18.322580645161292 +1844-01-01,17.322580645161292 +1844-02-01,29.620689655172413 +1844-03-01,26.451612903225808 +1844-04-01,34.233333333333334 +1844-05-01,20.870967741935484 +1844-06-01,6.733333333333333 +1844-07-01,35.774193548387096 +1844-08-01,42.354838709677416 +1844-09-01,13.933333333333334 +1844-10-01,47.74193548387097 +1844-11-01,21.233333333333334 +1844-12-01,34.41935483870968 +1845-01-01,43.516129032258064 +1845-02-01,72.35714285714286 +1845-03-01,65.6774193548387 +1845-04-01,98.36666666666666 +1845-05-01,82.09677419354838 +1845-06-01,53.333333333333336 +1845-07-01,52.0 +1845-08-01,57.45161290322581 +1845-09-01,55.93333333333333 +1845-10-01,72.7741935483871 +1845-11-01,64.73333333333333 +1845-12-01,100.35483870967742 +1846-01-01,79.83870967741936 +1846-02-01,82.35714285714286 +1846-03-01,104.35483870967742 +1846-04-01,115.8 +1846-05-01,103.35483870967742 +1846-06-01,111.36666666666666 +1846-07-01,78.80645161290323 +1846-08-01,95.41935483870968 +1846-09-01,174.96666666666667 +1846-10-01,88.90322580645162 +1846-11-01,109.5 +1846-12-01,93.7741935483871 +1847-01-01,91.61290322580645 +1847-02-01,113.82142857142857 +1847-03-01,123.09677419354838 +1847-04-01,81.66666666666667 +1847-05-01,130.09677419354838 +1847-06-01,143.76666666666668 +1847-07-01,96.2258064516129 +1847-08-01,235.61290322580646 +1847-09-01,263.6 +1847-10-01,292.96774193548384 +1847-11-01,226.36666666666667 +1847-12-01,186.38709677419354 +1848-01-01,254.74193548387098 +1848-02-01,193.6206896551724 +1848-03-01,172.80645161290323 +1848-04-01,182.43333333333334 +1848-05-01,174.58064516129033 +1848-06-01,220.6 +1848-07-01,231.4516129032258 +1848-08-01,217.93548387096774 +1848-09-01,172.36666666666667 +1848-10-01,228.67741935483872 +1848-11-01,203.6 +1848-12-01,264.7741935483871 +1849-01-01,298.2903225806452 +1849-02-01,250.25 +1849-03-01,182.74193548387098 +1849-04-01,194.7 +1849-05-01,153.19354838709677 +1849-06-01,154.16666666666666 +1849-07-01,148.19354838709677 +1849-08-01,128.58064516129033 +1849-09-01,178.03333333333333 +1849-10-01,135.70967741935485 +1849-11-01,188.16666666666666 +1849-12-01,184.25806451612902 +1850-01-01,148.2258064516129 +1850-02-01,169.75 +1850-03-01,156.83870967741936 +1850-04-01,83.83333333333333 +1850-05-01,117.03225806451613 +1850-06-01,133.0 +1850-07-01,74.3225806451613 +1850-08-01,117.03225806451613 +1850-09-01,163.7 +1850-10-01,134.90322580645162 +1850-11-01,104.1 +1850-12-01,115.87096774193549 +1851-01-01,143.4516129032258 +1851-02-01,200.07142857142858 +1851-03-01,122.80645161290323 +1851-04-01,107.33333333333333 +1851-05-01,118.93548387096774 +1851-06-01,120.0 +1851-07-01,68.64516129032258 +1851-08-01,108.96774193548387 +1851-09-01,128.86666666666667 +1851-10-01,118.70967741935483 +1851-11-01,96.8 +1851-12-01,135.48387096774192 +1852-01-01,129.8709677419355 +1852-02-01,126.20689655172414 +1852-03-01,116.2258064516129 +1852-04-01,124.26666666666667 +1852-05-01,104.3225806451613 +1852-06-01,89.0 +1852-07-01,80.0 +1852-08-01,75.3225806451613 +1852-09-01,71.2 +1852-10-01,127.93548387096774 +1852-11-01,103.06666666666666 +1852-12-01,86.12903225806451 +1853-01-01,77.90322580645162 +1853-02-01,81.46428571428571 +1853-03-01,71.58064516129032 +1853-04-01,90.4 +1853-05-01,65.87096774193549 +1853-06-01,75.96666666666667 +1853-07-01,87.19354838709677 +1853-08-01,95.83870967741936 +1853-09-01,63.666666666666664 +1853-10-01,80.45161290322581 +1853-11-01,54.733333333333334 +1853-12-01,44.516129032258064 +1854-01-01,29.258064516129032 +1854-02-01,38.035714285714285 +1854-03-01,39.38709677419355 +1854-04-01,50.3 +1854-05-01,45.61290322580645 +1854-06-01,40.06666666666667 +1854-07-01,35.45161290322581 +1854-08-01,30.06451612903226 +1854-09-01,42.6 +1854-10-01,24.06451612903226 +1854-11-01,53.5 +1854-12-01,41.096774193548384 +1855-01-01,23.387096774193548 +1855-02-01,21.607142857142858 +1855-03-01,33.03225806451613 +1855-04-01,8.366666666666667 +1855-05-01,17.29032258064516 +1855-06-01,10.0 +1855-07-01,0.6774193548387096 +1855-08-01,5.935483870967742 +1855-09-01,0.0 +1855-10-01,18.322580645161292 +1855-11-01,7.933333333333334 +1855-12-01,5.806451612903226 +1856-01-01,0.967741935483871 +1856-02-01,9.310344827586206 +1856-03-01,0.7419354838709677 +1856-04-01,12.366666666666667 +1856-05-01,0.0 +1856-06-01,9.8 +1856-07-01,8.806451612903226 +1856-08-01,11.32258064516129 +1856-09-01,8.433333333333334 +1856-10-01,8.548387096774194 +1856-11-01,14.733333333333333 +1856-12-01,13.741935483870968 +1857-01-01,26.032258064516128 +1857-02-01,14.214285714285714 +1857-03-01,9.96774193548387 +1857-04-01,21.066666666666666 +1857-05-01,54.225806451612904 +1857-06-01,30.466666666666665 +1857-07-01,42.16129032258065 +1857-08-01,32.0 +1857-09-01,80.56666666666666 +1857-10-01,77.06451612903226 +1857-11-01,59.56666666666667 +1857-12-01,70.6774193548387 +1858-01-01,74.2258064516129 +1858-02-01,66.25 +1858-03-01,109.16129032258064 +1858-04-01,72.8 +1858-05-01,78.64516129032258 +1858-06-01,84.5 +1858-07-01,107.74193548387096 +1858-08-01,104.93548387096774 +1858-09-01,152.2 +1858-10-01,173.2258064516129 +1858-11-01,98.6 +1858-12-01,127.03225806451613 +1859-01-01,159.0 +1859-02-01,166.39285714285714 +1859-03-01,171.51612903225808 +1859-04-01,162.86666666666667 +1859-05-01,172.83870967741936 +1859-06-01,165.23333333333332 +1859-07-01,180.74193548387098 +1859-08-01,203.0 +1859-09-01,200.86666666666667 +1859-10-01,217.7741935483871 +1859-11-01,184.63333333333333 +1859-12-01,153.93548387096774 +1860-01-01,156.6451612903226 +1860-02-01,167.89655172413794 +1860-03-01,187.96774193548387 +1860-04-01,135.66666666666666 +1860-05-01,203.48387096774192 +1860-06-01,206.33333333333334 +1860-07-01,221.90322580645162 +1860-08-01,190.48387096774192 +1860-09-01,175.2 +1860-10-01,171.1290322580645 +1860-11-01,186.03333333333333 +1860-12-01,181.70967741935485 +1861-01-01,118.45161290322581 +1861-02-01,147.53571428571428 +1861-03-01,192.03225806451613 +1861-04-01,187.06666666666666 +1861-05-01,107.80645161290323 +1861-06-01,167.5 +1861-07-01,148.2258064516129 +1861-08-01,156.70967741935485 +1861-09-01,151.86666666666667 +1861-10-01,127.6774193548387 +1861-11-01,102.0 +1861-12-01,152.83870967741936 +1862-01-01,119.90322580645162 +1862-02-01,122.42857142857143 +1862-03-01,82.6774193548387 +1862-04-01,102.1 +1862-05-01,122.41935483870968 +1862-06-01,159.7 +1862-07-01,139.4516129032258 +1862-08-01,118.6774193548387 +1862-09-01,126.43333333333334 +1862-10-01,79.7741935483871 +1862-11-01,96.03333333333333 +1862-12-01,77.61290322580645 +1863-01-01,91.7741935483871 +1863-02-01,107.67857142857143 +1863-03-01,126.0 +1863-04-01,77.1 +1863-05-01,102.12903225806451 +1863-06-01,77.56666666666666 +1863-07-01,62.03225806451613 +1863-08-01,91.25806451612904 +1863-09-01,41.733333333333334 +1863-10-01,75.74193548387096 +1863-11-01,71.6 +1863-12-01,78.12903225806451 +1864-01-01,109.6774193548387 +1864-02-01,89.48275862068965 +1864-03-01,125.93548387096774 +1864-04-01,68.1 +1864-05-01,77.09677419354838 +1864-06-01,109.86666666666666 +1864-07-01,103.83870967741936 +1864-08-01,104.06451612903226 +1864-09-01,54.166666666666664 +1864-10-01,64.38709677419355 +1864-11-01,109.33333333333333 +1864-12-01,54.32258064516129 +1865-01-01,92.51612903225806 +1865-02-01,74.60714285714286 +1865-03-01,74.96774193548387 +1865-04-01,55.93333333333333 +1865-05-01,65.61290322580645 +1865-06-01,63.766666666666666 +1865-07-01,50.806451612903224 +1865-08-01,71.83870967741936 +1865-09-01,41.03333333333333 +1865-10-01,32.54838709677419 +1865-11-01,46.666666666666664 +1865-12-01,24.29032258064516 +1866-01-01,60.0 +1866-02-01,72.92857142857143 +1866-03-01,46.58064516129032 +1866-04-01,33.53333333333333 +1866-05-01,24.64516129032258 +1866-06-01,31.366666666666667 +1866-07-01,17.64516129032258 +1866-08-01,24.225806451612904 +1866-09-01,13.933333333333334 +1866-10-01,26.774193548387096 +1866-11-01,17.166666666666668 +1866-12-01,2.903225806451613 +1867-01-01,0.0 +1867-02-01,1.3571428571428572 +1867-03-01,17.419354838709676 +1867-04-01,9.666666666666666 +1867-05-01,5.548387096774194 +1867-06-01,2.8 +1867-07-01,9.451612903225806 +1867-08-01,9.064516129032258 +1867-09-01,18.7 +1867-10-01,25.483870967741936 +1867-11-01,18.133333333333333 +1867-12-01,47.87096774193548 +1868-01-01,25.903225806451612 +1868-02-01,26.344827586206897 +1868-03-01,44.03225806451613 +1868-04-01,61.1 +1868-05-01,44.516129032258064 +1868-06-01,51.8 +1868-07-01,48.32258064516129 +1868-08-01,57.29032258064516 +1868-09-01,78.66666666666667 +1868-10-01,102.7741935483871 +1868-11-01,98.66666666666667 +1868-12-01,112.7741935483871 +1869-01-01,101.61290322580645 +1869-02-01,99.89285714285714 +1869-03-01,87.96774193548387 +1869-04-01,68.43333333333334 +1869-05-01,173.38709677419354 +1869-06-01,180.7 +1869-07-01,98.80645161290323 +1869-08-01,132.74193548387098 +1869-09-01,134.46666666666667 +1869-10-01,99.03225806451613 +1869-11-01,130.23333333333332 +1869-12-01,174.1290322580645 +1870-01-01,128.96774193548387 +1870-02-01,191.67857142857142 +1870-03-01,262.6774193548387 +1870-04-01,266.9 +1870-05-01,293.5806451612903 +1870-06-01,226.3 +1870-07-01,220.93548387096774 +1870-08-01,256.5483870967742 +1870-09-01,226.8 +1870-10-01,244.25806451612902 +1870-11-01,246.03333333333333 +1870-12-01,216.70967741935485 +1871-01-01,147.19354838709677 +1871-02-01,208.96428571428572 +1871-03-01,238.74193548387098 +1871-04-01,270.9 +1871-05-01,242.61290322580646 +1871-06-01,152.93333333333334 +1871-07-01,171.80645161290323 +1871-08-01,183.70967741935485 +1871-09-01,133.86666666666667 +1871-10-01,148.48387096774192 +1871-11-01,175.66666666666666 +1871-12-01,150.7741935483871 +1872-01-01,132.67741935483872 +1872-02-01,200.3448275862069 +1872-03-01,147.48387096774192 +1872-04-01,170.43333333333334 +1872-05-01,179.4516129032258 +1872-06-01,183.33333333333334 +1872-07-01,175.96774193548387 +1872-08-01,155.03225806451613 +1872-09-01,191.1 +1872-10-01,171.16129032258064 +1872-11-01,186.8 +1872-12-01,139.8709677419355 +1873-01-01,144.58064516129033 +1873-02-01,178.42857142857142 +1873-03-01,164.03225806451613 +1873-04-01,127.1 +1873-05-01,79.96774193548387 +1873-06-01,74.8 +1873-07-01,111.6774193548387 +1873-08-01,113.7741935483871 +1873-09-01,78.7 +1873-10-01,78.61290322580645 +1873-11-01,92.46666666666667 +1873-12-01,82.03225806451613 +1874-01-01,101.38709677419355 +1874-02-01,107.14285714285714 +1874-03-01,77.51612903225806 +1874-04-01,53.53333333333333 +1874-05-01,74.58064516129032 +1874-06-01,63.766666666666666 +1874-07-01,113.2258064516129 +1874-08-01,102.25806451612904 +1874-09-01,46.833333333333336 +1874-10-01,57.41935483870968 +1874-11-01,48.2 +1874-12-01,48.774193548387096 +1875-01-01,24.419354838709676 +1875-02-01,35.857142857142854 +1875-03-01,56.38709677419355 +1875-04-01,48.6 +1875-05-01,19.225806451612904 +1875-06-01,39.93333333333333 +1875-07-01,20.903225806451612 +1875-08-01,24.419354838709676 +1875-09-01,3.966666666666667 +1875-10-01,21.322580645161292 +1875-11-01,29.566666666666666 +1875-12-01,16.483870967741936 +1876-01-01,23.93548387096774 +1876-02-01,25.137931034482758 +1876-03-01,51.064516129032256 +1876-04-01,3.933333333333333 +1876-05-01,8.516129032258064 +1876-06-01,2.7333333333333334 +1876-07-01,25.548387096774192 +1876-08-01,14.774193548387096 +1876-09-01,16.6 +1876-10-01,23.870967741935484 +1876-11-01,16.566666666666666 +1876-12-01,13.64516129032258 +1877-01-01,40.645161290322584 +1877-02-01,14.5 +1877-03-01,19.870967741935484 +1877-04-01,26.266666666666666 +1877-05-01,36.064516129032256 +1877-06-01,23.566666666666666 +1877-07-01,10.03225806451613 +1877-08-01,10.516129032258064 +1877-09-01,28.133333333333333 +1877-10-01,11.161290322580646 +1877-11-01,23.633333333333333 +1877-12-01,3.5483870967741935 +1878-01-01,5.548387096774194 +1878-02-01,11.035714285714286 +1878-03-01,13.064516129032258 +1878-04-01,0.16666666666666666 +1878-05-01,9.870967741935484 +1878-06-01,10.7 +1878-07-01,0.22580645161290322 +1878-08-01,0.0 +1878-09-01,8.8 +1878-10-01,1.903225806451613 +1878-11-01,6.8 +1878-12-01,0.9354838709677419 +1879-01-01,1.6451612903225807 +1879-02-01,0.9285714285714286 +1879-03-01,0.0 +1879-04-01,10.4 +1879-05-01,4.032258064516129 +1879-06-01,7.966666666666667 +1879-07-01,12.580645161290322 +1879-08-01,17.903225806451612 +1879-09-01,10.066666666666666 +1879-10-01,20.419354838709676 +1879-11-01,21.866666666666667 +1879-12-01,12.193548387096774 +1880-01-01,40.12903225806452 +1880-02-01,45.37931034482759 +1880-03-01,32.096774193548384 +1880-04-01,32.43333333333333 +1880-05-01,39.096774193548384 +1880-06-01,56.9 +1880-07-01,36.54838709677419 +1880-08-01,80.25806451612904 +1880-09-01,110.06666666666666 +1880-10-01,71.6774193548387 +1880-11-01,51.13333333333333 +1880-12-01,49.38709677419355 +1881-01-01,60.61290322580645 +1881-02-01,88.60714285714286 +1881-03-01,85.7741935483871 +1881-04-01,86.06666666666666 +1881-05-01,72.54838709677419 +1881-06-01,100.8 +1881-07-01,128.16129032258064 +1881-08-01,97.29032258064517 +1881-09-01,88.56666666666666 +1881-10-01,107.25806451612904 +1881-11-01,91.46666666666667 +1881-12-01,78.83870967741936 +1882-01-01,74.96774193548387 +1882-02-01,115.85714285714286 +1882-03-01,111.48387096774194 +1882-04-01,159.56666666666666 +1882-05-01,106.90322580645162 +1882-06-01,75.43333333333334 +1882-07-01,75.6774193548387 +1882-08-01,67.45161290322581 +1882-09-01,96.06666666666666 +1882-10-01,98.64516129032258 +1882-11-01,140.56666666666666 +1882-12-01,69.70967741935483 +1883-01-01,101.03225806451613 +1883-02-01,78.21428571428571 +1883-03-01,71.3225806451613 +1883-04-01,136.76666666666668 +1883-05-01,52.516129032258064 +1883-06-01,127.23333333333333 +1883-07-01,134.3548387096774 +1883-08-01,76.61290322580645 +1883-09-01,87.76666666666667 +1883-10-01,139.61290322580646 +1883-11-01,140.8 +1883-12-01,126.48387096774194 +1884-01-01,152.58064516129033 +1884-02-01,144.82758620689654 +1884-03-01,145.7741935483871 +1884-04-01,126.9 +1884-05-01,110.90322580645162 +1884-06-01,85.33333333333333 +1884-07-01,88.45161290322581 +1884-08-01,93.06451612903226 +1884-09-01,103.13333333333334 +1884-10-01,79.58064516129032 +1884-11-01,60.93333333333333 +1884-12-01,78.58064516129032 +1885-01-01,71.38709677419355 +1885-02-01,119.67857142857143 +1885-03-01,82.93548387096774 +1885-04-01,91.7 +1885-05-01,121.64516129032258 +1885-06-01,139.46666666666667 +1885-07-01,110.87096774193549 +1885-08-01,83.45161290322581 +1885-09-01,66.03333333333333 +1885-10-01,64.51612903225806 +1885-11-01,51.56666666666667 +1885-12-01,36.25806451612903 +1886-01-01,49.83870967741935 +1886-02-01,43.17857142857143 +1886-03-01,95.48387096774194 +1886-04-01,72.9 +1886-05-01,51.225806451612904 +1886-06-01,45.3 +1886-07-01,50.38709677419355 +1886-08-01,28.06451612903226 +1886-09-01,35.666666666666664 +1886-10-01,14.419354838709678 +1886-11-01,0.5666666666666667 +1886-12-01,21.741935483870968 +1887-01-01,17.0 +1887-02-01,21.964285714285715 +1887-03-01,7.064516129032258 +1887-04-01,11.566666666666666 +1887-05-01,33.38709677419355 +1887-06-01,26.1 +1887-07-01,38.903225806451616 +1887-08-01,35.70967741935484 +1887-09-01,12.4 +1887-10-01,10.96774193548387 +1887-11-01,11.5 +1887-12-01,34.516129032258064 +1888-01-01,21.161290322580644 +1888-02-01,11.793103448275861 +1888-03-01,13.064516129032258 +1888-04-01,8.466666666666667 +1888-05-01,11.741935483870968 +1888-06-01,11.766666666666667 +1888-07-01,5.032258064516129 +1888-08-01,4.645161290322581 +1888-09-01,14.566666666666666 +1888-10-01,3.4193548387096775 +1888-11-01,17.866666666666667 +1888-12-01,11.096774193548388 +1889-01-01,1.3225806451612903 +1889-02-01,14.178571428571429 +1889-03-01,11.129032258064516 +1889-04-01,7.333333333333333 +1889-05-01,3.967741935483871 +1889-06-01,10.766666666666667 +1889-07-01,15.774193548387096 +1889-08-01,34.29032258064516 +1889-09-01,10.866666666666667 +1889-10-01,3.4193548387096775 +1889-11-01,0.3 +1889-12-01,11.193548387096774 +1890-01-01,8.838709677419354 +1890-02-01,1.0714285714285714 +1890-03-01,8.483870967741936 +1890-04-01,2.6666666666666665 +1890-05-01,7.935483870967742 +1890-06-01,2.2 +1890-07-01,19.322580645161292 +1890-08-01,14.161290322580646 +1890-09-01,28.633333333333333 +1890-10-01,18.612903225806452 +1890-11-01,15.933333333333334 +1890-12-01,13.064516129032258 +1891-01-01,22.548387096774192 +1891-02-01,36.92857142857143 +1891-03-01,17.193548387096776 +1891-04-01,34.233333333333334 +1891-05-01,68.48387096774194 +1891-06-01,80.43333333333334 +1891-07-01,98.0 +1891-08-01,55.064516129032256 +1891-09-01,89.73333333333333 +1891-10-01,86.0 +1891-11-01,69.83333333333333 +1891-12-01,54.25806451612903 +1892-01-01,115.2258064516129 +1892-02-01,126.06896551724138 +1892-03-01,83.25806451612904 +1892-04-01,116.03333333333333 +1892-05-01,132.70967741935485 +1892-06-01,127.3 +1892-07-01,127.58064516129032 +1892-08-01,169.0 +1892-09-01,104.66666666666667 +1892-10-01,117.48387096774194 +1892-11-01,108.9 +1892-12-01,131.03225806451613 +1893-01-01,125.0 +1893-02-01,121.64285714285714 +1893-03-01,109.54838709677419 +1893-04-01,146.8 +1893-05-01,141.29032258064515 +1893-06-01,149.83333333333334 +1893-07-01,147.58064516129033 +1893-08-01,215.3548387096774 +1893-09-01,129.86666666666667 +1893-10-01,133.25806451612902 +1893-11-01,125.2 +1893-12-01,156.3548387096774 +1894-01-01,138.61290322580646 +1894-02-01,141.03571428571428 +1894-03-01,87.09677419354838 +1894-04-01,136.03333333333333 +1894-05-01,168.67741935483872 +1894-06-01,164.8 +1894-07-01,176.67741935483872 +1894-08-01,117.09677419354838 +1894-09-01,110.0 +1894-10-01,125.6774193548387 +1894-11-01,94.3 +1894-12-01,100.12903225806451 +1895-01-01,105.41935483870968 +1895-02-01,112.0 +1895-03-01,101.61290322580645 +1895-04-01,128.2 +1895-05-01,112.45161290322581 +1895-06-01,119.13333333333334 +1895-07-01,79.6774193548387 +1895-08-01,114.93548387096774 +1895-09-01,96.13333333333334 +1895-10-01,113.16129032258064 +1895-11-01,78.63333333333334 +1895-12-01,117.87096774193549 +1896-01-01,48.354838709677416 +1896-02-01,95.6896551724138 +1896-03-01,86.48387096774194 +1896-04-01,73.0 +1896-05-01,46.096774193548384 +1896-06-01,81.7 +1896-07-01,75.16129032258064 +1896-08-01,45.41935483870968 +1896-09-01,102.2 +1896-10-01,47.87096774193548 +1896-11-01,63.333333333333336 +1896-12-01,71.0 +1897-01-01,67.64516129032258 +1897-02-01,48.964285714285715 +1897-03-01,48.67741935483871 +1897-04-01,51.666666666666664 +1897-05-01,33.25806451612903 +1897-06-01,18.933333333333334 +1897-07-01,46.064516129032256 +1897-08-01,36.354838709677416 +1897-09-01,80.36666666666666 +1897-10-01,23.903225806451612 +1897-11-01,14.0 +1897-12-01,55.45161290322581 +1898-01-01,50.354838709677416 +1898-02-01,60.67857142857143 +1898-03-01,63.87096774193548 +1898-04-01,24.2 +1898-05-01,43.0 +1898-06-01,37.13333333333333 +1898-07-01,15.03225806451613 +1898-08-01,52.29032258064516 +1898-09-01,58.06666666666667 +1898-10-01,57.12903225806452 +1898-11-01,51.6 +1898-12-01,21.06451612903226 +1899-01-01,32.38709677419355 +1899-02-01,15.321428571428571 +1899-03-01,30.258064516129032 +1899-04-01,23.633333333333333 +1899-05-01,12.903225806451612 +1899-06-01,34.13333333333333 +1899-07-01,22.548387096774192 +1899-08-01,4.903225806451613 +1899-09-01,14.0 +1899-10-01,21.70967741935484 +1899-11-01,13.033333333333333 +1899-12-01,17.580645161290324 +1900-01-01,15.67741935483871 +1900-02-01,22.821428571428573 +1900-03-01,14.35483870967742 +1900-04-01,26.766666666666666 +1900-05-01,25.322580645161292 +1900-06-01,20.133333333333333 +1900-07-01,13.935483870967742 +1900-08-01,7.129032258064516 +1900-09-01,13.866666666666667 +1900-10-01,21.612903225806452 +1900-11-01,7.533333333333333 +1900-12-01,0.4838709677419355 +1901-01-01,0.3870967741935484 +1901-02-01,4.035714285714286 +1901-03-01,7.387096774193548 +1901-04-01,0.0 +1901-05-01,17.0 +1901-06-01,9.666666666666666 +1901-07-01,1.1612903225806452 +1901-08-01,1.7096774193548387 +1901-09-01,0.9333333333333333 +1901-10-01,6.258064516129032 +1901-11-01,6.4 +1901-12-01,0.0 +1902-01-01,9.290322580645162 +1902-02-01,0.0 +1902-03-01,20.677419354838708 +1902-04-01,0.0 +1902-05-01,4.67741935483871 +1902-06-01,2.4 +1902-07-01,1.5161290322580645 +1902-08-01,3.774193548387097 +1902-09-01,12.633333333333333 +1902-10-01,27.193548387096776 +1902-11-01,17.166666666666668 +1902-12-01,1.8064516129032258 +1903-01-01,13.870967741935484 +1903-02-01,28.428571428571427 +1903-03-01,22.483870967741936 +1903-04-01,43.53333333333333 +1903-05-01,24.322580645161292 +1903-06-01,27.2 +1903-07-01,46.354838709677416 +1903-08-01,48.0 +1903-09-01,18.5 +1903-10-01,64.7741935483871 +1903-11-01,74.23333333333333 +1903-12-01,76.16129032258064 +1904-01-01,52.61290322580645 +1904-02-01,40.793103448275865 +1904-03-01,61.935483870967744 +1904-04-01,71.63333333333334 +1904-05-01,65.74193548387096 +1904-06-01,69.8 +1904-07-01,84.25806451612904 +1904-08-01,97.09677419354838 +1904-09-01,50.166666666666664 +1904-10-01,90.35483870967742 +1904-11-01,63.36666666666667 +1904-12-01,91.09677419354838 +1905-01-01,91.19354838709677 +1905-02-01,143.0 +1905-03-01,94.25806451612904 +1905-04-01,65.5 +1905-05-01,79.93548387096774 +1905-06-01,81.56666666666666 +1905-07-01,121.64516129032258 +1905-08-01,98.12903225806451 +1905-09-01,91.76666666666667 +1905-10-01,131.16129032258064 +1905-11-01,178.66666666666666 +1905-12-01,92.54838709677419 +1906-01-01,75.80645161290323 +1906-02-01,52.25 +1906-03-01,107.41935483870968 +1906-04-01,92.16666666666667 +1906-05-01,96.2258064516129 +1906-06-01,105.26666666666667 +1906-07-01,172.67741935483872 +1906-08-01,79.58064516129032 +1906-09-01,93.46666666666667 +1906-10-01,29.741935483870968 +1906-11-01,64.83333333333333 +1906-12-01,107.96774193548387 +1907-01-01,127.35483870967742 +1907-02-01,180.25 +1907-03-01,101.12903225806451 +1907-04-01,87.6 +1907-05-01,71.41935483870968 +1907-06-01,67.16666666666667 +1907-07-01,82.87096774193549 +1907-08-01,90.45161290322581 +1907-09-01,141.66666666666666 +1907-10-01,109.06451612903226 +1907-11-01,102.46666666666667 +1907-12-01,78.90322580645162 +1908-01-01,65.35483870967742 +1908-02-01,56.62068965517241 +1908-03-01,47.87096774193548 +1908-04-01,96.06666666666666 +1908-05-01,68.03225806451613 +1908-06-01,80.16666666666667 +1908-07-01,65.80645161290323 +1908-08-01,150.93548387096774 +1908-09-01,144.9 +1908-10-01,53.935483870967744 +1908-11-01,75.86666666666666 +1908-12-01,65.93548387096774 +1909-01-01,94.64516129032258 +1909-02-01,77.60714285714286 +1909-03-01,110.51612903225806 +1909-04-01,53.7 +1909-05-01,59.96774193548387 +1909-06-01,37.766666666666666 +1909-07-01,59.645161290322584 +1909-08-01,38.516129032258064 +1909-09-01,64.7 +1909-10-01,97.35483870967742 +1909-11-01,92.96666666666667 +1909-12-01,90.2258064516129 +1910-01-01,44.03225806451613 +1910-02-01,52.5 +1910-03-01,35.70967741935484 +1910-04-01,14.066666666666666 +1910-05-01,36.935483870967744 +1910-06-01,20.466666666666665 +1910-07-01,23.548387096774192 +1910-08-01,19.258064516129032 +1910-09-01,43.733333333333334 +1910-10-01,63.87096774193548 +1910-11-01,8.266666666666667 +1910-12-01,9.612903225806452 +1911-01-01,5.580645161290323 +1911-02-01,15.035714285714286 +1911-03-01,13.0 +1911-04-01,27.633333333333333 +1911-05-01,15.129032258064516 +1911-06-01,3.7333333333333334 +1911-07-01,5.935483870967742 +1911-08-01,6.741935483870968 +1911-09-01,6.666666666666667 +1911-10-01,4.451612903225806 +1911-11-01,6.966666666666667 +1911-12-01,3.7096774193548385 +1912-01-01,0.41935483870967744 +1912-02-01,0.0 +1912-03-01,8.225806451612904 +1912-04-01,7.566666666666666 +1912-05-01,7.419354838709677 +1912-06-01,6.933333333333334 +1912-07-01,4.903225806451613 +1912-08-01,0.4838709677419355 +1912-09-01,15.933333333333334 +1912-10-01,7.645161290322581 +1912-11-01,1.9 +1912-12-01,10.64516129032258 +1913-01-01,3.774193548387097 +1913-02-01,4.785714285714286 +1913-03-01,0.7741935483870968 +1913-04-01,1.5666666666666667 +1913-05-01,0.0 +1913-06-01,0.0 +1913-07-01,2.903225806451613 +1913-08-01,0.3870967741935484 +1913-09-01,1.9666666666666666 +1913-10-01,5.193548387096774 +1913-11-01,1.1666666666666667 +1913-12-01,6.32258064516129 +1914-01-01,4.709677419354839 +1914-02-01,4.428571428571429 +1914-03-01,5.258064516129032 +1914-04-01,28.9 +1914-05-01,8.741935483870968 +1914-06-01,19.066666666666666 +1914-07-01,9.064516129032258 +1914-08-01,12.903225806451612 +1914-09-01,21.233333333333334 +1914-10-01,13.67741935483871 +1914-11-01,27.3 +1914-12-01,37.25806451612903 +1915-01-01,38.483870967741936 +1915-02-01,70.35714285714286 +1915-03-01,64.7741935483871 +1915-04-01,68.86666666666666 +1915-05-01,55.096774193548384 +1915-06-01,114.73333333333333 +1915-07-01,119.41935483870968 +1915-08-01,116.03225806451613 +1915-09-01,82.43333333333334 +1915-10-01,89.12903225806451 +1915-11-01,70.93333333333334 +1915-12-01,57.483870967741936 +1916-01-01,75.51612903225806 +1916-02-01,92.37931034482759 +1916-03-01,111.6774193548387 +1916-04-01,119.76666666666667 +1916-05-01,123.96774193548387 +1916-06-01,112.9 +1916-07-01,89.3225806451613 +1916-08-01,58.58064516129032 +1916-09-01,75.06666666666666 +1916-10-01,84.54838709677419 +1916-11-01,109.46666666666667 +1916-12-01,88.25806451612904 +1917-01-01,124.54838709677419 +1917-02-01,119.85714285714286 +1917-03-01,158.0 +1917-04-01,124.6 +1917-05-01,190.2258064516129 +1917-06-01,191.43333333333334 +1917-07-01,199.74193548387098 +1917-08-01,257.7096774193548 +1917-09-01,215.56666666666666 +1917-10-01,120.3225806451613 +1917-11-01,160.73333333333332 +1917-12-01,215.51612903225808 +1918-01-01,159.96774193548387 +1918-02-01,108.71428571428571 +1918-03-01,120.41935483870968 +1918-04-01,134.13333333333333 +1918-05-01,127.87096774193549 +1918-06-01,99.0 +1918-07-01,179.4516129032258 +1918-08-01,169.6451612903226 +1918-09-01,133.2 +1918-10-01,141.70967741935485 +1918-11-01,138.96666666666667 +1918-12-01,98.54838709677419 +1919-01-01,80.16129032258064 +1919-02-01,132.46428571428572 +1919-03-01,110.87096774193549 +1919-04-01,86.33333333333333 +1919-05-01,146.8709677419355 +1919-06-01,185.26666666666668 +1919-07-01,107.83870967741936 +1919-08-01,115.06451612903226 +1919-09-01,91.13333333333334 +1919-10-01,87.96774193548387 +1919-11-01,69.9 +1919-12-01,58.0 +1920-01-01,85.25806451612904 +1920-02-01,89.82758620689656 +1920-03-01,116.90322580645162 +1920-04-01,24.666666666666668 +1920-05-01,55.41935483870968 +1920-06-01,64.56666666666666 +1920-07-01,45.70967741935484 +1920-08-01,31.93548387096774 +1920-09-01,60.53333333333333 +1920-10-01,82.70967741935483 +1920-11-01,45.3 +1920-12-01,49.83870967741935 +1921-01-01,52.54838709677419 +1921-02-01,47.142857142857146 +1921-03-01,44.483870967741936 +1921-04-01,53.96666666666667 +1921-05-01,37.0 +1921-06-01,56.166666666666664 +1921-07-01,69.74193548387096 +1921-08-01,37.96774193548387 +1921-09-01,29.6 +1921-10-01,30.322580645161292 +1921-11-01,29.6 +1921-12-01,33.903225806451616 +1922-01-01,19.741935483870968 +1922-02-01,43.92857142857143 +1922-03-01,91.25806451612904 +1922-04-01,18.333333333333332 +1922-05-01,13.35483870967742 +1922-06-01,9.8 +1922-07-01,18.29032258064516 +1922-08-01,10.935483870967742 +1922-09-01,7.8 +1922-10-01,10.35483870967742 +1922-11-01,12.233333333333333 +1922-12-01,29.032258064516128 +1923-01-01,7.548387096774194 +1923-02-01,2.5 +1923-03-01,5.483870967741935 +1923-04-01,10.233333333333333 +1923-05-01,5.32258064516129 +1923-06-01,15.266666666666667 +1923-07-01,5.935483870967742 +1923-08-01,0.8064516129032258 +1923-09-01,22.133333333333333 +1923-10-01,19.483870967741936 +1923-11-01,16.733333333333334 +1923-12-01,4.645161290322581 +1924-01-01,0.8064516129032258 +1924-02-01,8.482758620689655 +1924-03-01,3.0 +1924-04-01,18.933333333333334 +1924-05-01,34.61290322580645 +1924-06-01,39.96666666666667 +1924-07-01,46.935483870967744 +1924-08-01,32.12903225806452 +1924-09-01,41.9 +1924-10-01,42.61290322580645 +1924-11-01,37.5 +1924-12-01,27.483870967741936 +1925-01-01,9.096774193548388 +1925-02-01,38.607142857142854 +1925-03-01,29.967741935483872 +1925-04-01,52.96666666666667 +1925-05-01,71.35483870967742 +1925-06-01,79.06666666666666 +1925-07-01,64.19354838709677 +1925-08-01,63.25806451612903 +1925-09-01,100.3 +1925-10-01,115.3225806451613 +1925-11-01,97.6 +1925-12-01,164.38709677419354 +1926-01-01,119.70967741935483 +1926-02-01,116.42857142857143 +1926-03-01,104.19354838709677 +1926-04-01,64.16666666666667 +1926-05-01,107.0 +1926-06-01,122.36666666666666 +1926-07-01,87.2258064516129 +1926-08-01,102.70967741935483 +1926-09-01,101.43333333333334 +1926-10-01,119.25806451612904 +1926-11-01,100.83333333333333 +1926-12-01,132.38709677419354 +1927-01-01,136.0 +1927-02-01,155.07142857142858 +1927-03-01,116.06451612903226 +1927-04-01,155.83333333333334 +1927-05-01,131.90322580645162 +1927-06-01,98.5 +1927-07-01,91.58064516129032 +1927-08-01,89.64516129032258 +1927-09-01,114.06666666666666 +1927-10-01,105.19354838709677 +1927-11-01,112.1 +1927-12-01,75.29032258064517 +1928-01-01,139.2258064516129 +1928-02-01,122.44827586206897 +1928-03-01,142.41935483870967 +1928-04-01,134.33333333333334 +1928-05-01,128.25806451612902 +1928-06-01,152.4 +1928-07-01,163.38709677419354 +1928-08-01,139.58064516129033 +1928-09-01,149.56666666666666 +1928-10-01,102.25806451612904 +1928-11-01,83.93333333333334 +1928-12-01,98.3225806451613 +1929-01-01,114.7741935483871 +1929-02-01,104.67857142857143 +1929-03-01,83.7741935483871 +1929-04-01,87.93333333333334 +1929-05-01,97.0 +1929-06-01,119.86666666666666 +1929-07-01,117.12903225806451 +1929-08-01,109.61290322580645 +1929-09-01,57.266666666666666 +1929-10-01,90.09677419354838 +1929-11-01,135.13333333333333 +1929-12-01,179.93548387096774 +1930-01-01,108.83870967741936 +1930-02-01,83.14285714285714 +1930-03-01,58.38709677419355 +1930-04-01,63.7 +1930-05-01,61.38709677419355 +1930-06-01,48.0 +1930-07-01,36.54838709677419 +1930-08-01,41.516129032258064 +1930-09-01,53.53333333333333 +1930-10-01,57.225806451612904 +1930-11-01,59.36666666666667 +1930-12-01,43.0 +1931-01-01,24.419354838709676 +1931-02-01,71.82142857142857 +1931-03-01,50.064516129032256 +1931-04-01,51.96666666666667 +1931-05-01,40.806451612903224 +1931-06-01,25.5 +1931-07-01,29.0 +1931-08-01,21.612903225806452 +1931-09-01,31.7 +1931-10-01,16.580645161290324 +1931-11-01,31.2 +1931-12-01,29.677419354838708 +1932-01-01,20.06451612903226 +1932-02-01,17.620689655172413 +1932-03-01,18.806451612903224 +1932-04-01,18.666666666666668 +1932-05-01,29.741935483870968 +1932-06-01,36.93333333333333 +1932-07-01,16.032258064516128 +1932-08-01,11.32258064516129 +1932-09-01,6.6 +1932-10-01,14.774193548387096 +1932-11-01,13.7 +1932-12-01,18.451612903225808 +1933-01-01,20.387096774193548 +1933-02-01,36.892857142857146 +1933-03-01,16.838709677419356 +1933-04-01,4.9 +1933-05-01,5.258064516129032 +1933-06-01,8.666666666666666 +1933-07-01,4.709677419354839 +1933-08-01,0.3870967741935484 +1933-09-01,8.5 +1933-10-01,5.0 +1933-11-01,1.0 +1933-12-01,0.41935483870967744 +1934-01-01,5.67741935483871 +1934-02-01,12.928571428571429 +1934-03-01,7.193548387096774 +1934-04-01,18.8 +1934-05-01,32.903225806451616 +1934-06-01,11.166666666666666 +1934-07-01,15.32258064516129 +1934-08-01,13.903225806451612 +1934-09-01,6.7 +1934-10-01,9.548387096774194 +1934-11-01,14.466666666666667 +1934-12-01,25.677419354838708 +1935-01-01,31.096774193548388 +1935-02-01,34.142857142857146 +1935-03-01,38.483870967741936 +1935-04-01,20.366666666666667 +1935-05-01,45.38709677419355 +1935-06-01,76.16666666666667 +1935-07-01,56.483870967741936 +1935-08-01,50.225806451612904 +1935-09-01,70.1 +1935-10-01,88.74193548387096 +1935-11-01,107.0 +1935-12-01,102.45161290322581 +1936-01-01,104.6774193548387 +1936-02-01,123.89655172413794 +1936-03-01,128.41935483870967 +1936-04-01,124.8 +1936-05-01,90.93548387096774 +1936-06-01,116.7 +1936-07-01,87.16129032258064 +1936-08-01,144.96774193548387 +1936-09-01,126.66666666666667 +1936-10-01,148.2258064516129 +1936-11-01,192.3 +1936-12-01,205.61290322580646 +1937-01-01,220.8709677419355 +1937-02-01,214.07142857142858 +1937-03-01,139.74193548387098 +1937-04-01,182.16666666666666 +1937-05-01,194.38709677419354 +1937-06-01,217.13333333333333 +1937-07-01,241.80645161290323 +1937-08-01,229.48387096774192 +1937-09-01,167.86666666666667 +1937-10-01,208.16129032258064 +1937-11-01,123.93333333333334 +1937-12-01,147.93548387096774 +1938-01-01,163.96774193548387 +1938-02-01,198.64285714285714 +1938-03-01,144.16129032258064 +1938-04-01,168.36666666666667 +1938-05-01,212.29032258064515 +1938-06-01,162.63333333333333 +1938-07-01,275.61290322580646 +1938-08-01,192.80645161290323 +1938-09-01,149.33333333333334 +1938-10-01,165.25806451612902 +1938-11-01,203.6 +1938-12-01,154.74193548387098 +1939-01-01,133.8709677419355 +1939-02-01,129.0 +1939-03-01,107.7741935483871 +1939-04-01,181.9 +1939-05-01,197.32258064516128 +1939-06-01,168.3 +1939-07-01,162.6451612903226 +1939-08-01,176.32258064516128 +1939-09-01,187.7 +1939-10-01,146.90322580645162 +1939-11-01,113.66666666666667 +1939-12-01,70.16129032258064 +1940-01-01,84.09677419354838 +1940-02-01,99.06896551724138 +1940-03-01,138.8709677419355 +1940-04-01,101.06666666666666 +1940-05-01,90.61290322580645 +1940-06-01,139.8 +1940-07-01,112.48387096774194 +1940-08-01,175.8709677419355 +1940-09-01,110.76666666666667 +1940-10-01,91.54838709677419 +1940-11-01,97.4 +1940-12-01,113.7741935483871 +1941-01-01,76.12903225806451 +1941-02-01,74.28571428571429 +1941-03-01,77.45161290322581 +1941-04-01,54.56666666666667 +1941-05-01,49.03225806451613 +1941-06-01,99.63333333333334 +1941-07-01,111.41935483870968 +1941-08-01,100.12903225806451 +1941-09-01,109.8 +1941-10-01,77.19354838709677 +1941-11-01,64.0 +1941-12-01,56.193548387096776 +1942-01-01,59.483870967741936 +1942-02-01,87.92857142857143 +1942-03-01,90.38709677419355 +1942-04-01,101.23333333333333 +1942-05-01,41.774193548387096 +1942-06-01,18.9 +1942-07-01,29.612903225806452 +1942-08-01,33.74193548387097 +1942-09-01,28.666666666666668 +1942-10-01,32.0 +1942-11-01,51.266666666666666 +1942-12-01,37.61290322580645 +1943-01-01,20.741935483870968 +1943-02-01,48.107142857142854 +1943-03-01,45.74193548387097 +1943-04-01,43.53333333333333 +1943-05-01,23.580645161290324 +1943-06-01,12.733333333333333 +1943-07-01,22.0 +1943-08-01,32.32258064516129 +1943-09-01,16.733333333333334 +1943-10-01,12.96774193548387 +1943-11-01,17.033333333333335 +1943-12-01,31.35483870967742 +1944-01-01,6.096774193548387 +1944-02-01,0.8275862068965517 +1944-03-01,18.258064516129032 +1944-04-01,0.43333333333333335 +1944-05-01,4.096774193548387 +1944-06-01,8.233333333333333 +1944-07-01,8.451612903225806 +1944-08-01,27.903225806451612 +1944-09-01,23.733333333333334 +1944-10-01,28.06451612903226 +1944-11-01,17.933333333333334 +1944-12-01,47.354838709677416 +1945-01-01,30.774193548387096 +1945-02-01,21.214285714285715 +1945-03-01,35.87096774193548 +1945-04-01,53.36666666666667 +1945-05-01,51.0 +1945-06-01,60.233333333333334 +1945-07-01,71.0 +1945-08-01,43.096774193548384 +1945-09-01,58.13333333333333 +1945-10-01,114.54838709677419 +1945-11-01,76.6 +1945-12-01,45.70967741935484 +1946-01-01,79.3225806451613 +1946-02-01,143.78571428571428 +1946-03-01,127.74193548387096 +1946-04-01,126.13333333333334 +1946-05-01,141.61290322580646 +1946-06-01,122.56666666666666 +1946-07-01,193.67741935483872 +1946-08-01,178.67741935483872 +1946-09-01,157.4 +1946-10-01,170.5483870967742 +1946-11-01,206.26666666666668 +1946-12-01,202.8709677419355 +1947-01-01,163.70967741935485 +1947-02-01,188.89285714285714 +1947-03-01,183.83870967741936 +1947-04-01,212.13333333333333 +1947-05-01,285.03225806451616 +1947-06-01,232.13333333333333 +1947-07-01,223.5483870967742 +1947-08-01,267.35483870967744 +1947-09-01,239.86666666666667 +1947-10-01,231.67741935483872 +1947-11-01,181.3 +1947-12-01,164.90322580645162 +1948-01-01,153.61290322580646 +1948-02-01,122.0 +1948-03-01,134.25806451612902 +1948-04-01,268.53333333333336 +1948-05-01,246.38709677419354 +1948-06-01,237.5 +1948-07-01,201.3548387096774 +1948-08-01,223.67741935483872 +1948-09-01,202.93333333333334 +1948-10-01,192.93548387096774 +1948-11-01,135.63333333333333 +1948-12-01,195.29032258064515 +1949-01-01,168.61290322580646 +1949-02-01,258.0357142857143 +1949-03-01,223.03225806451613 +1949-04-01,208.13333333333333 +1949-05-01,150.3548387096774 +1949-06-01,172.36666666666667 +1949-07-01,178.25806451612902 +1949-08-01,175.32258064516128 +1949-09-01,205.83333333333334 +1949-10-01,186.29032258064515 +1949-11-01,203.2 +1949-12-01,166.58064516129033 +1950-01-01,143.8709677419355 +1950-02-01,134.25 +1950-03-01,155.38709677419354 +1950-04-01,160.63333333333333 +1950-05-01,150.4516129032258 +1950-06-01,118.33333333333333 +1950-07-01,128.8709677419355 +1950-08-01,120.64516129032258 +1950-09-01,72.66666666666667 +1950-10-01,86.96774193548387 +1950-11-01,77.7 +1950-12-01,76.6774193548387 +1951-01-01,85.0 +1951-02-01,84.82142857142857 +1951-03-01,79.3225806451613 +1951-04-01,131.7 +1951-05-01,153.67741935483872 +1951-06-01,142.4 +1951-07-01,87.16129032258064 +1951-08-01,86.45161290322581 +1951-09-01,117.66666666666667 +1951-10-01,73.25806451612904 +1951-11-01,74.2 +1951-12-01,64.96774193548387 +1952-01-01,57.87096774193548 +1952-02-01,32.44827586206897 +1952-03-01,31.548387096774192 +1952-04-01,41.7 +1952-05-01,33.61290322580645 +1952-06-01,52.0 +1952-07-01,56.064516129032256 +1952-08-01,77.7741935483871 +1952-09-01,40.43333333333333 +1952-10-01,34.193548387096776 +1952-11-01,31.833333333333332 +1952-12-01,48.87096774193548 +1953-01-01,37.87096774193548 +1953-02-01,5.892857142857143 +1953-03-01,14.67741935483871 +1953-04-01,39.6 +1953-05-01,18.29032258064516 +1953-06-01,31.5 +1953-07-01,12.709677419354838 +1953-08-01,33.645161290322584 +1953-09-01,27.966666666666665 +1953-10-01,12.290322580645162 +1953-11-01,2.5 +1953-12-01,3.935483870967742 +1954-01-01,0.3548387096774194 +1954-02-01,0.7857142857142857 +1954-03-01,15.806451612903226 +1954-04-01,2.6666666666666665 +1954-05-01,1.1935483870967742 +1954-06-01,0.36666666666666664 +1954-07-01,7.258064516129032 +1954-08-01,12.612903225806452 +1954-09-01,2.3 +1954-10-01,10.451612903225806 +1954-11-01,13.4 +1954-12-01,11.258064516129032 +1955-01-01,33.41935483870968 +1955-02-01,29.892857142857142 +1955-03-01,7.290322580645161 +1955-04-01,16.433333333333334 +1955-05-01,41.29032258064516 +1955-06-01,45.166666666666664 +1955-07-01,38.193548387096776 +1955-08-01,58.03225806451613 +1955-09-01,60.8 +1955-10-01,83.0 +1955-11-01,126.26666666666667 +1955-12-01,108.83870967741936 +1956-01-01,104.12903225806451 +1956-02-01,175.6206896551724 +1956-03-01,167.67741935483872 +1956-04-01,156.73333333333332 +1956-05-01,193.38709677419354 +1956-06-01,165.06666666666666 +1956-07-01,182.74193548387098 +1956-08-01,240.19354838709677 +1956-09-01,245.43333333333334 +1956-10-01,219.93548387096774 +1956-11-01,285.03333333333336 +1956-12-01,272.0 +1957-01-01,233.67741935483872 +1957-02-01,184.46428571428572 +1957-03-01,222.80645161290323 +1957-04-01,248.03333333333333 +1957-05-01,233.0 +1957-06-01,284.3333333333333 +1957-07-01,265.0967741935484 +1957-08-01,223.70967741935485 +1957-09-01,334.0 +1957-10-01,359.38709677419354 +1957-11-01,298.6333333333333 +1957-12-01,339.0 +1958-01-01,286.6774193548387 +1958-02-01,233.60714285714286 +1958-03-01,270.0 +1958-04-01,277.56666666666666 +1958-05-01,248.2258064516129 +1958-06-01,242.86666666666667 +1958-07-01,270.96774193548384 +1958-08-01,283.51612903225805 +1958-09-01,285.06666666666666 +1958-10-01,256.9032258064516 +1958-11-01,215.6 +1958-12-01,265.6774193548387 +1959-01-01,307.7096774193548 +1959-02-01,202.60714285714286 +1959-03-01,262.96774193548384 +1959-04-01,231.3 +1959-05-01,243.58064516129033 +1959-06-01,238.9 +1959-07-01,211.8709677419355 +1959-08-01,282.5806451612903 +1959-09-01,205.56666666666666 +1959-10-01,157.74193548387098 +1959-11-01,175.63333333333333 +1959-12-01,177.09677419354838 +1960-01-01,207.16129032258064 +1960-02-01,149.93103448275863 +1960-03-01,144.6451612903226 +1960-04-01,172.7 +1960-05-01,169.32258064516128 +1960-06-01,156.0 +1960-07-01,172.41935483870967 +1960-08-01,189.96774193548387 +1960-09-01,180.13333333333333 +1960-10-01,117.25806451612904 +1960-11-01,126.93333333333334 +1960-12-01,121.16129032258064 +1961-01-01,82.12903225806451 +1961-02-01,65.39285714285714 +1961-03-01,75.16129032258064 +1961-04-01,86.86666666666666 +1961-05-01,72.25806451612904 +1961-06-01,109.5 +1961-07-01,99.3225806451613 +1961-08-01,79.2258064516129 +1961-09-01,90.06666666666666 +1961-10-01,53.70967741935484 +1961-11-01,46.46666666666667 +1961-12-01,56.87096774193548 +1962-01-01,55.12903225806452 +1962-02-01,71.67857142857143 +1962-03-01,64.87096774193549 +1962-04-01,65.86666666666666 +1962-05-01,61.935483870967744 +1962-06-01,59.56666666666667 +1962-07-01,31.419354838709676 +1962-08-01,31.451612903225808 +1962-09-01,72.7 +1962-10-01,56.096774193548384 +1962-11-01,38.8 +1962-12-01,33.225806451612904 +1963-01-01,28.70967741935484 +1963-02-01,35.17857142857143 +1963-03-01,24.838709677419356 +1963-04-01,41.733333333333334 +1963-05-01,61.096774193548384 +1963-06-01,51.233333333333334 +1963-07-01,28.677419354838708 +1963-08-01,47.45161290322581 +1963-09-01,55.233333333333334 +1963-10-01,50.12903225806452 +1963-11-01,33.666666666666664 +1963-12-01,21.64516129032258 +1964-01-01,22.612903225806452 +1964-02-01,25.275862068965516 +1964-03-01,24.06451612903226 +1964-04-01,12.866666666666667 +1964-05-01,14.290322580645162 +1964-06-01,13.533333333333333 +1964-07-01,4.774193548387097 +1964-08-01,13.774193548387096 +1964-09-01,7.0 +1964-10-01,9.161290322580646 +1964-11-01,11.1 +1964-12-01,22.06451612903226 +1965-01-01,25.387096774193548 +1965-02-01,20.785714285714285 +1965-03-01,17.451612903225808 +1965-04-01,10.166666666666666 +1965-05-01,34.54838709677419 +1965-06-01,23.266666666666666 +1965-07-01,17.322580645161292 +1965-08-01,13.290322580645162 +1965-09-01,24.466666666666665 +1965-10-01,29.129032258064516 +1965-11-01,22.833333333333332 +1965-12-01,24.677419354838708 +1966-01-01,40.32258064516129 +1966-02-01,35.285714285714285 +1966-03-01,36.354838709677416 +1966-04-01,69.0 +1966-05-01,64.2258064516129 +1966-06-01,67.66666666666667 +1966-07-01,80.2258064516129 +1966-08-01,72.64516129032258 +1966-09-01,71.1 +1966-10-01,81.16129032258064 +1966-11-01,80.96666666666667 +1966-12-01,99.7741935483871 +1967-01-01,157.03225806451613 +1967-02-01,132.60714285714286 +1967-03-01,158.32258064516128 +1967-04-01,98.43333333333334 +1967-05-01,122.51612903225806 +1967-06-01,95.4 +1967-07-01,129.4516129032258 +1967-08-01,151.7741935483871 +1967-09-01,108.7 +1967-10-01,124.96774193548387 +1967-11-01,133.6 +1967-12-01,178.96774193548387 +1968-01-01,172.4516129032258 +1968-02-01,158.48275862068965 +1968-03-01,130.5483870967742 +1968-04-01,115.0 +1968-05-01,180.0 +1968-06-01,156.16666666666666 +1968-07-01,136.19354838709677 +1968-08-01,154.83870967741936 +1968-09-01,165.96666666666667 +1968-10-01,152.5483870967742 +1968-11-01,121.7 +1968-12-01,155.48387096774192 +1969-01-01,147.7741935483871 +1969-02-01,170.53571428571428 +1969-03-01,192.29032258064515 +1969-04-01,151.13333333333333 +1969-05-01,169.90322580645162 +1969-06-01,150.06666666666666 +1969-07-01,137.1290322580645 +1969-08-01,138.7741935483871 +1969-09-01,129.3 +1969-10-01,135.38709677419354 +1969-11-01,132.4 +1969-12-01,138.6451612903226 +1970-01-01,157.8709677419355 +1970-02-01,180.82142857142858 +1970-03-01,145.74193548387098 +1970-04-01,155.06666666666666 +1970-05-01,180.48387096774192 +1970-06-01,151.3 +1970-07-01,159.29032258064515 +1970-08-01,131.67741935483872 +1970-09-01,140.83333333333334 +1970-10-01,122.64516129032258 +1970-11-01,134.8 +1970-12-01,118.19354838709677 +1971-01-01,129.2258064516129 +1971-02-01,111.82142857142857 +1971-03-01,85.93548387096774 +1971-04-01,101.63333333333334 +1971-05-01,81.51612903225806 +1971-06-01,70.66666666666667 +1971-07-01,114.70967741935483 +1971-08-01,87.0 +1971-09-01,71.26666666666667 +1971-10-01,73.35483870967742 +1971-11-01,89.46666666666667 +1971-12-01,116.45161290322581 +1972-01-01,87.0 +1972-02-01,125.27586206896552 +1972-03-01,113.51612903225806 +1972-04-01,89.63333333333334 +1972-05-01,113.90322580645162 +1972-06-01,124.7 +1972-07-01,108.25806451612904 +1972-08-01,108.87096774193549 +1972-09-01,90.66666666666667 +1972-10-01,86.93548387096774 +1972-11-01,59.233333333333334 +1972-12-01,64.29032258064517 +1973-01-01,61.774193548387096 +1973-02-01,60.857142857142854 +1973-03-01,65.35483870967742 +1973-04-01,81.8 +1973-05-01,60.25806451612903 +1973-06-01,56.13333333333333 +1973-07-01,33.225806451612904 +1973-08-01,36.61290322580645 +1973-09-01,84.06666666666666 +1973-10-01,43.74193548387097 +1973-11-01,34.3 +1973-12-01,33.32258064516129 +1974-01-01,39.354838709677416 +1974-02-01,37.25 +1974-03-01,30.903225806451612 +1974-04-01,57.46666666666667 +1974-05-01,56.29032258064516 +1974-06-01,51.46666666666667 +1974-07-01,79.12903225806451 +1974-08-01,47.903225806451616 +1974-09-01,57.166666666666664 +1974-10-01,67.16129032258064 +1974-11-01,35.9 +1974-12-01,29.612903225806452 +1975-01-01,27.322580645161292 +1975-02-01,16.678571428571427 +1975-03-01,16.870967741935484 +1975-04-01,7.666666666666667 +1975-05-01,13.064516129032258 +1975-06-01,16.733333333333334 +1975-07-01,40.38709677419355 +1975-08-01,56.74193548387097 +1975-09-01,20.333333333333332 +1975-10-01,13.580645161290322 +1975-11-01,27.9 +1975-12-01,11.580645161290322 +1976-01-01,11.870967741935484 +1976-02-01,6.448275862068965 +1976-03-01,31.451612903225808 +1976-04-01,27.333333333333332 +1976-05-01,18.225806451612904 +1976-06-01,17.933333333333334 +1976-07-01,2.935483870967742 +1976-08-01,24.096774193548388 +1976-09-01,19.966666666666665 +1976-10-01,29.741935483870968 +1976-11-01,7.866666666666666 +1976-12-01,22.322580645161292 +1977-01-01,23.806451612903224 +1977-02-01,33.25 +1977-03-01,13.0 +1977-04-01,18.966666666666665 +1977-05-01,27.0 +1977-06-01,54.9 +1977-07-01,30.612903225806452 +1977-08-01,43.0 +1977-09-01,62.36666666666667 +1977-10-01,62.064516129032256 +1977-11-01,41.56666666666667 +1977-12-01,61.38709677419355 +1978-01-01,73.6774193548387 +1978-02-01,132.57142857142858 +1978-03-01,108.35483870967742 +1978-04-01,141.23333333333332 +1978-05-01,117.06451612903226 +1978-06-01,134.63333333333333 +1978-07-01,99.6774193548387 +1978-08-01,82.41935483870968 +1978-09-01,195.66666666666666 +1978-10-01,177.1290322580645 +1978-11-01,138.53333333333333 +1978-12-01,173.8709677419355 +1979-01-01,235.8709677419355 +1979-02-01,194.71428571428572 +1979-03-01,195.29032258064515 +1979-04-01,143.73333333333332 +1979-05-01,190.32258064516128 +1979-06-01,211.7 +1979-07-01,225.67741935483872 +1979-08-01,201.3548387096774 +1979-09-01,266.9 +1979-10-01,263.61290322580646 +1979-11-01,259.53333333333336 +1979-12-01,249.61290322580646 +1980-01-01,226.06451612903226 +1980-02-01,219.41379310344828 +1980-03-01,178.67741935483872 +1980-04-01,232.23333333333332 +1980-05-01,254.67741935483872 +1980-06-01,222.66666666666666 +1980-07-01,192.93548387096774 +1980-08-01,191.70967741935485 +1980-09-01,219.56666666666666 +1980-10-01,233.25806451612902 +1980-11-01,209.53333333333333 +1980-12-01,246.93548387096774 +1981-01-01,156.6451612903226 +1981-02-01,189.89285714285714 +1981-03-01,196.6451612903226 +1981-04-01,225.33333333333334 +1981-05-01,194.67741935483872 +1981-06-01,131.6 +1981-07-01,205.32258064516128 +1981-08-01,242.4516129032258 +1981-09-01,245.26666666666668 +1981-10-01,216.16129032258064 +1981-11-01,186.03333333333333 +1981-12-01,195.38709677419354 +1982-01-01,149.7741935483871 +1982-02-01,230.92857142857142 +1982-03-01,221.06451612903226 +1982-04-01,170.26666666666668 +1982-05-01,119.29032258064517 +1982-06-01,163.73333333333332 +1982-07-01,139.38709677419354 +1982-08-01,161.93548387096774 +1982-09-01,167.36666666666667 +1982-10-01,134.32258064516128 +1982-11-01,127.46666666666667 +1982-12-01,168.96774193548387 +1983-01-01,115.48387096774194 +1983-02-01,73.07142857142857 +1983-03-01,88.6774193548387 +1983-04-01,109.56666666666666 +1983-05-01,132.51612903225808 +1983-06-01,131.46666666666667 +1983-07-01,108.90322580645162 +1983-08-01,96.0 +1983-09-01,69.93333333333334 +1983-10-01,72.51612903225806 +1983-11-01,45.666666666666664 +1983-12-01,45.645161290322584 +1984-01-01,74.83870967741936 +1984-02-01,110.17241379310344 +1984-03-01,116.74193548387096 +1984-04-01,90.4 +1984-05-01,96.87096774193549 +1984-06-01,65.1 +1984-07-01,55.67741935483871 +1984-08-01,34.96774193548387 +1984-09-01,22.6 +1984-10-01,12.612903225806452 +1984-11-01,26.466666666666665 +1984-12-01,21.387096774193548 +1985-01-01,17.838709677419356 +1985-02-01,20.714285714285715 +1985-03-01,16.870967741935484 +1985-04-01,20.366666666666667 +1985-05-01,32.41935483870968 +1985-06-01,28.3 +1985-07-01,39.935483870967744 +1985-08-01,10.129032258064516 +1985-09-01,4.333333333333333 +1985-10-01,21.967741935483872 +1985-11-01,17.866666666666667 +1985-12-01,15.838709677419354 +1986-01-01,2.774193548387097 +1986-02-01,27.892857142857142 +1986-03-01,13.838709677419354 +1986-04-01,22.4 +1986-05-01,16.129032258064516 +1986-06-01,0.5666666666666667 +1986-07-01,18.096774193548388 +1986-08-01,9.903225806451612 +1986-09-01,5.066666666666666 +1986-10-01,40.12903225806452 +1986-11-01,15.366666666666667 +1986-12-01,5.774193548387097 +1987-01-01,9.806451612903226 +1987-02-01,3.392857142857143 +1987-03-01,17.387096774193548 +1987-04-01,46.0 +1987-05-01,39.12903225806452 +1987-06-01,18.766666666666666 +1987-07-01,38.16129032258065 +1987-08-01,47.935483870967744 +1987-09-01,42.2 +1987-10-01,63.38709677419355 +1987-11-01,48.833333333333336 +1987-12-01,29.096774193548388 +1988-01-01,70.48387096774194 +1988-02-01,45.44827586206897 +1988-03-01,91.19354838709677 +1988-04-01,108.76666666666667 +1988-05-01,74.16129032258064 +1988-06-01,124.26666666666667 +1988-07-01,131.38709677419354 +1988-08-01,139.41935483870967 +1988-09-01,142.73333333333332 +1988-10-01,156.4516129032258 +1988-11-01,156.76666666666668 +1988-12-01,231.19354838709677 +1989-01-01,210.09677419354838 +1989-02-01,208.67857142857142 +1989-03-01,170.3548387096774 +1989-04-01,166.26666666666668 +1989-05-01,195.41935483870967 +1989-06-01,284.53333333333336 +1989-07-01,180.51612903225808 +1989-08-01,231.96774193548387 +1989-09-01,225.06666666666666 +1989-10-01,212.16129032258064 +1989-11-01,238.16666666666666 +1989-12-01,211.41935483870967 +1990-01-01,227.41935483870967 +1990-02-01,171.82142857142858 +1990-03-01,191.67741935483872 +1990-04-01,189.7 +1990-05-01,175.19354838709677 +1990-06-01,153.33333333333334 +1990-07-01,191.1290322580645 +1990-08-01,252.09677419354838 +1990-09-01,169.1 +1990-10-01,199.3548387096774 +1990-11-01,178.83333333333334 +1990-12-01,197.09677419354838 +1991-01-01,195.32258064516128 +1991-02-01,240.25 +1991-03-01,196.96774193548387 +1991-04-01,197.56666666666666 +1991-05-01,166.90322580645162 +1991-06-01,224.73333333333332 +1991-07-01,240.16129032258064 +1991-08-01,240.7741935483871 +1991-09-01,168.9 +1991-10-01,197.1290322580645 +1991-11-01,159.53333333333333 +1991-12-01,212.61290322580646 +1992-01-01,198.25806451612902 +1992-02-01,230.68965517241378 +1992-03-01,150.96774193548387 +1992-04-01,142.23333333333332 +1992-05-01,94.29032258064517 +1992-06-01,98.53333333333333 +1992-07-01,114.2258064516129 +1992-08-01,91.90322580645162 +1992-09-01,93.96666666666667 +1992-10-01,133.3548387096774 +1992-11-01,129.56666666666666 +1992-12-01,121.96774193548387 +1993-01-01,81.38709677419355 +1993-02-01,127.78571428571429 +1993-03-01,102.41935483870968 +1993-04-01,94.43333333333334 +1993-05-01,78.7741935483871 +1993-06-01,69.63333333333334 +1993-07-01,80.41935483870968 +1993-08-01,62.54838709677419 +1993-09-01,31.166666666666668 +1993-10-01,71.06451612903226 +1993-11-01,48.166666666666664 +1993-12-01,68.38709677419355 +1994-01-01,84.87096774193549 +1994-02-01,54.857142857142854 +1994-03-01,47.45161290322581 +1994-04-01,27.366666666666667 +1994-05-01,29.806451612903224 +1994-06-01,39.7 +1994-07-01,50.58064516129032 +1994-08-01,34.32258064516129 +1994-09-01,40.46666666666667 +1994-10-01,67.12903225806451 +1994-11-01,29.466666666666665 +1994-12-01,32.193548387096776 +1995-01-01,32.61290322580645 +1995-02-01,45.82142857142857 +1995-03-01,46.32258064516129 +1995-04-01,21.6 +1995-05-01,19.387096774193548 +1995-06-01,22.5 +1995-07-01,20.387096774193548 +1995-08-01,18.225806451612904 +1995-09-01,15.7 +1995-10-01,30.612903225806452 +1995-11-01,13.966666666666667 +1995-12-01,14.903225806451612 +1996-01-01,13.32258064516129 +1996-02-01,7.689655172413793 +1996-03-01,12.612903225806452 +1996-04-01,6.766666666666667 +1996-05-01,7.612903225806452 +1996-06-01,16.5 +1996-07-01,11.806451612903226 +1996-08-01,19.677419354838708 +1996-09-01,3.033333333333333 +1996-10-01,0.6774193548387096 +1996-11-01,24.933333333333334 +1996-12-01,14.0 +1997-01-01,7.419354838709677 +1997-02-01,11.0 +1997-03-01,12.096774193548388 +1997-04-01,23.0 +1997-05-01,25.387096774193548 +1997-06-01,20.766666666666666 +1997-07-01,12.870967741935484 +1997-08-01,35.70967741935484 +1997-09-01,59.733333333333334 +1997-10-01,32.806451612903224 +1997-11-01,50.43333333333333 +1997-12-01,55.516129032258064 +1998-01-01,44.516129032258064 +1998-02-01,50.214285714285715 +1998-03-01,82.0 +1998-04-01,70.56666666666666 +1998-05-01,74.0 +1998-06-01,90.53333333333333 +1998-07-01,96.6774193548387 +1998-08-01,121.06451612903226 +1998-09-01,132.03333333333333 +1998-10-01,78.48387096774194 +1998-11-01,97.33333333333333 +1998-12-01,119.19354838709677 +1999-01-01,86.0 +1999-02-01,98.0 +1999-03-01,103.54838709677419 +1999-04-01,93.56666666666666 +1999-05-01,149.61290322580646 +1999-06-01,207.2 +1999-07-01,173.51612903225808 +1999-08-01,142.32258064516128 +1999-09-01,106.3 +1999-10-01,168.74193548387098 +1999-11-01,188.26666666666668 +1999-12-01,116.7741935483871 +2000-01-01,133.09677419354838 +2000-02-01,165.6551724137931 +2000-03-01,217.74193548387098 +2000-04-01,191.5 +2000-05-01,165.90322580645162 +2000-06-01,188.03333333333333 +2000-07-01,244.32258064516128 +2000-08-01,180.4516129032258 +2000-09-01,156.03333333333333 +2000-10-01,141.58064516129033 +2000-11-01,158.1 +2000-12-01,143.29032258064515 +2001-01-01,142.61290322580646 +2001-02-01,121.46428571428571 +2001-03-01,165.80645161290323 +2001-04-01,161.7 +2001-05-01,142.09677419354838 +2001-06-01,202.93333333333334 +2001-07-01,122.96774193548387 +2001-08-01,161.51612903225808 +2001-09-01,238.16666666666666 +2001-10-01,194.06451612903226 +2001-11-01,176.56666666666666 +2001-12-01,213.41935483870967 +2002-01-01,184.6451612903226 +2002-02-01,170.17857142857142 +2002-03-01,147.09677419354838 +2002-04-01,186.93333333333334 +2002-05-01,187.48387096774192 +2002-06-01,128.76666666666668 +2002-07-01,161.0 +2002-08-01,175.61290322580646 +2002-09-01,187.86666666666667 +2002-10-01,151.19354838709677 +2002-11-01,147.16666666666666 +2002-12-01,135.32258064516128 +2003-01-01,133.4516129032258 +2003-02-01,75.67857142857143 +2003-03-01,100.70967741935483 +2003-04-01,97.86666666666666 +2003-05-01,86.83870967741936 +2003-06-01,118.7 +2003-07-01,128.32258064516128 +2003-08-01,115.38709677419355 +2003-09-01,78.46666666666667 +2003-10-01,97.83870967741936 +2003-11-01,82.9 +2003-12-01,72.2258064516129 +2004-01-01,60.61290322580645 +2004-02-01,74.62068965517241 +2004-03-01,74.7741935483871 +2004-04-01,59.233333333333334 +2004-05-01,72.80645161290323 +2004-06-01,66.5 +2004-07-01,83.83870967741936 +2004-08-01,69.74193548387096 +2004-09-01,48.766666666666666 +2004-10-01,74.16129032258064 +2004-11-01,70.1 +2004-12-01,28.93548387096774 +2005-01-01,48.064516129032256 +2005-02-01,43.535714285714285 +2005-03-01,39.645161290322584 +2005-04-01,38.733333333333334 +2005-05-01,61.935483870967744 +2005-06-01,56.766666666666666 +2005-07-01,62.38709677419355 +2005-08-01,60.483870967741936 +2005-09-01,37.2 +2005-10-01,13.161290322580646 +2005-11-01,27.5 +2005-12-01,59.25806451612903 +2006-01-01,20.903225806451612 +2006-02-01,5.714285714285714 +2006-03-01,17.29032258064516 +2006-04-01,50.266666666666666 +2006-05-01,37.225806451612904 +2006-06-01,24.5 +2006-07-01,22.161290322580644 +2006-08-01,20.774193548387096 +2006-09-01,23.7 +2006-10-01,14.870967741935484 +2006-11-01,35.7 +2006-12-01,22.322580645161292 +2007-01-01,29.258064516129032 +2007-02-01,18.428571428571427 +2007-03-01,7.193548387096774 +2007-04-01,5.433333333333334 +2007-05-01,19.548387096774192 +2007-06-01,21.333333333333332 +2007-07-01,15.096774193548388 +2007-08-01,9.774193548387096 +2007-09-01,4.033333333333333 +2007-10-01,1.5161290322580645 +2007-11-01,2.8333333333333335 +2007-12-01,17.29032258064516 +2008-01-01,4.129032258064516 +2008-02-01,2.8620689655172415 +2008-03-01,15.548387096774194 +2008-04-01,3.6 +2008-05-01,4.580645161290323 +2008-06-01,5.166666666666667 +2008-07-01,0.6129032258064516 +2008-08-01,0.3225806451612903 +2008-09-01,1.1666666666666667 +2008-10-01,4.161290322580645 +2008-11-01,6.633333333333334 +2008-12-01,1.032258064516129 +2009-01-01,1.3225806451612903 +2009-02-01,1.1785714285714286 +2009-03-01,0.6451612903225806 +2009-04-01,1.2333333333333334 +2009-05-01,2.935483870967742 +2009-06-01,6.3 +2009-07-01,5.516129032258065 +2009-08-01,0.0 +2009-09-01,7.1 +2009-10-01,7.67741935483871 +2009-11-01,6.866666666666666 +2009-12-01,16.322580645161292 +2010-01-01,19.451612903225808 +2010-02-01,28.5 +2010-03-01,23.967741935483872 +2010-04-01,10.366666666666667 +2010-05-01,13.903225806451612 +2010-06-01,18.8 +2010-07-01,25.225806451612904 +2010-08-01,29.64516129032258 +2010-09-01,36.36666666666667 +2010-10-01,33.645161290322584 +2010-11-01,34.36666666666667 +2010-12-01,24.548387096774192 +2011-01-01,27.322580645161292 +2011-02-01,48.285714285714285 +2011-03-01,78.64516129032258 +2011-04-01,76.1 +2011-05-01,58.193548387096776 +2011-06-01,56.06666666666667 +2011-07-01,64.51612903225806 +2011-08-01,65.83870967741936 +2011-09-01,120.13333333333334 +2011-10-01,125.6774193548387 +2011-11-01,139.06666666666666 +2011-12-01,109.29032258064517 +2012-01-01,94.41935483870968 +2012-02-01,47.758620689655174 +2012-03-01,86.64516129032258 +2012-04-01,85.9 +2012-05-01,96.48387096774194 +2012-06-01,91.96666666666667 +2012-07-01,100.12903225806451 +2012-08-01,94.7741935483871 +2012-09-01,93.7 +2012-10-01,76.54838709677419 +2012-11-01,87.63333333333334 +2012-12-01,56.806451612903224 +2013-01-01,96.06451612903226 +2013-02-01,60.92857142857143 +2013-03-01,78.3225806451613 +2013-04-01,107.33333333333333 +2013-05-01,120.16129032258064 +2013-06-01,76.7 +2013-07-01,86.16129032258064 +2013-08-01,91.7741935483871 +2013-09-01,54.46666666666667 +2013-10-01,114.35483870967742 +2013-11-01,113.86666666666666 +2013-12-01,124.16129032258064 +2014-01-01,116.96774193548387 +2014-02-01,146.07142857142858 +2014-03-01,128.74193548387098 +2014-04-01,112.46666666666667 +2014-05-01,112.45161290322581 +2014-06-01,102.86666666666666 +2014-07-01,100.19354838709677 +2014-08-01,106.93548387096774 +2014-09-01,130.0 +2014-10-01,89.96774193548387 +2014-11-01,103.63333333333334 +2014-12-01,112.87096774193549 +2015-01-01,93.03225806451613 +2015-02-01,66.71428571428571 +2015-03-01,54.54838709677419 +2015-04-01,75.33333333333333 +2015-05-01,88.83870967741936 +2015-06-01,66.46666666666667 +2015-07-01,65.83870967741936 +2015-08-01,64.41935483870968 +2015-09-01,78.56666666666666 +2015-10-01,63.645161290322584 +2015-11-01,62.166666666666664 +2015-12-01,58.03225806451613 +2016-01-01,56.96774193548387 +2016-02-01,56.37931034482759 +2016-03-01,54.064516129032256 +2016-04-01,37.9 +2016-05-01,51.516129032258064 +2016-06-01,20.533333333333335 +2016-07-01,32.354838709677416 +2016-08-01,50.16129032258065 +2016-09-01,44.63333333333333 +2016-10-01,33.41935483870968 +2016-11-01,21.4 +2016-12-01,18.483870967741936 +2017-01-01,26.06451612903226 +2017-02-01,26.428571428571427 +2017-03-01,17.677419354838708 +2017-04-01,32.3 +2017-05-01,18.93548387096774 +2017-06-01,19.233333333333334 +2017-07-01,17.806451612903224 +2017-08-01,32.58064516129032 +2017-09-01,43.7 +2017-10-01,13.193548387096774 +2017-11-01,5.7 +2017-12-01,8.161290322580646 +2018-01-01,6.806451612903226 +2018-02-01,10.678571428571429 +2018-03-01,2.4516129032258065 +2018-04-01,8.933333333333334 +2018-05-01,13.129032258064516 +2018-06-01,15.566666666666666 +2018-07-01,1.5806451612903225 +2018-08-01,8.709677419354838 +2018-09-01,3.3333333333333335 +2018-10-01,4.935483870967742 +2018-11-01,4.933333333333334 +2018-12-01,3.129032258064516 +2019-01-01,7.709677419354839 +2019-02-01,0.8214285714285714 +2019-03-01,9.419354838709678 +2019-04-01,9.066666666666666 +2019-05-01,9.903225806451612 +2019-06-01,1.1666666666666667 +2019-07-01,0.8709677419354839 +2019-08-01,0.4838709677419355 +2019-09-01,1.1 +2019-10-01,0.3870967741935484 +2019-11-01,0.4666666666666667 +2019-12-01,1.5161290322580645 +2020-01-01,6.354838709677419 +2020-02-01,0.3793103448275862 +2020-03-01,1.4838709677419355 +2020-04-01,5.366666666666666 +2020-05-01,0.1935483870967742 diff --git a/greykite/framework/benchmark/benchmark_class.py b/greykite/framework/benchmark/benchmark_class.py index 1746168..a982cc8 100644 --- a/greykite/framework/benchmark/benchmark_class.py +++ b/greykite/framework/benchmark/benchmark_class.py @@ -120,23 +120,25 @@ def validate(self): """ coverage_list = [] for config_name, config in self.configs.items(): + # Computes pipeline parameters + pipeline_params = self.forecaster.apply_forecast_config( + df=self.df, + config=config) + # Checks forecast_horizon - if config.forecast_horizon != self.tscv.forecast_horizon: + if pipeline_params["forecast_horizon"] != self.tscv.forecast_horizon: raise ValueError(f"{config_name}'s 'forecast_horizon' ({config.forecast_horizon}) does " f"not match that of 'tscv' ({self.tscv.forecast_horizon}).") # Checks periods_between_train_test - if config.evaluation_period_param.periods_between_train_test != self.tscv.periods_between_train_test: - raise ValueError(f"{config_name}'s 'periods_between_train_test' ({config.evaluation_period_param.periods_between_train_test}) " + if pipeline_params["periods_between_train_test"] is None: + pipeline_params["periods_between_train_test"] = 0 + if pipeline_params["periods_between_train_test"] != self.tscv.periods_between_train_test: + raise ValueError(f"{config_name}'s 'periods_between_train_test' ({pipeline_params['periods_between_train_test']}) " f"does not match that of 'tscv' ({self.tscv.periods_between_train_test}).") - coverage_list.append(config.coverage) - - # Computes pipeline parameters - pipeline_params = self.forecaster.apply_forecast_config( - df=self.df, - config=config) self.result[config_name] = dict(pipeline_params=pipeline_params) + coverage_list.append(config.coverage) # Checks all coverages are same if coverage_list[1:] != coverage_list[:-1]: diff --git a/greykite/framework/benchmark/data_loader_ts.py b/greykite/framework/benchmark/data_loader_ts.py index dfdc254..1e3e201 100644 --- a/greykite/framework/benchmark/data_loader_ts.py +++ b/greykite/framework/benchmark/data_loader_ts.py @@ -115,7 +115,7 @@ def load_bikesharing_ts(self): This dataset contains aggregated hourly count of the number of rented bikes. The data also includes weather data: Maximum Daily temperature (tmax); Minimum Daily Temperature (tmin); Precipitation (pn) - The raw bike-sharing data is provided by Capital Bikeshares. + The raw bike-sharing data is provided by Capital Bikeshare. Source: https://www.capitalbikeshare.com/system-data The raw weather data (Baltimore-Washington INTL Airport) https://www.ncdc.noaa.gov/data-access/land-based-station-data diff --git a/greykite/framework/input/univariate_time_series.py b/greykite/framework/input/univariate_time_series.py index f87c2d7..3faf4c2 100644 --- a/greykite/framework/input/univariate_time_series.py +++ b/greykite/framework/input/univariate_time_series.py @@ -191,9 +191,9 @@ def load_data( to forecast as well as any numeric regressors. ``"anomaly_df"`` : `pandas.DataFrame` Adjustments to correct the anomalies. - ``"start_date_col"``: `str`, default START_DATE_COL + ``"start_time_col"``: `str`, default START_TIME_COL Start date column in ``anomaly_df``. - ``"end_date_col"``: `str`, default END_DATE_COL + ``"end_time_col"``: `str`, default END_TIME_COL End date column in ``anomaly_df``. ``"adjustment_delta_col"``: `str` or None, default None Impact column in ``anomaly_df``. diff --git a/greykite/framework/pipeline/pipeline.py b/greykite/framework/pipeline/pipeline.py index 2c1f8b2..8dc07d4 100644 --- a/greykite/framework/pipeline/pipeline.py +++ b/greykite/framework/pipeline/pipeline.py @@ -357,9 +357,9 @@ def forecast_pipeline( to forecast as well as any numeric regressors. ``"anomaly_df"`` : `pandas.DataFrame` Adjustments to correct the anomalies. - ``"start_date_col"``: `str`, default START_DATE_COL + ``"start_time_col"``: `str`, default START_TIME_COL Start date column in ``anomaly_df``. - ``"end_date_col"``: `str`, default END_DATE_COL + ``"end_time_col"``: `str`, default END_TIME_COL End date column in ``anomaly_df``. ``"adjustment_delta_col"``: `str` or None, default None Impact column in ``anomaly_df``. diff --git a/greykite/framework/pipeline/utils.py b/greykite/framework/pipeline/utils.py index 8c83e57..34e0e97 100644 --- a/greykite/framework/pipeline/utils.py +++ b/greykite/framework/pipeline/utils.py @@ -166,7 +166,7 @@ def get_default_time_parameters( Returns ------- - time_params : `dict` [`str`, `str`] + time_params : `dict` [`str`, `int`] keys are parameter names, values are their default values. """ if forecast_horizon is None: diff --git a/greykite/framework/templates/auto_arima_template.py b/greykite/framework/templates/auto_arima_template.py index b68a8ac..abda6f5 100644 --- a/greykite/framework/templates/auto_arima_template.py +++ b/greykite/framework/templates/auto_arima_template.py @@ -198,7 +198,7 @@ def apply_auto_arima_model_components_defaults( start_params=None, trend=None, method='lbfgs', - maxiter=20, # Reduced from 50 (default value in pmdarima) for improved speed and robustness, + maxiter=50, offset_test_args=None, seasonal_test_args=None, suppress_warnings=True, diff --git a/greykite/framework/templates/auto_model_template.py b/greykite/framework/templates/auto_model_template.py new file mode 100644 index 0000000..d7f8757 --- /dev/null +++ b/greykite/framework/templates/auto_model_template.py @@ -0,0 +1,190 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Kaixu Yang +"""Automatically populates model template based on input.""" + + +from typing import Optional + +import pandas as pd + +from greykite.common.logging import LoggingLevelEnum +from greykite.common.logging import log_message +from greykite.common.time_properties import min_gap_in_seconds +from greykite.framework.pipeline.utils import get_default_time_parameters +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.forecast_config_defaults import ForecastConfigDefaults +from greykite.framework.templates.model_templates import ModelTemplateEnum +from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_DAILY_90 +from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_HOURLY_1 +from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_HOURLY_24 +from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_HOURLY_168 +from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_HOURLY_336 +from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_WEEKLY +from greykite.sklearn.cross_validation import RollingTimeSeriesSplit + + +def get_auto_silverkite_model_template( + df: pd.DataFrame, + default_model_template_name: str, + config: Optional[ForecastConfig] = None): + """Gets the most appropriate model template that fits the + input df's frequency, forecast horizon and number of cv splits. + + We define the cv to be sufficient if both number of splits is at least 5 + and the number of evaluated points is at least 30. + Multi-template will be used only when cv is sufficient. + + Parameter + --------- + df : `pandas.DataFrame` + The input time series. + default_model_template_name : `str` + The default model template name. + The default must be something other than "AUTO", since this function resolves + "AUTO" to a specific model template. + config : :class:`~greykite.framework.templates.model_templates.ForecastConfig` or None, default None + Config object for template class to use. + See :class:`~greykite.framework.templates.model_templates.ForecastConfig`. + + Returns + ------- + model_template : `str` + The model template name that best fits the scenario. + """ + if default_model_template_name == "AUTO": + raise ValueError("The `default_model_template_name` in " + "`get_auto_silverkite_model_template` cannot be 'AUTO'.") + + model_template = default_model_template_name + if config is None: + return model_template + + forecast_config_defaults = ForecastConfigDefaults() + + # Tries to get the data frequency. + # If failed, uses the default model template. + config = forecast_config_defaults.apply_forecast_config_defaults(config) + metadata = config.metadata_param + freq = metadata.freq + if freq is None: + freq = pd.infer_freq( + df[metadata.time_col] + ) + if freq is None: + # NB: frequency inference fails if there are missing points in the input data + log_message( + message=f"Model template was set to 'auto', however, the data frequency " + f"is not given and can not be inferred. " + f"Using default model template '{model_template}'.", + level=LoggingLevelEnum.INFO + ) + return model_template + + # Gets the number of cv splits. + # This is to decide if we want to go with multiple templates. + evaluation_period = config.evaluation_period_param + # Tries to infer ``forecast_horizon``, ``test_horizon``, ``cv_horizon``, etc. if not given. + period = min_gap_in_seconds(df=df, time_col=metadata.time_col) + default_time_params = get_default_time_parameters( + period=period, + num_observations=df.shape[0], + forecast_horizon=config.forecast_horizon, + test_horizon=evaluation_period.test_horizon, + periods_between_train_test=evaluation_period.periods_between_train_test, + cv_horizon=evaluation_period.cv_horizon, + cv_min_train_periods=evaluation_period.cv_min_train_periods, + cv_periods_between_train_test=evaluation_period.cv_periods_between_train_test) + forecast_horizon = default_time_params.get("forecast_horizon") + cv_horizon = default_time_params.get("cv_horizon") + cv = RollingTimeSeriesSplit( + forecast_horizon=cv_horizon, + min_train_periods=default_time_params.get("cv_min_train_periods"), + expanding_window=evaluation_period.cv_expanding_window, + use_most_recent_splits=evaluation_period.cv_use_most_recent_splits, + periods_between_splits=evaluation_period.cv_periods_between_splits, + periods_between_train_test=default_time_params.get("cv_periods_between_train_test"), + max_splits=evaluation_period.cv_max_splits) + testing_length = default_time_params.get("test_horizon") + testing_length += default_time_params.get("periods_between_train_test") + if testing_length > 0: + df_sample = df.iloc[:-testing_length].copy() + else: + df_sample = df.copy() + n_splits = cv.get_n_splits(X=df_sample) + # We define the cv to be sufficient if both number of splits is at least 5 + # and the number of evaluated points is at least 30. + splits_sufficient = (n_splits >= 5) and (n_splits * cv_horizon >= 30) and (evaluation_period.cv_max_splits != 0) + + # Handles the frequencies separately. + # Depending on the forecast horizon and the number of splits, + # we choose the most appropriate model template. + # If no close model template is available, + # the model template remains the default. + if freq == "H": + if not splits_sufficient: + # For 1 hour case, the best single model template + # uses linear fit algorithm which has small risk of numerical issues. + # We removed them from our auto template and use SILVERKITE in both cases. + if forecast_horizon == 1: + model_template = SILVERKITE_HOURLY_1[0] + elif forecast_horizon <= 24 * 2: + model_template = SILVERKITE_HOURLY_24[0] + elif forecast_horizon <= 24 * 7 + 24: + model_template = SILVERKITE_HOURLY_168[0] + elif forecast_horizon <= 24 * 7 * 3: + model_template = SILVERKITE_HOURLY_336[0] + else: + if forecast_horizon == 1: + model_template = ModelTemplateEnum.SILVERKITE_HOURLY_1.name + elif forecast_horizon <= 24 * 2: + model_template = ModelTemplateEnum.SILVERKITE_HOURLY_24.name + elif forecast_horizon <= 24 * 7 + 24: + model_template = ModelTemplateEnum.SILVERKITE_HOURLY_168.name + elif forecast_horizon <= 24 * 7 * 3: + model_template = ModelTemplateEnum.SILVERKITE_HOURLY_336.name + elif freq == "D": + if not splits_sufficient: + if forecast_horizon <= 7: + model_template = ModelTemplateEnum.SILVERKITE_DAILY_1_CONFIG_1.name + elif forecast_horizon >= 90: + model_template = SILVERKITE_DAILY_90[0] + else: + if forecast_horizon <= 7: + model_template = ModelTemplateEnum.SILVERKITE_DAILY_1.name + elif forecast_horizon >= 90: + model_template = ModelTemplateEnum.SILVERKITE_DAILY_90.name + elif freq in ["W", "W-SUN", "W-MON", "W-TUE", "W-WED", "W-THU", "W-FRI", "W-SAT"]: + if not splits_sufficient: + model_template = SILVERKITE_WEEKLY[0] + else: + model_template = ModelTemplateEnum.SILVERKITE_WEEKLY.name + elif freq in ["M", "MS", "SM", "BM", "CBM", "SMS", "BMS", "CBMS"]: + # Monthly template includes monthly data and some variants. + # See pandas documentation + # https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases + model_template = ModelTemplateEnum.SILVERKITE_MONTHLY.name + log_message( + message=f"Model template was set to 'auto'. " + f"Automatically found most appropriate model template '{model_template}'.", + level=LoggingLevelEnum.INFO + ) + return model_template diff --git a/greykite/framework/templates/forecast_config_defaults.py b/greykite/framework/templates/forecast_config_defaults.py index ded2857..49aa901 100644 --- a/greykite/framework/templates/forecast_config_defaults.py +++ b/greykite/framework/templates/forecast_config_defaults.py @@ -57,7 +57,7 @@ class ForecastConfigDefaults: Subclasses may override these if different defaults are desired. """ - DEFAULT_MODEL_TEMPLATE = "SILVERKITE" + DEFAULT_MODEL_TEMPLATE = "AUTO" """The default model template. See `~greykite.framework.templates.model_templates.ModelTemplateEnum`. Uses a string to avoid circular imports. """ @@ -198,7 +198,7 @@ def apply_model_components_defaults(model_components: Optional[Union[ModelCompon return model_components def apply_model_template_defaults(self, model_template: Optional[Union[str, List[Optional[str]]]] = None) -> Union[str, List[str]]: - """Applies the default ModelComponentsParam values to the given object. + """Applies the default model template to the given object. Unpacks a list of a single element to the element itself. Sets default value if None. diff --git a/greykite/framework/templates/forecaster.py b/greykite/framework/templates/forecaster.py index 3a9106e..bea3dfb 100644 --- a/greykite/framework/templates/forecaster.py +++ b/greykite/framework/templates/forecaster.py @@ -23,6 +23,7 @@ Generates a forecast from input data and config and stores the result. """ import json +from copy import deepcopy from enum import Enum from typing import Dict from typing import Optional @@ -36,6 +37,7 @@ from greykite.framework.pipeline.pipeline import ForecastResult from greykite.framework.pipeline.pipeline import forecast_pipeline from greykite.framework.pipeline.utils import get_basic_pipeline +from greykite.framework.templates.auto_model_template import get_auto_silverkite_model_template from greykite.framework.templates.autogen.forecast_config import ForecastConfig from greykite.framework.templates.autogen.forecast_config import forecast_config_from_dict from greykite.framework.templates.forecast_config_defaults import ForecastConfigDefaults @@ -70,7 +72,7 @@ class Forecaster: def __init__( self, model_template_enum: Type[Enum] = ModelTemplateEnum, - default_model_template_name: str = ModelTemplateEnum.SILVERKITE.name): + default_model_template_name: str = ModelTemplateEnum.AUTO.name): # Optional user input self.model_template_enum: Type[Enum] = model_template_enum """The available template names. An Enum class where names are template names, and values are of type @@ -78,7 +80,7 @@ def __init__( """ self.default_model_template_name: str = default_model_template_name """The default template name if not provided by ``config.model_template``. - Should be a name in ``model_template_enum``. + Should be a name in ``model_template_enum`` or "auto". Used by :py:meth:`~greykite.framework.templates.forecaster.Forecaster.__get_template_class`. """ # The following are set by `self.run_forecast_config`. @@ -136,7 +138,7 @@ def __get_config_with_default_model_template_and_components(self, config: Option If ``config.model_template`` is None, it is set to ``self.default_model_template_name``. If ``config.model_components_param`` is None, it is set to ``ModelComponentsParam()``. """ - config = config if config is not None else ForecastConfig() + config = deepcopy(config) if config is not None else ForecastConfig() # Unpacks list of a single element and sets default value if None. # NB: Does not call `apply_forecast_config_defaults`. # Only sets `model_template` and `model_components_param`. @@ -249,6 +251,55 @@ def __apply_forecast_one_by_one_to_pipeline_parameters(self): self.pipeline_params["hyperparameter_grid"]["estimator__estimator_map"] = [ self.config.forecast_one_by_one] + def __get_model_template( + self, + df: pd.DataFrame, + config: ForecastConfig) -> str: + """Gets the default model template when "auto" is given. + + This is called after ``config`` has been filled with the default values + and all fields are not None. + + Parameters + ---------- + df : `pandas.DataFrame` + Timeseries data to forecast. + Contains columns [`time_col`, `value_col`], and optional regressor columns + Regressor columns should include future values for prediction + config : :class:`~greykite.framework.templates.model_templates.ForecastConfig` + Config object for template class to use. + Must be an instance with all fields not None. + See :class:`~greykite.framework.templates.model_templates.ForecastConfig`. + + Returns + ------- + model_template : `str` + The corresponding model template. + """ + # Gets the model template from config. + # Model template should already be a string when this function is called, + # which is handled by `self.__get_config_with_default_model_template_and_components`. + model_template = config.model_template + + # Returns the model template if it's not "auto". + if not isinstance(model_template, str) or model_template.lower() != "auto": + return model_template + + # Handles the "auto" case. + # Since `get_auto_silverkite_model_template` resolves "AUTO" to + # a specific SILVERKITE template, the fallback template passed to it cannot be "AUTO". + # We use SILVERKITE if `self.default_model_template_name` is "AUTO". + default_template_for_auto = (self.default_model_template_name + if self.default_model_template_name.lower() != "auto" + else ModelTemplateEnum.SILVERKITE.name) + model_template = get_auto_silverkite_model_template( + df=df, + default_model_template_name=default_template_for_auto, + config=config + ) + + return model_template + def apply_forecast_config( self, df: pd.DataFrame, @@ -288,6 +339,7 @@ def apply_forecast_config( Input to :func:`~greykite.framework.pipeline.pipeline.forecast_pipeline`. """ self.config = self.__get_config_with_default_model_template_and_components(config) + self.config.model_template = self.__get_model_template(df=df, config=self.config) self.template_class = self.__get_template_class(self.config) self.template = self.template_class() self.pipeline_params = self.template.apply_template_for_pipeline_params(df=df, config=self.config) diff --git a/greykite/framework/templates/lag_based_template.py b/greykite/framework/templates/lag_based_template.py new file mode 100644 index 0000000..0546c60 --- /dev/null +++ b/greykite/framework/templates/lag_based_template.py @@ -0,0 +1,232 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Kaixu Yang +"""Lag based template. +Uses past observations with aggregation function as predictions. +Uses `~greykite.sklearn.estimator.lag_based_estimator.LagBasedEstimator`. +""" + +import functools +from typing import Dict +from typing import Optional + +import pandas as pd + +from greykite.common.aggregation_function_enum import AggregationFunctionEnum +from greykite.common.logging import LoggingLevelEnum +from greykite.common.logging import log_message +from greykite.common.python_utils import dictionaries_values_to_lists +from greykite.common.python_utils import update_dictionaries +from greykite.common.python_utils import update_dictionary +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam +from greykite.framework.templates.base_template import BaseTemplate +from greykite.sklearn.estimator.base_forecast_estimator import BaseForecastEstimator +from greykite.sklearn.estimator.lag_based_estimator import LagBasedEstimator +from greykite.sklearn.estimator.lag_based_estimator import LagUnitEnum + + +class LagBasedTemplate(BaseTemplate): + """A template for :class: `~greykite.sklearn.estimator.lag_based_estimator.LagBasedEstimator`. + """ + + DEFAULT_MODEL_TEMPLATE = "LAG_BASED" + + def __init__( + self, + estimator: BaseForecastEstimator = LagBasedEstimator()): + super().__init__(estimator=estimator) + + @property + def allow_model_template_list(self): + """LagBasedTemplate does not allow `config.model_template` to be a list.""" + return False + + @property + def allow_model_components_param_list(self): + """LagBasedTemplate does not allow `config.model_components_param` to be a list.""" + return False + + def get_regressor_cols(self): + """Returns regressor column names from the model components. + LagBasedTemplate does not support regressors. + """ + return None + + def apply_lag_based_model_components_defaults( + self, + model_components: Optional[ModelComponentsParam] = None): + """Fills the default values to ``model_components`` if not provided. + + Parameters + ---------- + model_components : :class:`~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam` or None, default None + Configuration for `LagBasedTemplate`. + Should only have values in the "custom" key. + + Returns + ------- + model_components : :class:`~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam` + The provided ``model_components`` with default values set. + """ + if model_components is None: + model_components = ModelComponentsParam() + default_params = dict( + freq=None, + lag_unit=LagUnitEnum.week.name, + lags=[1], + agg_func=AggregationFunctionEnum.mean.name, + agg_func_params=None, + past_df=None, + series_na_fill_func=None + ) + default_uncertainty = dict( + uncertainty_dict=None + ) + # Checks if ``model_components.custom`` has unknown keys. + # They will be removed and a warning will be logged. + if model_components.custom is None: + model_components.custom = {} + extra_keys_in_custom = [key for key in model_components.custom.keys() + if key not in default_params.keys()] + if extra_keys_in_custom: + log_message( + message="The following keys are not recognized and ignored for `LagBasedTemplate`: " + f"{extra_keys_in_custom}", + level=LoggingLevelEnum.WARNING + ) + custom = {key: value for key, value in model_components.custom.items() + if key not in extra_keys_in_custom} + else: + custom = model_components.custom + # Updates the defaults. + model_components.custom = update_dictionary( + default_params, + overwrite_dict=custom, + allow_unknown_keys=False) + model_components.uncertainty = update_dictionary( + default_uncertainty, + overwrite_dict=model_components.uncertainty, + allow_unknown_keys=False + ) + + # Gets ``freq`` from ``self.config.metadata`` if provided. + if (model_components.custom["freq"] is None and self.config is not None + and self.config.metadata_param is not None and self.config.metadata_param.freq is not None): + model_components.custom["freq"] = self.config.metadata_param.freq + + return model_components + + def get_hyperparameter_grid(self): + """Returns hyperparameter grid. + + Implements the method in `~greykite.framework.templates.base_template.BaseTemplate`. + + Uses ``self.config`` to generate the hyperparameter grid. + + Converts model components into + :class:`~greykite.sklearn.estimator.lag_based_estimator.LagBasedEstimator` + hyperparameters. + + Returns + ------- + hyperparameter_grid : `dict`, `list` [`dict`] or None + See :func:`~greykite.framework.pipeline.pipeline.forecast_pipeline`. + The output dictionary values are lists, combined in grid search. + """ + self.config.model_components_param = self.apply_lag_based_model_components_defaults( + model_components=self.config.model_components_param) + + # Returns a single set of parameters for grid search + hyperparameter_grid = { + "estimator__freq": self.config.model_components_param.custom["freq"], + "estimator__lag_unit": self.config.model_components_param.custom["lag_unit"], + "estimator__lags": self.config.model_components_param.custom["lags"], + "estimator__agg_func": self.config.model_components_param.custom["agg_func"], + "estimator__agg_func_params": self.config.model_components_param.custom["agg_func_params"], + "estimator__uncertainty_dict": self.config.model_components_param.uncertainty["uncertainty_dict"], + "estimator__past_df": self.config.model_components_param.custom["past_df"], + "estimator__series_na_fill_func": self.config.model_components_param.custom["series_na_fill_func"] + } + + # Overwrites values by `model_components.hyperparameter_override` + # This may produce a list of dictionaries for grid search. + hyperparameter_grid = update_dictionaries( + hyperparameter_grid, + overwrite_dicts=self.config.model_components_param.hyperparameter_override) + + # Ensures all items have the proper type for + # `sklearn.model_selection.RandomizedSearchCV`. + # List-type hyperparameters are specified below + # with their accepted non-list type values. + hyperparameter_grid = dictionaries_values_to_lists( + hyperparameter_grid, + hyperparameters_list_type={ + "estimator__lags": [None]} + ) + return hyperparameter_grid + + def apply_template_decorator(func): + """Decorator for ``apply_template_for_pipeline_params`` function. + + Overrides the method in `~greykite.framework.templates.base_template.BaseTemplate`. + + Raises + ------ + ValueError if config.model_template != "LAG_BASED" + """ + @functools.wraps(func) + def process_wrapper(self, df: pd.DataFrame, config: Optional[ForecastConfig] = None): + # sets defaults + config = self.apply_forecast_config_defaults(config) + # input validation + if config.model_template != "LAG_BASED": + raise ValueError(f"LagBasedTemplate only supports config.model_template='LAG_BASED', " + f"found '{config.model_template}'") + pipeline_params = func(self, df, config) + return pipeline_params + return process_wrapper + + @apply_template_decorator + def apply_template_for_pipeline_params( + self, + df: pd.DataFrame, + config: Optional[ForecastConfig] = None) -> Dict: + """Explicitly calls the method in + `~greykite.framework.templates.base_template.BaseTemplate` + to make use of the decorator in this class. + + Parameters + ---------- + df : `pandas.DataFrame` + The time series dataframe with ``time_col`` and ``value_col`` and optional regressor columns. + config : `~greykite.framework.templates.autogen.forecast_config.ForecastConfig`. + The `ForecastConfig` class that includes model training parameters. + + Returns + ------- + pipeline_parameters : `dict` + The pipeline parameters consumable by + `~greykite.framework.pipeline.pipeline.forecast_pipeline`. + """ + return super().apply_template_for_pipeline_params(df=df, config=config) + + apply_template_decorator = staticmethod(apply_template_decorator) diff --git a/greykite/framework/templates/model_templates.py b/greykite/framework/templates/model_templates.py index d83cb07..fea8176 100644 --- a/greykite/framework/templates/model_templates.py +++ b/greykite/framework/templates/model_templates.py @@ -51,8 +51,9 @@ from typing import Type from greykite.framework.templates.auto_arima_template import AutoArimaTemplate +from greykite.framework.templates.lag_based_template import LagBasedTemplate +from greykite.framework.templates.multistage_forecast_template import MultistageForecastTemplate from greykite.framework.templates.prophet_template import ProphetTemplate -from greykite.framework.templates.silverkite_multistage_template import SilverkiteMultistageTemplate from greykite.framework.templates.silverkite_template import SilverkiteTemplate from greykite.framework.templates.simple_silverkite_template import SimpleSilverkiteTemplate from greykite.framework.templates.template_interface import TemplateInterface @@ -106,44 +107,39 @@ class ModelTemplateEnum(Enum): SILVERKITE = ModelTemplate( template_class=SimpleSilverkiteTemplate, description="Silverkite model with automatic growth, seasonality, holidays, " + "automatic autoregression, normalization " "and interactions. Best for hourly and daily frequencies." "Uses `SimpleSilverkiteEstimator`.") """Silverkite model with automatic growth, seasonality, holidays, + automatic autoregression, normalization and interactions. Best for hourly and daily frequencies. Uses `SimpleSilverkiteEstimator`. """ - SILVERKITE_WITH_AR = ModelTemplate( - template_class=SimpleSilverkiteTemplate, - description="Has the same config as ``SILVERKITE`` except for adding autoregression. " - "Best for short-term daily forecasts. Uses `SimpleSilverkiteEstimator`.") - """Has the same config as ``SILVERKITE`` except for adding autoregression. - Best for short-term daily forecasts. Uses `SimpleSilverkiteEstimator`. - """ SILVERKITE_DAILY_1_CONFIG_1 = ModelTemplate( template_class=SimpleSilverkiteTemplate, description="Config 1 in template ``SILVERKITE_DAILY_1``. " - "Compared to ``SILVERKITE``, it adds change points and uses parameters " + "Compared to ``SILVERKITE``, it uses parameters " "specifically tuned for daily data and 1-day forecast.") """Config 1 in template ``SILVERKITE_DAILY_1``. - Compared to ``SILVERKITE``, it adds change points and uses parameters + Compared to ``SILVERKITE``, it uses parameters specifically tuned for daily data and 1-day forecast. """ SILVERKITE_DAILY_1_CONFIG_2 = ModelTemplate( template_class=SimpleSilverkiteTemplate, description="Config 2 in template ``SILVERKITE_DAILY_1``. " - "Compared to ``SILVERKITE``, it adds change points and uses parameters " + "Compared to ``SILVERKITE``, it uses parameters " "specifically tuned for daily data and 1-day forecast.") """Config 2 in template ``SILVERKITE_DAILY_1``. - Compared to ``SILVERKITE``, it adds change points and uses parameters + Compared to ``SILVERKITE``, it uses parameters specifically tuned for daily data and 1-day forecast. """ SILVERKITE_DAILY_1_CONFIG_3 = ModelTemplate( template_class=SimpleSilverkiteTemplate, description="Config 3 in template ``SILVERKITE_DAILY_1``. " - "Compared to ``SILVERKITE``, it adds change points and uses parameters " + "Compared to ``SILVERKITE``, it uses parameters " "specifically tuned for daily data and 1-day forecast.") """Config 3 in template ``SILVERKITE_DAILY_1``. - Compared to ``SILVERKITE``, it adds change points and uses parameters + Compared to ``SILVERKITE``, it uses parameters specifically tuned for daily data and 1-day forecast. """ SILVERKITE_DAILY_1 = ModelTemplate( @@ -173,10 +169,17 @@ class ModelTemplateEnum(Enum): Contains 4 hyperparameter combinations for grid search. Uses `SimpleSilverkiteEstimator`. """ + SILVERKITE_MONTHLY = ModelTemplate( + template_class=SimpleSilverkiteTemplate, + description="Silverkite model specifically tuned for monthly data. " + "Uses `SimpleSilverkiteEstimator`.") + """Silverkite model specifically tuned for monthly data. + Uses `SimpleSilverkiteEstimator`. + """ SILVERKITE_HOURLY_1 = ModelTemplate( template_class=SimpleSilverkiteTemplate, description="Silverkite model specifically tuned for hourly data with 1 hour forecast horizon. " - "Contains 4 hyperparameter combinations for grid search. " + "Contains 3 hyperparameter combinations for grid search. " "Uses `SimpleSilverkiteEstimator`.") """Silverkite model specifically tuned for hourly data with 1 hour forecast horizon. Contains 4 hyperparameter combinations for grid search. @@ -236,22 +239,51 @@ class ModelTemplateEnum(Enum): "Uses `AutoArimaEstimator`.") """ARIMA model with automatic order selection. Uses `AutoArimaEstimator`.""" SILVERKITE_TWO_STAGE = ModelTemplate( - template_class=SilverkiteMultistageTemplate, - description="SilverkiteMultistageTemplate's default model template. A two-stage model. " + template_class=MultistageForecastTemplate, + description="MultistageForecastTemplate's default model template. A two-stage model. " "The first step takes a longer history and learns the long-term effects, " "while the second step takes a shorter history and learns the short-term residuals." ) - """SilverkiteMultistage model's default model template. A two-stage model. " + """Multistage forecast model's default model template. A two-stage model. " "The first step takes a longer history and learns the long-term effects, " "while the second step takes a shorter history and learns the short-term residuals. """ - SILVERKITE_MULTISTAGE_EMPTY = ModelTemplate( - template_class=SilverkiteMultistageTemplate, - description="Empty configuration for Silverkite Multistage. " + MULTISTAGE_EMPTY = ModelTemplate( + template_class=MultistageForecastTemplate, + description="Empty configuration for Multistage Forecast. " "All parameters will be exactly what user inputs. " "Not to be used without overriding.""" ) - """Empty configuration for Silverkite Multistage. + """Empty configuration for Multistage Forecast. All parameters will be exactly what user inputs. Not to be used without overriding. """ + AUTO = ModelTemplate( + template_class=SimpleSilverkiteTemplate, + description="Automatically selects the SimpleSilverkite model template that corresponds to the forecast " + "problem. Selection is based on data frequency, forecast horizon, and CV configuration." + ) + """Automatically selects the SimpleSilverkite model template that corresponds to the forecast problem. + Selection is based on data frequency, forecast horizon, and CV configuration. + """ + LAG_BASED = ModelTemplate( + template_class=LagBasedTemplate, + description="Uses aggregated past observations as predictions. Examples are " + "past day, week-over-week, week-over-3-week median, etc." + ) + """Uses aggregated past observations as predictions. Examples are + past day, week-over-week, week-over-3-week median, etc. + """ + SILVERKITE_WOW = ModelTemplate( + template_class=MultistageForecastTemplate, + description="The Silverkite+WOW model uses Silverkite to model yearly/quarterly/monthly seasonality, " + "growth and holiday effects first, then uses week over week to estimate the residuals. " + "The final prediction is the total of the two models. " + "This avoids the normal week over week (WOW) estimation's weakness in capturing " + "growth and holidays." + ) + """The Silverkite+WOW model uses Silverkite to model yearly/quarterly/monthly seasonality, + growth and holiday effects first, then uses week over week to estimate the residuals. + The final prediction is the total of the two models. + This avoids the normal week over week (WOW) estimation's weakness in capturing growth and holidays. + """ diff --git a/greykite/framework/templates/multistage_forecast_template.py b/greykite/framework/templates/multistage_forecast_template.py new file mode 100644 index 0000000..f87e715 --- /dev/null +++ b/greykite/framework/templates/multistage_forecast_template.py @@ -0,0 +1,571 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Kaixu Yang + + +from itertools import product +from typing import Dict +from typing import List +from typing import Type + +import pandas as pd + +from greykite.common import constants as cst +from greykite.common.logging import LoggingLevelEnum +from greykite.common.logging import log_message +from greykite.common.python_utils import unique_in_list +from greykite.common.python_utils import update_dictionaries +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.autogen.forecast_config import MetadataParam +from greykite.framework.templates.base_template import BaseTemplate +from greykite.framework.templates.multistage_forecast_template_config import MultistageForecastTemplateConfig +from greykite.framework.templates.multistage_forecast_template_config import MultistageForecastTemplateConstants +from greykite.sklearn.estimator.base_forecast_estimator import BaseForecastEstimator +from greykite.sklearn.estimator.multistage_forecast_estimator import MultistageForecastEstimator +from greykite.sklearn.estimator.multistage_forecast_estimator import MultistageForecastModelConfig + + +class MultistageForecastTemplate(BaseTemplate): + """The model template for Multistage Forecast Estimator.""" + + DEFAULT_MODEL_TEMPLATE = "SILVERKITE_TWO_STAGE" + + def __init__( + self, + constants: MultistageForecastTemplateConstants = MultistageForecastTemplateConstants, + # The parameters here don't matter. They are set for compatibility. + estimator: BaseForecastEstimator = MultistageForecastEstimator( + forecast_horizon=1, + model_configs=[] + )): + """The init function. + + The estimator parameters in init is just for compatibility. + It does not affect the results. + """ + super().__init__(estimator=estimator) + self._constants = constants() + + @property + def constants(self) -> MultistageForecastTemplateConstants: + """Constants used by the template class. Includes the model templates and their default values. + """ + return self._constants + + def __get_regressor_templates(self): + """Gets the model templates for each sub-model. + + These templates are for ``self.get_regressor_cols`` and ``self.get_lagged_regressor_info`` + to use to extract those information from each single model. + + Returns + ------- + templates : `list` [`~greykite.framework.templates.base_template.BaseTemplate`] + A list of model template class instances. + """ + if self.config.model_components_param.custom is None: + return None + multistage_forecast_configs = self.config.model_components_param.custom.get( + "multistage_forecast_configs", None) + if multistage_forecast_configs is None or multistage_forecast_configs == []: + return [] + if isinstance(multistage_forecast_configs, MultistageForecastTemplateConfig): + multistage_forecast_configs = [multistage_forecast_configs] + templates = [] + for config in multistage_forecast_configs: + template = self.__get_template_class(ForecastConfig(model_template=config.model_template))() + template.df = self.df + template.config = ForecastConfig( + model_template=config.model_template, + model_components_param=config.model_components) + templates.append(template) + return templates + + def get_regressor_cols(self): + """Gets the regressor columns in the model. + + Iterates over each submodel to extract the regressor columns. + + Returns + ------- + regressor_cols : `list` [`str`] + A list of the regressor column names used in any of the submodels. + """ + templates = self.__get_regressor_templates() + regressor_cols = [] + if templates is None or templates == []: + return [] + for template in templates: + try: + regressors = template.get_regressor_cols() + except AttributeError: + continue + regressor_cols += regressors if regressors is not None else [] + return unique_in_list( + array=regressor_cols, + ignored_elements=(None,)) + + def get_lagged_regressor_info(self): + """Gets the lagged regressor info for the model + + Iterates over each submodel to extract the lagged regressor info. + + Returns + ------- + lagged_regressor_info : `dict` + The combined lagged regressor info from all submodels. + """ + templates = self.__get_regressor_templates() + lagged_regressor_info = { + "lagged_regressor_cols": None, + "overall_min_lag_order": None, + "overall_max_lag_order": None + } + if templates is None or templates == []: + return lagged_regressor_info + for template in templates: + try: + info = template.get_lagged_regressor_info() + except AttributeError: + continue + # Combines the ``lagged_regressor_info`` from each model. + cols = info["lagged_regressor_cols"] + min_order = info["overall_min_lag_order"] + max_order = info["overall_max_lag_order"] + if lagged_regressor_info["lagged_regressor_cols"] is None: + lagged_regressor_info["lagged_regressor_cols"] = cols + elif cols is not None: + lagged_regressor_info["lagged_regressor_cols"] += cols + if lagged_regressor_info["overall_min_lag_order"] is None: + lagged_regressor_info["overall_min_lag_order"] = min_order + elif min_order is not None: + lagged_regressor_info["overall_min_lag_order"] = min( + lagged_regressor_info["overall_min_lag_order"], min_order) + if lagged_regressor_info["overall_max_lag_order"] is None: + lagged_regressor_info["overall_max_lag_order"] = min_order + elif min_order is not None: + lagged_regressor_info["overall_max_lag_order"] = max( + lagged_regressor_info["overall_max_lag_order"], max_order) + + return lagged_regressor_info + + def get_hyperparameter_grid(self): + """Gets the hyperparameter grid for the Multistage Forecast Model. + + Returns + ------- + hyperparameter_grid : `dict` [`str`, `list` [`any`]] or `list` [ `dict` [`str`, `list` [`any`]] ] + hyperparameter_grid for grid search in + :func:`~greykite.framework.pipeline.pipeline.forecast_pipeline`. + The output dictionary values are lists, combined in grid search. + """ + if self.config is None: + raise ValueError(f"Forecast config must be provided, but `self.config` is `None`.") + model_template = self.config.model_template + model_components = self.config.model_components_param + + # Gets the model components from model template. + default_model_components = self.__get_default_model_components(model_template) + default_multistage_forecast_configs = default_model_components.custom.get("multistage_forecast_configs") + + # Checks if any parameter is specified in fields other than "custom". + not_none_parameters = [] + for key, value in model_components.__dict__.items(): + if value is not None and value != {} and key not in ["custom", "uncertainty"]: + not_none_parameters.append(key) + if not_none_parameters: + log_message( + message=f"Multistage Forecast template only takes configuration through ``custom`` " + f"and ``uncertainty`` in ``model_components_param``. " + f"The following inputs are ignored \n{not_none_parameters}.", + level=LoggingLevelEnum.WARNING + ) + + # When ``custom`` is not None, we look for the ``multistage_forecast_configs`` key. + custom = model_components.custom + # Gets the ``multistage_forecast_configs`` from ``default_multistage_forecast_configs`` and + # overriden by ``custom["multistage_forecast_configs"]``. + # If no customized configs, the default configs will be ``new_configs``. + new_configs = self.__get_multistage_forecast_configs_override( + custom=custom, + model_template=model_template, + default_multistage_forecast_configs=default_multistage_forecast_configs) + + # Converts template configs into estimator parameters. + estimator_list, estimator_params_list = self.__get_estimators_and_params_from_template_configs( + new_configs=new_configs + ) + + # Now the estimator parameters may contain grids, i.e., list of parameters from template classes. + # We need to flatten them and wrap them into list of parameters for `MultistageForecastEstimator`. + # The following function call gets the flattened estimator parameters, + # in the format of a list of lists (different sets of parameters) of dictionaries (different stage models). + flattened_dictionaries = self.__flatten_estimator_params_list( + estimator_params_list=estimator_params_list + ) + + # Then we construct the `MultistageForecastEstimator` parameters. + multistage_model_configs = [] + for grid in flattened_dictionaries: + list_of_model_configs = [] + for i, config in enumerate(new_configs): + # This is a single ``MultistageForecastModelConfig`` that corresponds to + # a single stage model in a set of configuration. + model_config = MultistageForecastModelConfig( + train_length=config.train_length, + fit_length=config.fit_length, + agg_func=config.agg_func, + agg_freq=config.agg_freq, + estimator=estimator_list[i], + estimator_params=grid[i] + ) + # Appends this single ``MultistageForecastModelConfig`` to get all stage of models. + list_of_model_configs.append(model_config) + # The hyperparameter grid consists of a list of all stage of models for grid search. + # This corresponds to different sets of configurations. + multistage_model_configs.append(list_of_model_configs) + # ``freq`` is the data frequency, which is from ``metadata_param``. + freq = self.config.metadata_param.freq if self.config.metadata_param is not None else None + + # Gets the uncertainty parameter. + uncertainty = model_components.uncertainty + if uncertainty is not None: + uncertainty_dict = uncertainty.get("uncertainty_dict", None) + else: + uncertainty_dict = None + + # Gets the hyperparameter grid. + multistage_forecast_hyperparameter_grid = dict( + estimator__forecast_horizon=[self.config.forecast_horizon], + estimator__freq=[freq], + estimator__model_configs=multistage_model_configs, + estimator__uncertainty_dict=[uncertainty_dict] + ) + return multistage_forecast_hyperparameter_grid + + @staticmethod + def __get_multistage_forecast_configs_override( + custom: Dict[str, any], + model_template: str, + default_multistage_forecast_configs: List[MultistageForecastTemplateConfig]): + """Gets the overriden Multistage Forecast configs by ``custom``. + + Parameters + ---------- + custom : `dict` [`str`, any] + The custom dictionary in `ModelComponentsParam`. + The only recognizable key is ``multistage_forecast_configs``, + which takes a list of + `~greykite.framework.templates.multistage_forecast_template_config.MultistageForecastTemplateConfig`. + model_template : `str` + The model template used in Multistage Forecast template. + default_multistage_forecast_configs : `list` [ + `~greykite.framework.templates.multistage_forecast_template_config.MultistageForecastTemplateConfig`] + The default Multistage Forecast configs from ``model_template``. + + Returns + ------- + new_configs : `list` [ + `~greykite.framework.templates.multistage_forecast_template_config.MultistageForecastTemplateConfig`] + The Multistage Forecast configs overriden by the ``multistage_forecast_configs`` in ``custom``. + """ + if custom is not None: + # Checks if any parameter is specified in "custom" other than "multistage_forecast_config". + not_none_parameters = [] + for key, value in custom.items(): + if value is not None and value != [] and key != "multistage_forecast_configs": + not_none_parameters.append(key) + if not_none_parameters: + log_message( + message=f"Multistage Forecast template only takes configurations through " + f"``custom.multistage_forecast_configs``. The following inputs are " + f"ignored \n{not_none_parameters}.", + level=LoggingLevelEnum.WARNING + ) + # Uses ``multistage_forecast_configs`` to override the default components if it's not None. + multistage_forecast_configs = custom.get("multistage_forecast_configs", None) + if ((multistage_forecast_configs is None or multistage_forecast_configs == []) + and model_template == "MULTISTAGE_EMPTY"): + raise ValueError(f"``MULTISTAGE_EMPTY`` can not be used without overriding. " + f"You must provide parameters in " + f"``ModelComponentsParam.custom.multistage_forecast_configs``.") + if multistage_forecast_configs is not None: + # Wraps in a list if it's a single ``MultistageForecastTemplateConfig``. + if isinstance(multistage_forecast_configs, MultistageForecastTemplateConfig): + multistage_forecast_configs = [multistage_forecast_configs] + # Must be a list. + if not isinstance(multistage_forecast_configs, list): + raise ValueError(f"The ``multistage_forecast_configs`` parameter must be a list of " + f"``MultistageForecastTemplateConfig`` objects, found " + f"\n{multistage_forecast_configs}.") + # Checks the lengths of default configs and overriding configs. + num_configs_in_default = len(default_multistage_forecast_configs) + num_configs_in_override = len(multistage_forecast_configs) + extra_configs = [] + if num_configs_in_default != num_configs_in_override: + if num_configs_in_default != 0: + log_message( + message=f"The number of configs in ``ModelComponentsParam`` ({num_configs_in_override}) " + f"does not match the number of configs in the default template " + f"({num_configs_in_default}). Appending extra configs to the end.", + level=LoggingLevelEnum.WARNING + ) + # These configs are extra configs, either from the default or from overriding. + # No matter where they come from, they will be appended to the end. + extra_configs = ( + multistage_forecast_configs[-(num_configs_in_override - num_configs_in_default):] + if num_configs_in_override >= num_configs_in_default + else default_multistage_forecast_configs[-(num_configs_in_default - num_configs_in_override):] + ) + + # Overrides the default ``MultistageForecastTemplateConfig`` objects. + num_to_override = min(num_configs_in_default, num_configs_in_override) + new_configs = [] + for i in range(num_to_override): + default_config = default_multistage_forecast_configs[i] + new_config = multistage_forecast_configs[i] + # Overrides the original parameters. + keys = ["train_length", "fit_length", "agg_freq", "agg_func"] + for key in keys: + if getattr(new_config, key, None) is not None: + setattr(default_config, key, getattr(new_config, key)) + # For ``model_template`` and ``model_components``, + # both will be overriden if the new ``model_template`` is different + # from the default ``model_template``. However, if both ``model_templates`` + # are the same, the keys/values in the new ``model_components`` will be + # used to override the keys/values in the default ``model_components``, + # instead of replacing the entire default ``model_components`` with the new ``model_components``. + # The consideration here is that if one only specifies partial ``model_components`` and hope + # the rest can be kept as the default, this is the right way to do. If one hopes to + # use only the parameters specified in the new ``model_components`` and do not apply defaults, + # they should have used the ``MULTISTAGE_EMPTY`` template, + # and this is also the correct behavior. + if (new_config.model_template != default_config.model_template + or default_config.model_components is None): + for key in ["model_template", "model_components"]: + if getattr(new_config, key, None) is not None: + setattr(default_config, key, getattr(new_config, key)) + else: + for key in new_config.model_components.__dict__.keys(): + allow_unknown_keys = (key == "hyperparameter_override") + updated_value = update_dictionaries( + default_dict=getattr(default_config.model_components, key, {}) or {}, + overwrite_dicts=getattr(new_config.model_components, key), + allow_unknown_keys=allow_unknown_keys) + setattr(default_config.model_components, key, updated_value) + new_configs.append(default_config) + new_configs += extra_configs + else: + # If `ModelComponentsParam.custom["multistage_forecast_configs]"` is None, + # use the default from template. + new_configs = default_multistage_forecast_configs + else: + # If `ModelComponentsParam.custom` is None, + # use the default from template. + new_configs = default_multistage_forecast_configs + return new_configs + + def __get_estimators_and_params_from_template_configs( + self, + new_configs: List[MultistageForecastTemplateConfig]): + """Gets the estimators and estimator parameters from ``MultistageForecastTemplateConfig`` objects. + + Parameters + ---------- + new_configs : `list` [ + `~greykite.framework.templates.multistage_forecast_template_config.MultistageForecastTemplateConfig`] + The Multistage Forecast configs overriden by the ``multistage_forecast_configs`` in ``custom``. + + Returns + ------- + estimators : `list` [`~greykite.sklearn.estimator.base_forecast_estimator.BaseForecastEstimator`] + The estimator classes in each stage. + estimator_params : `list` [`dict` [`str`, any]] + The estimator parameters in each stage. + These parameters are in ``hyperparameter_grid`` format and may contain nested grids. + """ + estimator_list = [] + estimator_params_list = [] + for config in new_configs: + template = self.__get_template_class(ForecastConfig(model_template=config.model_template))() + estimator = template._estimator.__class__ + # It's not common that `self.config.metadata_param` is None, + # but since `get_hyperparameter_grid` is a public method, + # in case people call it directly, we set the value defaults. + if self.config.metadata_param is not None and self.config.metadata_param.time_col is not None: + time_col = self.config.metadata_param.time_col + else: + time_col = cst.TIME_COL + if self.config.metadata_param is not None and self.config.metadata_param.value_col is not None: + value_col = self.config.metadata_param.value_col + else: + value_col = cst.VALUE_COL + date_format = self.config.metadata_param.date_format if self.config.metadata_param is not None else None + # Creates a sample df for the template class to generate hyperparameter grid. + # The ``apply_template_for_pipeline_params`` function does not use any information from ``df`` + # when generating the hyperparameter grid. + sample_df = pd.DataFrame({ + time_col: pd.date_range( + end=pd.to_datetime(self.df[time_col]).max().date(), + periods=100, + freq=config.agg_freq + ), + value_col: 0 + }) + estimator_params_grid = template.apply_template_for_pipeline_params( + df=sample_df, + # Here we ignore the ``forecast_horizon`` parameter. + # Even the wrong ``forecast_horizon`` is inferred for this model, + # the correct ``forecast_horizon`` will be used to override in the estimator's ``fit`` + # method. + config=ForecastConfig( + metadata_param=MetadataParam( + time_col=time_col, + value_col=value_col, + freq=config.agg_freq, + date_format=date_format, + ), + model_template=config.model_template, + model_components_param=config.model_components + ) + )["hyperparameter_grid"] + estimator_list.append(estimator) + estimator_params_list.append(estimator_params_grid) + return estimator_list, estimator_params_list + + @staticmethod + def __flatten_estimator_params_list( + estimator_params_list: List[Dict[str, any]]): + """Flattens the ``estimator_params_list``. + + The ``estimator_params_list`` is from ``self.__get_estimators_and_params_from_template_configs``, + and may contain nested grids within each parameter. + This function flattens it into the format of list of lists of ``estimator_params``. + + For example, the original ``estimator_params_list`` is + + [{"a": [1], "b": [2, 3]}, {"c": [4, 5]}] + + It consists of 2 stages of models. Each stage of model's parameters are in a dictionary. + The parameter values are in lists and could have multiple possible values. + + After flattening the ``estimator_params_list``, it becomes + + [[{"a": 1, "b": 2}, {"c": 4}], [{"a": 1, "b": 3}, {"c": 4}], + [{"a": 1, "b": 2}, {"c": 5}], [{"a": 1, "b": 3}, {"c": 5}]] + + There are 2 x 2 = 4 sets of parameters, i.e., 4 sets of ``estimator_params``, + each of which includes two dictionaries which correspond to the two stages of models. + + Parameters + ---------- + estimator_params_list : `list` [`dict` [`str`, any]] + The estimator parameter list in hyperparameter grids. + + Returns + ------- + flattened_estimator_params : `list` [`list` [`dict` [`str`, any]]] + The flattened list of lists of estimator parameter dictionaries. + """ + # Although Python 3.7 keeps the order in dictionary from insertion, + # to be more compatible, we use lists to ensure the keys and values are matched. + # For example, we have + # [{"a": [1], "b": [2, 3]}, {"c": [4, 5]}] + keys = [] + params = [] + for index, dictionary in enumerate(estimator_params_list): + keys.append([]) + params.append([]) + for key, value in dictionary.items(): + # ``time_properties`` are automatically inferred from the other parameters. + if "estimator__" in key and key != "estimator__time_properties": + keys[index].append(key.split("__")[1]) + params[index].append(value) + # Here we get a list of flattened values. + # [((1, 2), (4)), ((1, 3), (4)), ((1, 2), (5)), ((1, 3), (5))] + # The inner product gets all cross products for the value combinations within a stage. + # The outer product gets all cross products for the value combinations across stages. + flattened_params = list(product(*[list(product(*param)) for param in params])) + # Then we map the flattened parameters with their keys and flatten them. + # [[{"a": 1, "b": 2}, {"c": 4}], [{"a": 1, "b": 3}, {"c": 4}], + # [{"a": 1, "b": 2}, {"c": 5}], [{"a": 1, "b": 3}, {"c": 5}]] + flattened_dictionaries = [ + [ + {key: value for (key, value) in zip(subkeys, subvalues)} + for subkeys, subvalues in zip(keys, single_value) + ] + for single_value in flattened_params + ] + return flattened_dictionaries + + def __get_default_model_components( + self, + template: str): + """Gets the default model components from a model template name. + + Parameters + ---------- + template : `str` + The model template name. + + Returns + ------- + template : `~greykite.framework.templates.base_template.BaseTemplate` + The model template class. + """ + try: + template = getattr(self._constants, template) + except (AttributeError, TypeError): + raise ValueError(f"The template name {template} is not recognized!") + return template + + @property + def allow_model_template_list(self) -> bool: + return False + + @property + def allow_model_components_param_list(self) -> bool: + return False + + def __get_template_class(self, config: ForecastConfig = None) -> Type[BaseTemplate]: + """Extracts template class (e.g. `SimpleSilverkiteTemplate`) from the config. + Currently only supports single templates in + `~greykite.framework.templates.model_templates.ModelTemplateEnum`. + + Parameters + ---------- + config : :class:`~greykite.framework.templates.model_templates.ForecastConfig` or None + Config object for template class to use. + See :class:`~greykite.framework.templates.model_templates.ForecastConfig`. + + Returns + ------- + template_class : Type[`~greykite.framework.templates.base_template.BaseTemplate`] + An implementation of `~greykite.framework.templates.template_interface.TemplateInterface`. + """ + model_template_enum = self._constants.MultistageForecastModelTemplateEnum + valid_names = list(model_template_enum.__members__.keys()) + if config.model_template not in valid_names: + raise ValueError( + f"Currently Multistage Forecast only supports a known string of single model template. " + f"Model Template '{config.model_template}' is not recognized! Must be one of: {valid_names}.") + template_class = model_template_enum[config.model_template].value + return template_class diff --git a/greykite/framework/templates/multistage_forecast_template_config.py b/greykite/framework/templates/multistage_forecast_template_config.py new file mode 100644 index 0000000..dbeb4ee --- /dev/null +++ b/greykite/framework/templates/multistage_forecast_template_config.py @@ -0,0 +1,396 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Kaixu Yang +"""Provides templates for MultistageForecastEstimator that are pre-tuned to fit +specific use cases. + +These templates are recognized by +`~greykite.framework.templates.multistage_forecast_model_templates.MultistageForecastModelTemplateEnum`. +""" + +from dataclasses import dataclass +from enum import Enum +from typing import Callable +from typing import Optional +from typing import Type +from typing import Union + +from greykite.common.aggregation_function_enum import AggregationFunctionEnum +from greykite.common.constants import GrowthColEnum +from greykite.common.python_utils import mutable_field +from greykite.framework.templates.auto_arima_template import AutoArimaTemplate +from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam +from greykite.framework.templates.lag_based_template import LagBasedTemplate +from greykite.framework.templates.prophet_template import ProphetTemplate +from greykite.framework.templates.silverkite_template import SilverkiteTemplate +from greykite.framework.templates.simple_silverkite_template import SimpleSilverkiteTemplate +from greykite.sklearn.estimator.lag_based_estimator import LagUnitEnum + + +@dataclass +class MultistageForecastTemplateConfig: + """The dataclass to store Multistage forecast model config for a single model. + + Attributes + ---------- + train_length : `str`, default "392D" + The length of data used for training. For example, "56D". + fit_length : `str` or None, default None + The length of data where fitted values to be calculated. + Specify if ``fit_length`` is to be longer than ``train_length``. + agg_func : str or Callable, default + `~greykite.sklearn.estimator.multistage_forecast_estimator.AggregationFunctionEnum.nanmean.name` + The aggregation function. + agg_freq : `str` or None, default None + The aggregation period. If None, no aggregation will be used. + model_template : `str`, default "SILVERKITE" + The mode template to be used. + model_commponents : `~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam` or None, + default None + The parameters used to override the defaults in ``model_template``. + """ + train_length: str = "392D" # 56 weeks + fit_length: Optional[str] = None + agg_func: Union[str, Callable] = AggregationFunctionEnum.nanmean.name + agg_freq: Optional[str] = None + model_template: str = "SILVERKITE" + model_components: Optional[ModelComponentsParam] = None + + +# Defines the SILVERKITE_TWO_STAGE template here. +SILVERKITE_TWO_STAGE = ModelComponentsParam( + custom=dict( + multistage_forecast_configs=[ + # Defines the long model. + # A daily model with 56 weeks training length. + # Learns the long-term trend, seasonality, events, etc. + MultistageForecastTemplateConfig( + train_length="392D", # 56 weeks + fit_length=None, + agg_func="nanmean", + agg_freq="D", + model_template="SILVERKITE", + model_components=ModelComponentsParam( + seasonality={ + "yearly_seasonality": 12, + "quarterly_seasonality": 5, + "monthly_seasonality": 5, + "weekly_seasonality": 4, + "daily_seasonality": 0, + }, + growth={ + "growth_term": GrowthColEnum.linear.name + }, + events={ + "holidays_to_model_separately": "auto", + "holiday_lookup_countries": "auto", + "holiday_pre_num_days": 1, + "holiday_post_num_days": 1, + "holiday_pre_post_num_dict": None, + "daily_event_df_dict": None, + }, + changepoints={ + "changepoints_dict": { + "method": "auto", + "resample_freq": "D", + "regularization_strength": 0.5, + "potential_changepoint_distance": "15D", + "no_changepoint_distance_from_end": "30D", + "yearly_seasonality_order": 15, + "yearly_seasonality_change_freq": "365D" + }, + "seasonality_changepoints_dict": None + }, + autoregression={ + "autoreg_dict": "auto" + }, + regressors={ + "regressor_cols": [] + }, + lagged_regressors={ + "lagged_regressor_dict": None + }, + uncertainty={ + "uncertainty_dict": None + }, + custom={ + "fit_algorithm_dict": { + "fit_algorithm": "ridge", + "fit_algorithm_params": None, + }, + "feature_sets_enabled": "auto", # "auto" based on data freq and size + "max_daily_seas_interaction_order": 0, + "max_weekly_seas_interaction_order": 2, + "extra_pred_cols": [], + "min_admissible_value": None, + "max_admissible_value": None, + "drop_pred_cols": None, + "explicit_pred_cols": None, + "regression_weight_col": None, + "normalize_method": "zero_to_one" + } + ) + ), + # Defines the short model. + # Uses the original frequency with 4 weeks training length. + # Learns daily seasonality with autoregression. + MultistageForecastTemplateConfig( + train_length="28D", # 4 weeks + fit_length=None, + agg_func="nanmean", + agg_freq=None, + model_template="SILVERKITE", + model_components=ModelComponentsParam( + seasonality={ + "yearly_seasonality": 0, + "quarterly_seasonality": 0, + "monthly_seasonality": 0, + "weekly_seasonality": 0, + "daily_seasonality": 12, + }, + growth={ + "growth_term": None + }, + events={ + "holidays_to_model_separately": [], + "holiday_lookup_countries": [], + "holiday_pre_num_days": 0, + "holiday_post_num_days": 0, + "holiday_pre_post_num_dict": None, + "daily_event_df_dict": None, + }, + changepoints={ + "changepoints_dict": None, + "seasonality_changepoints_dict": None + }, + autoregression={ + "autoreg_dict": "auto" + }, + regressors={ + "regressor_cols": [] + }, + lagged_regressors={ + "lagged_regressor_dict": None + }, + uncertainty={ + "uncertainty_dict": None + }, + custom={ + "fit_algorithm_dict": { + "fit_algorithm": "ridge", + "fit_algorithm_params": None, + }, + "feature_sets_enabled": "auto", # "auto" based on data freq and size + "max_daily_seas_interaction_order": 5, + "max_weekly_seas_interaction_order": 2, + "extra_pred_cols": [], + "min_admissible_value": None, + "max_admissible_value": None, + "drop_pred_cols": None, + "explicit_pred_cols": None, + "regression_weight_col": None, + "normalize_method": "zero_to_one" + } + ) + ) + ] + ) +) +"""Two stage model for small frequency data. +The first stage uses 56 weeks data with daily frequency and trains the yearly/monthly/weekly seasonality, +trend, holidays effects. +The second stage uses the last 28 days data to train weekly/daily and autoregression effects. +This template is intended to be used with small granularity data (sub-daily) with long history to capture +long-term effects. The template is usually a few times faster than the full Silverkite model, +but still maintains a high level of accuracy. +The template was originally experimented on 5-minute granularity data and worked well. +""" + + +MULTISTAGE_EMPTY = ModelComponentsParam( + custom=dict( + multistage_forecast_configs=[] + ) +) +"""Empty configuration for Multistage Forecast. +All parameters will be exactly what user inputs. +Not to be used without overriding. +""" + + +SILVERKITE_WOW = ModelComponentsParam( + custom=dict( + multistage_forecast_configs=[ + # Defines the Silverkite daily model. + # Learns yearly/quarterly/monthly seasonality, growth and holidays. + MultistageForecastTemplateConfig( + train_length="1096D", # uses at most 3 years to train (for speed purpose) + fit_length=None, + agg_func="nanmean", + agg_freq="D", # aggregates into daily data + model_template="SILVERKITE_EMPTY", + model_components=ModelComponentsParam( + seasonality={ + "auto_seasonality": True, + "yearly_seasonality": True, + "quarterly_seasonality": True, + "monthly_seasonality": True, + # Weekly and daily seasonality are accounted for by the lag model. + "weekly_seasonality": False, # Forces no weekly seasonality + "daily_seasonality": False, # Forces no daily seasonality + }, + growth={ + "growth_term": GrowthColEnum.linear.name + }, + events={ + "auto_holiday": True, + "holiday_lookup_countries": ("US",), + "holidays_to_model_separately": None, # ignored + "holiday_pre_num_days": 0, # ignored + "holiday_post_num_days": 0, # ignored + "holiday_pre_post_num_dict": None, # ignored + "daily_event_df_dict": None, # ignored + }, + changepoints={ + "auto_growth": True, + "changepoints_dict": None, # ignored + "seasonality_changepoints_dict": None # ignored + }, + autoregression={ + "autoreg_dict": None + }, + regressors={ + "regressor_cols": None + }, + lagged_regressors={ + "lagged_regressor_dict": None + }, + uncertainty={ + "uncertainty_dict": None + }, + custom={ + "fit_algorithm_dict": { + "fit_algorithm": "ridge", + "fit_algorithm_params": None, + }, + "feature_sets_enabled": None, + "max_daily_seas_interaction_order": 0, + "max_weekly_seas_interaction_order": 0, + "extra_pred_cols": [], + "min_admissible_value": None, + "max_admissible_value": None, + "drop_pred_cols": None, + "explicit_pred_cols": None, + "regression_weight_col": None, + "normalize_method": "zero_to_one" + } + ) + ), + # Defines the short model. + # Uses the original frequency with 4 weeks training length. + # Learns daily seasonality with autoregression. + MultistageForecastTemplateConfig( + train_length="28D", # 4 weeks, can increase this or `fit_length` to see longer fitted history + fit_length=None, + agg_func="nanmean", + agg_freq=None, + model_template="LAG_BASED", + model_components=ModelComponentsParam( + custom={ + "freq": None, + "lag_unit": LagUnitEnum.week.name, + "lags": [1], + "agg_func": AggregationFunctionEnum.mean.name, + "agg_func_params": None, + "past_df": None, + "series_na_fill_func": None + }, + uncertainty={ + "uncertainty_dict": None + } + ) + ) + ] + ) +) +"""Defines the SILVERKITE_WOW model template. +The normal week over week (WOW) estimation has weakness in growth and holidays. +The Silverkite+WOW version uses Silverkite to model yearly/quarterly/monthly seasonality, +growth and holiday effects first, then uses week over week to estimate the residuals. +The final prediction is the total of the two models. +""" + + +class MultistageForecastModelTemplateEnum(Enum): + """Templates that can be used with the Multistage Forecast algorithm. + + The Multistage Forecast algorithm is defined through + `~greykite.framework.templates.multistage_forecast_template.MultistageForecastTemplate`. + The algorithm includes multiple stages, where each stage can be one of the existing model templates + such as `SimpleSilverkiteTemplate` via "SILVERKITE". + + This Enum enumerates the model templates that are allowed to use in the Silverkite + Multistage algorithm, which include common single model templates defined in + `~greykite.framework.templates.model_templates.ModelTemplateEnum`. + """ + SILVERKITE = SimpleSilverkiteTemplate + """Default model template for `SimpleSilverkiteTemplate`.""" + SILVERKITE_EMPTY = SimpleSilverkiteTemplate + """Null model template for `SimpleSilverkiteTemplate`.""" + SK = SilverkiteTemplate + """Default model template for `SilverkiteTemplate`.""" + PROPHET = ProphetTemplate + """Default model template for `ProphetTemplate`.""" + AUTO_ARIMA = AutoArimaTemplate + """Default model template for `AutoArimaTemplate`.""" + LAG_BASED = LagBasedTemplate + """Default model template for `LagBasedTemplate`.""" + + +@dataclass +class MultistageForecastTemplateConstants: + """Constants used by + `~greykite.framework.templates.multistage_forecast_template.MultistageForecastTemplate`. + Include the model templates and their default values. + """ + SILVERKITE_TWO_STAGE: ModelComponentsParam = mutable_field(SILVERKITE_TWO_STAGE) + """Defines the ``"SILVERKITE_TWO_STAGE"`` template. + Includes a 2-stage model. The first stage uses daily aggregation to learn long term effects. + The second stage uses the original frequency to learn short term effects from the residuals. + """ + MULTISTAGE_EMPTY: ModelComponentsParam = mutable_field(MULTISTAGE_EMPTY) + """Defines the ``"SILVERKITE_EMPTY"`` template. + The model config is empty. Uses exactly what user chooses to override. + Can not be used without overriding. + """ + SILVERKITE_WOW: ModelComponentsParam = mutable_field(SILVERKITE_WOW) + """Defines the SILVERKITE_WOW model template. + The normal week over week (WOW) estimation has weakness in growth and holidays. + The Silverkite+WOW version uses Silverkite to model yearly/quarterly/monthly seasonality, + growth and holiday effects first, then uses week over week to estimate the residuals. + The final prediction is the total of the two models. + """ + MultistageForecastModelTemplateEnum: Type[Enum] = MultistageForecastModelTemplateEnum + """Defines the model templates that are supported by the Multistage Forecast algorithm. + These are common single model templates defined in + `~greykite.framework.templates.model_templates.ModelTemplateEnum`, + and can be recognized in each stage of models in Multistage Forecast. + """ diff --git a/greykite/framework/templates/prophet_template.py b/greykite/framework/templates/prophet_template.py index e3c7c2a..791ddf1 100644 --- a/greykite/framework/templates/prophet_template.py +++ b/greykite/framework/templates/prophet_template.py @@ -116,7 +116,7 @@ class ProphetTemplate(BaseTemplate): ``"holiday_lookup_countries"``: `list` [`str`] or "auto" or None Which countries' holidays to include. Must contain all the holidays you intend to model. - If "auto", uses default list of countries with large contribution to Internet traffic. + If "auto", uses a default list of countries with a good coverage of global holidays. If None or an empty list, no holidays are modeled. ``"holidays_prior_scale"``: `float` or None or list of such values for grid search, default 10.0 Modulates the strength of the holiday effect. @@ -216,9 +216,9 @@ def __init__( estimator: Optional[BaseForecastEstimator] = None): try: global make_holidays_df - from fbprophet.make_holidays import make_holidays_df + from prophet.make_holidays import make_holidays_df except ModuleNotFoundError: - raise ValueError("Module 'fbprophet' is not installed. Please install it manually.") + raise ValueError("Module 'prophet' is not installed. Please install it manually.") if estimator is None: estimator = ProphetEstimator() super().__init__(estimator=estimator) @@ -248,7 +248,7 @@ def get_prophet_holidays( countries : `list` [`str`] or "auto" or None, default "auto" Countries for selecting holidays. - * If "auto", uses Top Countries for internet traffic. + * If "auto", uses a default list of countries with a good coverage of global holidays. * If a list, a list of country names. * If None, the function returns None. @@ -273,7 +273,7 @@ def get_prophet_holidays( if countries is None: countries = [] elif countries == "auto": - # countries with large contribution to internet traffic + # countries with a good coverage of global holidays countries = self.HOLIDAY_LOOKUP_COUNTRIES_AUTO elif not isinstance(countries, (list, tuple)): raise ValueError(f"`countries` should be a list, found {countries}") diff --git a/greykite/framework/templates/silverkite_template.py b/greykite/framework/templates/silverkite_template.py index a5c4cd6..9e1cc4a 100644 --- a/greykite/framework/templates/silverkite_template.py +++ b/greykite/framework/templates/silverkite_template.py @@ -34,7 +34,7 @@ import pandas as pd from greykite.algo.forecast.silverkite.forecast_silverkite import SilverkiteForecast -from greykite.algo.forecast.silverkite.silverkite_diagnostics import SilverkiteDiagnostics +from greykite.common.constants import TimeFeaturesEnum from greykite.common.features.timeseries_lags import build_autoreg_df_multi from greykite.common.python_utils import dictionaries_values_to_lists from greykite.common.python_utils import unique_in_list @@ -44,6 +44,7 @@ from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam from greykite.framework.templates.base_template import BaseTemplate from greykite.sklearn.estimator.base_forecast_estimator import BaseForecastEstimator +from greykite.sklearn.estimator.silverkite_diagnostics import SilverkiteDiagnostics from greykite.sklearn.estimator.silverkite_estimator import SilverkiteEstimator @@ -122,7 +123,12 @@ def apply_default_model_components( # sets default values default_seasonality = { "fs_components_df": [pd.DataFrame({ - "name": ["tod", "tow", "tom", "toq", "toy"], + "name": [ + TimeFeaturesEnum.tod.value, + TimeFeaturesEnum.tow.value, + TimeFeaturesEnum.tom.value, + TimeFeaturesEnum.toq.value, + TimeFeaturesEnum.toy.value], "period": [24.0, 7.0, 1.0, 1.0, 1.0], "order": [3, 3, 1, 1, 5], "seas_names": ["daily", "weekly", "monthly", "quarterly", "yearly"]})], @@ -163,7 +169,8 @@ def apply_default_model_components( default_autoregression = { "autoreg_dict": [None], - "simulation_num": [10] + "simulation_num": [10], + "fast_simulation": [False] } model_components.autoregression = update_dictionary( default_autoregression, @@ -203,7 +210,7 @@ def apply_default_model_components( # The same origin for every split, based on start year of full dataset. # To use first date of each training split, set to `None` in model_components. "origin_for_time_vars": [origin_for_time_vars], - "extra_pred_cols": ["ct1"], # linear growth + "extra_pred_cols": [TimeFeaturesEnum.ct1.value], # linear growth "drop_pred_cols": [None], "explicit_pred_cols": [None], "fit_algorithm_dict": [{ @@ -598,6 +605,7 @@ def get_hyperparameter_grid(self): "estimator__fs_components_df": self.config.model_components_param.seasonality["fs_components_df"], "estimator__autoreg_dict": self.config.model_components_param.autoregression["autoreg_dict"], "estimator__simulation_num": self.config.model_components_param.autoregression["simulation_num"], + "estimator__fast_simulation": self.config.model_components_param.autoregression["fast_simulation"], "estimator__lagged_regressor_dict": self.config.model_components_param.lagged_regressors["lagged_regressor_dict"], "estimator__changepoints_dict": self.config.model_components_param.changepoints["changepoints_dict"], "estimator__seasonality_changepoints_dict": self.config.model_components_param.changepoints["seasonality_changepoints_dict"], diff --git a/greykite/framework/templates/simple_silverkite_template.py b/greykite/framework/templates/simple_silverkite_template.py index 189622f..ea73f07 100644 --- a/greykite/framework/templates/simple_silverkite_template.py +++ b/greykite/framework/templates/simple_silverkite_template.py @@ -92,6 +92,18 @@ class SimpleSilverkiteTemplate(BaseTemplate): `~greykite.algo.forecast.silverkite.forecast_simple_silverkite.forecast_simple_silverkite`. Refer to that function for more details. + ``"auto_seasonality"`` : `bool`, default False + Whether to automatically infer seasonality orders. + If True, the seasonality orders will be automatically inferred from input timeseries + and the following parameters will be ignored: + + * ``"yearly_seasonality"`` + * ``"quarterly_seasonality"`` + * ``"monthly_seasonality"`` + * ``"weekly_seasonality"`` + * ``"daily_seasonality"`` + + For detail, see `~greykite.algo.common.seasonality_inferrer.SeasonalityInferrer`. ``"yearly_seasonality"``: `str` or `bool` or `int` or a list of such values for grid search, default 'auto' Determines the yearly seasonality 'auto', True, False, or a number for the Fourier order @@ -113,37 +125,51 @@ class SimpleSilverkiteTemplate(BaseTemplate): ``"growth_term"``: `str` or None or a list of such values for grid search How to model the growth. - Valid options are "linear", "quadratic", "sqrt", "cubic", "cuberoot" + Valid options are "linear", "quadratic", "sqrt", "cubic", "cuberoot". + See `~greykite.common.constants.GrowthColEnum`. All these terms have their origin at the train start date. events: `dict` [`str`, `any`] or None, optional Holiday/events configuration dictionary with the following optional keys: - ``"holiday_lookup_countries"``: `list` [`str`] or "auto" or None or a list of such values for grid search, default "auto" - The countries that contain the holidays you intend to model - (``holidays_to_model_separately``). - - * If "auto", uses a default list of countries - that contain the default ``holidays_to_model_separately``. - See `~greykite.algo.forecast.silverkite.constants.silverkite_holiday.SilverkiteHoliday.HOLIDAY_LOOKUP_COUNTRIES_AUTO`. - * If a list, must be a list of country names. - * If None or an empty list, no holidays are modeled. - - ``"holidays_to_model_separately"``: `list` [`str`] or "auto" or `~greykite.algo.forecast.silverkite.constants.silverkite_holiday.SilverkiteHoliday.ALL_HOLIDAYS_IN_COUNTRIES` or None or a list of such values for grid search, default "auto" # noqa: E501 - Which holidays to include in the model. - The model creates a separate key, value for each item in ``holidays_to_model_separately``. - The other holidays in the countries are grouped together as a single effect. - - * If "auto", uses a default list of important holidays. - See `~greykite.algo.forecast.silverkite.constants.silverkite_holiday.SilverkiteHoliday.HOLIDAYS_TO_MODEL_SEPARATELY_AUTO`. - * If `~greykite.algo.forecast.silverkite.constants.silverkite_holiday.SilverkiteHoliday.ALL_HOLIDAYS_IN_COUNTRIES`, - uses all available holidays in ``holiday_lookup_countries``. This can often - create a model that has too many parameters, and should typically be avoided. - * If a list, must be a list of holiday names. - * If None or an empty list, all holidays in ``holiday_lookup_countries`` are grouped together - as a single effect. - - Use ``holiday_lookup_countries`` to provide a list of countries where these holiday occur. + ``"auto_holiday"`` : `bool`, default False + Whether to automatically infer holiday configuration based on the input timeseries. + If True, the following keys will be ignored: + + * ``"holiday_lookup_countries"`` + * ``"holidays_to_model_separately"`` + * ``"holiday_pre_num_days"`` + * ``"holiday_post_num_days"`` + * ``"holiday_pre_post_num_dict"`` + + For details, see `~greykite.algo.common.holiday_inferrer.HolidayInferrer`. + Extra events specified in ``daily_event_df_dict`` will be added to the inferred holidays. + + ``"holiday_lookup_countries"``: `list` [`str`] or "auto" or None or a list of such values for grid search, default "auto" + The countries that contain the holidays you intend to model + (``holidays_to_model_separately``). + + * If "auto", uses a default list of countries + that contain the default ``holidays_to_model_separately``. + See `~greykite.algo.forecast.silverkite.constants.silverkite_holiday.SilverkiteHoliday.HOLIDAY_LOOKUP_COUNTRIES_AUTO`. + * If a list, must be a list of country names. + * If None or an empty list, no holidays are modeled. + + ``"holidays_to_model_separately"``: `list` [`str`] or "auto" or `~greykite.algo.forecast.silverkite.constants.silverkite_holiday.SilverkiteHoliday.ALL_HOLIDAYS_IN_COUNTRIES` or None or a list of such values for grid search, default "auto" # noqa: E501 + Which holidays to include in the model. + The model creates a separate key, value for each item in ``holidays_to_model_separately``. + The other holidays in the countries are grouped together as a single effect. + + * If "auto", uses a default list of important holidays. + See `~greykite.algo.forecast.silverkite.constants.silverkite_holiday.SilverkiteHoliday.HOLIDAYS_TO_MODEL_SEPARATELY_AUTO`. + * If `~greykite.algo.forecast.silverkite.constants.silverkite_holiday.SilverkiteHoliday.ALL_HOLIDAYS_IN_COUNTRIES`, + uses all available holidays in ``holiday_lookup_countries``. This can often + create a model that has too many parameters, and should typically be avoided. + * If a list, must be a list of holiday names. + * If None or an empty list, all holidays in ``holiday_lookup_countries`` are grouped together + as a single effect. + + Use ``holiday_lookup_countries`` to provide a list of countries where these holiday occur. ``"holiday_pre_num_days"``: `int` or a list of such values for grid search, default 2 model holiday effects for pre_num days before the holiday. @@ -152,94 +178,107 @@ class SimpleSilverkiteTemplate(BaseTemplate): model holiday effects for post_num days after the holiday. The unit is days, not periods. It does not depend on input data frequency. - ``"holiday_pre_post_num_dict"``: `dict` [`str`, (`int`, `int`)] or None, default None - Overrides ``pre_num`` and ``post_num`` for each holiday in - ``holidays_to_model_separately``. - For example, if ``holidays_to_model_separately`` contains "Thanksgiving" and "Labor Day", - this parameter can be set to ``{"Thanksgiving": [1, 3], "Labor Day": [1, 2]}``, - denoting that the "Thanksgiving" ``pre_num`` is 1 and ``post_num`` is 3, and "Labor Day" - ``pre_num`` is 1 and ``post_num`` is 2. - Holidays not specified use the default given by ``pre_num`` and ``post_num``. - ``"daily_event_df_dict"``: `dict` [`str`, `pandas.DataFrame`] or None, default None - A dictionary of data frames, each representing events data for the corresponding key. - Specifies additional events to include besides the holidays specified above. The format - is the same as in `~greykite.algo.forecast.silverkite.forecast_silverkite.SilverkiteForecast.forecast`. - The DataFrame has two columns: - - - The first column contains event dates. Must be in a format - recognized by `pandas.to_datetime`. Must be at daily - frequency for proper join. It is joined against the time - in ``df``, converted to a day: - ``pd.to_datetime(pd.DatetimeIndex(df[time_col]).date)``. - - the second column contains the event label for each date - - The column order is important; column names are ignored. - The event dates must span their occurrences in both the training - and future prediction period. - - During modeling, each key in the dictionary is mapped to a categorical variable - named ``f"{EVENT_PREFIX}_{key}"``, whose value at each timestamp is specified - by the corresponding DataFrame. - - For example, to manually specify a yearly event on September 1 - during a training/forecast period that spans 2020-2022:: - - daily_event_df_dict = { - "custom_event": pd.DataFrame({ - "date": ["2020-09-01", "2021-09-01", "2022-09-01"], - "label": ["is_event", "is_event", "is_event"] - }) - } - - It's possible to specify multiple events in the same df. Two events, - ``"sep"`` and ``"oct"`` are specified below for 2020-2021:: - - daily_event_df_dict = { - "custom_event": pd.DataFrame({ - "date": ["2020-09-01", "2020-10-01", "2021-09-01", "2021-10-01"], - "event_name": ["sep", "oct", "sep", "oct"] - }) - } - - Use multiple keys if two events may fall on the same date. These events - must be in separate DataFrames:: - - daily_event_df_dict = { - "fixed_event": pd.DataFrame({ - "date": ["2020-09-01", "2021-09-01", "2022-09-01"], - "event_name": "fixed_event" - }), - "moving_event": pd.DataFrame({ - "date": ["2020-09-01", "2021-08-28", "2022-09-03"], - "event_name": "moving_event" - }), - } - - The multiple event specification can be used even if events never overlap. An - equivalent specification to the second example:: - - daily_event_df_dict = { - "sep": pd.DataFrame({ - "date": ["2020-09-01", "2021-09-01"], - "event_name": "is_event" - }), - "oct": pd.DataFrame({ - "date": ["2020-10-01", "2021-10-01"], - "event_name": "is_event" - }), - } - - Note: All these events are automatically added to the model. There is no need - to specify them in ``extra_pred_cols`` as you would for - `~greykite.algo.forecast.silverkite.forecast_silverkite.SilverkiteForecast.forecast`. - - Note: Do not use `~greykite.common.constants.EVENT_DEFAULT` - in the second column. This is reserved to indicate dates that do not - correspond to an event. + ``"holiday_pre_post_num_dict"``: `dict` [`str`, (`int`, `int`)] or None, default None + Overrides ``pre_num`` and ``post_num`` for each holiday in + ``holidays_to_model_separately``. + For example, if ``holidays_to_model_separately`` contains "Thanksgiving" and "Labor Day", + this parameter can be set to ``{"Thanksgiving": [1, 3], "Labor Day": [1, 2]}``, + denoting that the "Thanksgiving" ``pre_num`` is 1 and ``post_num`` is 3, and "Labor Day" + ``pre_num`` is 1 and ``post_num`` is 2. + Holidays not specified use the default given by ``pre_num`` and ``post_num``. + ``"daily_event_df_dict"``: `dict` [`str`, `pandas.DataFrame`] or None, default None + A dictionary of data frames, each representing events data for the corresponding key. + Specifies additional events to include besides the holidays specified above. The format + is the same as in `~greykite.algo.forecast.silverkite.forecast_silverkite.SilverkiteForecast.forecast`. + The DataFrame has two columns: + + - The first column contains event dates. Must be in a format + recognized by `pandas.to_datetime`. Must be at daily + frequency for proper join. It is joined against the time + in ``df``, converted to a day: + ``pd.to_datetime(pd.DatetimeIndex(df[time_col]).date)``. + - the second column contains the event label for each date + + The column order is important; column names are ignored. + The event dates must span their occurrences in both the training + and future prediction period. + + During modeling, each key in the dictionary is mapped to a categorical variable + named ``f"{EVENT_PREFIX}_{key}"``, whose value at each timestamp is specified + by the corresponding DataFrame. + + For example, to manually specify a yearly event on September 1 + during a training/forecast period that spans 2020-2022:: + + daily_event_df_dict = { + "custom_event": pd.DataFrame({ + "date": ["2020-09-01", "2021-09-01", "2022-09-01"], + "label": ["is_event", "is_event", "is_event"] + }) + } + + It's possible to specify multiple events in the same df. Two events, + ``"sep"`` and ``"oct"`` are specified below for 2020-2021:: + + daily_event_df_dict = { + "custom_event": pd.DataFrame({ + "date": ["2020-09-01", "2020-10-01", "2021-09-01", "2021-10-01"], + "event_name": ["sep", "oct", "sep", "oct"] + }) + } + + Use multiple keys if two events may fall on the same date. These events + must be in separate DataFrames:: + + daily_event_df_dict = { + "fixed_event": pd.DataFrame({ + "date": ["2020-09-01", "2021-09-01", "2022-09-01"], + "event_name": "fixed_event" + }), + "moving_event": pd.DataFrame({ + "date": ["2020-09-01", "2021-08-28", "2022-09-03"], + "event_name": "moving_event" + }), + } + + The multiple event specification can be used even if events never overlap. An + equivalent specification to the second example:: + + daily_event_df_dict = { + "sep": pd.DataFrame({ + "date": ["2020-09-01", "2021-09-01"], + "event_name": "is_event" + }), + "oct": pd.DataFrame({ + "date": ["2020-10-01", "2021-10-01"], + "event_name": "is_event" + }), + } + + Note: All these events are automatically added to the model. There is no need + to specify them in ``extra_pred_cols`` as you would for + `~greykite.algo.forecast.silverkite.forecast_silverkite.SilverkiteForecast.forecast`. + + Note: Do not use `~greykite.common.constants.EVENT_DEFAULT` + in the second column. This is reserved to indicate dates that do not + correspond to an event. changepoints: `dict` [`str`, `dict`] or None, optional Specifies the changepoint configuration. Dictionary with the following optional key: + ``"auto_growth"`` : `bool`, default False + Whether to automatically infer growth configuration. + If True, the growth term and automatically changepoint detection configuration + will be inferred from input timeseries, + and the following parameters will be ignored: + + * ``"growth_term"`` in ``growth`` dictionary + * ``"changepoints_dict"`` (All parameters but custom changepoint parameters + to be combined with automatically detected changepoints.) + + For detail, see + `~greykite.algo.changepoint.adalasso.auto_changepoint_params.generate_trend_changepoint_detection_params`. + ``"changepoints_dict"``: `dict` or None or a list of such values for grid search Changepoints dictionary passed to ``forecast_simple_silverkite``. A dictionary with the following optional keys: @@ -313,6 +352,13 @@ class SimpleSilverkiteTemplate(BaseTemplate): are smaller than ``forecast_horizon``. In that case, simulations are needed to generate forecasts and prediction intervals. + ``"fast_simulation"`` : `bool`, default False + Deterimes if fast simulations are to be used. This only impacts models + which include auto-regression. This method will only generate one simulation + without any error being added and then add the error using the volatility + model. The advantage is a major boost in speed during inference and the + disadvantage is potentially less accurate prediction intervals. + regressors: `dict` [`str`, `any`] or None, optional Specifies the regressors to include in the model (e.g. macro-economic factors). Dictionary with the following optional keys: @@ -490,7 +536,11 @@ class SimpleSilverkiteTemplate(BaseTemplate): If None, there is no upper bound. ``"normalize_method"``: `str` or None, default None The normalization method for feature matrix. - Available values are "statistical" and "min_max". + If a string is provided, it will be used as the normalization method + in `~greykite.common.features.normalize.normalize_df`, + passed via the argument ``method``. + Available values are "statistical", "zero_to_one", "minus_half_to_half" + and "zero_at_origin". See that function for more details. hyperparameter_override: `dict` [`str`, `any`] or None or `list` [`dict` [`str`, `any`] or None], optional After the above model components are used to create a hyperparameter grid, the result is @@ -526,12 +576,14 @@ class SimpleSilverkiteTemplate(BaseTemplate): model_template: `str`, `list`[`str`] or None, default None The simple silverkite template support single templates, multi templates or a list of single/multi templates. - A valid single template must be either ``SILVERKITE`` or consists of + A valid single template must be one of ``SILVERKITE``, ``SILVERKITE_MONTHLY``, + ``SILVERKITE_DAILY_1_CONFIG_1``, ``SILVERKITE_DAILY_1_CONFIG_2``, ``SILVERKITE_DAILY_1_CONFIG_3``, + ``SILVERKITE_EMPTY``, or that consists of {FREQ}_SEAS_{VAL}_GR_{VAL}_CP_{VAL}_HOL_{VAL}_FEASET_{VAL}_ALGO_{VAL}_AR_{VAL} For example, we have DAILY_SEAS_NM_GR_LINEAR_CP_LT_HOL_NONE_FEASET_ON_ALGO_RIDGE_AR_ON. The valid FREQ and VAL - can be found at `~greykite.framework.templates.template_defaults`. The components stand for seasonality, + can be found at `~greykite.framework.templates.simple_silverkite_template_config`. The components stand for seasonality, growth, changepoints_dict, events, feature_sets_enabled, fit_algorithm and autoregression in `~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam`, which is used in `~greykite.framework.templates.simple_silverkite_template.SimpleSilverkiteTemplate`. Users are allowed to @@ -540,7 +592,7 @@ class SimpleSilverkiteTemplate(BaseTemplate): - Switch the order of different component-value pairs. A valid multi template must belong to - `~greykite.framework.templates.template_defaults.MULTI_TEMPLATES` + `~greykite.framework.templates.simple_silverkite_template_config.MULTI_TEMPLATES` or must be a list of single or multi template names. """ DEFAULT_MODEL_TEMPLATE = "SILVERKITE" @@ -841,7 +893,7 @@ def __decode_single_template(self, template): {FREQ}_SEAS_{VAL}_GR_{VAL}_CP_{VAL}_HOL_{VAL}_FEASET_{VAL}_ALGO_{VAL}_AR_{VAL} For example, we have DAILY_SEAS_NM_GR_LINEAR_CP_LT_HOL_NONE_FEASET_ON_ALGO_RIDGE_AR_ON. The valid FREQ and VAL - can be found at `~greykite.framework.templates.template_defaults`. The components stand for seasonality, + can be found at `~greykite.framework.templates.simple_silverkite_template_config`. The components stand for seasonality, growth, changepoints_dict, events, feature_sets_enabled, fit_algorithm and autoregression in `~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam`, which is used in `~greykite.framework.templates.simple_silverkite_template.SimpleSilverkiteTemplate`. Users are allowed to @@ -862,7 +914,7 @@ def __decode_single_template(self, template): `DAILY_SEAS_LT_GR_LINEAR_CP_LT_HOL_NONE_FEASET_OFF_ALGO_LINEAR_AR_ON`. """ if template in ("SILVERKITE", - "SILVERKITE_WITH_AR", + "SILVERKITE_MONTHLY", "SILVERKITE_DAILY_1_CONFIG_1", "SILVERKITE_DAILY_1_CONFIG_2", "SILVERKITE_DAILY_1_CONFIG_3"): @@ -925,12 +977,14 @@ def check_template_type(self, template): """Checks the template name is valid and whether it is single or multi template. Raises an error if the template is not recognized. - A valid single template must be either ``SILVERKITE`` or consists of + A valid single template must be one of ``SILVERKITE``, ``SILVERKITE_MONTHLY``, + ``SILVERKITE_DAILY_1_CONFIG_1``, ``SILVERKITE_DAILY_1_CONFIG_2``, ``SILVERKITE_DAILY_1_CONFIG_3``, + ``SILVERKITE_EMPTY``, or that consists of {FREQ}_SEAS_{VAL}_GR_{VAL}_CP_{VAL}_HOL_{VAL}_FEASET_{VAL}_ALGO_{VAL}_AR_{VAL} For example, we have DAILY_SEAS_NM_GR_LINEAR_CP_LT_HOL_NONE_FEASET_ON_ALGO_RIDGE_AR_ON. The valid FREQ and VAL - can be found at `~greykite.framework.templates.template_defaults`. The components stand for seasonality, + can be found at `~greykite.framework.templates.simple_silverkite_template_config`. The components stand for seasonality, growth, changepoints_dict, events, feature_sets_enabled, fit_algorithm and autoregression in `~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam`, which is used in `~greykite.framework.templates.simple_silverkite_template.SimpleSilverkiteTemplate`. Users are allowed to @@ -939,7 +993,7 @@ def check_template_type(self, template): - Switch the order of different component-value pairs. A valid multi template must belong to - `~greykite.framework.templates.template_defaults.MULTI_TEMPLATES` + `~greykite.framework.templates.simple_silverkite_template_config.MULTI_TEMPLATES` or must be a list of single or multi template names. Parameters @@ -955,7 +1009,7 @@ def check_template_type(self, template): "single" or "multi". """ if (template in ["SILVERKITE", - "SILVERKITE_WITH_AR", + "SILVERKITE_MONTHLY", "SILVERKITE_DAILY_1_CONFIG_1", "SILVERKITE_DAILY_1_CONFIG_2", "SILVERKITE_DAILY_1_CONFIG_3", @@ -965,7 +1019,7 @@ def check_template_type(self, template): return "single" if template in self.constants.MULTI_TEMPLATES: return "multi" - raise ValueError(f"The template name {template} is not recognized. It must be 'SILVERKITE', 'SILVERKITE_WITH_AR', " + raise ValueError(f"The template name {template} is not recognized. It must be 'SILVERKITE', " f"'SILVERKITE_DAILY_1_CONFIG_1', 'SILVERKITE_DAILY_1_CONFIG_2', 'SILVERKITE_DAILY_1_CONFIG_3', 'SILVERKITE_EMPTY', " f"a `SimpleSilverkiteTemplateOptions` data class, of the type" " '{FREQ}_SEAS_{VAL}_GR_{VAL}_CP_{VAL}_HOL_{VAL}_FEASET_{VAL}_ALGO_{VAL}_AR_{VAL}' or" @@ -984,7 +1038,7 @@ def __get_name_string_from_model_template(self, template): {FREQ}_SEAS_{VAL}_GR_{VAL}_CP_{VAL}_HOL_{VAL}_FEASET_{VAL}_ALGO_{VAL}_AR_{VAL} For example, we have DAILY_SEAS_NM_GR_LINEAR_CP_LT_HOL_NONE_FEASET_ON_ALGO_RIDGE_AR_ON. The valid FREQ and VAL - can be found at `~greykite.framework.templates.template_defaults`. The components stand for seasonality, + can be found at `~greykite.framework.templates.simple_silverkite_template_config`. The components stand for seasonality, growth, changepoints_dict, events, feature_sets_enabled, fit_algorithm and autoregression in `~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam`, which is used in `~greykite.framework.templates.simple_silverkite_template.SimpleSilverkiteTemplate`. Users are allowed to @@ -1041,8 +1095,8 @@ def __get_single_model_components_param_from_template(self, template): """ if template == "SILVERKITE": return self.constants.SILVERKITE - if template == "SILVERKITE_WITH_AR": - return self.constants.SILVERKITE_WITH_AR + if template == "SILVERKITE_MONTHLY": + return self.constants.SILVERKITE_MONTHLY if template == "SILVERKITE_DAILY_1_CONFIG_1": return self.constants.SILVERKITE_DAILY_1_CONFIG_1 if template == "SILVERKITE_DAILY_1_CONFIG_2": @@ -1057,6 +1111,7 @@ def __get_single_model_components_param_from_template(self, template): seasonality=self.constants.COMMON_MODELCOMPONENTPARAM_PARAMETERS["SEAS"][freq][components[components.index("SEAS")+1]], growth=self.constants.COMMON_MODELCOMPONENTPARAM_PARAMETERS["GR"][components[components.index("GR")+1]], changepoints={ + "auto_growth": False, "changepoints_dict": self.constants.COMMON_MODELCOMPONENTPARAM_PARAMETERS["CP"][freq][components[components.index("CP")+1]], "seasonality_changepoints_dict": None }, @@ -1072,7 +1127,7 @@ def __get_single_model_components_param_from_template(self, template): "min_admissible_value": None, "max_admissible_value": None, "regression_weight_col": None, - "normalize_method": None + "normalize_method": "zero_to_one" }, autoregression=self.constants.COMMON_MODELCOMPONENTPARAM_PARAMETERS["AR"][components[components.index("AR")+1]], regressors={ @@ -1204,14 +1259,17 @@ def __get_hyperparameter_grid_from_model_components(model_components): `~greykite.framework.templates.autogen.forecast_config.ModelComponentsParam.hyperparameter_override`. """ hyperparameter_grid = { + "estimator__auto_seasonality": model_components.seasonality["auto_seasonality"], "estimator__yearly_seasonality": model_components.seasonality["yearly_seasonality"], "estimator__quarterly_seasonality": model_components.seasonality["quarterly_seasonality"], "estimator__monthly_seasonality": model_components.seasonality["monthly_seasonality"], "estimator__weekly_seasonality": model_components.seasonality["weekly_seasonality"], "estimator__daily_seasonality": model_components.seasonality["daily_seasonality"], + "estimator__auto_growth": model_components.changepoints["auto_growth"], "estimator__growth_term": model_components.growth["growth_term"], "estimator__changepoints_dict": model_components.changepoints["changepoints_dict"], "estimator__seasonality_changepoints_dict": model_components.changepoints["seasonality_changepoints_dict"], + "estimator__auto_holiday": model_components.events["auto_holiday"], "estimator__holidays_to_model_separately": model_components.events["holidays_to_model_separately"], "estimator__holiday_lookup_countries": model_components.events["holiday_lookup_countries"], "estimator__holiday_pre_num_days": model_components.events["holiday_pre_num_days"], @@ -1230,6 +1288,7 @@ def __get_hyperparameter_grid_from_model_components(model_components): "estimator__normalize_method": model_components.custom["normalize_method"], "estimator__autoreg_dict": model_components.autoregression["autoreg_dict"], "estimator__simulation_num": model_components.autoregression["simulation_num"], + "estimator__fast_simulation": model_components.autoregression["fast_simulation"], "estimator__regressor_cols": model_components.regressors["regressor_cols"], "estimator__lagged_regressor_dict": model_components.lagged_regressors["lagged_regressor_dict"], "estimator__regression_weight_col": model_components.custom["regression_weight_col"], diff --git a/greykite/framework/templates/simple_silverkite_template_config.py b/greykite/framework/templates/simple_silverkite_template_config.py index f3df56b..dafcb74 100644 --- a/greykite/framework/templates/simple_silverkite_template_config.py +++ b/greykite/framework/templates/simple_silverkite_template_config.py @@ -40,6 +40,7 @@ from typing import Union from greykite.algo.forecast.silverkite.constants.silverkite_holiday import SilverkiteHoliday +from greykite.common.constants import GrowthColEnum from greykite.common.python_utils import mutable_field from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam @@ -230,6 +231,7 @@ class SimpleSilverkiteTemplateOptions: SEAS=dict( HOURLY=dict( LT={ + "auto_seasonality": False, "yearly_seasonality": 8, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -237,6 +239,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 5 }, NM={ + "auto_seasonality": False, "yearly_seasonality": 15, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -244,6 +247,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 8 }, HV={ + "auto_seasonality": False, "yearly_seasonality": 25, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -251,6 +255,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 12 }, LTQM={ + "auto_seasonality": False, "yearly_seasonality": 8, "quarterly_seasonality": 2, "monthly_seasonality": 2, @@ -258,6 +263,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 5 }, NMQM={ + "auto_seasonality": False, "yearly_seasonality": 15, "quarterly_seasonality": 3, "monthly_seasonality": 3, @@ -265,6 +271,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 8 }, HVQM={ + "auto_seasonality": False, "yearly_seasonality": 25, "quarterly_seasonality": 4, "monthly_seasonality": 4, @@ -272,6 +279,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 12 }, NONE={ + "auto_seasonality": False, "yearly_seasonality": 0, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -281,6 +289,7 @@ class SimpleSilverkiteTemplateOptions: ), DAILY=dict( LT={ + "auto_seasonality": False, "yearly_seasonality": 8, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -288,6 +297,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0 }, NM={ + "auto_seasonality": False, "yearly_seasonality": 15, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -295,6 +305,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0 }, HV={ + "auto_seasonality": False, "yearly_seasonality": 25, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -302,6 +313,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0 }, LTQM={ + "auto_seasonality": False, "yearly_seasonality": 8, "quarterly_seasonality": 3, "monthly_seasonality": 2, @@ -309,6 +321,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0 }, NMQM={ + "auto_seasonality": False, "yearly_seasonality": 15, "quarterly_seasonality": 4, "monthly_seasonality": 4, @@ -316,6 +329,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0 }, HVQM={ + "auto_seasonality": False, "yearly_seasonality": 25, "quarterly_seasonality": 6, "monthly_seasonality": 4, @@ -323,6 +337,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0 }, NONE={ + "auto_seasonality": False, "yearly_seasonality": 0, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -332,6 +347,7 @@ class SimpleSilverkiteTemplateOptions: ), WEEKLY=dict( LT={ + "auto_seasonality": False, "yearly_seasonality": 8, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -339,6 +355,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0 }, NM={ + "auto_seasonality": False, "yearly_seasonality": 15, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -346,6 +363,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0 }, HV={ + "auto_seasonality": False, "yearly_seasonality": 25, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -353,6 +371,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0 }, LTQM={ + "auto_seasonality": False, "yearly_seasonality": 8, "quarterly_seasonality": 2, "monthly_seasonality": 2, @@ -360,6 +379,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0 }, NMQM={ + "auto_seasonality": False, "yearly_seasonality": 15, "quarterly_seasonality": 3, "monthly_seasonality": 3, @@ -367,6 +387,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0 }, HVQM={ + "auto_seasonality": False, "yearly_seasonality": 25, "quarterly_seasonality": 4, "monthly_seasonality": 4, @@ -374,6 +395,7 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0 }, NONE={ + "auto_seasonality": False, "yearly_seasonality": 0, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -384,7 +406,7 @@ class SimpleSilverkiteTemplateOptions: # Growth function. GR=dict( LINEAR={ - "growth_term": "linear" + "growth_term": GrowthColEnum.linear.name }, NONE={ "growth_term": None @@ -484,6 +506,7 @@ class SimpleSilverkiteTemplateOptions: # Holiday effect. HOL=dict( SP1={ + "auto_holiday": False, "holidays_to_model_separately": "auto", "holiday_lookup_countries": "auto", "holiday_pre_num_days": 1, @@ -492,6 +515,7 @@ class SimpleSilverkiteTemplateOptions: "daily_event_df_dict": None, }, SP2={ + "auto_holiday": False, "holidays_to_model_separately": "auto", "holiday_lookup_countries": "auto", "holiday_pre_num_days": 2, @@ -500,6 +524,7 @@ class SimpleSilverkiteTemplateOptions: "daily_event_df_dict": None, }, SP4={ + "auto_holiday": False, "holidays_to_model_separately": "auto", "holiday_lookup_countries": "auto", "holiday_pre_num_days": 4, @@ -508,6 +533,7 @@ class SimpleSilverkiteTemplateOptions: "daily_event_df_dict": None, }, TG={ + "auto_holiday": False, "holidays_to_model_separately": [], "holiday_lookup_countries": "auto", "holiday_pre_num_days": 3, @@ -516,6 +542,7 @@ class SimpleSilverkiteTemplateOptions: "daily_event_df_dict": None, }, NONE={ + "auto_holiday": False, "holidays_to_model_separately": [], "holiday_lookup_countries": [], "holiday_pre_num_days": 0, @@ -550,11 +577,13 @@ class SimpleSilverkiteTemplateOptions: AR=dict( AUTO={ "autoreg_dict": "auto", - "simulation_num": 10 # simulation is not triggered with ``autoreg_dict="auto"`` + "simulation_num": 10, # simulation is not triggered with ``autoreg_dict="auto"`` + "fast_simulation": False }, OFF={ "autoreg_dict": None, - "simulation_num": 10 # simulation is not triggered with ``autoreg_dict=None`` + "simulation_num": 10, # simulation is not triggered with ``autoreg_dict=None`` + "fast_simulation": False }), # Max daily/weekly seasonality interaction orders. DSI=dict( @@ -598,6 +627,7 @@ class SimpleSilverkiteTemplateOptions: # Defines the SILVERKITE template here. SILVERKITE = ModelComponentsParam( seasonality={ + "auto_seasonality": False, "yearly_seasonality": "auto", "quarterly_seasonality": "auto", "monthly_seasonality": "auto", @@ -605,9 +635,10 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": "auto", }, growth={ - "growth_term": "linear" + "growth_term": GrowthColEnum.linear.name }, events={ + "auto_holiday": False, "holidays_to_model_separately": "auto", "holiday_lookup_countries": "auto", "holiday_pre_num_days": 2, @@ -616,12 +647,22 @@ class SimpleSilverkiteTemplateOptions: "daily_event_df_dict": None, }, changepoints={ - "changepoints_dict": None, + "auto_growth": False, + "changepoints_dict": { + "method": "auto", + "yearly_seasonality_order": 15, + "resample_freq": "3D", + "regularization_strength": 0.6, + "actual_changepoint_min_distance": "30D", + "potential_changepoint_distance": "15D", + "no_changepoint_distance_from_end": "90D" + }, "seasonality_changepoints_dict": None }, autoregression={ - "autoreg_dict": None, - "simulation_num": 10 # simulation is not triggered with ``autoreg_dict=None`` + "autoreg_dict": "auto", + "simulation_num": 10, # simulation is not triggered with ``autoreg_dict="auto"`` + "fast_simulation": False }, regressors={ "regressor_cols": [] @@ -646,72 +687,15 @@ class SimpleSilverkiteTemplateOptions: "min_admissible_value": None, "max_admissible_value": None, "regression_weight_col": None, - "normalize_method": None + "normalize_method": "zero_to_one" } ) """Defines the ``SILVERKITE`` template. Contains automatic growth, -seasonality, holidays, and interactions. Does not include autoregression. +seasonality, holidays, autoregression and interactions. +Uses "zero_to_one" normalization method. Best for hourly and daily frequencies. Uses `SimpleSilverkiteEstimator`. """ -# Defines the SILVERKITE_WITH_AR template here. -SILVERKITE_WITH_AR = ModelComponentsParam( - seasonality={ - "yearly_seasonality": "auto", - "quarterly_seasonality": "auto", - "monthly_seasonality": "auto", - "weekly_seasonality": "auto", - "daily_seasonality": "auto", - }, - growth={ - "growth_term": "linear" - }, - events={ - "holidays_to_model_separately": "auto", - "holiday_lookup_countries": "auto", - "holiday_pre_num_days": 2, - "holiday_post_num_days": 2, - "holiday_pre_post_num_dict": None, - "daily_event_df_dict": None, - }, - changepoints={ - "changepoints_dict": None, - "seasonality_changepoints_dict": None - }, - autoregression={ - "autoreg_dict": "auto", - "simulation_num": 10 # simulation is not triggered with ``autoreg_dict="auto"`` - }, - regressors={ - "regressor_cols": [] - }, - lagged_regressors={ - "lagged_regressor_dict": None - }, - uncertainty={ - "uncertainty_dict": None - }, - custom={ - "fit_algorithm_dict": { - "fit_algorithm": "ridge", - "fit_algorithm_params": None, - }, - "feature_sets_enabled": "auto", # "auto" based on data freq and size - "max_daily_seas_interaction_order": 5, - "max_weekly_seas_interaction_order": 2, - "extra_pred_cols": [], - "drop_pred_cols": None, - "explicit_pred_cols": None, - "min_admissible_value": None, - "max_admissible_value": None, - "regression_weight_col": None, - "normalize_method": None - } -) -"""Defines the ``SILVERKITE_WITH_AR`` template. -Has the same config as ``SILVERKITE`` except for adding autoregression. -Best for short-term daily forecasts. Uses `SimpleSilverkiteEstimator`. -""" # Defines the `SILVERKITE_EMPTY` template. Everything here is None or off. # The "DAILY" here does not make any difference from "HOURLY" or "WEEKLY" when everything is None or off. @@ -724,6 +708,7 @@ class SimpleSilverkiteTemplateOptions: # are tuned specifically for 1-day forecast. SILVERKITE_DAILY_1_CONFIG_1 = ModelComponentsParam( seasonality={ + "auto_seasonality": False, "yearly_seasonality": 8, "quarterly_seasonality": 0, "monthly_seasonality": 7, @@ -731,9 +716,10 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0, }, growth={ - "growth_term": "linear" + "growth_term": GrowthColEnum.linear.name }, events={ + "auto_holiday": False, "holidays_to_model_separately": SilverkiteHoliday.HOLIDAYS_TO_MODEL_SEPARATELY_AUTO, "holiday_lookup_countries": SilverkiteHoliday.HOLIDAY_LOOKUP_COUNTRIES_AUTO, "holiday_pre_num_days": 2, @@ -742,6 +728,7 @@ class SimpleSilverkiteTemplateOptions: "daily_event_df_dict": None, }, changepoints={ + "auto_growth": False, "changepoints_dict": { "method": "auto", "resample_freq": "7D", @@ -755,7 +742,8 @@ class SimpleSilverkiteTemplateOptions: }, autoregression={ "autoreg_dict": "auto", - "simulation_num": 10 # simulation is not triggered with ``autoreg_dict="auto"`` + "simulation_num": 10, # simulation is not triggered with ``autoreg_dict="auto"`` + "fast_simulation": False }, regressors={ "regressor_cols": [] @@ -780,12 +768,13 @@ class SimpleSilverkiteTemplateOptions: "min_admissible_value": None, "max_admissible_value": None, "regression_weight_col": None, - "normalize_method": None + "normalize_method": "zero_to_one" } ) SILVERKITE_DAILY_1_CONFIG_2 = ModelComponentsParam( seasonality={ + "auto_seasonality": False, "yearly_seasonality": 1, "quarterly_seasonality": 0, "monthly_seasonality": 4, @@ -793,9 +782,10 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0, }, growth={ - "growth_term": "linear" + "growth_term": GrowthColEnum.linear.name }, events={ + "auto_holiday": False, "holidays_to_model_separately": SilverkiteHoliday.HOLIDAYS_TO_MODEL_SEPARATELY_AUTO, "holiday_lookup_countries": SilverkiteHoliday.HOLIDAY_LOOKUP_COUNTRIES_AUTO, "holiday_pre_num_days": 2, @@ -804,6 +794,7 @@ class SimpleSilverkiteTemplateOptions: "daily_event_df_dict": None, }, changepoints={ + "auto_growth": False, "changepoints_dict": { "method": "auto", "resample_freq": "7D", @@ -817,7 +808,8 @@ class SimpleSilverkiteTemplateOptions: }, autoregression={ "autoreg_dict": "auto", - "simulation_num": 10 # simulation is not triggered with ``autoreg_dict="auto"`` + "simulation_num": 10, # simulation is not triggered with ``autoreg_dict="auto"`` + "fast_simulation": False }, regressors={ "regressor_cols": [] @@ -842,12 +834,13 @@ class SimpleSilverkiteTemplateOptions: "min_admissible_value": None, "max_admissible_value": None, "regression_weight_col": None, - "normalize_method": None + "normalize_method": "zero_to_one" } ) SILVERKITE_DAILY_1_CONFIG_3 = ModelComponentsParam( seasonality={ + "auto_seasonality": False, "yearly_seasonality": 40, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -855,9 +848,10 @@ class SimpleSilverkiteTemplateOptions: "daily_seasonality": 0, }, growth={ - "growth_term": "linear" + "growth_term": GrowthColEnum.linear.name }, events={ + "auto_holiday": False, "holidays_to_model_separately": SilverkiteHoliday.HOLIDAYS_TO_MODEL_SEPARATELY_AUTO, "holiday_lookup_countries": SilverkiteHoliday.HOLIDAY_LOOKUP_COUNTRIES_AUTO, "holiday_pre_num_days": 2, @@ -866,6 +860,7 @@ class SimpleSilverkiteTemplateOptions: "daily_event_df_dict": None, }, changepoints={ + "auto_growth": False, "changepoints_dict": { "method": "auto", "resample_freq": "7D", @@ -879,7 +874,8 @@ class SimpleSilverkiteTemplateOptions: }, autoregression={ "autoreg_dict": "auto", - "simulation_num": 10 # simulation is not triggered with ``autoreg_dict="auto"`` + "simulation_num": 10, # simulation is not triggered with ``autoreg_dict="auto"`` + "fast_simulation": False }, regressors={ "regressor_cols": [] @@ -904,9 +900,90 @@ class SimpleSilverkiteTemplateOptions: "min_admissible_value": None, "max_admissible_value": None, "regression_weight_col": None, - "normalize_method": None + "normalize_method": "zero_to_one" + } +) + +# Defines the SILVERKITE monthly template here. +SILVERKITE_MONTHLY = ModelComponentsParam( + seasonality={ + "auto_seasonality": False, + "yearly_seasonality": False, + "quarterly_seasonality": False, + "monthly_seasonality": False, + "weekly_seasonality": False, + "daily_seasonality": False, + }, + growth={ + "growth_term": GrowthColEnum.linear.name + }, + events={ + "auto_holiday": False, + "holidays_to_model_separately": [], + "holiday_lookup_countries": [], + "holiday_pre_num_days": 0, + "holiday_post_num_days": 0, + "holiday_pre_post_num_dict": None, + "daily_event_df_dict": None, + }, + changepoints={ + "auto_growth": False, + "changepoints_dict": { + "method": "auto", + "regularization_strength": 0.6, + "resample_freq": "28D", # no effect for monthly data if less than or equal to 28 days + "potential_changepoint_distance": "180D", + "potential_changepoint_n_max": 100, + "actual_changepoint_min_distance": "730D", + "no_changepoint_distance_from_end": "180D", + "yearly_seasonality_order": 6 + }, + "seasonality_changepoints_dict": None + }, + autoregression={ + "autoreg_dict": { + "lag_dict": None, + "agg_lag_dict": { + "orders_list": [[1, 2, 3]] # uses aggregated lags + } + }, + "simulation_num": 50, # `simulation_num` is not used when `fast_simulation` is True + "fast_simulation": True + }, + regressors={ + "regressor_cols": [] + }, + lagged_regressors={ + "lagged_regressor_dict": None + }, + uncertainty={ + "uncertainty_dict": None + }, + custom={ + "fit_algorithm_dict": { + "fit_algorithm": "ridge", + "fit_algorithm_params": None, + }, + "feature_sets_enabled": False, + "max_daily_seas_interaction_order": 0, + "max_weekly_seas_interaction_order": 0, + "extra_pred_cols": [ + "y_avglag_1_2_3*C(month, levels=list(range(1, 13)))", "C(month, levels=list(range(1, 13)))"], + "drop_pred_cols": None, + "explicit_pred_cols": None, + "min_admissible_value": None, + "max_admissible_value": None, + "regression_weight_col": None, + "normalize_method": "zero_to_one" } ) +"""Defines the ``SILVERKITE_MONTHLY`` template. Contains automatic growth. +Seasonality is modeled via categorical variable "month". +Includes aggregated autoregression. +Simulation is needed when forecast horizon is greater than 1. +Uses statistical normalization method. Uses `SimpleSilverkiteEstimator`. +""" + SILVERKITE_DAILY_1 = ["SILVERKITE_DAILY_1_CONFIG_1", "SILVERKITE_DAILY_1_CONFIG_2", "SILVERKITE_DAILY_1_CONFIG_3"] """Defines the ``SILVERKITE_DAILY_1`` template, which contains 3 candidate configs for grid search, @@ -945,12 +1022,8 @@ class SimpleSilverkiteTemplateOptions: ] SILVERKITE_HOURLY_1 = [ - # For hourly data, light seasonality up to daily, no trend changepoints, - # together holiday, default feature sets, automatic autoregression and linear fit algorithm. - "HOURLY_SEAS_LT_GR_LINEAR_CP_NONE_HOL_TG_FEASET_AUTO_ALGO_LINEAR_AR_AUTO", - # For hourly data, normal seasonality up to daily, light trend changepoints, - # separate holidays +- 4 days, default feature sets, automatic autoregression and linear fit algorithm. - "HOURLY_SEAS_NM_GR_LINEAR_CP_LT_HOL_SP4_FEASET_AUTO_ALGO_LINEAR_AR_AUTO", + # For hourly data, the first template is the same as the "SILVERKITE" template defined above. + "SILVERKITE", # For hourly data, light seasonality up to daily, normal trend changepoints, # separate holidays +- 4 days, no feature sets, automatic autoregression and ridge fit algorithm. "HOURLY_SEAS_LT_GR_LINEAR_CP_NM_HOL_SP4_FEASET_OFF_ALGO_RIDGE_AR_AUTO", @@ -1058,13 +1131,13 @@ class SimpleSilverkiteTemplateConstants: """ SILVERKITE: SINGLE_MODEL_TEMPLATE_TYPE = SILVERKITE """Defines the ``"SILVERKITE"`` template. Contains automatic growth, - seasonality, holidays, and interactions. Does not include autoregression. + seasonality, holidays, autoregression and interactions. + Uses "zero_to_one" normalization method. Best for hourly and daily frequencies. Uses `SimpleSilverkiteEstimator`. """ - SILVERKITE_WITH_AR: SINGLE_MODEL_TEMPLATE_TYPE = SILVERKITE_WITH_AR - """Defines the ``SILVERKITE_WITH_AR`` template. - Has the same config as ``SILVERKITE`` except for adding autoregression. - Best for short-term daily forecasts. Uses `SimpleSilverkiteEstimator`. + SILVERKITE_MONTHLY: SINGLE_MODEL_TEMPLATE_TYPE = SILVERKITE_MONTHLY + """Defines the ``SILVERKITE_MONTHLY`` template. + Best for monthly forecasts. Uses `SimpleSilverkiteEstimator`. """ SILVERKITE_DAILY_1_CONFIG_1: SINGLE_MODEL_TEMPLATE_TYPE = SILVERKITE_DAILY_1_CONFIG_1 """Config 1 in template ``SILVERKITE_DAILY_1``. diff --git a/greykite/framework/utils/exploratory_data_analysis.py b/greykite/framework/utils/exploratory_data_analysis.py new file mode 100644 index 0000000..8c5ac05 --- /dev/null +++ b/greykite/framework/utils/exploratory_data_analysis.py @@ -0,0 +1,445 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Sayan Patra +"""Exploratory Data Analysis plots.""" + +import base64 +from io import BytesIO + +import matplotlib.pyplot as plt +from greykite.algo.changepoint.adalasso.changepoint_detector import ChangepointDetector +from greykite.algo.common.holiday_inferrer import HolidayInferrer +from greykite.common.constants import TIME_COL +from greykite.common.constants import VALUE_COL +from greykite.common.enums import SeasonalityEnum +from greykite.common.time_properties import min_gap_in_seconds +from greykite.common.time_properties_forecast import get_simple_time_frequency_from_period +from statsmodels.graphics.tsaplots import plot_acf +from statsmodels.graphics.tsaplots import plot_pacf + +from greykite.framework.input.univariate_time_series import UnivariateTimeSeries + + +def get_exploratory_plots( + df, + time_col, + value_col, + freq=None, + anomaly_info=None, + output_path=None): + """Computes multiple exploratory data analysis (EDA) plots to visualize the + metric in ``value_col``and aid in modeling. The EDA plots are written in + an `html` file at ``output_path``. + + For details on how to interpret these EDA plots, check the tutorials. + + Parameters + ---------- + df : `pandas.DataFrame` + Input timeseries. A data frame which includes the timestamp column + as well as the value column. + time_col : `str` + The column name in ``df`` representing time for the time series data. + The time column can be anything that can be parsed by pandas DatetimeIndex. + value_col: `str` + The column name which has the value of interest to be forecasted. + freq : `str` or None, default None + Timeseries frequency, DateOffset alias, If None automatically inferred. + anomaly_info : `dict` or `list` [`dict`] or None, default None + Anomaly adjustment info. Anomalies in ``df`` + are corrected before any plotting is done. + output_path : `str` or None, default None + Path where the `html` file is written. + If None, it is set to "EDA_{value_col}.html". + + Returns + ------- + eda.html : `html` file + An html file containing the EDA plots is written at ``output_path``. + """ + # General styles + style = """ + + """ + + # Generates the HTML + html_header = f"Exploratory plots for {value_col}" + html_str = f"

{html_header}

" + html_str += style + html_str += "

Please see the " \ + "tutorials to learn how to interpret these plots.

" # noqa: E501 + html_str += "

Most of these plots have multiple overlays and traces. Feel free to toggle these on and off by " \ + "clicking the legends to the right of the plots.

" + + ts = UnivariateTimeSeries() + ts.load_data( + df=df, + time_col=time_col, + value_col=value_col, + freq=freq, + anomaly_info=anomaly_info + ) + period = min_gap_in_seconds(df=ts.df, time_col=TIME_COL) + simple_freq = get_simple_time_frequency_from_period(period) + valid_seas = simple_freq.value.valid_seas + + # Metric plot + html_str += "We first plot the raw timeseries. If 'anomaly_info' is provided, the anomalous data " \ + "is removed before plotting. Be careful of anomalies and missing values, as these can lead " \ + "to sharp drop(s) in the plots." + fig = ts.plot(title="Raw metric value") + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + # Changepoints + html_str += "

Changepoints

" + html_str += "Let's look at few changepoint plots to identify significant systemic changes in the metric value. Please see " \ + "Changepoint tutorial to learn more." # noqa: E501 + model = ChangepointDetector() + res = model.find_trend_changepoints( + df=ts.df, + time_col=TIME_COL, + value_col=VALUE_COL + ) + fig = model.plot(plot=False) + fig.update_layout(title_text="changepoints - default configuration", title_x=0.5) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + # Custom changepoints with less regularization + res = model.find_trend_changepoints( + df=ts.df, + time_col=TIME_COL, + value_col=VALUE_COL, + yearly_seasonality_order=15, + regularization_strength=0.4, + resample_freq="7D", + potential_changepoint_n=25, + no_changepoint_distance_from_end="60D" + ) + fig = model.plot(plot=False) + fig.update_layout(title_text="changepoints - less regularization", title_x=0.5) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + # Holidays + html_str += "

Holiday Effects

" + html_str += "Now let's look at how different holidays affect the metric value." + model = HolidayInferrer() + res = model.infer_holidays( + df=ts.df, + countries=("US",), + pre_search_days=2, + post_search_days=2, + baseline_offsets=(-7, 7), + plot=True + ) + fig = res["fig"] + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + # Trend + html_str += "

Trend

" + html_str += "If trend exists, expect to see a gentle upward / downward slope in the plot. " + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="year_woy", + show_mean=True, + show_quantiles=False, + show_overlays=False, + overlay_label_time_feature="year", + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + center_values=False, + ylabel=ts.original_value_col + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + # Seasonalities + if valid_seas: + html_str += "

Seasonalities

" + html_str += "To assess seasonal patterns we" + html_str += "
    " \ + "
  1. Start with the longest seasonal cycles to see the big picture, then proceed to shorter " \ + "cycles e.g. yearly -> quarterly -> monthly -> weekly -> daily." \ + "
  2. First check for seasonal effect over the entire timeseries (main effect)." \ + "
  3. If the quantiles are large in the overlay plots we check for interaction effects." \ + "
" + html_str += "Seasonality overlay plots are centered to remove the effect of trend and longer seasonal cycles. " \ + "This helps in isolating the effect against the selected groupby feature. Please see " \ + "Seasonality tutorial to learn more." # noqa: E501 + html_str += "

Note that partial (incomplete) seasonal periods can throw off the mean and should be ignored.

" + + # Yearly Seasonality + if SeasonalityEnum.YEARLY_SEASONALITY.name in valid_seas: + html_str += "

Yearly Seasonality (main effect)

" + html_str += "To check for overall yearly seasonality, we group by day of year (`doy`). Different years are overlaid " \ + "to provide a sense of consistency in the seasonal pattern between years." + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="doy", + show_mean=True, + show_quantiles=True, + show_overlays=True, + overlay_label_time_feature="year", + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + center_values=True, + xlabel="day of year", + ylabel=ts.original_value_col, + title="yearly seasonality for each year (centered)", + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + html_str += "

Yearly Seasonality (interaction effect)

" + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="month_dom", + show_mean=True, + show_quantiles=True, + show_overlays=True, + overlay_label_time_feature="year", + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + center_values=True, + xlabel="month_day of month", + ylabel=ts.original_value_col, + title="yearly and monthly seasonality for each year", + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="woy_dow", # week of year and day of week + show_mean=True, + show_quantiles=True, + show_overlays=True, + overlay_label_time_feature="year", + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + center_values=True, + xlabel="week of year_day of week", + ylabel=ts.original_value_col, + title="yearly and weekly seasonality for each year", + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + # Quarterly Seasonality + if SeasonalityEnum.QUARTERLY_SEASONALITY.name in valid_seas: + html_str += "

Quarterly Seasonality (main effect)

" + html_str += "To check for overall quarterly seasonality, we group by day of quarter (`doq`). " \ + "Quarterly pattern for up to 20 randomly selected quarters are shown. In the legend, each overlay " \ + "is labeled by the first date in the sliding window." + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="doq", + show_mean=True, + show_quantiles=True, + show_overlays=20, # randomly selects up to 20 overlays + overlay_label_time_feature="quarter_start", + center_values=True, + xlabel="day of quarter", + ylabel=ts.original_value_col, + title="quarterly seasonality with overlays" + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + html_str += "

Quarterly Seasonality (interaction effect)

" + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="doq", + show_mean=True, + show_quantiles=False, + show_overlays=True, + center_values=True, + overlay_label_time_feature="year", + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + xlabel="day of quarter", + ylabel=ts.original_value_col, + title="quarterly seasonality by year" + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + # Monthly Seasonality + if SeasonalityEnum.MONTHLY_SEASONALITY.name in valid_seas: + html_str += "

Monthly Seasonality (main effect)

" + html_str += "To check overall monthly seasonality, we group by day of month (`dom`). " \ + "Monthly pattern for up to 20 randomly selected months are shown. In the legend, each overlay " \ + "is labeled by the first date in the sliding window." + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="dom", + show_mean=True, + show_quantiles=True, + show_overlays=20, + overlay_label_time_feature="year_month", + center_values=True, + xlabel="day of month", + ylabel=ts.original_value_col, + title="monthly seasonality with overlays" + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + html_str += "

Monthly Seasonality (interaction effect)

" + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="dom", + show_mean=True, + show_quantiles=False, + show_overlays=True, + center_values=True, + overlay_label_time_feature="year", + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + xlabel="day of month", + ylabel=ts.original_value_col, + title="monthly seasonality by year" + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + # Weekly Seasonality + if SeasonalityEnum.WEEKLY_SEASONALITY.name in valid_seas: + html_str += "

Weekly Seasonality (main effect)

" + html_str += "To check overall weekly seasonality, we group by day of week (`str_dow`). " \ + "Weekly pattern for up to 20 randomly selected weeks are shown. In the legend, each overlay " \ + "is labeled by the first date in the sliding window." + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="str_dow", + show_mean=True, + show_quantiles=True, + show_overlays=20, # randomly selects up to 20 overlays + overlay_label_time_feature="year_woy", + center_values=True, + xlabel="day of week", + ylabel=ts.original_value_col, + title="weekly seasonality with overlays" + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + html_str += "

Weekly Seasonality (interaction effect)

" + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="str_dow", + show_mean=True, + show_quantiles=False, + show_overlays=True, + center_values=True, + overlay_label_time_feature="year", + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + xlabel="day of week", + ylabel=ts.original_value_col, + title="weekly seasonality by year", + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="str_dow", + show_mean=True, + show_quantiles=False, + show_overlays=True, + center_values=True, + overlay_label_time_feature="month", + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + xlabel="day of week", + ylabel=ts.original_value_col, + title="weekly seasonality by month", + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + # Daily Seasonality + if SeasonalityEnum.DAILY_SEASONALITY.name in valid_seas: + html_str += "

Daily Seasonality (main effect)

" + html_str += "To check overall daily seasonality, we group by time of day (`tod`). " \ + "Daily pattern for up to 20 randomly selected days are shown." + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="tod", + show_mean=True, + show_quantiles=True, + show_overlays=20, + overlay_label_time_feature="year_woy_dow", + center_values=True, + xlabel="time of day", + ylabel=ts.original_value_col, + title="daily seasonality with overlays" + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + html_str += "

Daily Seasonality (interaction effect)

" + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="tod", + show_mean=True, + show_quantiles=False, + show_overlays=True, + center_values=True, + overlay_label_time_feature="year", + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + xlabel="time of day", + ylabel=ts.original_value_col, + title="daily seasonality by year", + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="tod", + show_mean=True, + show_quantiles=False, + show_overlays=True, + center_values=True, + overlay_label_time_feature="month", + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + xlabel="time of day", + ylabel=ts.original_value_col, + title="daily seasonality by month", + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + fig = ts.plot_quantiles_and_overlays( + groupby_time_feature="tod", + show_mean=True, + show_quantiles=False, + show_overlays=True, + center_values=True, + overlay_label_time_feature="week", + overlay_style={"line": {"width": 1}, "opacity": 0.5}, + xlabel="time of day", + ylabel=ts.original_value_col, + title="daily seasonality by week", + ) + html_str += fig.to_html(full_html=False, include_plotlyjs=True) + + # Auto-correlation + html_str += "

Auto-correlation

" + html_str += "Partial auto-correlation plot can be a good guide to choose appropriate auto-regression lag terms. " \ + "Use large spikes to model individual lag terms (`lag_dict`). " \ + "Smaller but significant spikes can be grouped under `agg_lag_dict`." + ts.df[VALUE_COL].fillna(ts.df[VALUE_COL].median(), inplace=True) + fig, ax = plt.subplots(1, 2, figsize=(20, 10)) + plot_pacf(ts.df[VALUE_COL].values, lags=40, ax=ax[0]) + plot_acf(ts.df[VALUE_COL].values, lags=40, ax=ax[1]) + tmpfile = BytesIO() + fig.savefig(tmpfile, format='png') + encoded = base64.b64encode(tmpfile.getvalue()).decode('utf-8') + html_str += ''.format(encoded) + + # Writes the HTML + if not output_path: + output_path = f"EDA_{value_col}.html" + with open(output_path, "w+") as f: + f.write(html_str) diff --git a/greykite/sklearn/estimator/auto_arima_estimator.py b/greykite/sklearn/estimator/auto_arima_estimator.py index 2e87fda..fd3c890 100644 --- a/greykite/sklearn/estimator/auto_arima_estimator.py +++ b/greykite/sklearn/estimator/auto_arima_estimator.py @@ -295,16 +295,18 @@ def predict(self, X, y=None): if self.freq is None: self.freq = pd.infer_freq(self.fit_df[self.time_col_]) - if self.freq == "H": - self.freq = self.freq.lower() # np.timedelta recognizes lower case letters + if self.freq == "MS": + timedelta_freq = "M" # `to_period` does not recognize non-traditional frequencies + else: + timedelta_freq = self.freq chosen_d = self.model.model_.order[1] # This is the value of the d chosen by auto-arima - forecast_start = int((X[self.time_col_].iloc[0] - self.fit_df[self.time_col_].iloc[0])/np.timedelta64(1, self.freq)) + forecast_start = (X[self.time_col_].iloc[0].to_period(timedelta_freq) - self.fit_df[self.time_col_].iloc[0].to_period(timedelta_freq)).n if forecast_start < chosen_d: append_length = chosen_d - forecast_start # Number of NaNs to append to `pred_df` forecast_start = chosen_d # Auto-arima can not predict below the chosen d else: append_length = 0 - forecast_end = int((X[self.time_col_].iloc[-1] - self.fit_df[self.time_col_].iloc[0])/np.timedelta64(1, self.freq)) + forecast_end = (X[self.time_col_].iloc[-1].to_period(timedelta_freq) - self.fit_df[self.time_col_].iloc[0].to_period(timedelta_freq)).n predictions = self.model.predict_in_sample( X=fut_reg_df, diff --git a/greykite/sklearn/estimator/base_forecast_estimator.py b/greykite/sklearn/estimator/base_forecast_estimator.py index cbd94f6..f808d52 100644 --- a/greykite/sklearn/estimator/base_forecast_estimator.py +++ b/greykite/sklearn/estimator/base_forecast_estimator.py @@ -23,6 +23,7 @@ from abc import ABC from abc import abstractmethod +from typing import Optional import pandas as pd from sklearn.base import BaseEstimator @@ -241,6 +242,7 @@ def fit_uncertainty( self, df: pd.DataFrame, uncertainty_dict: dict, + fit_params: Optional[dict] = None, **kwargs): """Fits the uncertainty model with a given ``df`` and ``uncertainty_dict``. @@ -255,6 +257,8 @@ def fit_uncertainty( `~greykite.sklearn.uncertainty.uncertainty_methods.UncertaintyMethodEnum`. "params": a dictionary that includes any additional parameters needed by the uncertainty method. + fit_params : `dict` [`str`, any] or None, default None + Parameters to be passed to the ``fit`` function. kwargs : additional parameters to be fed into the uncertainty method. These parameters are from the estimator attributes, not given by user. @@ -268,7 +272,9 @@ def fit_uncertainty( uncertainty_dict = dict( uncertainty_method=UncertaintyMethodEnum.simple_conditional_residuals.name, params=dict( - value_col=self.value_col_ + value_col=self.value_col_, + is_residual_based=True, + offset_col=cst.PREDICTED_COL ) ) # Gets the uncertainty method. @@ -297,11 +303,15 @@ def fit_uncertainty( self.uncertainty_model = uncertainty_model( uncertainty_dict=uncertainty_dict, time_col=self.time_col_, - value_col=self.value_col_, coverage=self.coverage, **kwargs ) - self.uncertainty_model.fit(df) + if fit_params is None: + fit_params = {} + self.uncertainty_model.fit( + df, + **fit_params + ) except UncertaintyError as e: self.uncertainty_model = None log_message( @@ -312,7 +322,8 @@ def fit_uncertainty( def predict_uncertainty( self, - df: pd.DataFrame): + df: pd.DataFrame, + predict_params: Optional[dict] = None): """Makes predictions of prediction intervals for ``df`` based on the predictions and ``self.uncertainty_model``. @@ -323,6 +334,8 @@ def predict_uncertainty( It should have either ``self.value_col_`` or `~greykite.common.constants.PREDICT_COL` which the prediction interval is based on. + predict_params : `dict` [`str`, any] or None, default None + Parameters to be passed to the ``predict`` function. Returns ------- @@ -341,7 +354,9 @@ def predict_uncertainty( # Tries to predict prediction intervals, # and skip if ``UncertaintyError`` occurred. try: - result_df = self.uncertainty_model.predict(df) + if predict_params is None: + predict_params = {} + result_df = self.uncertainty_model.predict(df, **predict_params) except UncertaintyError as e: log_message( message=f"The following errors occurred during predicting the uncertainty model, " @@ -379,4 +394,10 @@ def _populate_uncertainty_params( if "residual_col" not in params: params["residual_col"] = "residual_col" uncertainty_dict["params"] = params - return uncertainty_dict + return uncertainty_dict + if uncertainty_dict.get("uncertainty_method") == UncertaintyMethodEnum.quantile_regression.name: + params = uncertainty_dict.get("params", {}) + if "value_col" not in params: + params["value_col"] = self.value_col_ + uncertainty_dict["params"] = params + return uncertainty_dict diff --git a/greykite/sklearn/estimator/base_silverkite_estimator.py b/greykite/sklearn/estimator/base_silverkite_estimator.py index 0fdb0c7..4aa3d46 100644 --- a/greykite/sklearn/estimator/base_silverkite_estimator.py +++ b/greykite/sklearn/estimator/base_silverkite_estimator.py @@ -32,14 +32,16 @@ from sklearn.metrics import mean_squared_error from greykite.algo.common.col_name_utils import create_pred_category +from greykite.algo.common.ml_models import breakdown_regression_based_prediction from greykite.algo.forecast.silverkite.forecast_silverkite import SilverkiteForecast from greykite.algo.forecast.silverkite.forecast_silverkite_helper import get_silverkite_uncertainty_dict -from greykite.algo.forecast.silverkite.silverkite_diagnostics import SilverkiteDiagnostics from greykite.common import constants as cst from greykite.common.features.timeseries_lags import min_max_lag_order from greykite.common.time_properties import min_gap_in_seconds from greykite.common.time_properties_forecast import get_simple_time_frequency_from_period from greykite.sklearn.estimator.base_forecast_estimator import BaseForecastEstimator +from greykite.sklearn.estimator.silverkite_diagnostics import SilverkiteDiagnostics +from greykite.sklearn.uncertainty.uncertainty_methods import UncertaintyMethodEnum class BaseSilverkiteEstimator(BaseForecastEstimator): @@ -90,7 +92,7 @@ class BaseSilverkiteEstimator(BaseForecastEstimator): ---------- silverkite : Class or a derived class of `~greykite.algo.forecast.silverkite.forecast_silverkite.SilverkiteForecast` The silverkite algorithm instance used for forecasting - silverkite_diagnostics : Class or a derived class of `~greykite.algo.forecast.silverkite.silverkite_diagnostics.SilverkiteDiagnostics` + silverkite_diagnostics : Class or a derived class of `~greykite.sklearn.estimator.silverkite_diagnostics.SilverkiteDiagnostics` The silverkite class used for plotting and generating model summary. model_dict : `dict` or None A dict with fitted model and its attributes. @@ -142,7 +144,7 @@ class BaseSilverkiteEstimator(BaseForecastEstimator): - ``fs_components_df["seas_names"]`` (e.g. ``daily``, ``weekly``) is appended to the column names, if provided. - `~greykite.algo.forecast.silverkite.silverkite_diagnostics.SilverkiteDiagnostics.plot_silverkite_components` groups + `~greykite.sklearn.estimator.silverkite_diagnostics.SilverkiteDiagnostics.plot_silverkite_components` groups based on ``fs_components_df["seas_names"]`` passed to ``forecast_silverkite`` during fit. E.g. any column containing ``daily`` is added to daily seasonality effect. The reason is as follows: @@ -363,21 +365,46 @@ def predict(self, X, y=None): trained_model=self.model_dict, past_df=self.past_df, new_external_regressor_df=None) # regressors are included in X - pred_df = pred_res["fut_df"] + x_mat = pred_res["x_mat"] + assert len(pred_df) == len(X), "The returned prediction data must have same number of rows as the input ``X``" + assert len(x_mat) == len(X), "The returned design matrix (features matrix) must have same number of rows as the input ``X``" + + # Predicts the uncertainty model if not already fit. + if self.uncertainty_model is not None: + # The quantile regression model. + if self.uncertainty_dict.get("uncertainty_method") == UncertaintyMethodEnum.quantile_regression.name: + pred_df = self.predict_uncertainty( + df=pred_df.rename( + # The ``self.value_col_`` in ``pred_df`` is the predictions. + columns={self.value_col_: cst.PREDICTED_COL} + ), + predict_params=dict( + x_mat=x_mat + ) + ) + + # In case prediction fails for uncertainty, uses the original output. + if pred_df is None: + pred_df = pred_res["fut_df"] + self.forecast = pred_df - self.forecast_x_mat = pred_res["x_mat"] + self.forecast_x_mat = x_mat + # renames columns to standardized schema output_columns = { - self.time_col_: cst.TIME_COL, - self.value_col_: cst.PREDICTED_COL} + self.time_col_: cst.TIME_COL} + if cst.PREDICTED_COL in pred_df.columns: + output_columns[cst.PREDICTED_COL] = cst.PREDICTED_COL + elif self.value_col_ in pred_df.columns: + output_columns[self.value_col_] = cst.PREDICTED_COL - # Checks if uncertainty is also returned. + # Checks if uncertainty by "simple_conditional_residuals" is also returned. # If so, extract the upper and lower limits of the tuples in # ``uncertainty_col`` to be lower and upper limits of the prediction interval. # Note that the tuple might have more than two elements if more than two # ``quantiles`` are passed in ``uncertainty_dict``. - uncertainty_col = f"{self.value_col_}_quantile_summary" + uncertainty_col = cst.QUANTILE_SUMMARY_COL if uncertainty_col in list(pred_df.columns): pred_df[cst.PREDICTED_LOWER_COL] = pred_df[uncertainty_col].apply( lambda x: x[0]) @@ -386,11 +413,15 @@ def predict(self, X, y=None): # The following entries are to include the columns in the output, # they are not intended to rename the columns. output_columns.update({ - cst.PREDICTED_LOWER_COL: cst.PREDICTED_LOWER_COL, - cst.PREDICTED_UPPER_COL: cst.PREDICTED_UPPER_COL, uncertainty_col: uncertainty_col}) if cst.ERR_STD_COL in pred_df.columns: output_columns.update({cst.ERR_STD_COL: cst.ERR_STD_COL}) + # Checks if lower/upper columns are in the output df. + # If so, includes these columns in the final output. + if cst.PREDICTED_LOWER_COL in pred_df.columns and cst.PREDICTED_UPPER_COL in pred_df.columns: + output_columns.update({ + cst.PREDICTED_LOWER_COL: cst.PREDICTED_LOWER_COL, + cst.PREDICTED_UPPER_COL: cst.PREDICTED_UPPER_COL}) predictions = (pred_df[output_columns.keys()] .rename(output_columns, axis=1)) @@ -398,6 +429,80 @@ def predict(self, X, y=None): self.cached_predictions_ = predictions return predictions + def forecast_breakdown( + self, + grouping_regex_patterns_dict, + forecast_x_mat=None, + time_values=None, + center_components=False, + denominator=None, + plt_title="breakdown of forecasts"): + """Generates silverkite forecast breakdown for groupings given in + ``grouping_regex_patterns_dict``. Note that this only works for + additive regression models and not for models such as random forest. + + Parameters + ---------- + grouping_regex_patterns_dict : `dict` {`str`: `str`} + A dictionary with group names as keys and regexes as values. + This dictinary is used to partition the columns into various groups + forecast_x_mat : `pd.DataFrame`, default None + The dataframe of design matrix of regression model. + If None, this will be extracted from the estimator. + time_values : `list` or `np.array`, default None + A collection of values (usually timestamps) to be used in the figure. + It can also be used to join breakdown data with other data when needed. + If None, and ``forecast_x_mat`` is not passed, timestamps will be extracted + from the estimator to match the``forecast_x_mat`` which is also extracted + from the estimator. + If None, and``forecast_x_mat`` is passed, the timestamps cannot be inferred. + Therefore we simply create an integer index with size of ``forecast_x_mat``. + center_components : `bool`, default False + It determines if components should be centered at their mean and the mean + be added to the intercept. More concretely if a componet is "x" then it will + be mapped to "x - mean(x)"; and "mean(x)" will be added to the intercept so + that the sum of the components remains the same. + denominator : `str`, default None + If not None, it will specify a way to divide the components. There are + two options implemented: + + - "abs_y_mean" : `float` + The absolute value of the observed mean of the response + - "y_std" : `float` + The standard deviation of the observed response + + plt_title : `str`, default "prediction breakdown" + The title of generated plot + + Returns + ------- + result : `dict` + Dictionary returned by `~greykite.algo.common.ml_models.breakdown_regression_based_prediction` + """ + # If ``forecast_x_mat`` is not passed, we assume its the + # ``forecast_x_mat`` from the estimator. + # In this case, we also have access to the corresponding timestamps. + if forecast_x_mat is None: + forecast_x_mat = self.forecast_x_mat + time_values = self.forecast[self.model_dict["time_col"]] + + # If ``time_values`` is not passed or implicitly grabbed from previous step, + # we simply create an integer index with size of ``forecast_x_mat``. + # This will be useful in the figure x axis. + if time_values is None: + time_values = range(len(forecast_x_mat)) + + return breakdown_regression_based_prediction( + trained_model=self.model_dict, + x_mat=forecast_x_mat, + grouping_regex_patterns_dict=grouping_regex_patterns_dict, + remainder_group_name="OTHER", + center_components=center_components, + denominator=denominator, + index_values=time_values, + index_col=self.model_dict["time_col"], + plt_title=plt_title) + @property def pred_category(self): """A dictionary that stores the predictor names in each category. @@ -407,7 +512,7 @@ def pred_category(self): - "intercept" : the intercept. - "time_features" : the predictors that include - `~greykite.common.constants.TIME_FEATURES` + `~greykite.common.constants.TimeFeaturesEnum` but not `~greykite.common.constants.SEASONALITY_REGEX`. - "event_features" : the predictors that include @@ -439,10 +544,16 @@ def pred_category(self): # regressor_cols could be non-exist/None/list # the if catches non-exist and None regressor_cols = [] if getattr(self, "regressor_cols", None) is None else getattr(self, "regressor_cols") + # lagged regressors + lagged_regressor_dict = getattr(self, "lagged_regressor_dict", None) + lagged_regressor_cols = [] + if lagged_regressor_dict is not None: + lagged_regressor_cols = list(lagged_regressor_dict.keys()) self._pred_category = create_pred_category( pred_cols=self.model_dict["x_mat"].columns, # extra regressors are specified via "regressor_cols" in simple_silverkite_estimator - extra_pred_cols=extra_pred_cols + regressor_cols) + extra_pred_cols=extra_pred_cols + regressor_cols + lagged_regressor_cols, + df_cols=list(self.model_dict["df"].columns)) return self._pred_category def get_max_ar_order(self): diff --git a/greykite/sklearn/estimator/lag_based_estimator.py b/greykite/sklearn/estimator/lag_based_estimator.py new file mode 100644 index 0000000..255a43a --- /dev/null +++ b/greykite/sklearn/estimator/lag_based_estimator.py @@ -0,0 +1,494 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Kaixu Yang +"""Lag based estimator. +Uses past observations with aggregation function as predictions. +""" + +from enum import Enum +from typing import List +from typing import Optional +from typing import Union + +import numpy as np +import pandas as pd +from dateutil.relativedelta import relativedelta +from sklearn.metrics import mean_squared_error + +from greykite.common import constants as cst +from greykite.common.aggregation_function_enum import AggregationFunctionEnum +from greykite.common.logging import LoggingLevelEnum +from greykite.common.logging import log_message +from greykite.common.time_properties import fill_missing_dates +from greykite.sklearn.estimator.base_forecast_estimator import BaseForecastEstimator + + +class LagUnitEnum(Enum): + """Defines the lag units available in + `~greykite.sklearn.estimator.lag_based_estimator.LagBasedEstimator`. + The keys are available string names and the values are the corresponding + `dateutil.relativedelta.relativedelta` objects. + """ + minute = relativedelta(minutes=1) + hour = relativedelta(hours=1) + day = relativedelta(days=1) + week = relativedelta(weeks=1) + month = relativedelta(months=1) + year = relativedelta(years=1) + + +class LagBasedEstimator(BaseForecastEstimator): + """The lag based estimator, using lagged observations with aggregation functions + to forecast the future. This estimator includes the common week-over-week estimation method. + + The algorithm support specifying the following: + + lag_unit : the unit to calculate lagged values. One of the values in + `~greykite.sklearn.estimator.lag_based_estimator.LagUnitEnum`. + lags : a list of lags indicating which lagged ``lag_unit`` data are used in prediction. + For example, [1, 2] indicating using the past two ``lag_unit`` same time data. + agg_func : the aggregation function used over the lagged observations. + agg_func_params : extra parameters used for ``agg_func``. + + + When certain lags are not available, extra data will be extrapolated. + When predicting into the future and future data is not available, + predicted values will be used. + + Parameters + ---------- + freq : `str` or None, default None + The data frequency, used to validate lags. + lag_unit : `str`, default "week" + The unit to calculate lagged observations. + Available options are in `~greykite.sklearn.estimator.lag_based_estimator.LagUnitEnum`. + lags : `list` [`int`] or None, default None + The lags in ``lag_unit``'s. [1, 2] indicates using the past two ``lag_unit`` same time values. + If not provided, the default is to use lag 1 observation only. + agg_func : `str` or callable, default "mean" + The aggregation functions used over lagged observations. + agg_func_params : `dict` or None, default None + Extra parameters used for ``agg_func``. + uncertainty_dict: `dict` or None, default None + How to fit the uncertainty model. + See `~greykite.sklearn.uncertainty.uncertainty_methods.UncertaintyMethodEnum`. + If not provided but ``coverage`` is given, this falls back to + `~greykite.sklearn.uncertainty.simple_conditional_residuals_model.SimpleConditionalResidualsModel`. + past_df : `pandas.DataFrame` or None, default None + The past data used to append to the training data. + If not provided the past data needed will be interpolated. + series_na_fill_func : `callable` or None, default `lambda s: s.bfill().ffill()` + The function to fill NAs when they exist. + + Attributes + ---------- + df : `pandas.DataFrame` or None + The fitted and interpolated training data. + uncertainty_model : any or None + The trained uncertainty model. + max_lag_order : `int` or None + The maximum lag order. + min_lag_order : `int` or None + The minimum lag order. + train_start : `pandas.Timestamp` or None + The training start timestamp. + train_end : `pandas.Timestamp` or None + The training end timestamp. + """ + + def __init__( + self, + score_func=mean_squared_error, + coverage=None, + null_model_params=None, + freq: Optional[str] = None, + lag_unit: str = "week", + lags: Optional[Union[int, List[int]]] = None, + agg_func: Union[str, callable] = "mean", + agg_func_params: Optional[dict] = None, + uncertainty_dict: Optional[dict] = None, + past_df: Optional[pd.DataFrame] = None, + series_na_fill_func: Optional[callable] = None): + super().__init__( + score_func=score_func, + coverage=coverage, + null_model_params=null_model_params + ) + self.freq = freq + self.lag_unit = lag_unit + self.lags = lags + self.agg_func = agg_func + self.agg_func_params = agg_func_params + self.uncertainty_dict = uncertainty_dict + self.past_df = past_df + self.series_na_fill_func = series_na_fill_func + + # set by ``fit`` method + self.lag_unit_delta = None + self.agg_func_wrapper = None + self.df = None + self.uncertainty_model = None + self.max_lag_order = None + self.min_lag_order = None + self.train_start = None + self.train_end = None + + def fit( + self, + X, + y=None, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + **fit_params): + """Fits the lag based forecast model. + + Parameters + ---------- + X: `pandas.DataFrame` + Input timeseries, with timestamp column and value column. + The value column is the response, included in + ``X`` to allow transformation by `sklearn.pipeline`. + y: ignored + The original timeseries values, ignored. + (The ``y`` for fitting is included in ``X``). + time_col: `str` + Time column name in ``X``. + value_col: `str` + Value column name in ``X``. + fit_params: `dict` + additional parameters for null model. + + Returns + ------- + self : self + Fitted class instance. + """ + super().fit( + X=X, + y=y, + time_col=time_col, + value_col=value_col, + **fit_params + ) + if X is None or len(X) == 0: + raise ValueError("The input df is empty!") + # Validates model parameters. + self._validate_params() + self.df = X[[time_col, value_col]].copy() + # Prepares input data for prediction. + self._prepare_df() + # Fits the uncertainty model. + if self.coverage is not None or self.uncertainty_dict is not None: + fit_df = self._get_predictions(fut_df=X) + self.fit_uncertainty( + df=fit_df, + uncertainty_dict=self.uncertainty_dict + ) + return self + + def predict(self, X, y=None): + """Creates forecast for the dates specified in ``X``. + + Parameters + ---------- + X: `pandas.DataFrame` + Input timeseries with timestamp column. + Timestamps are the dates for prediction. + Value column, if provided in ``X``, is ignored. + y: ignored. + + Returns + ------- + predictions: `pandas.DataFrame` + Forecasted values for the dates in ``X``. Columns: + + - ``TIME_COL``: dates + - ``PREDICTED_COL``: predictions + - ``PREDICTED_LOWER_COL``: lower bound of predictions, optional + - ``PREDICTED_UPPER_COL``: upper bound of predictions, optional + + ``PREDICTED_LOWER_COL`` and ``PREDICTED_UPPER_COL`` are present + if ``self.coverage`` is not None. + """ + if self.df is None: + raise NotImplementedError("Please run ``fit`` first.") + # Uses cached predictions if available. + cached_predictions = super().predict(X=X) + if cached_predictions is not None: + return cached_predictions + + # Gets the predictions. + pred_df = self._get_predictions(fut_df=X.copy()) + # Fits the uncertainty model. + if self.uncertainty_model is not None: + pred_with_uncertainty = self.predict_uncertainty( + df=pred_df + ) + if pred_with_uncertainty is not None: + pred_df = pred_with_uncertainty + self.cached_predictions_ = pred_df + return pred_df + + def _validate_params(self): + """Validates model parameters. + + This function checks the following class attributes: + + - self.lag_unit + - self.lags + - self.agg_func + - self.agg_func_params + + """ + # Validates lags. + try: + self.lag_unit_delta = LagUnitEnum[self.lag_unit].value + except KeyError: + raise ValueError(f"The lag unit '{self.lag_unit}' is not recognized.") + + if self.lags is None: + # If no customized lags is provided, + # the default is 1. + log_message( + message="Lags not provided, setting lags = [1].", + level=LoggingLevelEnum.DEBUG + ) + self.lags = [1] + if not isinstance(self.lags, list): + raise ValueError(f"The lags must be a list of integers, found '{self.lags}'.") + # All lags must be able to be converted to integers. + try: + self.lags = [int(x) for x in self.lags] + except ValueError: + raise ValueError(f"Not all lags in '{self.lags}' can be converted to integers.") + self.max_lag_order = max(self.lags) + self.min_lag_order = min(self.lags) + if self.min_lag_order <= 0: + raise ValueError("All lags must be positive integers.") + + # Validates aggregation function. + if isinstance(self.agg_func, str): + try: + self.agg_func_wrapper = AggregationFunctionEnum[self.agg_func].value + except KeyError: + raise ValueError(f"The aggregation function '{self.agg_func}' is not recognized as a string. " + f"Please either pass a known string or a function.") + elif callable(self.agg_func): + self.agg_func_wrapper = self.agg_func + else: + raise ValueError(f"The aggregation function must be a valid string or a callable.") + if self.agg_func_params is None: + self.agg_func_params = {} + + def _prepare_df(self): + """Processes the training data. Including appending ``past_df``, interpolation, etc. + + Returns + ------- + This function modifies class instance attributes and does not return anything. + """ + self.df[self.time_col_] = pd.to_datetime(self.df[self.time_col_]) + self.df = self.df.sort_values(by=self.time_col_).reset_index(drop=True) + # Infers data frequency. + freq = pd.infer_freq(self.df[self.time_col_]) + if self.freq is None: + self.freq = freq + if freq is not None and self.freq != freq: + log_message( + message=f"The inferred frequency '{freq}' is different from the provided '{self.freq}'. " + f"Using the provided frequency.", + level=LoggingLevelEnum.INFO + ) + if self.freq is None: + raise ValueError("Frequency can not be inferred. Please provide frequency.") + # Currently "M" frequency is not handled well with `dateutil.relativedelta`. + # For example, 2020-02-29 minus 1 month is 2020-01-29 instead of 2020-01-31, + # which does not match the last data point. + # Since this is not a typical use case, we will fix it later and raise a warning for now. + # "MS" is preferred. + if self.freq == "M": + log_message( + message="The data frequency is 'M' which may lead to unexpected behaviors. " + "Please convert to 'MS' if applicable.", + level=LoggingLevelEnum.WARNING + ) + # Checks ``self.lag_unit`` is at least ``self.freq``. + example_ts = pd.date_range( + start=self.df[self.time_col_].min(), freq=self.freq, periods=2) # makes a ts with data frequency + if example_ts[0] + self.lag_unit_delta < example_ts[1]: + raise ValueError( + f"The lag unit '{self.lag_unit}' must be at least equal to the data frequency '{self.freq}'.") + # Gets the earliest timestamp needed. + self.train_start = self.df[self.time_col_].iloc[0] + self.train_end = self.df[self.time_col_].iloc[-1] + earliest_timestamp = self.train_start - self.lag_unit_delta * self.max_lag_order + df_earliest_timestamp = pd.DataFrame({ + self.time_col_: [earliest_timestamp], + self.value_col_: [np.nan] + }) + # Gets all timestamps needed. + self.df = fill_missing_dates( + df=pd.concat([df_earliest_timestamp, self.df], axis=0).reset_index(drop=True), + time_col=self.time_col_, + freq=self.freq + )[0] + # Takes values from ``past_df`` if exist. + if self.past_df is not None and len(self.past_df) > 0: + self.past_df[self.time_col_] = pd.to_datetime(self.past_df[self.time_col_]) + self.past_df = self.past_df.sort_values(by=self.time_col_).reset_index(drop=True) + merge_df = self.df.merge( + self.past_df[[self.time_col_, self.value_col_]].rename( + columns={self.value_col_: f"{self.value_col_}_p"}), + on=self.time_col_, + how="left" + ) + self.df[self.value_col_] = merge_df[self.value_col_].combine_first(merge_df[f"{self.value_col_}_p"]) + # Fills missing values. + if self.series_na_fill_func is not None: + self.df[self.value_col_] = self.series_na_fill_func(self.df[self.value_col_]) + + def _get_predictions( + self, + fut_df: pd.DataFrame): + """Gets the lag based predictions. + + Parameters + ---------- + fut_df : `pandas.DataFrame` + The input data that contains ``self.time_col_`` as the prediction periods. + + Returns + ------- + predictions: `pandas.DataFrame` + Forecasted values for the dates in ``fut_df``. Columns: + + - ``TIME_COL``: dates + - ``PREDICTED_COL``: predictions + - ``PREDICTED_LOWER_COL``: lower bound of predictions, optional + - ``PREDICTED_UPPER_COL``: upper bound of predictions, optional + + ``PREDICTED_LOWER_COL`` and ``PREDICTED_UPPER_COL`` are present + if ``self.coverage`` is not None. + """ + # Gets the full df from the earliest timestamp during training to the + # last timestamp in prediction. + pred_df = fut_df[[self.time_col_]].copy() + pred_df[self.time_col_] = pd.to_datetime(pred_df[self.time_col_]) + pred_df = pred_df.sort_values(by=self.time_col_).reset_index(drop=True) + if pred_df[self.time_col_].iloc[0] < self.train_start: + # Does not predict before the training period. + raise ValueError("The lag based estimator does not support hindcasting.") + if pred_df[self.time_col_].iloc[-1] > self.train_end: + df_end_timestamp = pd.DataFrame({ + self.time_col_: [pred_df[self.time_col_].iloc[-1]], + self.value_col_: [np.nan] + }) + # Fills the timestamps using frequency, in case the prediction df has wrong frequencies. + df = pd.concat([self.df, df_end_timestamp], axis=0).reset_index(drop=True) + df = fill_missing_dates( + df=df, + time_col=self.time_col_, + freq=self.freq + )[0] + else: + df = self.df.copy() + + # Gets the predicted values. + df[cst.PREDICTED_COL] = np.nan + # Gets the number of prediction rounds in case lag is not enough for forecast horizon. + n_rounds = self._get_n_rounds(pred_df=pred_df) + for _ in range(n_rounds): + # The past timestamps needed in lags. + # Uses time-based calculations to avoid messing up daylight saving times. + past_timestamps = [df[self.time_col_].apply(lambda x: x - self.lag_unit_delta * lag) for lag in self.lags] + # Gets the available past values. + available_past = [ + df[df[self.time_col_].isin(timestamps)][self.value_col_].combine_first( + df[df[self.time_col_].isin(timestamps)][cst.PREDICTED_COL]) + for timestamps in past_timestamps + ] + # Fills NAs for the earliest unavailable timestamps to match the lengths. + available_past = [ + pd.concat([pd.Series([np.nan] * (len(df) - len(past))), past], axis=0).reset_index(drop=True) + for past in available_past + ] + # Makes a dataframe. + available_past = pd.concat(available_past, axis=1) + # Applies aggregation function for prediction. + pred = self.agg_func_wrapper( + available_past, + axis=1, + **self.agg_func_params + ) + # Writes to ``df``. + df[cst.PREDICTED_COL] = pred + # Gets the predictions during the input periods. + pred_df = df[df[self.time_col_].isin(pred_df[self.time_col_])].reset_index(drop=True) + if len(pred_df) < len(fut_df): + log_message( + message=f"Some timestamps in the provided time periods for prediction do not match the " + f"training frequency. Returning the matched timestamps.", + level=LoggingLevelEnum.WARNING + ) + return pred_df + + def summary(self): + """The summary of model.""" + super().summary() + text = (f"This is a lag based forecast model that uses lags '{self.lags}', " + f"with unit '{self.lag_unit}' and aggregation function '{self.agg_func}'.") + log_message( + message=text, + level=LoggingLevelEnum.INFO + ) + return text + + def _get_n_rounds( + self, + pred_df: pd.DataFrame): + """Gets the number of rounds of predictions needed. + + For example, when the prediction is 3 weeks while the lag is 1 week, + it will need to make prediction for the first week in the first round. + Then it uses the predictions of the first week to predict the second week, etc. + The number of rounds here is 3. + + If the prediction period is within training or at most ``self.lag_unit_delta`` * ``self.min_lag_order`` + more than the training period, then just one round is needed. + + Parameters + ---------- + pred_df : `pandas.DataFrame` + The prediction df with ``self.time_col_``. + + Returns + ------- + n_rounds : `int` + The number of rounds of predictions needed. + """ + train_end = self.train_end + step_size = self.lag_unit_delta * self.min_lag_order + pred_end = pred_df[self.time_col_].max() + n_rounds = 1 + while train_end + step_size < pred_end: + train_end += step_size + n_rounds += 1 + return n_rounds diff --git a/greykite/sklearn/estimator/multistage_forecast_estimator.py b/greykite/sklearn/estimator/multistage_forecast_estimator.py new file mode 100644 index 0000000..922d238 --- /dev/null +++ b/greykite/sklearn/estimator/multistage_forecast_estimator.py @@ -0,0 +1,1078 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Kaixu Yang +"""Multistage Forecast estimator.""" + +from dataclasses import dataclass +from datetime import timedelta +from typing import Callable +from typing import List +from typing import Optional +from typing import Type +from typing import Union + +import pandas as pd +from dateutil.relativedelta import relativedelta +from pandas.tseries.frequencies import to_offset +from sklearn.metrics import mean_squared_error + +from greykite.common import constants as cst +from greykite.common.aggregation_function_enum import AggregationFunctionEnum +from greykite.common.logging import LoggingLevelEnum +from greykite.common.logging import log_message +from greykite.sklearn.estimator.base_forecast_estimator import BaseForecastEstimator +from greykite.sklearn.estimator.simple_silverkite_estimator import SimpleSilverkiteEstimator + + +@dataclass +class MultistageForecastModelConfig: + """The dataclass to store Multistage Forecast model config for a single model. + + Attributes + ---------- + train_length : `str`, default "392D" + The length of data used for training. For example, "56D". + fit_length : `str` or None, default None + The length of data where fitted values to be calculated. + Specify if ``fit_length`` is to be longer than ``train_length``. + agg_func : str or Callable, default "nanmean" + The aggregation function. + agg_freq : `str` or None, default None + The aggregation period. If None, no aggregation will be used. + estimator : `~greykite.sklearn.estimator.base_forecast_estimator.BaseForecastEstimator`, + default `~greykite.sklearn.estimator.simple_silverkite_estimator.SimpleSilverkiteEstimator` + The estimator to fit the time series. + estimator_params : `dict` or None, default None + The init parameters for ``estimator``. + When the estimator is in the Silverkite family, the parameters shouldn't include + ``forecast_horizon`` or ``past_df``, as they will be passed automatically. + """ + train_length: str = "392D" # 56 weeks + fit_length: Optional[str] = None + agg_func: Union[str, Callable] = "nanmean" + agg_freq: Optional[str] = None + estimator: Type[BaseForecastEstimator] = SimpleSilverkiteEstimator + estimator_params: Optional[dict] = None + + +class MultistageForecastEstimator(BaseForecastEstimator): + """The Multistage Forecast Estimator class. + Implements the Multistage forecast method. + + The Multistage forecast method allows users to fit multiple stages of + models with each stage in the following fashions: + + (1) subseting: take a subset of data from the end of training data; + (2) aggregation: aggregate the subset of data into desired frequency; + (3) training: train a model with the desired estimator and parameters. + + Users can just use one stage model to train on a subset/aggregation of the original data, + or can specify multiple stages, where the later stages will be trained on the fitted + residuals of the previous stages. + + This can significantly speed up the training process if the original data is long + and in fine granularity. + + Notes + ----- + The following assumptions or special implementations are made in this class: + + - The actual ``fit_length``, the length of data where the fitted values are calculated, + is the longer of ``train_length`` and ``fit_length``. The reason is that there is no + benefit of calculating a shorter period of fitted values. The fitted values are already + available during training (in Silverkite) so there is no loss to calculate fitted values + on a super set of the training data. + - The estimator sorts the ``model_configs`` according to the ``train_length`` in descending order. + The corresponding aggregation frequency, aggregation function, fit length, + estimator and parameters will be sorted accordingly. + This is to ensure that we have enough data to use from the previous model + when we fit the next model. + - When calculating the length of training data, the length of past df, etc, + the actual length used may include 1 more period to avoid missing timestamps. + For example, for an AR order of 5, you may see the length of ``past_df`` to be 6; + or for a train length of "365D", you may see the actual length to be 366. + This is expected, just to avoid potential missing timestamps after dropping + incomplete aggregation periods. + - Since the models in each stage may not fit on the entire training data, + there could be periods where fitted values are not calculated. + Leading fitted values in the training period may be NA. + These values are ignored when computing evaluation metrics. + + Attributes + ---------- + model_configs : `list` [`MultistageForecastModelConfig`] + A list of model configs for Multistage Forecast estimator, + representing the stages in the model. + forecast_horizon : `int` + The forecast horizon on the original data frequency. + freq : `str` or None + The frequency of the original data. + train_lengths : `list` [`str`] or None + A list of training data lengths for the models. + fit_lengths : `list` [`str`] or None + A list of fitting data lengths for the models. + agg_funcs : `list` [`str` or Callable] or None + A list of aggregation functions for the models. + agg_freqs : `list` [`str`] or None + A list of aggregation frequencies for the models. + estimators : `list` [`BaseForecastEstimator`] or None + A list of estimators used in the models. + estimator_params : `list` [`dict` or None] or None + A list of estimator parameters for the estimators. + train_lengths_in_seconds : `list` [`int`] or None + The list of training lengths in seconds. + fit_lengths_in_seconds: : `list` [`int`] or None + The list of fitting lengths in seconds. + If the original ``fit_length`` is None or is shorter than the corresponding + ``train_length``, it will be replaced by the corresponding ``train_length``. + max_ar_orders : `list` [`int`] or None + A list of maximum AR orders in the models. + data_freq_in_seconds : `int` or None + The data frequency in seconds. + num_points_per_agg_freqs : `list` [`int`] or None + Number of data points in each aggregation frequency. + models : `list` [`BaseForecastEstimator`] + The list of model instances. + fit_df : `pandas.DataFrame` or None + The prediction df. + train_end : `pandas.Timestamp` or None + The train end timestamp. + forecast_horizons : `list` [`int`] + The list of forecast horizons for all models in terms of the aggregated frequencies. + """ + + def __init__( + self, + model_configs: List[MultistageForecastModelConfig], + forecast_horizon: int, + freq: Optional[str] = None, + uncertainty_dict: Optional[dict] = None, + score_func: Callable = mean_squared_error, + coverage: Optional[float] = None, + null_model_params: Optional[dict] = None): + """Instantiates the class. + + Parameters + ---------- + model_configs : `list` [MultistageForecastModelConfig] + A list of + `~greykite.sklearn.estimator.multistage_forecast_estimator.MultistageModelConfig` + objects. Defines the stages in the Multistage Forecast model. + forecast_horizon : `int` + The forecast horizon in the original data frequency. + freq : `str` or None, default None + The training data frequency. + This parameter is important in Multistage Forecast model, + since calculation of aggregation and dropping incomplete aggregated periods depends on this. + If None, the model will try to infer it from data. + If inferring from data failed, the model fit will raise an error. + uncertainty_dict: `dict` or None, default None + How to fit the uncertainty model. + See `~greykite.sklearn.uncertainty.uncertainty_methods.UncertaintyMethodEnum`. + If not provided but ``coverage`` is given, this falls back to + `~greykite.sklearn.uncertainty.simple_conditional_residuals_model.SimpleConditionalResidualsModel`. + """ + # every subclass of BaseForecastEstimator must call super().__init__ + super().__init__( + score_func=score_func, + coverage=coverage, + null_model_params=null_model_params) + + self.model_configs: List[MultistageForecastModelConfig] = model_configs + self.forecast_horizon: int = forecast_horizon + self.freq: Optional[str] = freq + self.uncertainty_dict = uncertainty_dict + + # Derived from ``self.model_configs``. + self.train_lengths: Optional[List[str]] = None + self.fit_lengths: Optional[List[Optional[str]]] = None + self.agg_funcs: Optional[List[Union[str, Callable]]] = None + self.agg_freqs: Optional[List[str]] = None + self.estimators: Optional[List[Type[BaseForecastEstimator]]] = None + self.estimator_params: Optional[List[Optional[dict]]] = None + self.train_lengths_in_seconds: Optional[List[int]] = None + self.fit_lengths_in_seconds: Optional[List[int]] = None + + # Set by ``fit`` method. + self.max_ar_orders: Optional[List[int]] = None + self.data_freq_in_seconds: Optional[int] = None + self.num_points_per_agg_freqs: Optional[List[int]] = None + self.models: Optional[List[BaseForecastEstimator]] = None + self.fit_df: Optional[pd.DataFrame] = None + self.train_end: Optional[pd.Timestamp] = None + self.forecast_horizons: Optional[List[int]] = None + + def fit( + self, + X, + y=None, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + **fit_params): + """Fits ``MultistageForecast`` forecast model. + + Parameters + ---------- + X: `pandas.DataFrame` + Input timeseries, with timestamp column, + value column, and any additional regressors. + The value column is the response, included in + ``X`` to allow transformation by `sklearn.pipeline`. + y: ignored + The original timeseries values, ignored. + (The ``y`` for fitting is included in ``X``). + time_col: `str` + Time column name in ``X``. + value_col: `str` + Value column name in ``X``. + fit_params: `dict` + additional parameters for null model. + + Returns + ------- + self : self + Fitted model is stored in ``self.model_dict``. + """ + # Fits null model + super().fit( + X=X, + y=y, + time_col=time_col, + value_col=value_col, + **fit_params) + if self.freq is None: + self.freq = pd.infer_freq(X[time_col]) + if self.freq is None: + raise ValueError("Failed to infer frequency from data, please provide during " + "instantiation. Data frequency is required for aggregation.") + + self._initialize() + + # Gets the forecast horizons for all models. + # For each model, the forecast horizon is the length of the aggregated test df. + self.forecast_horizons = [] + for agg_freq in self.agg_freqs: + # Constructs a sample prediction df with the current freq and forecast horizon. + sample_df = pd.DataFrame({ + time_col: pd.date_range(X[time_col].max(), freq=self.freq, periods=self.forecast_horizon + 1)[1:], + value_col: 0 + }) + sample_df_agg = sample_df.resample(agg_freq, on=time_col).mean() # The aggregation function is not needed. + # The forecast horizon for the current model is the length of the aggregated df. + # The forecast horizon differ when the aggregation covers various periods of the aggregation frequency. + # For example, if the prediction period is 2020-01-01 23:00, 2020-01-02 00:00, 2020-01-02 01:00, + # and the aggregation frequency is "D", although the length of prediction is less than a day, + # but after aggregation, it will become 2020-01-01 and 2020-01-02. + # On the other hand, if the prediction period is 2020-01-01 21:00, 2020-01-01 22:00, 2020-01-01 23:00, + # and the aggregation frequency is "D", then after aggregation, it will be 2020-01-01 only. + # In each stage of model, the model will get the appropriate forecast horizon. + self.forecast_horizons.append(sample_df_agg.shape[0]) + + min_agg_freq = min([to_offset(freq) for freq in self.agg_freqs]) + if min_agg_freq < to_offset(self.freq): + raise ValueError(f"The minimum aggregation frequency {min_agg_freq} " + f"is less than the data frequency {self.freq}. Please make sure " + f"the aggregation frequencies are at least the data frequency.") + + self.train_end = X[time_col].max() + + # Trains the model. + fit_df = self._train(df=X) + self.fit_df = fit_df + + # Fits the uncertainty model + self._fit_uncertainty() + + return self + + def predict(self, X, y=None): + """Creates forecast for the dates specified in ``X``. + + Parameters + ---------- + X: `pandas.DataFrame` + Input timeseries with timestamp column and any additional regressors. + Timestamps are the dates for prediction. + Value column, if provided in ``X``, is ignored. + y: ignored. + + Returns + ------- + predictions: `pandas.DataFrame` + Forecasted values for the dates in ``X``. Columns: + + - ``TIME_COL``: dates + - ``PREDICTED_COL``: predictions + - ``PREDICTED_LOWER_COL``: lower bound of predictions, optional + - ``PREDICTED_UPPER_COL``: upper bound of predictions, optional + + ``PREDICTED_LOWER_COL`` and ``PREDICTED_UPPER_COL`` are present + if ``self.coverage`` is not None. + """ + pred = self._predict(X) + if self.uncertainty_model is not None: + pred_with_uncertainty = self.predict_uncertainty( + df=pred + ) + if pred_with_uncertainty is not None: + pred = pred_with_uncertainty + return pred + + def _initialize(self): + """Sets the derived attributes from model init parameters.""" + self.train_lengths: List[str] = [config.train_length for config in self.model_configs] + self.fit_lengths: List[Optional[str]] = [config.fit_length for config in self.model_configs] + self.agg_funcs: List[Union[str, Callable]] = [ + self._get_agg_func(config.agg_func) for config in self.model_configs] + self.agg_freqs: List[str] = [ + config.agg_freq if config.agg_freq is not None else self.freq for config in self.model_configs] + self.estimators: List[Type[BaseForecastEstimator]] = [config.estimator for config in self.model_configs] + self.estimator_params: List[Optional[dict]] = [config.estimator_params for config in self.model_configs] + # Assumes train length is integer multiples of 1 second, which is most of the cases. + self.train_lengths_in_seconds: List[int] = [ + to_offset(length).delta // timedelta(seconds=1) for length in self.train_lengths] + self.fit_lengths_in_seconds: List[int] = [ + to_offset(length).delta // timedelta(seconds=1) + if length is not None else None for length in self.fit_lengths] + # If ``fit_length`` is None or is shorter than ``train_length``, it will be replaced by ``train_length``. + fit_lengths_in_seconds = [ + fit_length if fit_length is not None and fit_length >= train_length + else train_length + for fit_length, train_length in zip(self.fit_lengths_in_seconds, self.train_lengths_in_seconds) + ] + if fit_lengths_in_seconds != self.fit_lengths_in_seconds: + self.fit_lengths_in_seconds = fit_lengths_in_seconds + log_message( + message="Some `fit_length` is None or is shorter than `train_length`. " + "These `fit_length` have been replaced with `train_length`.", + level=LoggingLevelEnum.INFO + ) + self.models: List[BaseForecastEstimator] = [ + config.estimator(**config.estimator_params) for config in self.model_configs] + self.data_freq_in_seconds = to_offset(self.freq).delta // timedelta(seconds=1) + + @staticmethod + def _get_agg_func(agg_func: Optional[Union[str, Callable]]): + """Gets the aggregation function. + + Returns the input if it's None or a callable. + Finds the corresponding callable from + `~greykite.common.aggregation_function_enum.AggregationFunctionEnum` + and raises an error if no corresponding aggregation function is found. + + Parameters + ---------- + agg_func : `str`, Callable or None + The input of aggregation function. + + Returns + ------- + agg_func : Callable + The corresponding aggregation function if input is a string otherwise the input itself. + """ + if not isinstance(agg_func, str): + return agg_func + try: + agg_func = AggregationFunctionEnum[agg_func].value + return agg_func + except KeyError: + raise ValueError(f"The aggregation function {agg_func} is not recognized as a string. " + f"Please either pass a known string or a function.") + + @staticmethod + def _get_num_points_per_agg_freq( + data_freq: str, + agg_freqs: List[str]): + """Gets the number of data points in a aggregation period. + + Parameters + ---------- + data_freq : `str` + The data frequency. For example, "5T". + agg_freqs : `list` [`str`] + A list of aggregation frequencies. + + Returns + ------- + num_points : `list` [`int`] + The number of points in each aggregation period. + """ + return [to_offset(freq).delta // to_offset(data_freq).delta for freq in agg_freqs] + + def _get_freq_col(self, index: int, freq: str): + """Gets the column name for a specific stage/frequency. + The name will be f"{self.time_col_}__{index}__{freq}". + + Parameters + ---------- + index : `int` + The index for the currently stage of model. + This is used to distinguish models with the same frequency. + freq : `str` + The aggregation frequency. + + Returns + ------- + freq_col_name : `str` + The time column name for the frequency, f"{self.time_col_}__{index}__{freq}". + """ + return f"{self.time_col_}__{index}__{freq}" + + def _get_non_time_cols(self, columns: List[str]): + """Gets the non time columns in a df. + Non time columns do not have f"{self.time_col}__" in it or do not equal to self.time_col. + + Parameters + ---------- + columns : `list` [`str`] + The columns in a df. + + Returns + ------- + non_time_columns : `list` [`str`] + The non time columns. + Non time columns do not have f"{self.time_col}__" in it or do not equal to self.time_col. + """ + return [col for col in columns if f"{self.time_col_}__" not in col and col != self.time_col_] + + def _add_agg_freq_cols( + self, + df: pd.DataFrame): + """Appends the resample time columns to ``df``. + + For example, the original df has hourly data with columns "ts" and "y". + The original time column looks like + + "2020-01-01 00:00:00, 2020-01-01 01:00:00, 2020-01-01 02:00:00, + 2020-01-01 03:00:00, 2020-01-01 04:00:00, 2020-01-01 05:00:00, + 2020-01-01 06:00:00, 2020-01-01 07:00:00, 2020-01-01 08:00:00..." + + The resample frequencies are ["3H", "D"]. + The function adds two extra columns to ``df`` with names "ts__0__3H" and "ts__1__D". + The "ts__0__3H" will have the same value for every 3 hours, such as + + "2020-01-01 00:00:00, 2020-01-01 00:00:00, 2020-01-01 00:00:00, + 2020-01-01 03:00:00, 2020-01-01 03:00:00, 2020-01-01 03:00:00, + 2020-01-01 06:00:00, 2020-01-01 06:00:00, 2020-01-01 06:00:00..." + + and "ts__1__D" will have the same value for every day, such as + + "2020-01-01 00:00:00, 2020-01-01 00:00:00, ... + ... + 2020-01-01 00:00:00, 2020-01-01 00:00:00, 2020-01-01 00:00:00, + 2020-01-02 00:00:00, 2020-01-02 00:00:00, 2020-01-02 00:00:00..." + + Parameters + ---------- + df : `pandas.DataFrame` + The original data frame. + + Returns + ------- + df : `pandas.DataFrame` + The augmented df with resampled time columns. + """ + # Original df has ``self.time_col_`` as the original time column. + df = df.copy() + df[self.time_col_] = pd.to_datetime(df[self.time_col_]) + + for i, freq in enumerate(self.agg_freqs): + col = self._get_freq_col(i, freq) # New column name for resampled time column. + # Borrows the value column for aggregation. + df_time = df[[self.time_col_, self.value_col_]].set_index(self.time_col_, drop=False) + + if len(df_time) == 0: + raise ValueError(f"The df size is zero. Does your input have NANs that are dropped?") + + # Gets the resampled frequency column. + # This solution is fast and no need to further improve. + df_time = (df_time + .resample(freq, on=self.time_col_) # resample, the index is resampled time column + .mean() # this function doesn't matter + .reset_index(drop=False) # adds the resampled time column to columns + .set_index(self.time_col_, drop=False) # copies the resampled time column to index + .reindex(df_time.index, method='ffill') # sets the original freq as index, fill resampled column + .rename(columns={self.time_col_: col}) # renames the filled resampled column + .reset_index(drop=False)) # copies the original freq time column to columns + + # Merges new resampled frequency column into original df. + df = df.merge(df_time[[self.time_col_, col]], on=self.time_col_) + + return df + + def _drop_incomplete_agg( + self, + df: pd.DataFrame, + agg_freq: str, + location: int, + num_points_per_agg_freq: int, + index: int): + """Drops aggregations with incomplete periods. + + For example, a daily aggregation of hourly data will have a biased aggregation if the data starts from + 07:00:00, because the first day will be the aggregation of 07:00:00 to 23:00:00. This is not + representative and should be dropped. + + The returned df's indices are reset. + + Parameters + ---------- + df : `pandas.DataFrame` + The input dataframe with augmented aggregation frequency time columns. + agg_freq : `str` + The aggregation frequency. + location : `int` + Where to drop the incomplete aggregation periods. + Usually the incomplete aggregation periods happen at the begin and end of the df. + Specify location = 0 indicates the start, and specify location = -1 indicates the end. + num_points_per_agg_freq : `int` + The number of rows expected in a full period. + index : `int` + The index for the currently stage of model. + This is used to distinguish models with the same frequency. + + Returns + ------- + df : `pandas.DataFrame` + The dataframe after dropping incomplete aggregation periods. + The df's indices are reset. + """ + if df.shape[0] == 0: + return df + freq_col = self._get_freq_col(index, agg_freq) + if (len(df[df[freq_col] == df[freq_col].iloc[location]]) + < num_points_per_agg_freq): + df = df[df[freq_col] != df[freq_col].iloc[location]] + return df.reset_index(drop=True) + + def _aggregate_values( + self, + df: pd.DataFrame, + agg_freq: str, + agg_func: Optional[callable], + index: int): + """Aggregates the ``df`` with the given ``agg_freq`` and applies the ``agg_func``. + + All columns whose names do not start with f"{time_col}__" will be kept and aggregated. + + Parameters + ---------- + df : `pandas.DataFrame` + The input dataframe. + agg_freq : `str` + The aggregation frequency. + agg_func : `str`, `callable` or None + The function used for aggregation. If None, no aggregation will be performed. + index : `int` + The index for the currently stage of model. + This is used to distinguish models with the same frequency. + + Returns + ------- + df : `pandas.DataFrame` + The aggregated dataframe with f"{time_col}" being the timestamps and all aggregated columns. + """ + columns = [col for col in df.columns if f"{self.time_col_}__" not in col] + freq_col = self._get_freq_col(index, agg_freq) + if agg_func is not None: + df = (df + .groupby(freq_col) + .agg({col: agg_func for col in columns}) + .reset_index(drop=False) + .rename(columns={freq_col: self.time_col_}) + ) + else: + df = df.rename(columns={freq_col: self.time_col_}) + return df + + def _drop_incomplete_agg_and_aggregate_values( + self, + df: pd.DataFrame, + agg_freq: str, + agg_func: Optional[callable], + num_points_per_agg_freq: int, + drop_incomplete: bool, + index: int): + """Drops incomplete periods from the begin and end, and gets aggregated values. + + Calls ``self._drop_incomplete_agg`` with locations 0 and -1, then calls + ``self._aggregate_values``. + + Parameters + ---------- + df : `pandas.DataFrame` + The input dataframe with augmented aggregation frequency time columns. + agg_freq : `str` + The aggregation frequency. + agg_func : `str`, `callable` or None + The function used for aggregation. If None, no aggregation will be performed. + num_points_per_agg_freq : `int` + The number of rows expected in a full period. + drop_incomplete : `bool` + Whether to drop incomplete periods from the begin and end. + This shouldn't be done when calculating fitted or prediction values, + because dropping may result in missing time points to predict. + index : `int` + The index for the currently stage of model. + This is used to distinguish models with the same frequency. + + Returns + ------- + agg_df : `pandas.DataFrame` + The aggregated dataframe with f"{time_col}" being the timestamps and all aggregated columns. + """ + df = df.copy() + if df.shape[0] == 0: + return df + # Drops incomplete periods. + if drop_incomplete: + df = self._drop_incomplete_agg( + df=df, + agg_freq=agg_freq, + location=0, + num_points_per_agg_freq=num_points_per_agg_freq, + index=index + ) + df = self._drop_incomplete_agg( + df=df, + agg_freq=agg_freq, + location=-1, + num_points_per_agg_freq=num_points_per_agg_freq, + index=index + ) + # Checks if there are any missing timestamps in ``df``. + # This may result in incomplete periods. + df_check_incomplete_period = df[[self.time_col_, self.value_col_]].resample( + agg_freq, on=self.time_col_).count() + df_with_incomplete_periods = df_check_incomplete_period[ + df_check_incomplete_period[self.value_col_] < num_points_per_agg_freq] + if df_with_incomplete_periods.shape[0] > 0: + log_message( + message=f"There are missing timestamps in `df` when performing aggregation with " + f"frequency {agg_freq}. These points are {df_with_incomplete_periods}. " + f"This may cause the aggregated values to be biased.", + level=LoggingLevelEnum.WARNING + ) + + # Aggregates values + df = self._aggregate_values( + df=df[[self._get_freq_col(index, agg_freq)] + self._get_non_time_cols(list(df.columns))], + agg_freq=agg_freq, + agg_func=agg_func, + index=index + ) + return df + + def _get_agg_dfs( + self, + df: pd.DataFrame, + agg_freq: str, + agg_func: Optional[callable], + train_length_in_seconds: int, + fit_length_in_seconds: Optional[int], + num_points_per_agg_freq: int, + max_ar_order: int, + index: int): + """Given a dataframe, training/fitting configuration, gets the training data and fit data. + + If training data include incomplete periods during aggregation, the periods will be dropped. + If fit length is shorter than train length, fit length will be replaced by train length. + Training data is the data that the model is to be trained on. + Fit data is the data that the fitted values are to be calculated on. + + Parameters + ---------- + df : `pandas.DataFrame` + The input dataframe. + agg_freq : `str` + The aggregation frequency. For example, "D". + agg_func : Callable + The aggregation function. For example, `numpy.nanmean`. + train_length_in_seconds : `int` + The training data length in seconds. + fit_length_in_seconds : `int` or None + The fit data length in seconds. + If None, will use ``train_length_in_seconds``. + num_points_per_agg_freq : `int` + For ``agg_freq``, how many data points in data frequency should be in an entire period. + max_ar_order : `int` + The maximum order of AR. Used to generate ``past_df`` to be fed into the Silverkite models + to generate AR terms. + index : `int` + The index for the currently stage of model. + This is used to distinguish models with the same frequency. + + Returns + ------- + result : `dict` + A dictionary with the following keys: + + train_df : `pandas.DataFrame` + The training df with aggregated frequency. + fit_df : `pandas.DataFrame` + The fit df with aggregated frequency. + df_past : `pandas.DataFrame` + The past df used to generate AR terms. + fit_df_has_incomplete_period : `bool` + Whether ``fit_df`` has incomplete period at the end. + """ + # Selects the columns in ``df`` excluding irrelevant aggregated time columns. + freq_col = self._get_freq_col(index, agg_freq) + non_time_cols = self._get_non_time_cols(list(df.columns)) + df = df[[self.time_col_, freq_col] + non_time_cols] + + train_end = df[self.time_col_].max() + # Subtracts 1 extra full aggregation period for completion. + # Because we drop incomplete periods in a later step before aggregation. + # If there are incomplete periods and we don't take the extra period, + # the actual length will be the desired length minus 1. + # The only case that this will add an extra period is when there is no incomplete period, + # and having an extra period does not lose anything from there. + train_start = train_end - relativedelta(seconds=train_length_in_seconds) - to_offset(agg_freq) + fit_start = train_end - relativedelta(seconds=fit_length_in_seconds) - to_offset(agg_freq) + + train_df = df[(df[self.time_col_] >= train_start) & (df[self.time_col_] <= train_end)] + fit_df = df[(df[self.time_col_] >= fit_start) & (df[self.time_col_] <= train_end)] + + # Checks if there are incomplete periods in ``fit_df`` at the end. + # They won't be dropped for not missing any prediction periods, + # but if there are regressors, we record this. + # Because the aggregated regressor value could be biased. + # A warning will be raised if such regressor exists in the model. + fit_df_has_incomplete_period = False + if fit_df[fit_df[freq_col] == fit_df[freq_col].iloc[-1]].shape[0] < num_points_per_agg_freq: + fit_df_has_incomplete_period = True + + # Removes incomplete periods aggregations since the aggregated values may be biased. + # We only drop incomplete aggregations for the training periods in case they affect + # training by including incorrect aggregated values. + # For fit/predict we don't drop incomplete aggregations because we want to make prediction + # for all data points in the original frequency. + train_df = self._drop_incomplete_agg_and_aggregate_values( + df=train_df, + agg_freq=agg_freq, + agg_func=agg_func, + num_points_per_agg_freq=num_points_per_agg_freq, + drop_incomplete=True, + index=index + ) + fit_df = self._drop_incomplete_agg_and_aggregate_values( + df=fit_df, + agg_freq=agg_freq, + agg_func=agg_func, + num_points_per_agg_freq=num_points_per_agg_freq, + drop_incomplete=False, + index=index + ) + + # Generates past dataframe for AR terms, if needed. + past_df = None + if max_ar_order > 0: + # Adds 2 complete periods to ensure we don't miss any data in ``past_df``. + past_df_end = train_start + 2 * to_offset(agg_freq) + # By +1, we ensure that the ``past_df`` still has enough length after dropping incomplete periods. + past_df_start = (fit_start + - relativedelta(seconds=to_offset(agg_freq).delta.total_seconds() * (max_ar_order + 1))) + past_df = df[(df[self.time_col_] >= past_df_start) & (df[self.time_col_] <= past_df_end)] + past_df = self._drop_incomplete_agg_and_aggregate_values( + df=past_df, + agg_freq=agg_freq, + agg_func=agg_func, + num_points_per_agg_freq=num_points_per_agg_freq, + drop_incomplete=True, + index=index + ) + past_df = past_df[past_df[self.time_col_] < train_df[self.time_col_].min()] + + return { + "train_df": train_df, + "fit_df": fit_df, + "past_df": past_df, + "fit_df_has_incomplete_period": fit_df_has_incomplete_period + } + + def _get_silverkite_ar_max_order(self): + """Gets the AR order so that the model can use ``past_df`` to generate AR terms instead of imputation. + + This function only applies to the Silverkite family. + This function is called after ``freq`` and ``forecast_horizon`` parameters have been added to model instances. + + Returns + ------- + max_ar_orders : `list` [`int` or None] + The maximum AR orders needed in each model. + The value is 0 if the model does not belong to the Silverkite family or the autoregression + parameter is not configured. + """ + max_ar_orders = [] + for freq, model in zip(self.agg_freqs, self.models): + try: + # All Silverkite family estimators have the method ``get_max_ar_order``. + max_ar_order = model.get_max_ar_order() + except (AttributeError, TypeError): + max_ar_order = 0 + max_ar_orders.append(max_ar_order) + return max_ar_orders + + def _train( + self, + df: pd.DataFrame): + """Trains the Multistage Forecast model with the given configurations. + + Parameters + ---------- + df : `pandas.DataFrame` + The input dataframe. + + Returns + ------- + fit_df : `pandas.DataFrame` + The dataframe with aggregated time columns and predictions. + """ + # Sorts the models by training data length from long to short. + (self.agg_freqs, self.agg_funcs, self.train_lengths_in_seconds, + self.fit_lengths_in_seconds, self.models, self.forecast_horizons) = zip(*sorted( + zip(self.agg_freqs, self.agg_funcs, self.train_lengths_in_seconds, + self.fit_lengths_in_seconds, self.models, self.forecast_horizons), + key=lambda x: x[2], # key is ``train_lengths_in_seconds`` + reverse=True)) + + # Here we add the ``forecast_horizon`` and ``freq`` attribute regardless of what model it is. + # This doesn't affect the model if it does not expect the ``forecast_horizon`` + # or ``freq`` attribute before fitting. + # If the forecast horizon parameter varies due to different periods in the fit + # and predict input, users can leave them as None and let the estimator automatically fill them. + # If the entry point is template, it's possible that "forecast_horizon" is a missing parameter. + # We add it here when it's missing. + # If either of these parameter is already set, we won't modify it. + for model, forecast_horizon, agg_freq in zip(self.models, self.forecast_horizons, self.agg_freqs): + if getattr(model, "forecast_horizon", None) is None: + model.forecast_horizon = forecast_horizon + if getattr(model, "freq", None) is None: + model.freq = agg_freq + + self.num_points_per_agg_freqs = self._get_num_points_per_agg_freq( + data_freq=self.freq, + agg_freqs=self.agg_freqs + ) + + self.max_ar_orders = self._get_silverkite_ar_max_order() + + # Adds resampled timestamps and aggregated columns to df. + # This is done after the sorting, so the index of model steps will be correct. + df_with_freq = self._add_agg_freq_cols(df=df) + + # Makes a copy. This is used to store the results. + fit_result_df = df_with_freq.copy() + # Adds a column to track cumulative fitted values. + # At each stage this column will be subtracted from the original time series + # to obtain the current residual to be fitted on the next model. + fit_result_df["cum_fitted_values"] = 0 + + for index, (freq, func, train_length_in_seconds, fit_length_in_seconds, + model, num_points_per_agg_freq, max_order) in enumerate( + zip(self.agg_freqs, self.agg_funcs, self.train_lengths_in_seconds, + self.fit_lengths_in_seconds, self.models, self.num_points_per_agg_freqs, + self.max_ar_orders)): + + df_with_freq_copy = df_with_freq.copy() # makes a copy since we want to calculate the residuals. + df_with_freq_copy[self.value_col_] -= fit_result_df["cum_fitted_values"] + + # Gets the train_df and fit_df. + # The dfs will be subset and aggregated. + # The fitted values are to be calculated on fit_df. + # fit_df has length as the maximum of train_length and fit_length. + agg_dfs = self._get_agg_dfs( + df=df_with_freq_copy, + agg_freq=freq, + agg_func=func, + train_length_in_seconds=train_length_in_seconds, + fit_length_in_seconds=fit_length_in_seconds, + num_points_per_agg_freq=num_points_per_agg_freq, + max_ar_order=max_order, + index=index + ) + train_df = agg_dfs["train_df"] + fit_df = agg_dfs["fit_df"] + # Adds ``past_df`` in case the model expects extra data to calculate autoregression terms. + if agg_dfs["past_df"] is not None: + model.past_df = agg_dfs["past_df"] + if agg_dfs["fit_df_has_incomplete_period"]: + regressor_cols = getattr(model, "regressor_cols", None) + if regressor_cols is not None and regressor_cols != []: + log_message( + message="There are incomplete periods in `fit_df`, thus the regressor " + "values are biased after aggregation.", + level=LoggingLevelEnum.WARNING + ) + # Adds the actual values to the result df. + fit_result_df = fit_result_df.merge( + train_df.rename(columns={ + self.time_col_: self._get_freq_col(index, freq), + self.value_col_: f"{self.value_col_}__{index}__{freq}"}), + on=self._get_freq_col(index, freq), + how="left") + + # Fits the model. + model.fit( + train_df, + time_col=self.time_col_, + value_col=self.value_col_) + + # Calculates fitted values. + y_fitted = model.predict(fit_df)[[cst.TIME_COL, cst.PREDICTED_COL]].rename( + columns={ + cst.TIME_COL: f"{cst.TIME_COL}__{index}__{freq}", + cst.PREDICTED_COL: f"{cst.PREDICTED_COL}__{index}__{freq}"}) + + # Joins the fitted values with the original ``fit_result_df``. + # This is a left join since the fitted values is a subset of the entire period. + fit_result_df = fit_result_df.merge( + y_fitted, + how="left", + left_on=self._get_freq_col(index, freq), + right_on=f"{cst.TIME_COL}__{index}__{freq}") + # Adds the current fitted values to the previous fitted values to get cumulated fitted values. + fit_result_df["cum_fitted_values"] += fit_result_df[f"{cst.PREDICTED_COL}__{index}__{freq}"] + + fit_result_df = fit_result_df.rename(columns={ + "cum_fitted_values": cst.PREDICTED_COL + }) + + return fit_result_df + + def _predict( + self, + df: pd.DataFrame): + """The prediction function. + + Parameters + ---------- + df : `pandas.DataFrame` + The input dataframe, covering the prediction phase. + + Returns + ------- + pred : `pandas.DataFrame` + The predicted dataframe. + """ + # Since Multistage Forecast partitions the data and does not use the + # entire period to train the models, we do not allow predictions + # going beyond the earliest fit period. + # The predictions before the allowed periods will be marked as 0 for compatibility + # in calculating error metrics. + # This only affects the training evaluation in pipeline, not the validation/test/forecast. + fit_starts = [self.train_end - relativedelta(seconds=fit_length) for fit_length in self.fit_lengths_in_seconds] + + # Adds resampled timestamps and aggregated columns to df. + df_with_freq = self._add_agg_freq_cols(df=df) + + # Generates predictions for each freq/model. + for index, (freq, func, model, start) in enumerate( + zip(self.agg_freqs, self.agg_funcs, self.models, fit_starts)): + freq_col = self._get_freq_col(index, freq) + current_df = df_with_freq[df_with_freq[self.time_col_] >= start] + current_df = current_df[ + [freq_col] + + [col for col in self._get_non_time_cols(current_df.columns) if cst.PREDICTED_COL not in col]] + # We do this aggregation for the concern that there are regressors in ``df``. + # Uses ``set_index`` instead of resample "on" because the aggregation functions are + # defined with ``partial`` and there's some incompatibility between partial + # and ``np.nanmean`` with the "on" column. + current_df = current_df.set_index(freq_col).resample(freq).apply(func) + current_df[self.time_col_] = current_df.index + current_df = current_df.reset_index(drop=True) + predicted_df = model.predict(current_df) # ``past_df`` has been added to model instance. + df_with_freq = df_with_freq.merge( + predicted_df[[cst.TIME_COL, cst.PREDICTED_COL]].rename(columns={ + cst.TIME_COL: freq_col, + cst.PREDICTED_COL: f"{cst.PREDICTED_COL}__{index}__{freq}" + }), + how="left", + on=freq_col + ) + + df_with_freq[cst.PREDICTED_COL] = 0 + for index, freq in enumerate(self.agg_freqs): + df_with_freq[cst.PREDICTED_COL] += df_with_freq[f"{cst.PREDICTED_COL}__{index}__{freq}"] + + return df_with_freq + + def _fit_uncertainty(self): + """Fits the uncertainty model.""" + fit_df_dropna = self.fit_df.dropna( + subset=[cst.PREDICTED_COL]).rename( + columns={cst.VALUE_COL: self.value_col_}) # Estimator predictions have standard value column. + + self.fit_uncertainty( + df=fit_df_dropna, + uncertainty_dict=self.uncertainty_dict, + ) + if self.uncertainty_model is not None: + fit_df_with_uncertainty = self.predict_uncertainty( + df=fit_df_dropna + ) + if fit_df_with_uncertainty is not None: + fit_df_with_uncertainty = self.fit_df.merge( + fit_df_with_uncertainty[[self.time_col_] + [ + col for col in fit_df_with_uncertainty if col not in self.fit_df.columns]], + on=self.time_col_, + how="left" + ) + self.fit_df = fit_df_with_uncertainty + + def plot_components(self): + """Makes component plots. + + Returns + ------- + figs : `list` [`plotly.graph_objects.Figure` or None] + A list of figures from each model. + """ + if self.fit_df is None: + raise ValueError("Please call `fit` before calling `plot_components`.") + figs = [] + for model in self.models: + try: + fig = model.plot_components() + except AttributeError: + fig = None + figs.append(fig) + return figs + + def summary(self): + """Gets model summaries. + + Returns + ------- + summaries : `list` [`~greykite.algo.common.model_summary.ModelSummary` or None] + A list of model summaries from each model. + """ + if self.fit_df is None: + raise ValueError("Please call `fit` before calling `summary`.") + summaries = [] + for model in self.models: + try: + summary = model.summary() + except AttributeError: + summary = None + summaries.append(summary) + return summaries diff --git a/greykite/sklearn/estimator/prophet_estimator.py b/greykite/sklearn/estimator/prophet_estimator.py index 0805304..53e4a8e 100644 --- a/greykite/sklearn/estimator/prophet_estimator.py +++ b/greykite/sklearn/estimator/prophet_estimator.py @@ -19,13 +19,13 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # original author: Albert Chen, Rachit Kumar, Sayan Patra -"""sklearn estimator for fbprophet""" +"""sklearn estimator for prophet""" import sys try: - import fbprophet - from fbprophet.plot import plot_components + import prophet + from prophet.plot import plot_components except ModuleNotFoundError: pass @@ -76,7 +76,7 @@ class ProphetEstimator(BaseForecastEstimator): } add_seasonality_dict: dict of custom seasonality parameters to be added to the model, optional, default=None - parameter details: https://github.com/facebook/prophet/blob/master/python/fbprophet/forecaster.py - refer to + parameter details: https://github.com/facebook/prophet/blob/master/python/prophet/forecaster.py - refer to add_seasonality() function. Key is the seasonality component name e.g. 'monthly'; parameters are specified via dict. @@ -105,7 +105,7 @@ class ProphetEstimator(BaseForecastEstimator): Note: If there is a conflict in built-in and custom seasonality e.g. both have "yearly", then custom seasonality will be used and Model will throw a warning such as: - "INFO:fbprophet:Found custom seasonality named "yearly", disabling built-in yearly seasonality." + "INFO:prophet:Found custom seasonality named "yearly", disabling built-in yearly seasonality." kwargs : additional parameters Other parameters are the same as Prophet model, with one exception: @@ -115,7 +115,7 @@ class ProphetEstimator(BaseForecastEstimator): Prophet documentation for a description: * https://facebook.github.io/prophet/docs/quick_start.html - * https://github.com/facebook/prophet/blob/c7a150312ad26db5a8ea81d8cd32dd5fd6ce1eda/python/fbprophet/forecaster.py#L30 + * https://github.com/facebook/prophet/blob/master/python/prophet/forecaster.py Attributes ---------- @@ -146,8 +146,8 @@ def __init__( uncertainty_samples=1000, add_regressor_dict=None, add_seasonality_dict=None): - if "fbprophet" not in sys.modules: - raise ValueError("The module 'fbprophet' is not installed. Please install manually.") + if "prophet" not in sys.modules: + raise ValueError("The module 'prophet' is not installed. Please install manually.") # every subclass of BaseForecastEstimator must call super().__init__ super().__init__( @@ -183,7 +183,7 @@ def __init__( self.forecast = None def fit(self, X, y=None, time_col=TIME_COL, value_col=VALUE_COL, **fit_params): - """Fits fbprophet model. + """Fits prophet model. Parameters ---------- @@ -221,7 +221,7 @@ def fit(self, X, y=None, time_col=TIME_COL, value_col=VALUE_COL, **fit_params): # uses coverage instead of interval_width to set prediction band width. This ensures a common # interface for parameters common to every BaseForecastEstimator, usually also needed for forecast evaluation # model must be initialized here, not in __init__, to update parameters in grid search - self.model = fbprophet.Prophet( + self.model = prophet.Prophet( growth=self.growth, changepoints=self.changepoints, n_changepoints=self.n_changepoints, @@ -378,6 +378,6 @@ def plot_components( if "'DatetimeIndex'" in repr(e): # 'DatetimeIndex' object has no attribute 'weekday_name' raise Exception("Prophet 0.5 component plots are incompatible with pandas 1.*. " - "Upgrade to fbprophet:0.6 or higher.") + "Upgrade to prophet:0.6 or higher.") else: raise e diff --git a/greykite/sklearn/estimator/silverkite_diagnostics.py b/greykite/sklearn/estimator/silverkite_diagnostics.py new file mode 100644 index 0000000..eb21db0 --- /dev/null +++ b/greykite/sklearn/estimator/silverkite_diagnostics.py @@ -0,0 +1,432 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# original author: Sayan Patra +"""Silverkite plotting functions.""" +import warnings +from typing import Type + +import numpy as np +import pandas as pd +from plotly import graph_objects as go +from plotly.subplots import make_subplots + +from greykite.algo.changepoint.adalasso.changepoints_utils import get_trend_changepoint_dates_from_cols +from greykite.algo.common.model_summary import ModelSummary +from greykite.algo.forecast.silverkite.constants.silverkite_component import SilverkiteComponentsEnum +from greykite.algo.forecast.silverkite.constants.silverkite_component import SilverkiteComponentsEnumMixin +from greykite.algo.forecast.silverkite.constants.silverkite_constant import default_silverkite_constant +from greykite.common import constants as cst +from greykite.common.python_utils import get_pattern_cols +from greykite.common.viz.timeseries_plotting import add_groupby_column +from greykite.common.viz.timeseries_plotting import grouping_evaluation + + +class SilverkiteDiagnostics: + """Provides various plotting functions for the model generated by the Silverkite forecast algorithms. + + Attributes + ---------- + _silverkite_components_enum : Type[SilverkiteComponentsEnum] + The constants for plotting the silverkite components. + model_dict : `dict` or None + A dict with fitted model and its attributes. + The output of `~greykite.algo.forecast.silverkite.forecast_silverkite.SilverkiteForecast.forecast`. + pred_category : `dict` or None + A dictionary with keys being the predictor category and + values being the predictors belonging to the category. + For details, see + `~greykite.sklearn.estimator.base_silverkite_estimator.BaseSilverkiteEstimator.pred_category`. + time_col : str + Name of input data time column + value_col : str + Name of input data value column + components : `dict` or None + Components of the ``SilverkiteEstimator`` model. Set by ``self.plot_components``. + For details about the possible key values see + `~greykite.sklearn.estimator.silverkite_diagnostics.SilverkiteDiagnostics.get_silverkite_components`. + Not available for ``random forest`` and ``gradient boosting`` methods and + set to the default value `None`. + model_summary : `class` or `None` + The `~greykite.algo.common.model_summary.ModelSummary` class. + """ + def __init__( + self, + constants: SilverkiteComponentsEnumMixin = default_silverkite_constant): + self._silverkite_components_enum: Type[SilverkiteComponentsEnum] = constants.get_silverkite_components_enum() + self.pred_category = None + self.time_col = None + self.value_col = None + self.components = None + self.model_summary = None + + def set_params(self, pred_category, time_col, value_col): + """ + Set the various params after the model has been created. + + Parameters + ---------- + pred_category : `dict` or None + A dictionary with keys being the predictor category and + values being the predictors belonging to the category. + For details, see `~greykite.sklearn.estimator.base_silverkite_estimator.BaseSilverkiteEstimator.pred_category`. + time_col: `str` + Time column name in the data frame. + value_col: `str` + Value column name in the data frame. + """ + self.pred_category = pred_category + self.time_col = time_col + self.value_col = value_col + + def summary(self, model_dict, max_colwidth=20) -> ModelSummary: + """Creates the model summary for the given model + + Parameters + ---------- + model_dict : `dict` or None + A dict with fitted model and its attributes. + max_colwidth : `int` + The maximum length for predictors to be shown in their original name. + If the maximum length of predictors exceeds this parameter, all + predictors name will be suppressed and only indices are shown. + + Returns + ------- + model_summary: `ModelSummary` + The model summary for this model. See `~greykite.algo.common.model_summary.ModelSummary` + """ + + if model_dict is not None: + # tree models do not have beta + self.model_summary = ModelSummary( + x=model_dict["x_mat"].values, + y=model_dict["y"].values, + pred_cols=list(model_dict["x_mat"].columns), + pred_category=self.pred_category, + fit_algorithm=model_dict["fit_algorithm"], + ml_model=model_dict["ml_model"], + max_colwidth=max_colwidth) + else: + self.model_summary = None + return self.model_summary + + def plot_components(self, model_dict, names=None, title=None): + """Class method to plot the components of a ``Silverkite`` model on the dataset passed to ``fit``. + + Parameters + ---------- + model_dict : `dict` or None + A dict with fitted model and its attributes. + names: `list` [`str`], default `None` + Names of the components to be plotted e.g. names = ["trend", "DAILY_SEASONALITY"]. + See `~greykite.sklearn.estimator.silverkite_diagnostics.get_silverkite_components` + for the full list of valid names. + If `None`, all the available components are plotted. + title: `str`, optional, default `None` + Title of the plot. If `None`, default title is "Component plot". + + Returns + ------- + fig: `plotly.graph_objects.Figure` + Figure plotting components against appropriate time scale. + """ + if model_dict is None: + raise NotImplementedError("Call `self.set_params` before calling `plot_components`.") + + # recomputes `self.components` every time in case model was refit + if not hasattr(model_dict["ml_model"], "coef_"): + raise NotImplementedError("Component plot has only been implemented for additive linear models.") + else: + # Computes components for the training observations used to fit the model. + # Observations with NAs that are dropped when fitting are not included. + x_mat = model_dict["x_mat"] + ml_model_coef = model_dict["ml_model"].coef_ + ml_model_intercept = model_dict["ml_model"].intercept_ + data_len = len(x_mat) + ml_cols = list(x_mat.columns) + + x_mat_weighted = ml_model_coef * x_mat + if ml_model_intercept: + if "Intercept" in ml_cols: + x_mat_weighted["Intercept"] += np.repeat(ml_model_intercept, data_len) + else: + x_mat_weighted["Intercept"] = np.repeat(ml_model_intercept, data_len) + + self.components = self.get_silverkite_components( + df=model_dict["df_dropna"], + time_col=self.time_col, + value_col=self.value_col, + feature_df=x_mat_weighted) + + return self.plot_silverkite_components( + components=self.components, + names=names, + title=title) + + def get_silverkite_components( + self, + df, + time_col, + value_col, + feature_df): + """Compute the components of a ``Silverkite`` model. + + Notes + ----- + This function signature is chosen this way so that an user using `forecast_silverkite` can also use + this function, without any changes to the `forecast_silverkite` function. User can compute `feature_df` + as follows. Here `model_dict` is the output of `forecast_silverkite`. + feature_df = model_dict["mod"].coef_ * model_dict["design_mat"] + + The function aggregates components based on the column names of `feature_df`. + `feature_df` is defined as the patsy design matrix built by `design_mat_from_formula` + multiplied by the corresponding coefficients, estimated by the silverkite model. + + - ``cst.TREND_REGEX``: Used to identify `feature_df` columns corresponding to trend. + See `greykite.common.features.timeseries_features.get_changepoint_features` for details + about changepoint column names. + - ``cst.SEASONALITY_REGEX``: Used to identify `feature_df` columns corresponding to seasonality. + This means to get correct seasonalities, the user needs to provide seas_names. + See `greykite.common.features.timeseries_features.get_fourier_col_name` for details + about seasonality column names. + - ``cst.EVENT_REGEX``: Used to identify `feature_df` columns corresponding to events such as holidays. + See `~greykite.common.features.timeseries_features.add_daily_events` for details + about event column names. + + Parameters + ---------- + df : `pandas.DataFrame` + A dataframe containing `time_col`, `value_col` and `regressors`. + time_col : `str` + The name of the time column in ``df``. + value_col : `str` + The name of the value column in ``df``. + feature_df : `pandas.DataFrame` + A dataframe containing feature columns and values. + + Returns + ------- + components : `pandas.DataFrame` + Contains the components of the model. Same number of rows as `df`. Possible columns are + + - `"time_col"`: same as input ``time_col``. + - `"value_col"`: same as input ``value_col``. + - `"trend"`: column containing the trend. + - `"autoregression"`: column containing the autoregression. + - `"lagged_regressor"`: column containing the lagged regressors. + - `"DAILY_SEASONALITY"`: column containing daily seasonality. + - `"WEEKLY_SEASONALITY"`: column containing weekly seasonality. + - `"MONTHLY_SEASONALITY"`: column containing monthly seasonality. + - `"QUARTERLY_SEASONALITY"`: column containing quarterly seasonality. + - `"YEARLY_SEASONALITY"`: column containing yearly seasonality. + - `"events"`: column containing events e.g. holidays effect. + - `"residual"`: column containing residuals. + + """ + if feature_df is None or feature_df.empty: + raise ValueError("feature_df must be non-empty") + + if df.shape[0] != feature_df.shape[0]: + raise ValueError("df and feature_df must have same number of rows.") + + feature_cols = feature_df.columns + components = df[[time_col, value_col]] + + # gets trend (this includes interaction terms) + trend_cols = get_pattern_cols(feature_cols, cst.TREND_REGEX, f"{cst.SEASONALITY_REGEX}|{cst.LAG_REGEX}") + if trend_cols: + components["trend"] = feature_df[trend_cols].sum(axis=1) + + # gets lagged terms (auto regression, lagged regressors and corresponding interaction terms) + lag_cols = get_pattern_cols(feature_cols, cst.LAG_REGEX) + if lag_cols: + ar_cols = [lag_col for lag_col in lag_cols if value_col in lag_col] + if ar_cols: + components["autoregression"] = feature_df[ar_cols].sum(axis=1) + lagged_regressor_cols = [lag_col for lag_col in lag_cols if value_col not in lag_col] + if lagged_regressor_cols: + components["lagged_regressor"] = feature_df[lagged_regressor_cols].sum(axis=1) + + # gets seasonalities + seas_cols = get_pattern_cols(feature_cols, cst.SEASONALITY_REGEX) + seas_components_dict = self._silverkite_components_enum.__dict__["_member_names_"].copy() + for seas in seas_components_dict: + seas_pattern = self._silverkite_components_enum[seas].value.ylabel + seas_pattern_cols = get_pattern_cols(seas_cols, seas_pattern) + if seas_pattern_cols: + components[seas] = feature_df[seas_pattern_cols].sum(axis=1) + + # gets events (holidays for now) + event_cols = get_pattern_cols(feature_cols, cst.EVENT_REGEX) + if event_cols: + components["events"] = feature_df[event_cols].sum(axis=1) + + # calculates residuals + components["residual"] = df[value_col].values - feature_df.sum(axis=1).values + + # gets trend changepoints + # keeps this column as the last column of the df + if trend_cols: + changepoint_dates = get_trend_changepoint_dates_from_cols(trend_cols=trend_cols) + if changepoint_dates: + ts = pd.to_datetime(components[time_col]) + changepoints = [1 if t in changepoint_dates else 0 for t in ts] + components["trend_changepoints"] = changepoints + + return components + + def group_silverkite_seas_components(self, df): + """Groups and renames``Silverkite`` seasonalities. + + Parameters + ---------- + df: `pandas.DataFrame` + DataFrame containing two columns: + + - ``time_col``: Timestamps of the original timeseries. + - ``seas``: A seasonality component. It must match a component name from the + `~greykite.algo.forecast.silverkite.constants.silverkite_component.SilverkiteComponentsEnum`. + + Returns + ------- + `pandas.DataFrame` + DataFrame grouped by the time feature corresponding to the seasonality + and renamed as defined in + `~greykite.algo.forecast.silverkite.constants.silverkite_component.SilverkiteComponentsEnum`. + """ + time_col, seas = df.columns + groupby_time_feature = self._silverkite_components_enum[seas].value.groupby_time_feature + xlabel = self._silverkite_components_enum[seas].value.xlabel + ylabel = self._silverkite_components_enum[seas].value.ylabel + + def grouping_func(grp): + return np.nanmean(grp[seas]) + + result = add_groupby_column( + df=df, + time_col=time_col, + groupby_time_feature=groupby_time_feature) + grouped_df = grouping_evaluation( + df=result["df"], + groupby_col=result["groupby_col"], + grouping_func=grouping_func, + grouping_func_name=ylabel) + grouped_df.rename({result["groupby_col"]: xlabel}, axis=1, inplace=True) + return grouped_df + + def plot_silverkite_components( + self, + components, + names=None, + title=None): + """Plot the components of a ``Silverkite`` model. + + Parameters + ---------- + components : `pandas.DataFrame` + A dataframe containing the components of a silverkite model, similar to the output + of `~greykite.sklearn.estimator.silverkite_diagnostics.get_silverkite_components`. + names: `list` [`str`], optional, default `None` + Names of the components to be plotted e.g. names = ["trend", "DAILY_SEASONALITY"]. + See `~greykite.sklearn.estimator.silverkite_diagnostics.get_silverkite_components` + for the full list of valid names. + If `None`, all the available components are plotted. + title: `str`, optional, default `None` + Title of the plot. If `None`, default title is "Component plot". + + Returns + ------- + fig: `plotly.graph_objects.Figure` + Figure plotting components against appropriate time scale. + + Notes + ----- + If names in `None`, all the available components are plotted. + ``value_col`` is always plotted in the first panel, as long as there is a match between + given ``names`` list and ``components.columns``. + + See Also + -------- + `~greykite.sklearn.estimator.silverkite_diagnostics.get_silverkite_components` + """ + + time_col, value_col = components.columns[:2] + if "trend_changepoints" in components.columns: + trend_changepoints = components[time_col].loc[components["trend_changepoints"] == 1].tolist() + components = components.drop("trend_changepoints", axis=1) + else: + trend_changepoints = None + if names is None: + names_kept = list(components.columns)[1:] # do not include time_col + else: + # loops over components.columns to maintain the order of the components + names_kept = [component for component in list(components.columns) if component in names] + names_removed = set(names) - set(components.columns) + + if not names_kept: + raise ValueError("None of the provided components have been specified in the model.") + elif names_removed: + warnings.warn(f"The following components have not been specified in the model: " + f"{names_removed}, plotting the rest.") + if names_kept[0] != value_col: + names_kept.insert(0, value_col) + + num_rows = len(names_kept) + fig = make_subplots(rows=num_rows, cols=1, vertical_spacing=0.35 / num_rows) + if title is None: + title = "Component plots" + fig.update_layout(dict(showlegend=True, title=title, title_x=0.5, height=350 * num_rows)) + + for ind, name in enumerate(names_kept): + df = components[[time_col, name]] + if "SEASONALITY" in name: + df = self.group_silverkite_seas_components(df) + + xlabel, ylabel = df.columns + row = ind + 1 + fig.append_trace(go.Scatter( + x=df[xlabel], + y=df[ylabel], + name=name, + mode="lines", + opacity=0.8, + showlegend=False + ), row=row, col=1) + + # `showline = True` shows a line only along the axes. i.e. for xaxis it will line the bottom + # of the image, but not top. Adding `mirror = True` also adds the line to the top. + fig.update_xaxes(title_text=xlabel, showline=True, mirror=True, row=row, col=1) + fig.update_yaxes(title_text=ylabel, showline=True, mirror=True, row=row, col=1) + + # plot trend change points + if trend_changepoints is not None and "trend" in names_kept: + for i, cp in enumerate(trend_changepoints): + show_legend = (i == 0) + fig.append_trace( + go.Scatter( + name="trend change point", + mode="lines", + x=[cp, cp], + y=[components["trend"].min(), components["trend"].max()], + line=go.scatter.Line( + color="#F44336", # red 500 + width=1.5, + dash="dash"), + showlegend=show_legend), + row=names_kept.index("trend") + 1, + col=1) + + return fig diff --git a/greykite/sklearn/estimator/silverkite_estimator.py b/greykite/sklearn/estimator/silverkite_estimator.py index 83c8a33..3aea70c 100644 --- a/greykite/sklearn/estimator/silverkite_estimator.py +++ b/greykite/sklearn/estimator/silverkite_estimator.py @@ -25,10 +25,10 @@ from sklearn.metrics import mean_squared_error from greykite.algo.forecast.silverkite.forecast_silverkite import SilverkiteForecast -from greykite.algo.forecast.silverkite.silverkite_diagnostics import SilverkiteDiagnostics from greykite.common import constants as cst from greykite.common.python_utils import update_dictionary from greykite.sklearn.estimator.base_silverkite_estimator import BaseSilverkiteEstimator +from greykite.sklearn.estimator.silverkite_diagnostics import SilverkiteDiagnostics class SilverkiteEstimator(BaseSilverkiteEstimator): @@ -105,6 +105,7 @@ def __init__( score_func=mean_squared_error, coverage=None, null_model_params=None, + freq=None, origin_for_time_vars=None, extra_pred_cols=None, drop_pred_cols=None, @@ -114,7 +115,10 @@ def __init__( fit_algorithm_dict=None, daily_event_df_dict=None, fs_components_df=pd.DataFrame({ - "name": ["tod", "tow", "conti_year"], + "name": [ + cst.TimeFeaturesEnum.tod.value, + cst.TimeFeaturesEnum.tow.value, + cst.TimeFeaturesEnum.conti_year.value], "period": [24.0, 7.0, 1.0], "order": [3, 3, 5], "seas_names": ["daily", "weekly", "yearly"]}), @@ -133,7 +137,8 @@ def __init__( regression_weight_col=None, forecast_horizon=None, simulation_based=False, - simulation_num=10): + simulation_num=10, + fast_simulation=False): # every subclass of BaseSilverkiteEstimator must call super().__init__ super().__init__( silverkite=silverkite, @@ -148,6 +153,7 @@ def __init__( self.score_func = score_func self.coverage = coverage self.null_model_params = null_model_params + self.freq = freq self.origin_for_time_vars = origin_for_time_vars self.extra_pred_cols = extra_pred_cols self.drop_pred_cols = drop_pred_cols @@ -173,6 +179,7 @@ def __init__( self.forecast_horizon = forecast_horizon self.simulation_based = simulation_based self.simulation_num = simulation_num + self.fast_simulation = fast_simulation self.validate_inputs() def validate_inputs(self): @@ -230,6 +237,7 @@ def fit( df=X, time_col=time_col, value_col=value_col, + freq=self.freq, origin_for_time_vars=self.origin_for_time_vars, extra_pred_cols=self.extra_pred_cols, drop_pred_cols=self.drop_pred_cols, @@ -255,7 +263,8 @@ def fit( regression_weight_col=self.regression_weight_col, forecast_horizon=self.forecast_horizon, simulation_based=self.simulation_based, - simulation_num=self.simulation_num) + simulation_num=self.simulation_num, + fast_simulation=self.fast_simulation) # sets attributes based on ``self.model_dict`` super().finish_fit() diff --git a/greykite/sklearn/estimator/simple_silverkite_estimator.py b/greykite/sklearn/estimator/simple_silverkite_estimator.py index 4313fa5..405d2e3 100644 --- a/greykite/sklearn/estimator/simple_silverkite_estimator.py +++ b/greykite/sklearn/estimator/simple_silverkite_estimator.py @@ -31,10 +31,11 @@ from sklearn.metrics import mean_squared_error from greykite.algo.forecast.silverkite.forecast_simple_silverkite import SimpleSilverkiteForecast -from greykite.algo.forecast.silverkite.silverkite_diagnostics import SilverkiteDiagnostics from greykite.common import constants as cst from greykite.common.python_utils import update_dictionary from greykite.sklearn.estimator.base_silverkite_estimator import BaseSilverkiteEstimator +from greykite.sklearn.estimator.silverkite_diagnostics import SilverkiteDiagnostics +from greykite.sklearn.uncertainty.uncertainty_methods import UncertaintyMethodEnum class SimpleSilverkiteEstimator(BaseSilverkiteEstimator): @@ -111,13 +112,16 @@ def __init__( train_test_thresh: Optional[datetime] = None, training_fraction: Optional[float] = None, fit_algorithm_dict: Optional[Dict] = None, + auto_holiday: bool = False, holidays_to_model_separately: Optional[Union[str, List[str]]] = "auto", holiday_lookup_countries: Optional[Union[str, List[str]]] = "auto", holiday_pre_num_days: int = 2, holiday_post_num_days: int = 2, holiday_pre_post_num_dict: Optional[Dict] = None, daily_event_df_dict: Optional[Dict] = None, + auto_growth: bool = False, changepoints_dict: Optional[Dict] = None, + auto_seasonality: bool = False, yearly_seasonality: Union[bool, str, int] = "auto", quarterly_seasonality: Union[bool, str, int] = "auto", monthly_seasonality: Union[bool, str, int] = "auto", @@ -133,7 +137,7 @@ def __init__( max_admissible_value: Optional[float] = None, uncertainty_dict: Optional[Dict] = None, normalize_method: Optional[str] = None, - growth_term: Optional[str] = "linear", + growth_term: Optional[str] = cst.GrowthColEnum.linear.name, regressor_cols: Optional[List[str]] = None, feature_sets_enabled: Optional[Union[bool, Dict[str, bool]]] = None, extra_pred_cols: Optional[List[str]] = None, @@ -141,7 +145,8 @@ def __init__( explicit_pred_cols: Optional[List[str]] = None, regression_weight_col: Optional[str] = None, simulation_based: Optional[bool] = False, - simulation_num: int = 10): + simulation_num: int = 10, + fast_simulation: bool = False): # every subclass of BaseSilverkiteEstimator must call super().__init__ super().__init__( silverkite=silverkite, @@ -163,13 +168,16 @@ def __init__( self.train_test_thresh = train_test_thresh self.training_fraction = training_fraction self.fit_algorithm_dict = fit_algorithm_dict + self.auto_holiday = auto_holiday self.holidays_to_model_separately = holidays_to_model_separately self.holiday_lookup_countries = holiday_lookup_countries self.holiday_pre_num_days = holiday_pre_num_days self.holiday_post_num_days = holiday_post_num_days self.holiday_pre_post_num_dict = holiday_pre_post_num_dict self.daily_event_df_dict = daily_event_df_dict + self.auto_growth = auto_growth self.changepoints_dict = changepoints_dict + self.auto_seasonality = auto_seasonality self.yearly_seasonality = yearly_seasonality self.quarterly_seasonality = quarterly_seasonality self.monthly_seasonality = monthly_seasonality @@ -194,6 +202,7 @@ def __init__( self.regression_weight_col = regression_weight_col self.simulation_based = simulation_based self.simulation_num = simulation_num + self.fast_simulation = fast_simulation # ``forecast_simple_silverkite`` generates a ``fs_components_df`` to call # ``forecast_silverkite`` that is compatible with ``BaseSilverkiteEstimator``. # Unlike ``SilverkiteEstimator``, this does not need to call ``validate_inputs``. @@ -247,6 +256,18 @@ def fit( value_col=value_col, **fit_params) + # The uncertainty method has been filled as "simple_conditional_residuals" in ``super().fit`` above if + # ``coverage`` is given but ``uncertainty_dict`` is not given. + # In the case that the method is "simple_conditional_residuals", + # we use SimpleSilverkiteForecast to fit it, because under the situation of AR simulation, + # those information are needed in generating the prediction intervals. + # In all other cases, we fit the uncertainty model separately. + uncertainty_dict = None + if self.uncertainty_dict is not None: + uncertainty_method = self.uncertainty_dict.get("uncertainty_method", None) + if uncertainty_method == UncertaintyMethodEnum.simple_conditional_residuals.name: + uncertainty_dict = self.uncertainty_dict + self.model_dict = self.silverkite.forecast_simple( df=X, time_col=time_col, @@ -259,13 +280,16 @@ def fit( training_fraction=self.training_fraction, fit_algorithm=self.fit_algorithm_dict["fit_algorithm"], fit_algorithm_params=self.fit_algorithm_dict["fit_algorithm_params"], + auto_holiday=self.auto_holiday, holidays_to_model_separately=self.holidays_to_model_separately, holiday_lookup_countries=self.holiday_lookup_countries, holiday_pre_num_days=self.holiday_pre_num_days, holiday_post_num_days=self.holiday_post_num_days, holiday_pre_post_num_dict=self.holiday_pre_post_num_dict, daily_event_df_dict=self.daily_event_df_dict, + auto_growth=self.auto_growth, changepoints_dict=self.changepoints_dict, + auto_seasonality=self.auto_seasonality, yearly_seasonality=self.yearly_seasonality, quarterly_seasonality=self.quarterly_seasonality, monthly_seasonality=self.monthly_seasonality, @@ -279,7 +303,7 @@ def fit( seasonality_changepoints_dict=self.seasonality_changepoints_dict, min_admissible_value=self.min_admissible_value, max_admissible_value=self.max_admissible_value, - uncertainty_dict=self.uncertainty_dict, + uncertainty_dict=uncertainty_dict, normalize_method=self.normalize_method, growth_term=self.growth_term, regressor_cols=self.regressor_cols, @@ -289,7 +313,34 @@ def fit( explicit_pred_cols=self.explicit_pred_cols, regression_weight_col=self.regression_weight_col, simulation_based=self.simulation_based, - simulation_num=self.simulation_num) + simulation_num=self.simulation_num, + fast_simulation=self.fast_simulation) + + # Fits the uncertainty model if not already fit. + if self.uncertainty_dict is not None and uncertainty_dict is None: + # The quantile regression model. + if uncertainty_method == UncertaintyMethodEnum.quantile_regression.name: + fit_df = self.silverkite.predict( + X, + trained_model=self.model_dict + )["fut_df"].rename( + columns={self.value_col_: cst.PREDICTED_COL} + )[[self.time_col_, cst.PREDICTED_COL]] + fit_df[self.value_col_] = X[self.value_col_].values + x_mat = self.model_dict["x_mat"] + + default_params = {"is_residual_based": False} + params = self.uncertainty_dict.get("params", {}) + default_params.update(params) + + fit_params = {"x_mat": x_mat} + + self.fit_uncertainty( + df=fit_df, + uncertainty_dict=self.uncertainty_dict, + fit_params=fit_params, + **default_params + ) # Sets attributes based on ``self.model_dict`` super().finish_fit() diff --git a/greykite/sklearn/estimator/testing_utils.py b/greykite/sklearn/estimator/testing_utils.py index 866b630..98fd356 100644 --- a/greykite/sklearn/estimator/testing_utils.py +++ b/greykite/sklearn/estimator/testing_utils.py @@ -27,6 +27,7 @@ from greykite.algo.forecast.silverkite.forecast_simple_silverkite_helper import cols_interact from greykite.algo.forecast.silverkite.forecast_simple_silverkite_helper import generate_holiday_events +from greykite.common.constants import TimeFeaturesEnum from greykite.common.features.timeseries_features import convert_date_to_continuous_time @@ -42,7 +43,7 @@ def params_components(): uncertainty_dict = { "uncertainty_method": "simple_conditional_residuals", "params": { - "conditional_cols": ["dow"], + "conditional_cols": [TimeFeaturesEnum.dow.value], "quantiles": [0.025, 0.975], "quantile_estimation_method": "normal_fit", "sample_size_thresh": 5, @@ -69,16 +70,23 @@ def params_components(): # constant event effect at daily level event_cols = [f"Q('events_{key}')" for key in event_df_dict.keys()] interaction_cols = cols_interact( - static_col="is_weekend", - fs_name="tow", + static_col=TimeFeaturesEnum.is_weekend.value, + fs_name=TimeFeaturesEnum.tow.value, fs_order=4, fs_seas_name="weekly") - extra_pred_cols = ["ct_sqrt", "dow_hr", "ct1", "ct1:tod", "regressor1", "regressor2"] + \ - event_cols + interaction_cols + extra_pred_cols = [TimeFeaturesEnum.ct_sqrt.value, + TimeFeaturesEnum.dow_hr.value, + TimeFeaturesEnum.ct1.value, + f"{TimeFeaturesEnum.ct1.value}:{TimeFeaturesEnum.tod.value}", + "regressor1", + "regressor2"] + event_cols + interaction_cols # seasonality terms fs_components_df = pd.DataFrame({ - "name": ["tod", "tow", "ct1"], + "name": [ + TimeFeaturesEnum.tod.value, + TimeFeaturesEnum.tow.value, + TimeFeaturesEnum.ct1.value], "period": [24.0, 7.0, 1.0], "order": [12, 4, 5], "seas_names": ["daily", "weekly", "yearly"]}) @@ -87,7 +95,7 @@ def params_components(): changepoints_dict = dict( method="custom", dates=["2018-01-01", "2019-01-02-16", "2019-01-03", "2019-02-01"], - continuous_time_col="ct2") + continuous_time_col=TimeFeaturesEnum.ct2.value) return { "coverage": 0.95, diff --git a/greykite/sklearn/uncertainty/base_uncertainty_model.py b/greykite/sklearn/uncertainty/base_uncertainty_model.py index f4ee5b7..040389b 100644 --- a/greykite/sklearn/uncertainty/base_uncertainty_model.py +++ b/greykite/sklearn/uncertainty/base_uncertainty_model.py @@ -27,6 +27,9 @@ import pandas as pd +from greykite.common import constants as cst +from greykite.sklearn.uncertainty.exceptions import UncertaintyError + class BaseUncertaintyModel: """The base uncertainty model. @@ -43,8 +46,11 @@ class BaseUncertaintyModel: uncertainty_method : `str` or None The name of the uncertainty model. Must be in `~greykite.sklearn.uncertainty.uncertainty_methods.UncertaintyMethodEnum`. + This parameter is a required parameter by all subclasses. params : `dict` [`str`, any] or None The parameters to be fed into the uncertainty model. + This class tries to populate ``value_col`` if ``cst.VALUE_COL`` is found in the training df, + because ``value_col`` is a common parameter used by many subclasses. train_df : `pandas.DataFrame` or None The data used to fit the uncertainty model. uncertainty_model : any or None @@ -52,6 +58,11 @@ class BaseUncertaintyModel: pred_df : `pandas.DataFrame` The prediction result df. """ + + UNCERTAINTY_METHOD = None + REQUIRED_PARAMS = [] + DEFAULT_COVERAGE = 0.95 + def __init__( self, uncertainty_dict: Dict[str, any], @@ -81,6 +92,30 @@ def _check_input(self): if self.uncertainty_dict is None: self.uncertainty_dict = {} + # Checks the uncertainty method matches. + self.uncertainty_method = self.uncertainty_dict.get("uncertainty_method") + if self.uncertainty_method != self.UNCERTAINTY_METHOD: + raise UncertaintyError( + f"The uncertainty method {self.uncertainty_method} is not as expected {self.UNCERTAINTY_METHOD}." + ) + + # Gets the parameters. + self.params = self.uncertainty_dict.get("params", {}) + + # Populates ``value_col`` since it's a commonly used param. + if (self.params.get("value_col", None) is None and self.train_df is not None + and cst.VALUE_COL in self.train_df.columns): + self.params["value_col"] = cst.VALUE_COL + + # Checks all required parameters are given. + for required_param in self.REQUIRED_PARAMS: + if required_param not in self.params: + raise UncertaintyError( + f"The parameter {required_param} is required but not found in " + f"`uncertainty['params']` {self.params}. " + f"The required parameters are {self.REQUIRED_PARAMS}." + ) + def fit( self, train_df: pd.DataFrame): @@ -91,7 +126,7 @@ def fit( train_df : `pandas.DataFrame` The training data. """ - self.train_df = train_df + self.train_df = train_df.copy() def predict( self, diff --git a/greykite/sklearn/uncertainty/quantile_regression_uncertainty_model.py b/greykite/sklearn/uncertainty/quantile_regression_uncertainty_model.py new file mode 100644 index 0000000..3f710ae --- /dev/null +++ b/greykite/sklearn/uncertainty/quantile_regression_uncertainty_model.py @@ -0,0 +1,413 @@ +# BSD 2-CLAUSE LICENSE + +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# original author: Kaixu Yang +"""Defines the quantile regression based uncertainty model.""" + +from __future__ import annotations + +from typing import Dict +from typing import List +from typing import Optional + +import pandas as pd +from sklearn.exceptions import NotFittedError + +from greykite.algo.common.l1_quantile_regression import QuantileRegression +from greykite.algo.forecast.silverkite.forecast_silverkite import SilverkiteForecast +from greykite.algo.forecast.silverkite.forecast_silverkite_helper import get_fourier_feature_col_names +from greykite.algo.forecast.silverkite.forecast_silverkite_helper import get_silverkite_uncertainty_dict +from greykite.common import constants as cst +from greykite.common.features.timeseries_features import fourier_series_multi_fcn +from greykite.common.features.timeseries_features import get_default_origin_for_time_vars +from greykite.sklearn.uncertainty.base_uncertainty_model import BaseUncertaintyModel +from greykite.sklearn.uncertainty.exceptions import UncertaintyError + + +class QuantileRegressionUncertaintyModel(BaseUncertaintyModel): + """The quantile regression based uncertainty model. + Predicts quantiles as the prediction intervals. + The quantiles are calculated based on the ``coverage`` parameter. + For example, a 90% prediction interval is the 0.05 quantile and 0.95 quantile predictions. + + There are four scenarios: + + - ``is_residual_based = False`` and ``x_mat`` is provided. + In this case, the method fits two quantile regression models based on the ``value_col`` and ``x_mat``. + Depending on the forecast model, the generated prediction intervals may not cover the forecasted values. + - ``is_residual_based = False`` and ``x_mat`` is not provided. + In this case, a ``x_mat`` is generated based on ``time_col`` + including linear growth and yearly/weekly seasonality. + Currently we do not support customizing the generation of this feature matrix. + The method fits two quantile regression models based on ``value_col`` and the generated ``x_mat``. + Depending on the forecast model, the generated prediction intervals may not cover the forecasted values. + - ``is_residual_based = True`` and ``x_mat`` is provided. + In this case, the ``predicted_col`` needs to be provided + in addition to ``value_col`` to calculate the residuals. + The method fits two quantile regression models based on the residuals and ``x_mat``. + The fitted residual quantiles are added to the forecasted values. + - ``is_residual_based = True`` and ``x_mat`` is not provided. + In this case, the ``predicted_col`` needs to be provided + in addition to ``value_col`` to calculate the residuals. + In this case, a ``x_mat`` is generated based on ``time_col`` + including linear growth and yearly/weekly seasonality. + Currently we do not support customizing the generation of this feature matrix. + The method fits two quantile regression models based on residuals and the generated ``x_mat``. + The fitted residual quantiles are added to the forecasted values. + + If ``x_mat`` is not provided, ``time_col`` must be provided to build the feature matrix. + + If ``is_residual_based = False``, then ``value_col`` must be provided to train the model. + If ``is_residual_based = True``, then both ``value_col`` and ``predicted_col`` must be provided. + In this case, the method also tries to find ``cst.PREDICTED_COL`` in the training data + too if ``predicted_col`` is not provided. + + Attributes + ---------- + uncertainty_dict : `dict` [`str`, any] + The uncertainty model specification. It should have the following keys: + + "uncertainty_method": a string that is in + `~greykite.sklearn.uncertainty.uncertainty_methods.UncertaintyMethodEnum`. + "params": a dictionary that includes any additional parameters needed by the uncertainty method. + Expected keys include: "value_col", "predicted_col", "is_residual_based" + and "quantiles". + + UNCERTAINTY_METHOD : `str` + The name for the uncertainty method. + REQUIRED_PARAMS : `list` [`str`] + A list of required parameters for the method. + coverage : `float` + The coverage of the uncertainty intervals. + Will be used to calculate the quantiles. + time_col : `str` + The column name for timestamps in ``train_df`` and ``fut_df``. + value_col : `str` or None + The column name for values in ``train_df`` and ``fut_df``. + predicted_col : `str` or None + The column name for predicted values in ``train_df`` and ``fut_df``. + residual_col : `str` or None + The column name for residuals in ``train_df``. + quantiles : `list` [`float`] or None + A list of quantiles to be fitted. + This is also derived from the ``coverage`` parameter. + is_residual_based : `bool` or None + Whether to fit the original values or residuals. + models : `list` [`QuantileRegression`] or None + A list of trained quantile regression models. + x_mat : `pandas.DataFrame` or None + The feature matrix used to fit the model. + build_x_mat : `bool` or None + Whether the feature matrix is built. If False, it is provided. + distribution_col : `str` or None + The column name for the column used as response in fitting the quantile regression models. + offset_col : `str` or None + The column name for the column used to offset the predicted intervals. + """ + + UNCERTAINTY_METHOD = "quantile_regression" + # Required parameters. + # We need the value column + REQUIRED_PARAMS = ["value_col"] + + def __init__( + self, + uncertainty_dict: Dict[str, any], + coverage: Optional[float] = None, + time_col: Optional[str] = None, + **kwargs): + super().__init__( + uncertainty_dict=uncertainty_dict, + **kwargs) + + self.coverage = coverage + self.time_col = time_col + + # Derived column names. + self.distribution_col: Optional[str] = None + self.offset_col: Optional[str] = None + + # Set by ``fit`` method. + self.is_residual_based: Optional[bool] = None + self.x_mat: Optional[pd.DataFrame] = None + self.build_x_mat: Optional[bool] = None + self.value_col: Optional[str] = None + self.residual_col: Optional[str] = None + self.quantiles: Optional[List[float]] = None + self.models: Optional[List[QuantileRegression]] = None + + def _check_input(self): + """Checks that necessary input are provided in ``self.uncertainty_dict`` and ``self.train_df``. + This check only raises + `~greykite.sklearn.uncertainty.exceptions.UncertaintyError`. + """ + super()._check_input() + + # Gets whether it's residual based. + # If not provided, the default is not residual based. + self.is_residual_based = self.params.get("is_residual_based", False) + + # Checks value column. + self.value_col = self.params.get("value_col") + if self.value_col not in self.train_df: + raise UncertaintyError(f"`value_col` {self.value_col} not found in `train_df`.") + + # Checks columns needed when ``is_residual_based = True``. + # If residual based, ``predicted_col`` must be provided. + # Also looks for ``cst.PREDICTED_COL`` if the above is not provided. + self.distribution_col = self.value_col + if self.is_residual_based: + # Tries to get predicted column from parameters and set ``offset_col``. + self.predicted_col = self.params.get("predicted_col") + if self.predicted_col is None: + if cst.PREDICTED_COL in self.train_df.columns: + self.predicted_col = cst.PREDICTED_COL + else: + raise UncertaintyError(f"`predicted_col` is needed for offsetting predictions when " + f"`is_residual_based=True`, but it is not provided.") + self.offset_col = self.predicted_col + + # Creates ``residual_col`` with ``value_col`` and ``predicted_col``. + self.residual_col = cst.RESIDUAL_COL + self.distribution_col = self.residual_col + self.train_df[cst.RESIDUAL_COL] = self.train_df[self.value_col] - self.train_df[self.predicted_col] + + # Checks columns needed when ``x_mat`` is not provided. + # This includes the time column. + self.build_x_mat = False + if self.x_mat is None: + self.build_x_mat = True # Flag to build x mat in the prediction phase too + if self.time_col is None: + self.time_col = self.params.get("time_col") + if self.time_col is None and cst.TIME_COL in self.train_df: + self.time_col = cst.TIME_COL + if self.time_col is None: + raise UncertaintyError( + "Time column must be provided when `x_mat` is not given. " + "It is used to generate necessary features for the uncertainty model." + ) + + if self.coverage is None: + self.coverage = self.DEFAULT_COVERAGE + # If ``self.coverage`` is given and ``quantiles`` is not given in ``params``, + # the coverage is used to calculate quantiles. + uncertainty_dict = get_silverkite_uncertainty_dict( + uncertainty=self.uncertainty_dict, + coverage=self.coverage) + self.quantiles = uncertainty_dict["params"]["quantiles"] + + def _build_quantile_regression_features( + self, + training_phase: bool = True, + fut_df: Optional[pd.DataFrame] = None) -> pd.DataFrame: + """Builds a default ``self.x_mat`` if it is not given. + Currently the class does not support customizing the built feature matrix. + + The built matrix has the following components: + + - growth: linear + - seasonality: yearly/weekly + + Parameters + ---------- + training_phase : `bool`, default True + Whether it's training phase or prediction phase. + For training phase, it uses ``self.train_df``. + fut_df : `pandas.DataFrame` or None, default None + If ``training_phase`` is False, this must be provided. + Used to build the feature matrix. + Includes the ``time_col`` to build features. + + Returns + ------- + x_mat : `pandas.DataFrame` + The feature matrix. + """ + columns = ["ct1"] + if training_phase: + df = self.train_df[[self.time_col]].copy() + else: + if fut_df is None: + raise UncertaintyError( + "Creating quantile regression feature matrix for future phase " + "requires `fut_df`." + ) + df = fut_df[[self.time_col]].copy() + + # Includes yearly/weekly seasonality features. + fs_components_df = pd.DataFrame({ + "name": [ + cst.TimeFeaturesEnum.tow.value, + cst.TimeFeaturesEnum.toy.value], + "period": [7.0, 1.0], + "order": [4, 10], + "seas_names": ["weekly", "yearly"]}) + fs_func = fourier_series_multi_fcn( + col_names=fs_components_df.get("name"), + periods=fs_components_df.get("period"), + orders=fs_components_df.get("order"), + seas_names=fs_components_df.get("seas_names") + ) + # Gets the fourier columns + fs_cols = get_fourier_feature_col_names( + df=df, + time_col=self.time_col, + fs_func=fs_func + ) + columns += fs_cols + + silverkite = SilverkiteForecast() + x_mat = silverkite._SilverkiteForecast__build_silverkite_features( + df=df, + time_col=self.time_col, + origin_for_time_vars=get_default_origin_for_time_vars( + df=self.train_df[[self.time_col]].copy(), + time_col=self.time_col + ), + continuous_time_col="ct1", + growth_func=lambda x: x, + fs_func=fs_func) + return x_mat[columns] + + def fit( + self, + train_df: pd.DataFrame, + x_mat: Optional[pd.DataFrame] = None) -> QuantileRegressionUncertaintyModel: + """Fits the uncertainty model. + + Parameters + ---------- + train_df : `pandas.DataFrame` + The data used to fit the uncertainty model. + Must have the following columns: + + value_col: this is required + time_col: if ``x_mat`` is not provided. + + If ``is_residual_based = True``, ``train_df`` must include predicted values + to calculate residuals. The predicted value column is ``predicted_col`` + if specified in ``uncertainty_dict``, default ``cst.PREDICTED_COL`` if not. + + x_mat : `pandas.DataFrame` or None, default None + The feature matrix used to train the quantile regression model. + Must have the same length as ``train_df``. + If not provided, a feature matrix will be automatically generated to include + linear growth and yearly/weekly seasonality. + + Returns + ------- + self + """ + super().fit(train_df=train_df) + self.x_mat = x_mat + self._check_input() + + # Builds the feature matrix if needed. + if self.x_mat is None: + self.x_mat = self._build_quantile_regression_features( + training_phase=True + ) + else: + if len(train_df) != len(x_mat): + raise UncertaintyError(f"The size of `train_df` {len(train_df)} must be the same " + f"as the size of `x_mat` {len(x_mat)}.") + + # Trains the quantile regression model. + self.models = [ + QuantileRegression( + quantile=quantile, + alpha=0 + ).fit(self.x_mat, self.train_df[self.distribution_col]) for quantile in self.quantiles + ] + + return self + + def predict( + self, + fut_df: pd.DataFrame, + x_mat: Optional[pd.DataFrame] = None): + """Predicts the interval. + + Parameters + ---------- + fut_df : `pandas.DataFrame` + The dataframe used for prediction. + Must have the following columns: + + time_col: if ``x_mat`` is not given during the training phase. + predicted_col: if ``is_residual_based=True``, used to offset the predictions. + + x_mat : `pandas.DataFrame` or None, default None + The feature matrix used for prediction. + If an ``x_mat`` was provided during training, it should be provided during prediction too. + + Returns + ------- + result_df : `pandas.DataFrame` + The ``fut_df`` augmented with prediction intervals. + """ + if self.models is None: + raise NotFittedError("Please train the uncertainty model first.") + fut_df = fut_df.copy() + # Records the originals columns to be output. + output_cols = list(fut_df.columns) + + # Builds x mat if needed. + if self.build_x_mat: + if self.time_col not in fut_df: + raise UncertaintyError(f"Time column {self.time_col} not found in `fut_df`.") + x_mat = self._build_quantile_regression_features( + training_phase=False, + fut_df=fut_df + ) + else: + if x_mat is None: + raise UncertaintyError("Please provide `x_mat` for prediction.") + if len(fut_df) != len(x_mat): + raise UncertaintyError(f"The size of `fut_df` {len(fut_df)} must be the same " + f"as the size of `x_mat` {len(x_mat)}.") + try: + x_mat = x_mat[self.x_mat.columns] + except KeyError: + raise UncertaintyError(f"The `x_mat` does not have all columns used to train the uncertainty model. " + f"The following columns are missing: " + f"{[col for col in self.x_mat.columns if col not in x_mat.columns]}.") + + # Makes predictions to the quantiles. + predictions = [model.predict(x_mat) for model in self.models] + + # Calculates the offset values. + if self.is_residual_based: + offset_col = fut_df[self.offset_col].values + else: + offset_col = 0 + + # Creates the quantile columns. + for quantile, prediction in zip(self.quantiles, predictions): + fut_df[f"{cst.PREDICTED_COL}_{round(quantile, 3)}"] = prediction + offset_col + + # Sets the upper/lower bounds. + fut_df[cst.PREDICTED_LOWER_COL] = fut_df[f"{cst.PREDICTED_COL}_{round(min(self.quantiles), 3)}"] + fut_df[cst.PREDICTED_UPPER_COL] = fut_df[f"{cst.PREDICTED_COL}_{round(max(self.quantiles), 3)}"] + + output_cols += [cst.PREDICTED_LOWER_COL, cst.PREDICTED_UPPER_COL] + output_cols += [f"{cst.PREDICTED_COL}_{round(quantile, 3)}" for quantile in self.quantiles] + + return fut_df[output_cols] diff --git a/greykite/sklearn/uncertainty/simple_conditional_residuals_model.py b/greykite/sklearn/uncertainty/simple_conditional_residuals_model.py index e71590a..0dd3121 100644 --- a/greykite/sklearn/uncertainty/simple_conditional_residuals_model.py +++ b/greykite/sklearn/uncertainty/simple_conditional_residuals_model.py @@ -27,12 +27,11 @@ import pandas as pd +from greykite.algo.forecast.silverkite.forecast_silverkite_helper import get_silverkite_uncertainty_dict from greykite.algo.uncertainty.conditional.conf_interval import conf_interval from greykite.algo.uncertainty.conditional.conf_interval import predict_ci from greykite.common import constants as cst from greykite.common.features.timeseries_features import add_time_features_df -from greykite.common.logging import LoggingLevelEnum -from greykite.common.logging import log_message from greykite.sklearn.uncertainty.base_uncertainty_model import BaseUncertaintyModel from greykite.sklearn.uncertainty.exceptions import UncertaintyError @@ -43,6 +42,13 @@ class SimpleConditionalResidualsModel(BaseUncertaintyModel): Attributes ---------- + uncertainty_dict : `dict` [`str`, any] + The uncertainty model specification. It should have the following keys: + + "uncertainty_method": a string that is in + `~greykite.sklearn.uncertainty.uncertainty_methods.UncertaintyMethodEnum`. + "params": a dictionary that includes any additional parameters needed by the uncertainty method. + UNCERTAINTY_METHOD : `str` The name for the uncertainty method. REQUIRED_PARAMS : `list` [`str`] @@ -52,12 +58,18 @@ class SimpleConditionalResidualsModel(BaseUncertaintyModel): Will be used to calculate the quantiles. time_col : `str` The column name for timestamps in ``train_df`` and ``fut_df``. - value_col : `str` or None + value_col : `str` The column name for values in ``train_df`` and ``fut_df``. + distribution_col : `str` or None + The column name for the column used to fit the distribution in ``train_df`` and ``fut_df``. residual_col : `str` or None The column name for residuals in ``train_df``. conditional_cols : `list` [`str`] The conditional columns when calculating the standard errors of the residuals. + offset_col : `str` or None + The column name for the column used to offset predicted intervals. + is_residual_based : `bool` or None + Whether to fit the original values or residuals. """ UNCERTAINTY_METHOD = "simple_conditional_residuals" @@ -81,9 +93,16 @@ def __init__( self.time_col = time_col # Set by ``fit`` method. + self.distribution_col: Optional[str] = None self.value_col: Optional[str] = None + self.predicted_col: Optional[str] = None self.residual_col: Optional[str] = None self.conditional_cols: Optional[List[str]] = None + self.offset_col: Optional[str] = None + self.is_residual_based: Optional[bool] = None + + # Set by ``predict`` method + self.pred_df = None def _check_input(self): """Checks that necessary input are provided in ``self.uncertainty_dict`` and ``self.train_df``. @@ -91,51 +110,45 @@ def _check_input(self): `~greykite.sklearn.uncertainty.exceptions.UncertaintyError`. """ super()._check_input() - # Checks the uncertainty method matches. - self.uncertainty_method = self.uncertainty_dict.get("uncertainty_method") - if self.uncertainty_method != self.UNCERTAINTY_METHOD: - raise UncertaintyError( - f"The uncertainty method {self.uncertainty_method} is not as expected {self.UNCERTAINTY_METHOD}." - ) - # Gets the parameters. - self.params = self.uncertainty_dict.get("params", {}) - # Tries to populate value column if it is not given. - if self.params.get("value_col", None) is None and cst.VALUE_COL in self.train_df.columns: - self.params["value_col"] = cst.VALUE_COL - # Checks all required parameters are given. - for required_param in self.REQUIRED_PARAMS: - if required_param not in self.params: - raise UncertaintyError( - f"The parameter {required_param} is required but not found in " - f"`uncertainty['params']` {self.params}. " - f"The required parameters are {self.REQUIRED_PARAMS}." - ) + + # Gets whether it's residual based. If not provided, the default is residual based. + self.is_residual_based = self.params.get("is_residual_based", True) + if not self.is_residual_based: + raise UncertaintyError(f"'is_residual_based' must be True when " + f"the uncertainty method is {self.UNCERTAINTY_METHOD}.") + # Checks value column. self.value_col = self.params.get("value_col") - if self.value_col is None or not isinstance(self.value_col, str): - raise UncertaintyError(f"`value_col` has to be a string, but found {self.value_col}.") if self.value_col not in self.train_df: raise UncertaintyError(f"`value_col` {self.value_col} not found in `train_df`.") - # Checks residual column. - self.residual_col = self.params.get("residual_col") - if self.residual_col is not None and not isinstance(self.residual_col, str): - raise UncertaintyError( - f"`residual_col` has to be a string or None, but found {self.residual_col}.") - # Residuals are calculated if ``PREDICT_COL`` exists. - # The method in this class always looks for using residual based approach. - if self.residual_col is not None and self.residual_col not in self.train_df.columns: - if cst.PREDICTED_COL in self.train_df.columns: - log_message( - message=f"`residual_col` {self.residual_col} is given but not found in `train_df.columns`, " - f"however, the prediction column {cst.PREDICTED_COL} is found. " - f"Calculating residuals based on the prediction column.", - level=LoggingLevelEnum.INFO - ) - self.train_df[self.residual_col] = self.train_df[self.value_col] - self.train_df[cst.PREDICTED_COL] - else: - raise UncertaintyError( - f"`residual_col` {self.residual_col} not found in `train_df.columns`." - ) + + # Checks columns needed when ``is_residual_based = True``. + # If residual based, ``predicted_col`` must be provided. + # Also looks for ``cst.PREDICTED_COL`` if the above is not provided. + self.distribution_col = self.value_col + if self.is_residual_based: + # Tries to get predicted column from parameters and set ``offset_col``. + self.predicted_col = self.params.get("predicted_col") + if self.predicted_col is None: + self.predicted_col = cst.PREDICTED_COL + self.offset_col = self.predicted_col + + # Creates ``residual_col`` with ``value_col`` and ``predicted_col``. + self.residual_col = cst.RESIDUAL_COL + self.train_df[cst.RESIDUAL_COL] = self.train_df[self.value_col] - self.train_df[self.predicted_col] + self.distribution_col = self.residual_col + + self.params["distribution_col"] = self.distribution_col + self.params["offset_col"] = self.offset_col + + # Gets the valid parameters for ``conf_interval``. + valid_params = ["distribution_col", "offset_col", "conditional_cols", + "quantiles", "quantile_estimation_method", + "sample_size_thresh", "small_sample_size_method", + "small_sample_size_quantile", "min_admissible_value", + "max_admissible_value"] + self.params = {k: v for k, v in self.params.items() if k in valid_params} + # Tries to build conditional features based on time column. if self.time_col is not None and self.time_col in self.train_df.columns: self.train_df = add_time_features_df( @@ -164,18 +177,16 @@ def _check_input(self): raise UncertaintyError( f"The following conditional columns are not found in `train_df`: {cols_not_in_df}." ) + + if self.coverage is None: + self.coverage = self.DEFAULT_COVERAGE # If ``self.coverage`` is given and ``quantiles`` is not given in ``params``, # the coverage is used to calculate quantiles. - if self.coverage is not None: - if self.coverage <= 0 or self.coverage >= 1: - raise UncertaintyError( - f"Coverage must be between 0 and 1, found {self.coverage}" - ) - if self.params is not None: - quantiles = self.params.get("quantiles") - if quantiles is None: - alpha = (1 + self.coverage) / 2 - self.params["quantiles"] = (1 - alpha, alpha) + uncertainty_dict = get_silverkite_uncertainty_dict( + uncertainty=self.uncertainty_dict, + coverage=self.coverage) + self.quantiles = uncertainty_dict["params"]["quantiles"] + self.params["quantiles"] = self.quantiles def fit( self, @@ -223,11 +234,11 @@ def predict( result_df : `pandas.DataFrame` The ``fut_df`` augmented with prediction intervals. """ - fut_df = fut_df.copy() - # Checks ``value_col`` in ``fut_df``. - if self.value_col not in fut_df.columns: + fut_df = fut_df.reset_index(drop=True) + # Checks ``self.offset_col`` in ``fut_df``. + if self.offset_col is not None and self.offset_col not in fut_df.columns: raise UncertaintyError( - f"The value column {self.value_col} is not found in `fut_df`." + f"The offset column {self.offset_col} is not found in `fut_df`." ) # Records the originals columns to be output. output_cols = list(fut_df.columns) @@ -245,28 +256,13 @@ def predict( conti_year_origin=0 # this only affects the ``ct`` columns, which are not expected as conditional cols ) - # If ``PREDICT_COL`` is in the df, - # it will be used instead of ``value_col``. - # The original ``value_col`` will be recorded and appended in the output. - value_col = None - if cst.PREDICTED_COL in fut_df.columns: - if self.value_col in fut_df.columns: - value_col = fut_df[self.value_col] - fut_df[self.value_col] = fut_df[cst.PREDICTED_COL] - # Predict. - pred_df_with_uncertainty = predict_ci( + fut_df = predict_ci( fut_df, self.uncertainty_model) - # Adds uncertainty column to df - pred_df_with_uncertainty.reset_index(drop=True, inplace=True) - fut_df.reset_index(drop=True, inplace=True) - fut_df[f"{self.value_col}_quantile_summary"] = ( - pred_df_with_uncertainty[f"{self.value_col}_quantile_summary"]) - fut_df[cst.ERR_STD_COL] = pred_df_with_uncertainty[cst.ERR_STD_COL] - fut_df[cst.PREDICTED_LOWER_COL] = fut_df[f"{self.value_col}_quantile_summary"].str[0] - fut_df[cst.PREDICTED_UPPER_COL] = fut_df[f"{self.value_col}_quantile_summary"].str[-1] + fut_df[cst.PREDICTED_LOWER_COL] = fut_df[cst.QUANTILE_SUMMARY_COL].str[0] + fut_df[cst.PREDICTED_UPPER_COL] = fut_df[cst.QUANTILE_SUMMARY_COL].str[-1] + self.pred_df = fut_df output_cols += [cst.PREDICTED_LOWER_COL, cst.PREDICTED_UPPER_COL, cst.ERR_STD_COL] - if value_col is not None: - fut_df[self.value_col] = value_col + return fut_df[output_cols] diff --git a/greykite/sklearn/uncertainty/uncertainty_methods.py b/greykite/sklearn/uncertainty/uncertainty_methods.py index 3afa1ba..7882a9e 100644 --- a/greykite/sklearn/uncertainty/uncertainty_methods.py +++ b/greykite/sklearn/uncertainty/uncertainty_methods.py @@ -26,6 +26,7 @@ from typing import Type from greykite.sklearn.uncertainty.base_uncertainty_model import BaseUncertaintyModel +from greykite.sklearn.uncertainty.quantile_regression_uncertainty_model import QuantileRegressionUncertaintyModel from greykite.sklearn.uncertainty.simple_conditional_residuals_model import SimpleConditionalResidualsModel @@ -51,3 +52,9 @@ class UncertaintyMethodEnum(Enum): description="A simple uncertainty method based on conditional residuals." ) """A simple uncertainty method based on conditional residuals.""" + quantile_regression = UncertaintyMethod( + model_class=QuantileRegressionUncertaintyModel, + description="A quantile regression based uncertainty model. " + "Supports fitting on both original values and residuals." + ) + """A quantile regression based uncertainty model. Supports fitting on both original values and residuals.""" diff --git a/greykite/tests/algo/changepoint/adalasso/test_auto_changepoint_params.py b/greykite/tests/algo/changepoint/adalasso/test_auto_changepoint_params.py new file mode 100644 index 0000000..8261093 --- /dev/null +++ b/greykite/tests/algo/changepoint/adalasso/test_auto_changepoint_params.py @@ -0,0 +1,336 @@ +from datetime import timedelta + +import pytest + +from greykite.algo.changepoint.adalasso.auto_changepoint_params import generate_trend_changepoint_detection_params +from greykite.algo.changepoint.adalasso.auto_changepoint_params import get_actual_changepoint_min_distance +from greykite.algo.changepoint.adalasso.auto_changepoint_params import get_changepoint_resample_freq +from greykite.algo.changepoint.adalasso.auto_changepoint_params import get_no_changepoint_distance_from_end +from greykite.algo.changepoint.adalasso.auto_changepoint_params import get_potential_changepoint_n +from greykite.algo.changepoint.adalasso.auto_changepoint_params import get_regularization_strength +from greykite.algo.changepoint.adalasso.auto_changepoint_params import get_yearly_seasonality_order +from greykite.algo.changepoint.adalasso.changepoint_detector import ChangepointDetector +from greykite.common.constants import TIME_COL +from greykite.common.constants import VALUE_COL +from greykite.common.testing_utils import generate_df_for_tests + + +@pytest.fixture +def df_hourly(): + """Hourly data.""" + df = generate_df_for_tests( + freq="H", + periods=24*365 + ) + return df + + +@pytest.fixture +def df_daily(): + """Daily data.""" + df = generate_df_for_tests( + freq="D", + periods=365*2 + ) + return df + + +@pytest.fixture +def df_weekly(): + """Weekly data.""" + df = generate_df_for_tests( + freq="W", + periods=52*3 + ) + return df + + +@pytest.fixture +def df_monthly(): + """Monthly data.""" + df = generate_df_for_tests( + freq="MS", + periods=12*6 + ) + return df + + +def test_get_changepoint_resample_freq(): + """Tests get changepoint resample frequency.""" + # Hourly data. + resample_freq = get_changepoint_resample_freq( + n_points=24*365, + min_increment=timedelta(hours=1) + ) + assert resample_freq == "3D" + + # Daily data. + resample_freq = get_changepoint_resample_freq( + n_points=365 * 2, + min_increment=timedelta(days=1) + ) + assert resample_freq == "7D" + + # Weekly data. + resample_freq = get_changepoint_resample_freq( + n_points=52 * 2, + min_increment=timedelta(days=7) + ) + assert resample_freq is None + + # Override ``min_num_points_after_agg``. + resample_freq = get_changepoint_resample_freq( + n_points=365, + min_increment=timedelta(days=1), + min_num_points_after_agg=200 + ) + assert resample_freq == "D" + + # Override ``min_num_points_after_agg``. + resample_freq = get_changepoint_resample_freq( + n_points=365, + min_increment=timedelta(days=1), + min_num_points_after_agg=50 + ) + assert resample_freq == "7D" + + +def test_get_yearly_seasonality_order(df_daily): + """Tests get yearly seasonality order.""" + yearly_seasonality_order = get_yearly_seasonality_order( + df=df_daily["df"], + time_col=TIME_COL, + value_col=VALUE_COL, + resample_freq="7D" + ) + assert yearly_seasonality_order == 3 + + +def test_get_potential_changepoint_n(): + """Tests get number of potential changepoints.""" + # Hourly data. + n_changepoints = get_potential_changepoint_n( + n_points=24*365, + total_increment=timedelta(days=365), + resample_freq="3D", + yearly_seasonality_order=3, + cap=200 + ) + assert n_changepoints == 114 + + # Daily data. + n_changepoints = get_potential_changepoint_n( + n_points=365 * 2, + total_increment=timedelta(days=365 * 2), + resample_freq="7D", + yearly_seasonality_order=15, + cap=100 + ) + assert n_changepoints == 73 + + # Monthly data. + n_changepoints = get_potential_changepoint_n( + n_points=12 * 5, + total_increment=timedelta(days=365 * 5 + 1), + resample_freq=None, + yearly_seasonality_order=15, + cap=100 + ) + assert n_changepoints == 29 + + # Tests cap. + n_changepoints = get_potential_changepoint_n( + n_points=12 * 5, + total_increment=timedelta(days=365 * 5 + 1), + resample_freq=None, + yearly_seasonality_order=15, + cap=20 + ) + assert n_changepoints == 20 + + +def test_get_no_changepoint_distance_from_end(): + """Tests get the distance for the end where no changepoints are placed.""" + # Hourly data. + distance = get_no_changepoint_distance_from_end( + min_increment=timedelta(hours=1), + forecast_horizon=12 + ) + assert distance == "14D" + distance = get_no_changepoint_distance_from_end( + min_increment=timedelta(hours=1), + forecast_horizon=24 * 7 + ) + assert distance == "28D" + + # Daily data. + distance = get_no_changepoint_distance_from_end( + min_increment=timedelta(days=1), + forecast_horizon=1 + ) + assert distance == "30D" + distance = get_no_changepoint_distance_from_end( + min_increment=timedelta(days=1), + forecast_horizon=14 + ) + assert distance == "56D" + + # Weekly data. + distance = get_no_changepoint_distance_from_end( + min_increment=timedelta(days=7), + forecast_horizon=2 + ) + assert distance == "56D" + distance = get_no_changepoint_distance_from_end( + min_increment=timedelta(days=7), + forecast_horizon=4 + ) + assert distance == "112D" + + # Monthly data. + distance = get_no_changepoint_distance_from_end( + min_increment=timedelta(days=28), + forecast_horizon=3 + ) + assert distance == "252D" + + # Yearly data. + distance = get_no_changepoint_distance_from_end( + min_increment=timedelta(days=365), + forecast_horizon=2 + ) + assert distance == "1460D" + + +def test_get_actual_changepoint_min_distance(): + """Tests get minimum distance between actual changepoints.""" + # Hourly data. + distance = get_actual_changepoint_min_distance( + min_increment=timedelta(hours=1) + ) + assert distance == "14D" + + # Daily data. + distance = get_actual_changepoint_min_distance( + min_increment=timedelta(days=1) + ) + assert distance == "30D" + + # Weekly data. + distance = get_actual_changepoint_min_distance( + min_increment=timedelta(days=7) + ) + assert distance == "30D" + + # Monthly data. + distance = get_actual_changepoint_min_distance( + min_increment=timedelta(days=28) + ) + assert distance == "56D" + + # Yearly data. + distance = get_actual_changepoint_min_distance( + min_increment=timedelta(days=365) + ) + assert distance == "730D" + + +def test_get_regularization_strength(): + """Tests get regularization strength.""" + regularization = get_regularization_strength() + assert regularization == 0.6 + + +def test_generate_trend_changepoint_detection_params(df_hourly, df_daily, df_weekly, df_monthly): + """Tests the overall parameter generation.""" + # Hourly data. + params = generate_trend_changepoint_detection_params( + df=df_hourly["df"], + forecast_horizon=24 + ) + assert params == dict( + yearly_seasonality_order=3, + resample_freq="3D", + regularization_strength=0.6, + actual_changepoint_min_distance="14D", + potential_changepoint_n=100, + no_changepoint_distance_from_end="14D" + ) + + # Daily data. + params = generate_trend_changepoint_detection_params( + df=df_daily["df"], + forecast_horizon=7 + ) + assert params == dict( + yearly_seasonality_order=3, + resample_freq="7D", + regularization_strength=0.6, + actual_changepoint_min_distance="30D", + potential_changepoint_n=97, + no_changepoint_distance_from_end="30D" + ) + + # Weekly data. + params = generate_trend_changepoint_detection_params( + df=df_weekly["df"], + forecast_horizon=2 + ) + assert params == dict( + yearly_seasonality_order=1, + resample_freq=None, + regularization_strength=0.6, + actual_changepoint_min_distance="30D", + potential_changepoint_n=100, + no_changepoint_distance_from_end="56D" + ) + + # Monthly data. + params = generate_trend_changepoint_detection_params( + df=df_monthly["df"], + forecast_horizon=3 + ) + assert params == dict( + yearly_seasonality_order=1, + resample_freq=None, + regularization_strength=0.6, + actual_changepoint_min_distance="56D", + potential_changepoint_n=69, + no_changepoint_distance_from_end="252D" + ) + + # No changepoints because data is too short. + params = generate_trend_changepoint_detection_params( + df=df_daily["df"].iloc[:60], + forecast_horizon=1 + ) + assert params is None + + +def test_changepoint_detection(df_daily, df_weekly): + """Tests changepoint detection with the auto generated parameters.""" + # Daily data. + params = generate_trend_changepoint_detection_params( + df=df_daily["df"], + forecast_horizon=7 + ) + cd = ChangepointDetector() + cd.find_trend_changepoints( + df=df_daily["df"], + time_col=TIME_COL, + value_col=VALUE_COL, + **params + ) + + # Weekly data. + params = generate_trend_changepoint_detection_params( + df=df_weekly["df"], + forecast_horizon=7 + ) + cd = ChangepointDetector() + cd.find_trend_changepoints( + df=df_weekly["df"], + time_col=TIME_COL, + value_col=VALUE_COL, + **params + ) diff --git a/greykite/tests/algo/changepoint/adalasso/test_changepoint_detector.py b/greykite/tests/algo/changepoint/adalasso/test_changepoint_detector.py index 6ab2a2c..4b226b5 100644 --- a/greykite/tests/algo/changepoint/adalasso/test_changepoint_detector.py +++ b/greykite/tests/algo/changepoint/adalasso/test_changepoint_detector.py @@ -5,11 +5,13 @@ import pytest from pandas.tseries.frequencies import to_offset from sklearn.base import RegressorMixin +from testfixtures import LogCapture from greykite.algo.changepoint.adalasso.changepoint_detector import ChangepointDetector from greykite.algo.changepoint.adalasso.changepoint_detector import get_changepoints_dict from greykite.algo.changepoint.adalasso.changepoint_detector import get_seasonality_changepoints from greykite.common.data_loader import DataLoader +from greykite.common.logging import LOGGER_NAME from greykite.common.testing_utils import generate_df_for_tests from greykite.common.testing_utils import generate_test_changepoint_df @@ -309,6 +311,32 @@ def test_find_trend_changepoints(hourly_data): assert model.trend_df.shape[1] > 100 + 1 + 8 * 2 # checks extra columns are created for varying yearly seasonality +def test_find_trend_changepoints_slow(hourly_data): + """Tests the trend changepoint detection when fast trend estimation is turned off.""" + dl = DataLoader() + df_pt = dl.load_peyton_manning() + + model = ChangepointDetector() + model.find_trend_changepoints( + df=df_pt, + time_col="ts", + value_col="y", + fast_trend_estimation=False + ) + assert isinstance(model.trend_model, RegressorMixin) + assert model.trend_model.coef_.shape[0] == 100 + 1 + 8 * 2 + assert model.trend_coef.shape[0] == 100 + 1 + 8 * 2 + assert model.trend_intercept is not None + assert model.trend_changepoints is not None + assert model.trend_potential_changepoint_n == 100 + assert model.trend_df.shape[1] == 100 + 1 + 8 * 2 + assert model.original_df.shape == df_pt.shape + assert model.time_col is not None + assert model.value_col is not None + assert model.adaptive_lasso_coef[1].shape[0] == 100 + 1 + 8 * 2 + assert model.y.index[0] not in model.trend_changepoints + + def test_find_seasonality_changepoints(hourly_data): df = hourly_data["df"] dl = DataLoader() @@ -348,9 +376,9 @@ def test_find_seasonality_changepoints(hourly_data): df=df_pt, time_col="ts", value_col="y", - regularization_strength=0.1 + regularization_strength=0.0 ) - # ``regularization_strength`` between 0 and 1 indicates at least one change point + # ``regularization_strength`` equals 0 indicates at least one change point assert any([model.seasonality_changepoints[key] != [] for key in model.seasonality_changepoints.keys()]) # test `no_changepoint_distance_from_end` with the Peyton Manning data model = ChangepointDetector() @@ -718,3 +746,27 @@ def test_nan(): time_col="ts", value_col="y" ) + + +def test_capping_potential_changepoints(): + df = pd.DataFrame({ + "ts": pd.date_range(start="2020-01-01", periods=366, freq="D"), + "y": np.random.randn(366) + }) + with LogCapture(LOGGER_NAME) as log_capture: + cd = ChangepointDetector() + cd.find_trend_changepoints( + df=df, + time_col="ts", + value_col="y", + resample_freq="D", + potential_changepoint_distance="D", + potential_changepoint_n_max=100 + ) + log_capture.check_present(( + LOGGER_NAME, + "INFO", + f"Number of potential changepoints is capped by 'potential_changepoint_n_max' " + f"as 100. The 'potential_changepoint_distance' D is ignored. " + f"The original number of changepoints was 365." + )) diff --git a/greykite/tests/algo/common/test_col_name_utils.py b/greykite/tests/algo/common/test_col_name_utils.py index 6fd4cf3..5ccd7b8 100644 --- a/greykite/tests/algo/common/test_col_name_utils.py +++ b/greykite/tests/algo/common/test_col_name_utils.py @@ -119,7 +119,10 @@ def test_create_pred_category(): "C(Q('events_Chinese New Year'), levels=['', 'event'])[T.event]", "x"] extra_pred_cols = ["x"] - pred_category = create_pred_category(pred_cols, extra_pred_cols) + pred_category = create_pred_category( + pred_cols, + extra_pred_cols, + df_cols=["ts", "y", "x"]) expected_pred_category = { "intercept": ["Intercept"], "time_features": ["ct1", "ct1:sin1_toy_yearly"], @@ -133,6 +136,37 @@ def test_create_pred_category(): assert pred_category == expected_pred_category +def test_create_pred_category_regressor(): + """Tests regressors are classified into the correct category, + even their names matches some specific patterns such as "cp" or "lag". + """ + pred_cols = ["Intercept", + "ct1", + "sin1_toy_yearly", + "y_lag7", + "ct1:sin1_toy_yearly", + "C(Q('events_Chinese New Year'), levels=['', 'event'])[T.event]", + "x", + "weather_wghtd_avg_cld_cvr_tot_pct_max_mid", + "media_total_spend_lag4"] + extra_pred_cols = ["x", "weather_wghtd_avg_cld_cvr_tot_pct_max_mid", "media_total_spend_lag4"] + pred_category = create_pred_category( + pred_cols, + extra_pred_cols, + df_cols=["ts", "y", "x", "weather_wghtd_avg_cld_cvr_tot_pct_max_mid", "media_total_spend_lag4"]) + expected_pred_category = { + "intercept": ["Intercept"], + "time_features": ["ct1", "ct1:sin1_toy_yearly"], + "event_features": ["C(Q('events_Chinese New Year'), levels=['', 'event'])[T.event]"], + "trend_features": ["ct1", "ct1:sin1_toy_yearly"], + "seasonality_features": ["sin1_toy_yearly", "ct1:sin1_toy_yearly"], + "lag_features": ["y_lag7"], + "regressor_features": ["x", "weather_wghtd_avg_cld_cvr_tot_pct_max_mid", "media_total_spend_lag4"], + "interaction_features": ["ct1:sin1_toy_yearly"] + } + assert pred_category == expected_pred_category + + def test_filter_coef_summary(): coef_summary = pd.DataFrame({ "Pred_col": [ @@ -144,7 +178,7 @@ def test_filter_coef_summary(): "C(Q('events_Chinese New Year'), levels=['', 'event'])[T.event]", "x" ]}) - pred_category = create_pred_category(coef_summary["Pred_col"].tolist(), []) + pred_category = create_pred_category(coef_summary["Pred_col"].tolist(), [], ["ts", "y"]) x = filter_coef_summary( coef_summary=coef_summary, pred_category=pred_category, diff --git a/greykite/tests/algo/common/test_holiday_inferrer.py b/greykite/tests/algo/common/test_holiday_inferrer.py new file mode 100644 index 0000000..9451bfa --- /dev/null +++ b/greykite/tests/algo/common/test_holiday_inferrer.py @@ -0,0 +1,434 @@ +import numpy as np +import pandas as pd +import pytest +from holidays_ext.get_holidays import get_holiday_df +from testfixtures import LogCapture + +from greykite.algo.common.holiday_inferrer import HolidayInferrer +from greykite.common.constants import EVENT_DF_DATE_COL +from greykite.common.constants import EVENT_DF_LABEL_COL +from greykite.common.constants import TIME_COL +from greykite.common.constants import VALUE_COL +from greykite.common.data_loader import DataLoader +from greykite.common.logging import LOGGER_NAME + + +@pytest.fixture +def daily_df(): + df = DataLoader().load_peyton_manning() + df[TIME_COL] = pd.to_datetime(df[TIME_COL]) + return df + + +def test_init(): + """Tests instantiation.""" + hi = HolidayInferrer() + assert hi.baseline_offsets is None + assert hi.post_search_days is None + assert hi.pre_search_days is None + assert hi.independent_holiday_thres is None + assert hi.together_holiday_thres is None + assert hi.df is None + assert hi.time_col is None + assert hi.value_col is None + assert hi.year_start is None + assert hi.year_end is None + assert hi.ts is None + assert hi.country_holiday_df is None + assert hi.holidays is None + assert hi.score_result is None + assert hi.score_result_avg is None + assert hi.result is None + + +def test_inferrer_super_daily_data(): + """Tests holiday infer for super daily data.""" + df = pd.DataFrame({ + TIME_COL: pd.date_range("2020-01-01", freq="W", periods=100), + VALUE_COL: list(range(100)) + }) + with LogCapture(LOGGER_NAME) as log_capture: + hi = HolidayInferrer() + result = hi.infer_holidays( + df=df + ) + # Parameters are set as default. + assert hi.baseline_offsets == (-7, 7) + assert hi.post_search_days == 2 + assert hi.pre_search_days == 2 + assert hi.independent_holiday_thres == 0.8 + assert hi.together_holiday_thres == 0.99 + # Super daily data do not have holidays. + log_capture.check_present(( + LOGGER_NAME, + "INFO", + "Data frequency is greater than daily, " + "holiday inferring is skipped." + )) + assert result is None + + +def test_infer_daily_data(daily_df): + """Tests on daily data.""" + hi = HolidayInferrer() + result = hi.infer_holidays( + df=daily_df, + plot=True + ) + # Checks result. + assert len(result["scores"]) == 50 + assert sorted(result["independent_holidays"]) == sorted([ + ('US', 'Labor Day_+0'), + ('US', 'Labor Day_-1'), + ('US', 'Christmas Day_+0'), + ('US', 'Martin Luther King Jr. Day_+0'), + ('US', "Washington's Birthday_-1"), + ('US', 'Thanksgiving_-2'), + ('US', "Washington's Birthday_+1"), + ('US', 'Veterans Day_-2'), + ('US', "Washington's Birthday_+2"), + ('US', 'Christmas Day_+1'), + ('US', "New Year's Day_+1"), + ('US', 'Memorial Day_+0'), + ('US', 'Veterans Day_+0'), + ('US', 'Veterans Day_-1'), + ('US', "Washington's Birthday_-2"), + ('US', 'Thanksgiving_-1'), + ('US', 'Labor Day_-2'), + ('US', 'Columbus Day_+0'), + ('US', 'Memorial Day_+1'), + ('US', 'Labor Day_+1'), + ('US', "New Year's Day_+0"), + ('US', 'Martin Luther King Jr. Day_-1'), + ('US', 'Independence Day_-2'), + ('US', 'Christmas Day_-1'), + ('US', 'Independence Day_-1'), + ]) + + assert sorted(result["together_holidays_positive"]) == sorted([ + ('US', 'Martin Luther King Jr. Day_+1'), + ('US', 'Martin Luther King Jr. Day_+2'), + ('US', 'Labor Day_+2'), + ('US', 'Thanksgiving_+1'), + ('US', 'Memorial Day_+2'), + ('US', "New Year's Day_-1"), + ('US', "New Year's Day_-2"), + ('US', "New Year's Day_+2") + ]) + + assert sorted(result["together_holidays_negative"]) == sorted([ + ('US', 'Independence Day_+1'), + ('US', 'Independence Day_+0'), + ('US', 'Columbus Day_+1'), + ('US', 'Martin Luther King Jr. Day_-2'), + ('US', 'Veterans Day_+2'), + ('US', 'Memorial Day_-2'), + ('US', 'Memorial Day_-1'), + ('US', 'Columbus Day_-2'), + ('US', 'Columbus Day_+2'), + ('US', 'Christmas Day_-2'), + ('US', 'Christmas Day_+2'), + ('US', 'Independence Day_+2'), + ]) + + assert len(result["fig"].data) == 6 + # Checks attributes. + assert hi.df is not None + assert hi.time_col == TIME_COL + assert hi.value_col == VALUE_COL + assert hi.year_start == 2007 + assert hi.year_end == 2016 + assert len(hi.ts) == len(hi.df) + assert hi.country_holiday_df is not None + assert len(hi.holidays) == 10 + assert len(hi.score_result) == 50 + assert len(hi.score_result_avg) == 50 + assert hi.result == result + + +def test_daily_data_diff_params(daily_df): + """Tests daily data with different parameters.""" + hi = HolidayInferrer() + result = hi.infer_holidays( + df=daily_df, + plot=True, + countries=["US", "UK", "India"], + pre_search_days=3, + post_search_days=0, + baseline_offsets=[-14, -7, 7, 14], + independent_holiday_thres=0.6, + together_holiday_thres=0.8 + ) + # Checks result. + assert len(result["scores"]) == 196 + assert "US_Christmas Day_+0" in result["scores"] + assert "US_New Year's Day_-3" in result["scores"] + assert "India_All Saints Day_-1" in result["scores"] + assert len(result["fig"].data) == 5 + assert len(result["independent_holidays"]) == 104 + assert len(result["together_holidays_positive"]) == 10 + assert len(result["together_holidays_negative"]) == 9 + # Checks attributes. + assert hi.df is not None + assert hi.time_col == TIME_COL + assert hi.value_col == VALUE_COL + assert hi.year_start == 2007 + assert hi.year_end == 2016 + assert len(hi.ts) == len(hi.df) + assert hi.country_holiday_df is not None + assert len(hi.holidays) == 49 + assert len(hi.score_result) == 196 + assert len(hi.score_result_avg) == 196 + assert hi.result == result + + +def test_sub_daily_data(): + """Tests on sub daily data.""" + np.random.seed(123) + df = pd.DataFrame({ + TIME_COL: pd.date_range("2020-01-01", freq="H", periods=24 * 365), + VALUE_COL: list(range(24 * 365)) + np.random.randn(24 * 365) + }) + hi = HolidayInferrer() + result = hi.infer_holidays( + df=df, + plot=True + ) + # Checks result. + assert len(result["scores"]) == 55 + assert len(result["fig"].data) == 6 + assert len(result["independent_holidays"]) == 7 + assert len(result["together_holidays_negative"]) == 0 + assert len(result["together_holidays_positive"]) == 1 + # Checks attributes. + assert hi.df is not None + assert hi.time_col == TIME_COL + assert hi.value_col == VALUE_COL + assert hi.year_start == 2020 + assert hi.year_end == 2020 + assert len(hi.ts) == len(hi.df) + assert hi.country_holiday_df is not None + assert len(hi.holidays) == 11 + assert len(hi.score_result) == 55 + assert len(hi.score_result_avg) == 55 + assert hi.result == result + + +def test_errors(daily_df): + """Tests errors.""" + hi = HolidayInferrer() + with pytest.raises( + ValueError, + match="Both 'post_search_days' and 'pre_search_days' must be non-negative integers."): + hi.infer_holidays( + df=daily_df, + post_search_days=-1 + ) + with pytest.raises( + ValueError, + match="Both 'independent_holiday_thres' and 'together_holiday_thres' must be between " + "0 and 1 \\(inclusive\\)."): + hi.infer_holidays( + df=daily_df, + independent_holiday_thres=80 + ) + + +def test_transform_holiday_country(): + """Tests the transformations between country-holiday strings and country-holiday tuples.""" + hi = HolidayInferrer() + holiday_country_strs = ["US_Christmas Day", "UK_New Year's Day", "France_Thanksgiving"] + holiday_country_tuples = [ + ("US", "Christmas Day"), + ("UK", "New Year's Day"), + ("France", "Thanksgiving") + ] + assert hi._transform_country_holidays(holiday_country_strs) == holiday_country_tuples + assert hi._transform_country_holidays(holiday_country_tuples) == holiday_country_strs + + +def test_get_scores(): + """Tests the scoring functions.""" + hi = HolidayInferrer() + # Different values on christmas/New year. + df = pd.DataFrame({ + "ts": pd.date_range("2020-12-01", freq="D", periods=40), + "y": [1] * 22 + [2, 3, 4, 3, 2, 1, 1, 2, 3, 4, 3, 2] + [1] * 6 + }) + result = hi.infer_holidays(df=df) + assert result["scores"]["US_Christmas Day_-2"] == [0.5] + assert result["scores"]["US_Christmas Day_-1"] == [1.0] + assert result["scores"]["US_Christmas Day_+0"] == [1.5] + assert result["scores"]["US_Christmas Day_+1"] == [1.0] + assert result["scores"]["US_Christmas Day_+2"] == [0.5] + assert result["scores"]["US_New Year's Day_-2"] == [0.5] + assert result["scores"]["US_New Year's Day_-1"] == [1.0] + assert result["scores"]["US_New Year's Day_+0"] == [1.5] + assert result["scores"]["US_New Year's Day_+1"] == [1.0] + assert result["scores"]["US_New Year's Day_+2"] == [0.0] + + +def test_remove_observed(): + """Tests the observed holidays are accurately renamed + and the corresponding original holidays are removed.""" + df = pd.DataFrame({ + "ts": pd.date_range("2020-01-01", freq="D", periods=731), + "y": 1 + }) + # 5 observed holidays are removed. + country_holiday_df = get_holiday_df(country_list=["US"], years=[2020, 2021, 2022]) + assert len(country_holiday_df) == 39 + hi = HolidayInferrer() + hi.infer_holidays(df=df) + assert len(hi.country_holiday_df) == 32 + # Tests the correctness of observed holiday removal. + # 2020-07-03 is the observed Independence Day for 2022-07-04. + assert hi.country_holiday_df[ + hi.country_holiday_df["ts"] == pd.Timestamp("2020-07-03")]["holiday"].values == "Independence Day" + assert len(hi.country_holiday_df[hi.country_holiday_df["ts"] == pd.Timestamp("2020-07-04")]["holiday"]) == 0 + # 2021-07-05 is the observed Independence Day for 2022-07-04. + assert hi.country_holiday_df[ + hi.country_holiday_df["ts"] == pd.Timestamp("2021-07-05")]["holiday"].values == "Independence Day" + assert len(hi.country_holiday_df[hi.country_holiday_df["ts"] == pd.Timestamp("2021-07-04")]["holiday"]) == 0 + # 2021-12-24 is the observed Christmas Day for 2021-12-25. + assert hi.country_holiday_df[ + hi.country_holiday_df["ts"] == pd.Timestamp("2021-12-24")]["holiday"].values == "Christmas Day" + assert len(hi.country_holiday_df[hi.country_holiday_df["ts"] == pd.Timestamp("2021-12-25")]["holiday"]) == 0 + # 2021-12-31 is the observed New Year's Day for 2022-01-01. + assert hi.country_holiday_df[ + hi.country_holiday_df["ts"] == pd.Timestamp("2021-12-31")]["holiday"].values == "New Year's Day" + assert len(hi.country_holiday_df[hi.country_holiday_df["ts"] == pd.Timestamp("2022-01-01")]["holiday"]) == 0 + # 2022-12-26 is the observed Christmas Day for 2022-12-25. + assert hi.country_holiday_df[ + hi.country_holiday_df["ts"] == pd.Timestamp("2022-12-26")]["holiday"].values == "Christmas Day" + assert len(hi.country_holiday_df[hi.country_holiday_df["ts"] == pd.Timestamp("2022-12-25")]["holiday"]) == 0 + + +def test_cum_effect(daily_df): + """Tests the cum effect satisfies the thresholds.""" + hi = HolidayInferrer() + result = hi.infer_holidays(df=daily_df) + cum_effects = np.nansum(np.abs(list(hi.score_result_avg.values()))) + # Independent holidays. + # Before adding the last one, the effect should be less than the threshold. + # After adding the last one, the effect should exceed the threshold. + ind_effects = [hi.score_result_avg[hi._transform_country_holidays([h])[0]] for h in result["independent_holidays"]] + independent_holiday_effects = np.nansum(np.abs(ind_effects)) + independent_holiday_effects_minus_1 = independent_holiday_effects - min([abs(x) for x in ind_effects]) + assert independent_holiday_effects_minus_1 / cum_effects < hi.independent_holiday_thres + assert independent_holiday_effects / cum_effects >= hi.independent_holiday_thres + # Together holidays. + # Before adding the last one, the effect should be less than the threshold. + # After adding the last one, the effect should exceed the threshold. + tog_effects = [hi.score_result_avg[hi._transform_country_holidays([h])[0]] + for h in result["together_holidays_positive"] + result["together_holidays_negative"]] + together_holiday_effects = independent_holiday_effects + np.nansum(np.abs(tog_effects)) + together_holiday_effects_minus_1 = together_holiday_effects - min([abs(x) for x in tog_effects]) + assert together_holiday_effects_minus_1 / cum_effects < hi.together_holiday_thres + assert together_holiday_effects / cum_effects >= hi.together_holiday_thres + + +def test_get_single_event_df(): + """Tests get a single event df from a single holiday.""" + holiday1 = ("US", "Christmas Day_-2") + holiday2 = ("US", "Christmas Day_+0") + holiday3 = ("US", "Christmas Day_+1") + hi = HolidayInferrer() + hi.infer_holidays( + df=pd.DataFrame({ + TIME_COL: pd.date_range("2020-01-01", freq="D", periods=731), + VALUE_COL: 1 + }) + ) + df1 = hi._get_event_df_for_single_event( + holiday=holiday1, + country_holiday_df=hi.country_holiday_df + ) + df2 = hi._get_event_df_for_single_event( + holiday=holiday2, + country_holiday_df=hi.country_holiday_df + ) + df3 = hi._get_event_df_for_single_event( + holiday=holiday3, + country_holiday_df=hi.country_holiday_df + ) + assert df1.equals(pd.DataFrame({ + EVENT_DF_DATE_COL: pd.to_datetime(["2020-12-23", "2021-12-22", "2022-12-24"]), + EVENT_DF_LABEL_COL: "US_Christmas Day_minus_2" + })) + assert df2.equals(pd.DataFrame({ + EVENT_DF_DATE_COL: pd.to_datetime(["2020-12-25", "2021-12-24", "2022-12-26"]), + EVENT_DF_LABEL_COL: "US_Christmas Day" + })) + assert df3.equals(pd.DataFrame({ + EVENT_DF_DATE_COL: pd.to_datetime(["2020-12-26", "2021-12-25", "2022-12-27"]), + EVENT_DF_LABEL_COL: "US_Christmas Day_plus_1" + })) + + +def test_get_daily_event_dict(daily_df): + """Tests get the daily event dict for all holidays.""" + hi = HolidayInferrer() + + # Can not call without inferring holidays or passing parameters manually. + with pytest.raises( + ValueError, + match="Both 'country_holiday_df' and 'holidays' must be given. " + "Alternatively, you can run 'infer_holidays' first and " + "they will be pulled automatically."): + hi.generate_daily_event_dict() + + # Infers holidays and call. + hi.infer_holidays(df=daily_df) + daily_event_dict = hi.generate_daily_event_dict() + assert len(daily_event_dict) == 27 + assert "Holiday_positive_group" in daily_event_dict + assert "Holiday_negative_group" in daily_event_dict + # Every single holiday should cover 11 years. + for holiday, df in daily_event_dict.items(): + if holiday not in ["Holiday_positive_group", "Holiday_negative_group"]: + assert df.shape[0] == 11 + + # With customized input. + country_holiday_df = get_holiday_df( + country_list=["US"], + years=[2015, 2016] + ) + holidays = { + "independent_holidays": [ + ("US", "Christmas Day_+0"), + ("US", "New Year's Day_-1") + ], + "together_holidays_negative": [ + ("US", "Memorial Day_+2"), + ("US", "Labor Day_+0") + ], + "together_holidays_positive": [] + } + daily_event_dict = hi.generate_daily_event_dict( + country_holiday_df=country_holiday_df, + holiday_result=holidays + ) + assert len(daily_event_dict) == 3 + assert "US_Christmas Day" in daily_event_dict + assert "US_New Years Day_minus_1" in daily_event_dict + assert "Holiday_negative_group" in daily_event_dict + assert "Holiday_positive_group" not in daily_event_dict + assert daily_event_dict["US_Christmas Day"].equals( + pd.DataFrame({ + EVENT_DF_DATE_COL: pd.to_datetime(["2016-12-25", "2015-12-25"]), + EVENT_DF_LABEL_COL: "US_Christmas Day" + }) + ) + assert daily_event_dict["US_New Years Day_minus_1"].equals( + pd.DataFrame({ + EVENT_DF_DATE_COL: pd.to_datetime(["2015-12-31", "2014-12-31"]), + EVENT_DF_LABEL_COL: "US_New Years Day_minus_1" + }) + ) + assert daily_event_dict["Holiday_negative_group"].equals( + pd.DataFrame({ + EVENT_DF_DATE_COL: pd.to_datetime(["2016-06-01", "2015-05-27", "2016-09-05", "2015-09-07"]), + EVENT_DF_LABEL_COL: "event" + }) + ) diff --git a/greykite/tests/algo/common/test_l1_quantile_regression.py b/greykite/tests/algo/common/test_l1_quantile_regression.py new file mode 100644 index 0000000..ceaa4e2 --- /dev/null +++ b/greykite/tests/algo/common/test_l1_quantile_regression.py @@ -0,0 +1,157 @@ +"""Tests the L1 norm regularized quantile regression.""" + +import numpy as np +import pytest +from testfixtures import LogCapture + +from greykite.algo.common.l1_quantile_regression import QuantileRegression +from greykite.algo.common.l1_quantile_regression import l1_quantile_regression +from greykite.algo.common.l1_quantile_regression import ordinary_quantile_regression +from greykite.common.logging import LOGGER_NAME + + +@pytest.fixture +def data(): + """Sample data for regression.""" + np.random.seed(123) + x = np.random.randn(200, 20) + beta = np.array([50] * 18 + [0] * 2) + alpha = np.random.randn(1) + y = x @ beta + alpha + np.random.randn(200) + return { + "x": x, + "y": y + } + + +def test_ordinary_quantile_regression(data): + """Tests ordinary quantile regression.""" + coef = ordinary_quantile_regression( + x=np.concatenate([data["x"], np.ones([len(data["x"]), 1])], axis=1), + y=data["y"], + q=0.1, + sample_weight=np.ones(len(data["y"])), + max_iter=200, + tol=1e-3 + ) + pred = np.concatenate([data["x"], np.ones([len(data["x"]), 1])], axis=1) @ coef + coef1 = ordinary_quantile_regression( + x=np.concatenate([data["x"], np.ones([len(data["x"]), 1])], axis=1), + y=data["y"], + q=0.9, + sample_weight=np.ones(len(data["y"])), + max_iter=200, + tol=1e-3 + ) + pred1 = np.concatenate([data["x"], np.ones([len(data["x"]), 1])], axis=1) @ coef1 + assert all(pred1 > pred) + + +def test_l1_quantile_regression(data): + """Tests L1 norm regularized quantile regression.""" + coef = l1_quantile_regression( + x=data["x"], + y=data["y"], + q=0.1, + alpha=1, + sample_weight=np.ones(len(data["y"])), + feature_weight=np.ones(data["x"].shape[1]), + include_intercept=True + ) + pred = data["x"] @ coef["coef"] + coef["intercept"] + coef1 = l1_quantile_regression( + x=data["x"], + y=data["y"], + q=0.9, + alpha=1, + sample_weight=np.ones(len(data["y"])), + feature_weight=np.ones(data["x"].shape[1]), + include_intercept=True + ) + pred1 = data["x"] @ coef1["coef"] + coef1["intercept"] + assert all(pred1 > pred) + + +def test_quantile_regression_init(): + """Tests the QuantileRegression class instantiating.""" + qr = QuantileRegression() + assert qr.quantile == 0.9 + assert qr.alpha == 0.001 + assert qr.sample_weight is None + assert qr.feature_weight is None + assert qr.max_iter == 100 + assert qr.tol == 1e-2 + assert qr.fit_intercept is True + assert qr.n is None + assert qr.p is None + assert qr.constant_cols is None + assert qr.nonconstant_cols is None + assert qr.intercept_ is None + assert qr.coef_ is None + + +def test_quantile_regression_fit_predict_ordinary(data): + """Tests fitting quantile regression fit and predict with no alpha.""" + qr = QuantileRegression(alpha=0) + qr.fit(data["x"], data["y"]) + pred = qr.predict(data["x"]) + assert round(sum(pred > data["y"]) / len(data["y"]), 1) == 0.9 + + +def test_quantile_regression_fit_predict_l1(data): + """Tests fitting quantile regression fit and predict with alpha.""" + qr = QuantileRegression(alpha=0.1) + qr.fit(data["x"], data["y"]) + pred = qr.predict(data["x"]) + assert round(sum(pred > data["y"]) / len(data["y"]), 1) == 0.9 + + +def test_errors(data): + """Tests errors.""" + # y is not a column vector. + with LogCapture(LOGGER_NAME) as log_capture: + qr = QuantileRegression() + qr.fit(data["x"], data["y"].reshape(-1, 1)) + log_capture.check_present(( + LOGGER_NAME, + "WARNING", + "A column-vector y was passed when a 1d array was expected. " + "Please change the shape of y to (n_samples,), " + "for example using ravel()." + )) + # Shapes of x and y do not match. + with pytest.raises( + ValueError, + match="The shapes of x and y do not match. "): + qr = QuantileRegression() + qr.fit(data["x"], data["y"][:5]) + # Quantile not in range. + with pytest.raises( + ValueError, + match="Quantile q must be between 0.0 and 1.0,"): + qr = QuantileRegression(quantile=-0.1) + qr.fit(data["x"], data["y"]) + # Sample weight length wrong. + with pytest.raises( + ValueError, + match="The length of sample weight must match the number of observations"): + qr = QuantileRegression(sample_weight=[1, 2]) + qr.fit(data["x"], data["y"]) + # Feature weight length wrong. + with pytest.raises( + ValueError, + match="The length of feature weight must match the number of features"): + qr = QuantileRegression(feature_weight=[1, 2]) + qr.fit(data["x"], data["y"]) + # Max iterations not in range. + with pytest.raises( + ValueError, + match="max_iter must be a positive integer,"): + qr = QuantileRegression(max_iter=0) + qr.fit(data["x"], data["y"]) + # Tolerance not in range. + with pytest.raises( + ValueError, + match="tol must be a positive number, found"): + qr = QuantileRegression(tol=-1) + qr.fit(data["x"], data["y"]) diff --git a/greykite/tests/algo/common/test_ml_models.py b/greykite/tests/algo/common/test_ml_models.py index bdc61bb..4fe81a1 100644 --- a/greykite/tests/algo/common/test_ml_models.py +++ b/greykite/tests/algo/common/test_ml_models.py @@ -12,6 +12,7 @@ from greykite.algo.common.ml_models import predict_ml_with_uncertainty from greykite.algo.uncertainty.conditional.conf_interval import predict_ci from greykite.common.constants import ERR_STD_COL +from greykite.common.constants import QUANTILE_SUMMARY_COL from greykite.common.evaluation import EvaluationMetricEnum from greykite.common.evaluation import calc_pred_err from greykite.common.python_utils import assert_equal @@ -331,6 +332,26 @@ def test_fit_ml_model(): fit_algorithm="sgd", fit_algorithm_params={"alpha": 0.1}) + assert list(trained_model.keys()) == [ + "y", + "y_mean", + "y_std", + "x_design_info", + "ml_model", + "uncertainty_model", + "ml_model_summary", + "y_col", + "x_mat", + "min_admissible_value", + "max_admissible_value", + "normalize_df_func", + "regression_weight_col", + "fitted_df"] + + assert (trained_model["y"] == df["y"]).all() + assert trained_model["y_mean"] == np.mean(df["y"]) + assert trained_model["y_std"] == np.std(df["y"]) + pred_res = predict_ml( fut_df=df_test, trained_model=trained_model) @@ -446,7 +467,7 @@ def test_fit_ml_model_normalization(): df=df, model_formula_str=model_formula_str, fit_algorithm="linear", - normalize_method="min_max") + normalize_method="zero_to_one") ml_model_summary = trained_model["ml_model_summary"].round() obtained_coefs = np.array(ml_model_summary["coef"].round()) @@ -521,8 +542,8 @@ def test_fit_ml_model_with_uncertainty(): fut_df["y_true"] = df_test["y"] fut_df["inside_95_ci"] = fut_df.apply( lambda row: ( - (row["y_true"] <= row["y_quantile_summary"][1]) - and (row["y_true"] >= row["y_quantile_summary"][0])), + (row["y_true"] <= row[QUANTILE_SUMMARY_COL][1]) + and (row["y_true"] >= row[QUANTILE_SUMMARY_COL][0])), axis=1) ci_coverage = 100.0 * fut_df["inside_95_ci"].mean() @@ -577,17 +598,17 @@ def ci_width_and_coverage(conditional_cols, df, fut_df): fut_df["y_true"] = df_test["y"] fut_df["inside_95_ci"] = fut_df.apply( lambda row: ( - (row["y_true"] <= row["y_quantile_summary"][1]) - and (row["y_true"] >= row["y_quantile_summary"][0])), + (row["y_true"] <= row[QUANTILE_SUMMARY_COL][1]) + and (row["y_true"] >= row[QUANTILE_SUMMARY_COL][0])), axis=1) fut_df["ci_width"] = fut_df.apply( lambda row: ( - (row["y_quantile_summary"][1] - row["y_quantile_summary"][0])), + (row[QUANTILE_SUMMARY_COL][1] - row[QUANTILE_SUMMARY_COL][0])), axis=1) ci_width_avg = fut_df["ci_width"].mean() - fut_df["y_quantile_summary"] = fut_df["y_quantile_summary"].apply( + fut_df[QUANTILE_SUMMARY_COL] = fut_df[QUANTILE_SUMMARY_COL].apply( lambda x: tuple(round(e, 2) for e in x)) ci_coverage = 100.0 * fut_df["inside_95_ci"].mean() @@ -756,25 +777,25 @@ def test_fit_ml_model_with_evaluation_with_uncertainty(): assert list(y_test_pred_small.round(1)) == [99.7, 201.5, 303.5, 7.3], ( "predictions are not correct") - # testing uncertainty - # assign the predicted y to the response in fut_df + # Testing uncertainty + # Assigns the predicted y to the response in fut_df fut_df["y"] = y_test_pred new_df_with_uncertainty = predict_ci( fut_df, trained_model["uncertainty_model"]) - assert list(new_df_with_uncertainty.columns) == ["y_quantile_summary", ERR_STD_COL], ( + assert list(new_df_with_uncertainty.columns) == list(fut_df.columns) + [QUANTILE_SUMMARY_COL, ERR_STD_COL], ( "column names are not as expected") - fut_df["y_quantile_summary"] = new_df_with_uncertainty["y_quantile_summary"] + fut_df[QUANTILE_SUMMARY_COL] = new_df_with_uncertainty[QUANTILE_SUMMARY_COL] - # calculate coverage of the CI + # Calculates coverage of the CI fut_df["inside_95_ci"] = fut_df.apply( lambda row: ( - (row["y_true"] <= row["y_quantile_summary"][1]) - and (row["y_true"] >= row["y_quantile_summary"][0])), + (row["y_true"] <= row[QUANTILE_SUMMARY_COL][1]) + and (row["y_true"] >= row[QUANTILE_SUMMARY_COL][0])), axis=1) ci_coverage = 100.0 * fut_df["inside_95_ci"].mean() - assert ci_coverage > 94.0 and ci_coverage < 96.0, ( + assert 94.0 < ci_coverage < 96.0, ( "95 percent CI coverage is not between 94 and 96") # testing uncertainty_method not being implemented but passed @@ -1054,7 +1075,7 @@ def test_fit_ml_model_with_evaluation_constant_column(): df=df, model_formula_str=model_formula_str, fit_algorithm=fit_algorithm, - normalize_method="min_max") + normalize_method="zero_to_one") pred_res = predict_ml( fut_df=df_test, @@ -1174,16 +1195,19 @@ def test_breakdown_regression_based_prediction(): "D": ".*_lag.*" } - # Example 1: ``add_intercept_group=True`` + # Example 1: ``center_components=False`` result = breakdown_regression_based_prediction( - ml_model=trained_model["ml_model"], + trained_model=trained_model, x_mat=x_mat, grouping_regex_patterns_dict=grouping_regex_patterns_dict, - add_intercept_group=True, - remainder_group_name="OTHER") + remainder_group_name="OTHER", + center_components=False) column_grouping_result = result["column_grouping_result"] breakdown_df = result["breakdown_df"] + breakdown_fig = result["breakdown_fig"] + assert breakdown_fig.layout.title.text == "prediction breakdown" + assert len(breakdown_fig.data) == 6 assert list(breakdown_df.columns) == ["Intercept", "A", "B", "C", "D", "OTHER"] # Note that if a variable/column is already picked in a step, @@ -1208,6 +1232,7 @@ def test_breakdown_regression_based_prediction(): ml_model_coef = ml_model.coef_ intercept = ml_model.intercept_ x_mat_weighted = x_mat * ml_model_coef + y_mean = trained_model["y_mean"] pred_raw = round(pred_df["y"], 5) pred_raw_sum = round(x_mat_weighted.sum(axis=1) + intercept, 5) @@ -1216,17 +1241,16 @@ def test_breakdown_regression_based_prediction(): assert pred_raw_sum.equals(pred_from_breakdown) assert pred_raw.equals(pred_from_breakdown) - # Example 2: ``add_intercept_group=False`` + # Example 2: ``remainder_group_name="REMAINDER"`` result = breakdown_regression_based_prediction( - ml_model=trained_model["ml_model"], + trained_model=trained_model, x_mat=x_mat, grouping_regex_patterns_dict=grouping_regex_patterns_dict, - add_intercept_group=False, - remainder_group_name="OTHER") + remainder_group_name="REMAINDER") column_grouping_result = result["column_grouping_result"] breakdown_df = result["breakdown_df"] - assert list(breakdown_df.columns) == ["A", "B", "C", "D", "OTHER"] + assert list(breakdown_df.columns) == ["Intercept", "A", "B", "C", "D", "REMAINDER"] assert column_grouping_result == { "str_groups": [ @@ -1243,11 +1267,89 @@ def test_breakdown_regression_based_prediction(): ["y_lag1", "y_lag2"]], "remainder": ["u1", "u2"]} - del x_mat_weighted["Intercept"] + # Example 3: ``center_components=True`` + result = breakdown_regression_based_prediction( + trained_model=trained_model, + x_mat=x_mat, + grouping_regex_patterns_dict=grouping_regex_patterns_dict, + remainder_group_name="OTHER", + center_components=True) + + column_grouping_result = result["column_grouping_result"] + breakdown_df = result["breakdown_df"] + assert list(breakdown_df.columns) == ["Intercept", "A", "B", "C", "D", "OTHER"] + + assert column_grouping_result == { + "str_groups": [ + [ + "x1_categ[T.C1]", + "x1_categ[T.C2]", + "x1_categ[T.C3]", + "x1_categ[T.C4]", + "x1_categ[T.C5]", + "x1_categ[T.C6]", + "x1_categ[T.C7]"], + ["var1", "var2"], + ["x1", "x2", "x3", "x4"], + ["y_lag1", "y_lag2"]], + "remainder": ["u1", "u2"]} - # We do not add intercept to the predictions - # because the intercept group is not included - pred_raw_sum = round(x_mat_weighted.sum(axis=1), 5) pred_from_breakdown = round(breakdown_df.sum(axis=1), 5) assert pred_raw_sum.equals(pred_from_breakdown) + assert pred_raw.equals(pred_from_breakdown) + + # Checks to see if components are centered + for col in ["A", "B", "C", "D", "OTHER"]: + assert round(breakdown_df[col].mean(), 5) == 0 + + # Example 4: ``center_components=True`` + result_denom = breakdown_regression_based_prediction( + trained_model=trained_model, + x_mat=x_mat, + grouping_regex_patterns_dict=grouping_regex_patterns_dict, + remainder_group_name="OTHER", + center_components=True, + denominator="abs_y_mean") + + column_grouping_result = result_denom["column_grouping_result"] + breakdown_df_denom = result_denom["breakdown_df"] + assert list(breakdown_df_denom.columns) == ["Intercept", "A", "B", "C", "D", "OTHER"] + + assert column_grouping_result == { + "str_groups": [ + [ + "x1_categ[T.C1]", + "x1_categ[T.C2]", + "x1_categ[T.C3]", + "x1_categ[T.C4]", + "x1_categ[T.C5]", + "x1_categ[T.C6]", + "x1_categ[T.C7]"], + ["var1", "var2"], + ["x1", "x2", "x3", "x4"], + ["y_lag1", "y_lag2"]], + "remainder": ["u1", "u2"]} + + pred_from_breakdown = round(breakdown_df_denom.sum(axis=1) * abs(y_mean), 5) + assert pred_raw_sum.equals(pred_from_breakdown) + assert pred_raw.equals(pred_from_breakdown) + + # Checks to see if components are centered + for col in ["A", "B", "C", "D", "OTHER"]: + assert round(breakdown_df_denom[col].mean(), 5) == 0 + + # Checks to see if components are divided by absolute mean + for col in ["A", "B", "C", "D", "OTHER"]: + assert max(abs(breakdown_df_denom[col] * abs(y_mean) - breakdown_df[col])) < 0.0001 + + with pytest.raises( + NotImplementedError, + match=f"quantile is not an admissable denominator"): + breakdown_regression_based_prediction( + trained_model=trained_model, + x_mat=x_mat, + grouping_regex_patterns_dict=grouping_regex_patterns_dict, + remainder_group_name="OTHER", + center_components=True, + denominator="quantile") diff --git a/greykite/tests/algo/common/test_model_summary.py b/greykite/tests/algo/common/test_model_summary.py index 2c258ba..7269c80 100644 --- a/greykite/tests/algo/common/test_model_summary.py +++ b/greykite/tests/algo/common/test_model_summary.py @@ -16,7 +16,7 @@ def test_model_summary(): # sets up data np.random.seed(1) - x = np.concatenate([np.ones([100, 2]), np.random.randn(100, 4)], axis=1) + x = np.concatenate([np.ones([100, 1]), np.random.randn(100, 5)], axis=1) beta = np.array([1, 1, 1, 1, 0, 0]) y = np.exp(np.matmul(x, beta)) pred_cols = ["Intercept", @@ -57,7 +57,7 @@ def test_model_summary(): "statsmodels_glm": dict(family=sm.families.Gamma()), "linear": dict(), "elastic_net": dict(cv=5), - "ridge": dict(cv=5, alphas=np.logspace(-5, 5, 100)), + "ridge": dict(cv=5, alphas=np.logspace(-5, 5, 30)), "lasso": dict(cv=5), "sgd": dict(), "lars": dict(cv=5), diff --git a/greykite/tests/algo/common/test_seasonality_inferrer.py b/greykite/tests/algo/common/test_seasonality_inferrer.py new file mode 100644 index 0000000..6542fb1 --- /dev/null +++ b/greykite/tests/algo/common/test_seasonality_inferrer.py @@ -0,0 +1,389 @@ +from copy import deepcopy + +import pandas as pd +import pytest + +from greykite.algo.common.seasonality_inferrer import SeasonalityInferConfig +from greykite.algo.common.seasonality_inferrer import SeasonalityInferrer +from greykite.algo.common.seasonality_inferrer import TrendAdjustMethodEnum +from greykite.common import constants as cst +from greykite.common.testing_utils import assert_equal +from greykite.common.testing_utils import generate_df_for_tests + + +@pytest.fixture +def df(): + df = generate_df_for_tests( + freq="D", + periods=1000 + )["df"] + return df + + +@pytest.fixture +def configs(): + configs = [ + SeasonalityInferConfig( + seas_name="yearly", + col_name="ct1", + period=1, + max_order=10, + aggregation_period="W", + offset=1 + ), + SeasonalityInferConfig( + seas_name="weekly", + col_name="year_woy_iso", + period=7, + max_order=10, + aggregation_period=None, + offset=None + ) + ] + return configs + + +def test_trend_adjust_method_enum(): + """Tests the trend adjust method Enum.""" + assert TrendAdjustMethodEnum.seasonal_average.value == "seasonal_average" + assert TrendAdjustMethodEnum.overall_average.value == "overall_average" + assert TrendAdjustMethodEnum.spline_fit.value == "spline_fit" + + +def test_init(): + """Tests instantiation.""" + model = SeasonalityInferrer() + assert model.df is None + assert model.time_col is None + assert model.value_col is None + assert model.fourier_series_orders is None + assert model.FITTED_TREND_COL == "FITTED_TREND" + + +def test_process_params(configs): + """Tests process input parameters.""" + model = SeasonalityInferrer() + configs_new = model._process_params( + configs=configs, + adjust_trend_method=TrendAdjustMethodEnum.spline_fit.name, + adjust_trend_param=None, + fit_algorithm="linear", + tolerance=0.0, + plotting=False, + aggregation_period=None, + offset=None, + criterion="bic" + ) + assert configs_new == [ + SeasonalityInferConfig( + seas_name="yearly", + col_name="ct1", + period=1, + max_order=10, + adjust_trend_method=TrendAdjustMethodEnum.spline_fit.name, + adjust_trend_param=None, + fit_algorithm="linear", + tolerance=0.0, + plotting=False, + aggregation_period="W", + offset=1, + criterion="bic" + ), + SeasonalityInferConfig( + seas_name="weekly", + col_name="year_woy_iso", + period=7, + max_order=10, + adjust_trend_method=TrendAdjustMethodEnum.spline_fit.name, + adjust_trend_param=None, + fit_algorithm="linear", + tolerance=0.0, + plotting=False, + aggregation_period=None, + offset=0, + criterion="bic" + ) + ] + + +def test_apply_default_value(configs): + """Tests apply default value util function.""" + model = SeasonalityInferrer() + # Overrides value. + configs_new = model._apply_default_value( + configs=deepcopy(configs), + param_name="offset", + override_value=2, + default_value=10) + assert configs_new[0].offset == 2 + assert configs_new[1].offset == 2 + # Does not override value and fills with default value. + configs_new = model._apply_default_value( + configs=deepcopy(configs), + param_name="offset", + override_value=None, + default_value=10) + assert configs_new[0].offset == 1 + assert configs_new[1].offset == 10 + # Override value not valid. + with pytest.raises( + ValueError, + match=f"The parameter 'offset' has value 2, " + f"which is not valid. Valid values are '\\[1, 3\\]'."): + model._apply_default_value( + configs=deepcopy(configs), + param_name="offset", + override_value=2, + default_value=1, + allowed_values=[1, 3]) + # Given value not valid. + with pytest.raises( + ValueError, + match=f"The parameter 'offset' in SeasonalityInferConfig has value 1, " + f"which is not valid. Valid values are '\\[2, 3\\]'."): + model._apply_default_value( + configs=deepcopy(configs), + param_name="offset", + override_value=None, + default_value=2, + allowed_values=[2, 3]) + + +def test_adjust_trend(df): + """Tests adjust trend methods.""" + # Seasonal average + model = SeasonalityInferrer() + df_adj = model._adjust_trend( + df=df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + method=TrendAdjustMethodEnum.seasonal_average.value, + trend_average_col="year_woy_iso") + assert len(df_adj.columns) == 3 + assert_equal( + df[cst.VALUE_COL].values, + (df_adj[cst.VALUE_COL] + df_adj[model.FITTED_TREND_COL]).values, + rel=1e-10 + ) + assert_equal( + df_adj.loc[:4, "y"], + pd.Series([0, 2.7583, 3.6115, 0.5488, 0.7180], name="y"), + rel=1e-3 + ) + assert_equal( + df_adj.loc[:4, model.FITTED_TREND_COL], + pd.Series([-4.4135, -0.7247, -0.7247, -0.7247, -0.7247], name=model.FITTED_TREND_COL), + rel=1e-3 + ) + + # Overall average + df_adj = model._adjust_trend( + df=df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + method=TrendAdjustMethodEnum.overall_average.value) + assert len(df_adj.columns) == 3 + assert_equal( + df[cst.VALUE_COL].values, + (df_adj[cst.VALUE_COL] + df_adj[model.FITTED_TREND_COL]).values, + rel=1e-10 + ) + assert_equal( + df_adj.loc[:4, "y"], + pd.Series([-8.4033, -1.9561, -1.1030, -4.1656, -3.9965], name="y"), + rel=1e-3 + ) + assert_equal( + df_adj.loc[:4, model.FITTED_TREND_COL], + pd.Series([3.9898, 3.9898, 3.9898, 3.9898, 3.9898], name=model.FITTED_TREND_COL), + rel=1e-3 + ) + + # Spline fit + df_adj = model._adjust_trend( + df=df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + method=TrendAdjustMethodEnum.spline_fit.value, + spline_fit_degree=3) + assert len(df_adj.columns) == 3 + assert_equal( + df[cst.VALUE_COL].values, + (df_adj[cst.VALUE_COL] + df_adj[model.FITTED_TREND_COL]).values, + rel=1e-10 + ) + assert_equal( + df_adj.loc[:4, "y"], + pd.Series([-3.6315, 2.8088, 3.6551, 0.5856, 0.7478], name="y"), + rel=1e-3 + ) + assert_equal( + df_adj.loc[:4, model.FITTED_TREND_COL], + pd.Series([-0.7820, -0.7752, -0.7683, -0.7614, -0.7545], name=model.FITTED_TREND_COL), + rel=1e-3 + ) + + # Method not recognized + method = "some_method" + with pytest.raises( + ValueError, + match=f"The trend adjust method '{method}' is not a valid name. " + f"Available methods are \\['seasonal_average', 'overall_average', 'spline_fit', 'none'\\]."): + model._adjust_trend( + df=df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + method=method) + + # ``trend_average_col`` not found. + with pytest.raises( + ValueError, + match=f"The trend_average_col 'some_col' is neither found in df "): + model._adjust_trend( + df=df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + method=TrendAdjustMethodEnum.seasonal_average.value, + trend_average_col="some_col") + + # Negative spline degree. + with pytest.raises( + ValueError, + match=f"Spline degree has be to a positive integer, " + f"but found -1."): + model._adjust_trend( + df=df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + method=TrendAdjustMethodEnum.spline_fit.value, + spline_fit_degree=-1) + + +def test_process_df(df): + """Tests adjust trend and aggregation.""" + model = SeasonalityInferrer() + df_adj = model._process_df( + df=df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + adjust_trend_method=TrendAdjustMethodEnum.seasonal_average.value, + adjust_trend_params=None, + aggregation_period="W-SUN" + ) + assert pd.infer_freq(df_adj[cst.TIME_COL]) == "W-SUN" + + +def test_tolerance(df): + """Tests ``tolerance``.""" + model = SeasonalityInferrer() + result1 = model.infer_fourier_series_order( + df=df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + configs=[ + SeasonalityInferConfig( + seas_name="yearly", + col_name="toy", + period=1.0, + max_order=50, + adjust_trend_param=dict(trend_average_col="year"), + tolerance=0.0, + aggregation_period="W", + offset=0 + ) + ], + adjust_trend_method="seasonal_average", + fit_algorithm="linear", + plotting=True, + criterion="bic", + ) + result2 = model.infer_fourier_series_order( + df=df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + configs=[ + SeasonalityInferConfig( + seas_name="yearly", + col_name="toy", + period=1.0, + max_order=50, + adjust_trend_param=dict(trend_average_col="year"), + tolerance=1.0, + aggregation_period="W", + offset=0 + ) + ], + adjust_trend_method="seasonal_average", + fit_algorithm="linear", + plotting=True, + criterion="bic", + ) + # With `tolerance`, the new order is smaller. + assert result2["best_orders"]["yearly"] < result1["best_orders"]["yearly"] + + +def test_infer_order(df): + """Tests the full functionality of inferring orders.""" + model = SeasonalityInferrer() + result = model.infer_fourier_series_order( + df=df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + configs=[ + SeasonalityInferConfig( + seas_name="yearly", + col_name="toy", + period=1.0, + max_order=50, + adjust_trend_param=dict(trend_average_col="year"), + tolerance=0.0, + aggregation_period="W", + offset=0 + ), + SeasonalityInferConfig( + seas_name="quarterly", + col_name="toq", + period=1.0, + max_order=20, + adjust_trend_param=dict(trend_average_col="year_quarter"), + tolerance=0.0, + aggregation_period="2D", + offset=0 + ), + SeasonalityInferConfig( + seas_name="monthly", + col_name="tom", + period=1.0, + max_order=20, + adjust_trend_param=dict(trend_average_col="year_month"), + tolerance=0.0, + aggregation_period=None, + offset=2 + ), + SeasonalityInferConfig( + seas_name="weekly", + col_name="tow", + period=7.0, + max_order=10, + adjust_trend_param=dict(trend_average_col="year_woy_iso"), + tolerance=0.005, + aggregation_period=None, + offset=-100 + ) + ], + adjust_trend_method="seasonal_average", + fit_algorithm="linear", + plotting=True, + criterion="bic", + ) + assert len(result["result"]) == 4 + assert result["result"][0]["seas_name"] == "yearly" + assert result["result"][1]["seas_name"] == "quarterly" + assert result["result"][2]["seas_name"] == "monthly" + assert result["result"][3]["seas_name"] == "weekly" + assert len(result["result"][0]["orders"]) == 50 + assert len(result["result"][1]["aics"]) == 20 + assert len(result["result"][2]["bics"]) == 20 + assert result["result"][2]["best_bic_order"] > 0 + assert result["best_orders"]["weekly"] == 0 # offset is truncated at 0 + assert len(result["result"][1]["fig"].data) == 8 diff --git a/greykite/tests/algo/forecast/silverkite/test_auto_config.py b/greykite/tests/algo/forecast/silverkite/test_auto_config.py new file mode 100644 index 0000000..a63c239 --- /dev/null +++ b/greykite/tests/algo/forecast/silverkite/test_auto_config.py @@ -0,0 +1,184 @@ +import pandas as pd +import pytest + +from greykite.algo.forecast.silverkite.auto_config import get_auto_growth +from greykite.algo.forecast.silverkite.auto_config import get_auto_holidays +from greykite.algo.forecast.silverkite.auto_config import get_auto_seasonality +from greykite.common.constants import EVENT_DF_DATE_COL +from greykite.common.constants import EVENT_DF_LABEL_COL +from greykite.common.constants import TIME_COL +from greykite.common.constants import VALUE_COL +from greykite.common.data_loader import DataLoader + + +@pytest.fixture +def df_daily(): + dl = DataLoader() + data = dl.load_peyton_manning() + data[TIME_COL] = pd.to_datetime(data[TIME_COL]) + return data + + +@pytest.fixture +def df_hourly(): + dl = DataLoader() + data = dl.load_bikesharing().rename(columns={"count": VALUE_COL})[[TIME_COL, VALUE_COL]] + data[TIME_COL] = pd.to_datetime(data[TIME_COL]) + return data + + +def test_get_auto_seasonality_daily(df_daily): + """Tests get automatic seasonality.""" + seasonality = get_auto_seasonality( + df=df_daily, + time_col=TIME_COL, + value_col=VALUE_COL + ) + assert seasonality["yearly_seasonality"] == 6 + assert seasonality["quarterly_seasonality"] == 1 + assert seasonality["monthly_seasonality"] == 1 + assert seasonality["weekly_seasonality"] == 3 + assert seasonality["daily_seasonality"] == 0 + + +def test_get_auto_seasonality_hourly(df_hourly): + """Tests get automatic seasonality.""" + seasonality = get_auto_seasonality( + df=df_hourly, + time_col=TIME_COL, + value_col=VALUE_COL + ) + assert seasonality["yearly_seasonality"] == 2 + assert seasonality["quarterly_seasonality"] == 1 + assert seasonality["monthly_seasonality"] == 1 + assert seasonality["weekly_seasonality"] == 1 + assert seasonality["daily_seasonality"] == 10 + + +def test_get_auto_seasonality_override(df_daily): + """Tests get automatic seasonality with override.""" + seasonality = get_auto_seasonality( + df=df_daily, + time_col=TIME_COL, + value_col=VALUE_COL, + yearly_seasonality=False + ) + assert seasonality["yearly_seasonality"] == 0 + assert seasonality["quarterly_seasonality"] == 1 + assert seasonality["monthly_seasonality"] == 1 + assert seasonality["weekly_seasonality"] == 3 + assert seasonality["daily_seasonality"] == 0 + + +def test_get_auto_holiday(df_daily): + """Tests automatic holidays.""" + custom_event = pd.DataFrame({ + EVENT_DF_DATE_COL: pd.to_datetime(["2015-03-03", "2016-03-03", "2017-03-03"]), + EVENT_DF_LABEL_COL: "threethree" + }) + holidays = get_auto_holidays( + df=df_daily, + time_col=TIME_COL, + value_col=VALUE_COL, + countries=["UnitedStates"], + daily_event_dict_override=dict( + custom_event=custom_event + ) + ) + assert len(holidays) == 31 # Only United States is used. + assert holidays["custom_event"].equals(custom_event) + assert "Holiday_positive_group" in holidays + assert "Holiday_negative_group" in holidays + assert "UnitedKingdom_Christmas Day_minus_1" not in holidays + assert "UnitedStates_Labor Day" in holidays + + +def test_get_auto_holiday_super_daily(df_daily): + """Tests automatic holidays for super daily data.""" + custom_event = pd.DataFrame({ + EVENT_DF_DATE_COL: pd.to_datetime(["2015-03-03", "2016-03-03", "2017-03-03"]), + EVENT_DF_LABEL_COL: "threethree" + }) + df = df_daily.resample("7D", on=TIME_COL).mean().reset_index(drop=False) + # With custom event, result only has custom event. + holidays = get_auto_holidays( + df=df, + time_col=TIME_COL, + value_col=VALUE_COL, + daily_event_dict_override=dict( + custom_event=custom_event + ) + ) + assert holidays == dict( + custom_event=custom_event + ) + # Without custom event, result is empty. + holidays = get_auto_holidays( + df=df, + time_col=TIME_COL, + value_col=VALUE_COL + ) + assert holidays == {} + + +def test_get_auto_growth_daily(df_daily): + """Tests automatic growth.""" + growth = get_auto_growth( + df=df_daily, + time_col=TIME_COL, + value_col=VALUE_COL, + forecast_horizon=7, + changepoints_dict_override=dict( + method="auto", + dates=["2010-01-01"], + combine_changepoint_min_distance="D", + keep_detected=True + ) + ) + growth_term = growth["growth_term"] + changepoints_dict = growth["changepoints_dict"] + assert growth_term == "linear" + assert changepoints_dict == dict( + method="auto", + yearly_seasonality_order=6, + resample_freq="7D", + regularization_strength=0.6, + actual_changepoint_min_distance="30D", + potential_changepoint_n=100, + no_changepoint_distance_from_end="30D", + dates=["2010-01-01"], + combine_changepoint_min_distance="D", + keep_detected=True + ) + + +def test_get_auto_growth_hourly(df_hourly): + """Tests automatic growth.""" + growth = get_auto_growth( + df=df_hourly, + time_col=TIME_COL, + value_col=VALUE_COL, + forecast_horizon=24, + changepoints_dict_override=dict( + method="auto", + dates=["2010-01-01"], + combine_changepoint_min_distance="D", + keep_detected=True + ) + ) + growth_term = growth["growth_term"] + changepoints_dict = growth["changepoints_dict"] + print(changepoints_dict) + assert growth_term == "linear" + assert changepoints_dict == dict( + method="auto", + yearly_seasonality_order=2, + resample_freq="7D", + regularization_strength=0.6, + actual_changepoint_min_distance="14D", + potential_changepoint_n=100, + no_changepoint_distance_from_end="14D", + dates=["2010-01-01"], + combine_changepoint_min_distance="D", + keep_detected=True + ) diff --git a/greykite/tests/algo/forecast/silverkite/test_forecast_silverkite.py b/greykite/tests/algo/forecast/silverkite/test_forecast_silverkite.py index 104893b..2da8448 100644 --- a/greykite/tests/algo/forecast/silverkite/test_forecast_silverkite.py +++ b/greykite/tests/algo/forecast/silverkite/test_forecast_silverkite.py @@ -15,11 +15,12 @@ from greykite.algo.forecast.silverkite.forecast_simple_silverkite_helper import cols_interact from greykite.algo.forecast.silverkite.forecast_simple_silverkite_helper import generate_holiday_events from greykite.common.constants import ADJUSTMENT_DELTA_COL -from greykite.common.constants import END_DATE_COL +from greykite.common.constants import END_TIME_COL from greykite.common.constants import ERR_STD_COL from greykite.common.constants import EVENT_DF_LABEL_COL from greykite.common.constants import LOGGER_NAME -from greykite.common.constants import START_DATE_COL +from greykite.common.constants import QUANTILE_SUMMARY_COL +from greykite.common.constants import START_TIME_COL from greykite.common.constants import TIME_COL from greykite.common.constants import VALUE_COL from greykite.common.data_loader import DataLoader @@ -113,7 +114,7 @@ def plt_comparison_forecast_vs_observed( plt.close() -def plt_check_ci(fut_df, test_df): +def plt_check_ci(fut_df, test_df, title=None): """A local function for creating conf. interval plots within this test file. :param fut_df: pd.DataFrame the dataframe which includes future predictions in its VALUE_COL column @@ -129,7 +130,7 @@ def plt_check_ci(fut_df, test_df): from greykite.common.viz.timeseries_plotting import plot_forecast_vs_actual # splitting the ci column to create lower and upper columns - ci_df = pd.DataFrame(fut_df["y_quantile_summary"].tolist()) + ci_df = pd.DataFrame(fut_df[QUANTILE_SUMMARY_COL].tolist()) assert ci_df.shape[1] == 2, "ci_df must have exactly two columns" ci_df.columns = [PREDICTED_LOWER_COL, PREDICTED_UPPER_COL] # adding necessary columns @@ -146,7 +147,7 @@ def plt_check_ci(fut_df, test_df): predicted_upper_col=PREDICTED_UPPER_COL, ylabel=VALUE_COL, train_end_date=None, - title=None, + title=title, actual_points_color="red", actual_points_size=2.0, forecast_curve_color="blue", @@ -157,6 +158,8 @@ def plt_check_ci(fut_df, test_df): assert fig is not None + return fig + def test_forecast_silverkite_hourly(hourly_data): """Tests silverkite on hourly data with linear model fit""" @@ -207,7 +210,7 @@ def test_forecast_silverkite_hourly(hourly_data): "period": [24.0, 7.0, 1.0], "order": [3, 0, 5]}), extra_pred_cols=["ct_sqrt", "dow_hr", "ct1"], - normalize_method="min_max") + normalize_method="zero_to_one") fut_df = silverkite.predict_n_no_sim( fut_time_num=fut_time_num, @@ -1598,8 +1601,8 @@ def test_forecast_silverkite_2min_with_uncertainty(): fut_df["y_true"] = test_df["y"] fut_df["inside_95_ci"] = fut_df.apply( lambda row: ( - (row["y_true"] <= row["y_quantile_summary"][1]) - and (row["y_true"] >= row["y_quantile_summary"][0])), + (row["y_true"] <= row[QUANTILE_SUMMARY_COL][1]) + and (row["y_true"] >= row[QUANTILE_SUMMARY_COL][0])), axis=1) ci_coverage = 100.0 * fut_df["inside_95_ci"].mean() @@ -1780,18 +1783,29 @@ def test_forecast_silverkite_simulator_exception(): def test_forecast_silverkite_predict_via_sim(): - """Tests silverkite simulator on hourly data with linear model fit""" + """Tests silverkite simulator on hourly data with linear model fit. + Both the regular and fast method are tested. + """ data = generate_df_for_tests( freq="H", periods=100 * 30, train_frac=0.8, train_end_date=None, - noise_std=0.3) + noise_std=0.1, + growth_coef=0.0, + growth_pow=1, + fs_coefs=[-0.1, 0.1, 0.1], + autoreg_coefs=[0.25, 0.25, 0.25, 0.25]) train_df = data["train_df"] - test_df = data["test_df"][:30 * 7] + test_df = data["test_df"][:100] fut_df = test_df.copy() fut_df[VALUE_COL] = None + autoreg_dict = { + "lag_dict": {"orders": list(range(1, 5))}, + "agg_lag_dict": None, + "series_na_fill_func": lambda s: s.bfill().ffill()} + silverkite = SilverkiteForecast() trained_model = silverkite.forecast( df=train_df, @@ -1804,6 +1818,7 @@ def test_forecast_silverkite_predict_via_sim(): "period": [24.0, 7.0, 1.0], "order": [3, 0, 5]}), extra_pred_cols=["ct_sqrt", "dow_hr", "ct1"], + autoreg_dict=autoreg_dict, uncertainty_dict={ "uncertainty_method": "simple_conditional_residuals", "params": { @@ -1816,41 +1831,408 @@ def test_forecast_silverkite_predict_via_sim(): past_df = train_df[[TIME_COL, VALUE_COL]].copy() - # predict via sim - np.random.seed(123) - fut_df = silverkite.predict_via_sim( + # Predicts with the original sim + # import time + # t0 = time.time() + pred_df = silverkite.predict_via_sim( fut_df=fut_df, trained_model=trained_model, past_df=past_df, new_external_regressor_df=None, - simulation_num=10, - include_err=True)["fut_df"] + simulation_num=5)["fut_df"] + # t1 = time.time() + # print(f"elapsed time: {t1 - t0}") - assert list(fut_df.columns) == [ + assert list(pred_df.columns) == [ TIME_COL, VALUE_COL, - f"{VALUE_COL}_quantile_summary", + QUANTILE_SUMMARY_COL, ERR_STD_COL] + err = calc_pred_err(test_df[VALUE_COL], pred_df[VALUE_COL]) + enum = EvaluationMetricEnum.Correlation + assert round(err[enum.get_metric_name()], 2) == 0.80 + enum = EvaluationMetricEnum.RootMeanSquaredError + assert round(err[enum.get_metric_name()], 2) == 0.14 + """ + import os + import plotly + directory = os.path.expanduser("~") + # to plot CIs + fig = plt_check_ci(fut_df=fut_df, test_df=test_df, title="multiple simulations") + html_file_name = f"{directory}/predict_via_sim_ci.html" + plotly.offline.plot(fig, filename=html_file_name) + """ - err = calc_pred_err(test_df[VALUE_COL], fut_df[VALUE_COL]) + # Predicts via fast simulation method + np.random.seed(123) + # t0 = time.time() + pred_df = silverkite.predict_via_sim_fast( + fut_df=fut_df, + trained_model=trained_model, + past_df=past_df, + new_external_regressor_df=None)["fut_df"] + # t1 = time.time() + # print(f"elapsed time: {t1 - t0}") + + assert list(pred_df.columns) == [ + TIME_COL, + VALUE_COL, + QUANTILE_SUMMARY_COL, + ERR_STD_COL] + err = calc_pred_err(test_df[VALUE_COL], pred_df[VALUE_COL]) enum = EvaluationMetricEnum.Correlation - assert round(err[enum.get_metric_name()], 2) == 0.98 + assert round(err[enum.get_metric_name()], 2) == 0.82 enum = EvaluationMetricEnum.RootMeanSquaredError - assert round(err[enum.get_metric_name()], 2) == 0.48 + assert round(err[enum.get_metric_name()], 2) == 0.13 + """ + import os + import plotly + directory = os.path.expanduser("~") + # to plot CIs + fig = plt_check_ci(fut_df=fut_df, test_df=test_df, title="fast simulation") + file_name = f"{directory}/predict_via_sim_fast_ci.html" + plotly.offline.plot(fig, filename=file_name) + """ + +def test_forecast_silverkite_predict_via_sim2(): + """Tests silverkite simulator on hourly data with linear model fit. + Both the regular and fast method are tested. This example has a strong + autoregressive structure and no other patterns. + """ + train_len = 500 + test_len = 20 + data_len = train_len + test_len + np.random.seed(179) + ts = pd.date_range(start="1/1/2018", periods=data_len, freq="D") + z = np.random.randint(low=-50, high=50, size=data_len) + y = [0]*data_len + y[0] = 0 + y[1] = 0 + y[2] = 0 + y[3] = 0 + y[4] = 0 + # Explicitly defines auto-regressive structure + for i in range(4, data_len): + y[i] = round(0.5*y[i-1] + 0.5*y[i-2] + z[i]) + + df = pd.DataFrame({ + "ts": ts, + "y": y}) + df["y"] = df["y"].map(float) + df["ts"] = pd.to_datetime(df["ts"]) + abs_y_mean = np.mean(abs(df["y"])) """ + # Checks generated data import os - from pathlib import Path - directory = Path(__file__).parents[6] + import plotly + directory = os.path.expanduser("~") file_name = os.path.join( directory, - "predict_silverkite_via_sim.png") + "gen_autoreg_data.png") plt_comparison_forecast_vs_observed( + fut_df=df, + test_df=df, + file_name=file_name) + """ + + train_df = df[:(train_len)].reset_index(drop=True) + test_df = df[(train_len):].reset_index(drop=True) + fut_df = test_df.copy() + fut_df[VALUE_COL] = None + + silverkite = SilverkiteForecast() + autoreg_dict = { + "lag_dict": {"orders": list(range(1, 3))}, + "agg_lag_dict": None, + "series_na_fill_func": lambda s: s.bfill().ffill()} + + trained_model = silverkite.forecast( + df=train_df, + time_col=TIME_COL, + value_col=VALUE_COL, + train_test_thresh=None, + origin_for_time_vars=None, + fs_components_df=None, + extra_pred_cols=None, + drop_pred_cols=["ct1"], + autoreg_dict=autoreg_dict, + uncertainty_dict={ + "uncertainty_method": "simple_conditional_residuals", + "params": { + "conditional_cols": ["dow"], + "quantiles": [0.025, 0.975], + "quantile_estimation_method": "normal_fit", + "sample_size_thresh": 20, + "small_sample_size_method": "std_quantiles", + "small_sample_size_quantile": 0.98}}) + + ml_model = trained_model["ml_model"] + ml_model_coef = ml_model.coef_ + intercept = ml_model.intercept_ + + y_lag1_coef = ml_model_coef["y_lag1"] + y_lag2_coef = ml_model_coef["y_lag2"] + intercept += ml_model_coef["Intercept"] + + # Checks the model auto-regressive coefficients with the data generation coefficients + assert round(y_lag1_coef, 2) == 0.46 + assert round(y_lag2_coef, 2) == 0.52 + + past_df = train_df[[TIME_COL, VALUE_COL]].copy() + + # Predicts with multiple simulations (slower) + np.random.seed(123) + # import time + # t0 = time.time() + pred_df = silverkite.predict_via_sim( fut_df=fut_df, - test_df=test_df, + trained_model=trained_model, + past_df=past_df, + new_external_regressor_df=None, + simulation_num=50)["fut_df"] + # t1 = time.time() + # print(f"elapsed time: {t1 - t0}") + assert list(pred_df.columns) == [ + TIME_COL, + VALUE_COL, + QUANTILE_SUMMARY_COL, + ERR_STD_COL] + + err = calc_pred_err(test_df[VALUE_COL], pred_df[VALUE_COL]) + enum = EvaluationMetricEnum.RootMeanSquaredError + rmse = err[enum.get_metric_name()] + err = 100 * (rmse / abs_y_mean) + assert round(err) == 15 + + # Checks if simulation is done correctly + # It manually calculates the predictions using lags and + # compares with simulation results + # Note that in this case since error is used during simulation + # the difference will not be zero + y_pred = pred_df["y"] + # Attaches the last two observations to y_pred + y_pred_aug = list(train_df.tail(2)["y"].values) + list(y_pred) + for i in range(3, len(y_pred_aug)): + y = y_pred_aug[i] + y_lag1 = y_pred_aug[i-1] + y_lag2 = y_pred_aug[i-2] + y_manual = intercept + y_lag1_coef*y_lag1 + y_lag2_coef*y_lag2 + diff = 100 * abs(y - y_manual) / abs_y_mean + assert diff < 5 + """ + import os + import plotly + directory = os.path.expanduser("~") + # to plot CIs + fig = plt_check_ci(fut_df=pred_df, test_df=test_df, title="multiple simulations") + html_file_name = f"{directory}/predict_via_sim_ci.html" + plotly.offline.plot(fig, filename=html_file_name) + """ + + # Predicts via fast simulation method + np.random.seed(123) + # t0 = time.time() + pred_df = silverkite.predict_via_sim_fast( + fut_df=fut_df, + trained_model=trained_model, + past_df=past_df, + new_external_regressor_df=None)["fut_df"] + # t1 = time.time() + # print(f"elapsed time: {t1 - t0}") + assert list(pred_df.columns) == [ + TIME_COL, + VALUE_COL, + QUANTILE_SUMMARY_COL, + ERR_STD_COL] + + err = calc_pred_err(test_df[VALUE_COL], pred_df[VALUE_COL]) + enum = EvaluationMetricEnum.RootMeanSquaredError + rmse = err[enum.get_metric_name()] + err = 100 * (rmse / abs_y_mean) + assert round(err) == 15 + # Checks if simulation is done correctly + # It manually calculates the predictions using lags and + # compares with simulation results + y_pred = pred_df["y"] + # we attach the last two observations to y_pred + y_pred_aug = list(train_df.tail(2)["y"].values) + list(y_pred) + y_pred = pred_df["y"] + # Attaches the last two observations to y_pred + y_pred_aug = list(train_df.tail(2)["y"].values) + list(y_pred) + for i in range(3, len(y_pred_aug)): + y = y_pred_aug[i] + y_lag1 = y_pred_aug[i-1] + y_lag2 = y_pred_aug[i-2] + y_manual = intercept + y_lag1_coef*y_lag1 + y_lag2_coef*y_lag2 + diff = 100 * abs(y - y_manual) / abs_y_mean + # We expect a very small diff in this case, as no error are used in simulation + assert diff < 0.01 + """ + import os + import plotly + directory = os.path.expanduser("~") + # to plot CIs + fig = plt_check_ci(fut_df=pred_df, test_df=test_df, title="fast simulation") + file_name = f"{directory}/predict_via_sim_fast_ci.html" + plotly.offline.plot(fig, filename=file_name) + """ + pred_res = silverkite.predict( + fut_df=fut_df[:5], + trained_model=trained_model, + past_df=past_df, + new_external_regressor_df=None, + fast_simulation=True) + assert len(pred_res["fut_df"]) == 5 + assert len(pred_res["x_mat"]) == 5 + + +def test_forecast_silverkite_predict_via_sim3(): + """This test is used to measure speed for simulations""" + train_len = 2000 + test_len = 50 + data_len = train_len + test_len + np.random.seed(179) + ts = pd.date_range(start="1/1/2018", periods=data_len, freq="D") + z = np.random.randint(low=-50, high=50, size=data_len) + y = [0]*data_len + y[0] = 0 + y[1] = 0 + y[2] = 0 + y[3] = 0 + y[4] = 0 + # Explicitly defines auto-regressive structure + for i in range(4, data_len): + y[i] = i + round(0.2*y[i-1] + 0.2*y[i-2] + 0.2*y[i-3] + 0.2*y[i-4] + z[i]) + + df = pd.DataFrame({ + "ts": ts, + "y": y}) + df["y"] = df["y"].map(float) + df["ts"] = pd.to_datetime(df["ts"]) + abs_y_mean = np.mean(abs(df["y"])) + """ + # Checks generated data + import os + import plotly + directory = os.path.expanduser("~") + file_name = os.path.join( + directory, + "gen_autoreg_data.png") + plt_comparison_forecast_vs_observed( + fut_df=df, + test_df=df, file_name=file_name) + """ + + train_df = df[:(train_len)].reset_index(drop=True) + test_df = df[(train_len):].reset_index(drop=True) + fut_df = test_df.copy() + fut_df[VALUE_COL] = None + + silverkite = SilverkiteForecast() + autoreg_dict = { + "lag_dict": {"orders": list(range(1, 5))}, + "agg_lag_dict": {"orders_list": [list(range(10))]}, + "series_na_fill_func": lambda s: s.bfill().ffill()} + + trained_model = silverkite.forecast( + df=train_df, + time_col=TIME_COL, + value_col=VALUE_COL, + train_test_thresh=None, + origin_for_time_vars=None, + fs_components_df=None, + extra_pred_cols=None, + drop_pred_cols=None, + autoreg_dict=autoreg_dict, + uncertainty_dict={ + "uncertainty_method": "simple_conditional_residuals", + "params": { + "conditional_cols": ["dow"], + "quantiles": [0.025, 0.975], + "quantile_estimation_method": "normal_fit", + "sample_size_thresh": 20, + "small_sample_size_method": "std_quantiles", + "small_sample_size_quantile": 0.98}}) + + ml_model = trained_model["ml_model"] + ml_model_coef = ml_model.coef_ + y_lag1_coef = ml_model_coef["y_lag1"] + y_lag2_coef = ml_model_coef["y_lag2"] + y_lag3_coef = ml_model_coef["y_lag3"] + y_lag4_coef = ml_model_coef["y_lag4"] + + # Checks the model auto-regressive coefficients with the data generation coefficients + assert round(y_lag1_coef, 2) == 0.18 + assert round(y_lag2_coef, 2) == 0.16 + assert round(y_lag3_coef, 2) == 0.24 + assert round(y_lag4_coef, 2) == 0.21 + + past_df = train_df[[TIME_COL, VALUE_COL]].copy() + + # Predicts with multiple simulations (slower) + np.random.seed(123) + # import time + # t0 = time.time() + pred_df = silverkite.predict_via_sim( + fut_df=fut_df, + trained_model=trained_model, + past_df=past_df, + new_external_regressor_df=None, + simulation_num=5)["fut_df"] + # t1 = time.time() + # print(f"elapsed time: {t1 - t0}") + assert list(pred_df.columns) == [ + TIME_COL, + VALUE_COL, + QUANTILE_SUMMARY_COL, + ERR_STD_COL] + + err = calc_pred_err(test_df[VALUE_COL], pred_df[VALUE_COL]) + enum = EvaluationMetricEnum.RootMeanSquaredError + rmse = err[enum.get_metric_name()] + err = 100 * (rmse / abs_y_mean) + assert round(err, 2) == 0.58 + """ + import os + import plotly + directory = os.path.expanduser("~") # to plot CIs - plt_check_ci(fut_df=fut_df, test_df=test_df) + fig = plt_check_ci(fut_df=pred_df, test_df=test_df, title="multiple simulations") + html_file_name = f"{directory}/predict_via_sim_ci.html" + plotly.offline.plot(fig, filename=html_file_name) + """ + + # Predicts via fast simulation method + np.random.seed(123) + # t0 = time.time() + pred_df = silverkite.predict_via_sim_fast( + fut_df=fut_df, + trained_model=trained_model, + past_df=past_df, + new_external_regressor_df=None)["fut_df"] + # t1 = time.time() + # print(f"elapsed time: {t1 - t0}") + assert list(pred_df.columns) == [ + TIME_COL, + VALUE_COL, + QUANTILE_SUMMARY_COL, + ERR_STD_COL] + + err = calc_pred_err(test_df[VALUE_COL], pred_df[VALUE_COL]) + enum = EvaluationMetricEnum.RootMeanSquaredError + rmse = err[enum.get_metric_name()] + err = 100 * (rmse / abs_y_mean) + assert round(err, 2) == 0.55 + """ + import os + import plotly + directory = os.path.expanduser("~") + # to plot CIs + fig = plt_check_ci(fut_df=pred_df, test_df=test_df, title="fast simulation") + file_name = f"{directory}/predict_via_sim_fast_ci.html" + plotly.offline.plot(fig, filename=file_name) """ @@ -1886,7 +2268,7 @@ def test_silverkite_predict(): # These are the columns we expect to get from the predictions expected_fut_df_cols = [ - TIME_COL, VALUE_COL, f"{VALUE_COL}_quantile_summary", ERR_STD_COL] + TIME_COL, VALUE_COL, QUANTILE_SUMMARY_COL, ERR_STD_COL] silverkite = SilverkiteForecast() trained_model = silverkite.forecast( @@ -2007,7 +2389,7 @@ def test_predict_silverkite_with_regressors(): # These are the columns we expect to get from the predictions expected_fut_df_cols = [ - TIME_COL, VALUE_COL, f"{VALUE_COL}_quantile_summary", ERR_STD_COL] + TIME_COL, VALUE_COL, QUANTILE_SUMMARY_COL, ERR_STD_COL] silverkite = SilverkiteForecast() trained_model = silverkite.forecast( @@ -2514,8 +2896,8 @@ def fit_silverkite(autoreg_dict): # (Case 1) First the case with autoregression with old lag only # In this case we expect that no sim approach will be triggered - # by ``silverkite.predict_n(``, and ``predict_silverkite``, - # because ``min_lag_order`` is 2 while forecast horizon is 24 + # by ``silverkite.predict_n``, and ``predict_silverkite``, + # because ``min_lag_order`` is 168 while forecast horizon is 24 np.random.seed(123) fut_df_with_ar = silverkite.predict_n_no_sim( fut_time_num=test_df.shape[0], @@ -2523,7 +2905,7 @@ def fit_silverkite(autoreg_dict): freq="1H", new_external_regressor_df=None)["fut_df"] - # Directly using `silverkite.predict_n(` which will use simulations. + # Directly using ``silverkite.predict_n`` which will use simulations. # We expect the same result as above. np.random.seed(123) predict_info = silverkite.predict_n( @@ -2540,7 +2922,7 @@ def fit_silverkite(autoreg_dict): fut_df_with_ar_2 = predict_info["fut_df"] - # Uses ``predict_silverkite`` + # Uses ``predict`` np.random.seed(123) predict_info = silverkite.predict( fut_df=fut_df, @@ -2556,7 +2938,7 @@ def fit_silverkite(autoreg_dict): fut_df_with_ar_3 = predict_info["fut_df"] - # Checks the case where `past_df` is not passed + # Checks the case where ``past_df`` is not passed np.random.seed(123) predict_info = silverkite.predict( fut_df=fut_df.copy(), @@ -2588,13 +2970,15 @@ def fit_silverkite(autoreg_dict): assert list(fut_df_with_ar.columns) == [ TIME_COL, VALUE_COL, - f"{VALUE_COL}_quantile_summary", + QUANTILE_SUMMARY_COL, ERR_STD_COL] # (Case 2) The case with short autoregression # In this case we expect that via_sim approach will be triggered - # by ``silverkite.predict_n(``, and ``predict_silverkite`` - # because ``min_lag_order`` is 168*2 while forecast horizon is 24 + # by ``silverkite.predict_n``, and ``predict_silverkite`` + # because ``min_lag_order`` is 1 while forecast horizon is 24 + fast_simulation = trained_model_with_recent_lag["fast_simulation"] + simulation_num = trained_model_with_recent_lag["simulation_num"] np.random.seed(123) fut_df_with_ar = silverkite.predict_n_via_sim( fut_time_num=test_df.shape[0], @@ -2602,9 +2986,10 @@ def fit_silverkite(autoreg_dict): freq="1H", new_external_regressor_df=None, include_err=None, - simulation_num=5)["fut_df"] + simulation_num=simulation_num, + fast_simulation=fast_simulation)["fut_df"] - # Directly uses ``silverkite.predict_n(`` which will use simulations. + # Directly uses ``silverkite.predict_n`` which will use simulations. # We expect the same result as above. np.random.seed(123) predict_info = silverkite.predict_n( @@ -2613,14 +2998,15 @@ def fit_silverkite(autoreg_dict): freq="1H", new_external_regressor_df=None, include_err=None, - force_no_sim=False) + force_no_sim=False, + simulation_num=simulation_num) assert not predict_info["simulations_not_used"] assert predict_info["fut_df_info"]["inferred_forecast_horizon"] == 5 assert predict_info["min_lag_order"] == 1 fut_df_with_ar_2 = predict_info["fut_df"] - # Uses ``predict_silverkite`` + # Uses ``predict`` np.random.seed(123) predict_info = silverkite.predict( fut_df=fut_df.copy(), @@ -2628,7 +3014,8 @@ def fit_silverkite(autoreg_dict): past_df=train_df[[TIME_COL, VALUE_COL]].copy(), new_external_regressor_df=None, include_err=None, - force_no_sim=False) + force_no_sim=False, + simulation_num=simulation_num) assert not predict_info["simulations_not_used"] assert predict_info["fut_df_info"]["inferred_forecast_horizon"] == 5 @@ -2636,7 +3023,7 @@ def fit_silverkite(autoreg_dict): fut_df_with_ar_3 = predict_info["fut_df"] - # Checks the case when`past_df` is not passed. + # Checks the case when ``past_df`` is not passed. np.random.seed(123) predict_info = silverkite.predict( fut_df=fut_df, @@ -2644,7 +3031,8 @@ def fit_silverkite(autoreg_dict): past_df=None, new_external_regressor_df=None, include_err=None, - force_no_sim=False) + force_no_sim=False, + simulation_num=simulation_num) assert not predict_info["simulations_not_used"] assert predict_info["fut_df_info"]["inferred_forecast_horizon"] == 5 @@ -2667,7 +3055,7 @@ def fit_silverkite(autoreg_dict): assert list(fut_df_with_ar.columns) == [ TIME_COL, VALUE_COL, - f"{VALUE_COL}_quantile_summary", + QUANTILE_SUMMARY_COL, ERR_STD_COL] # (Case 3) Tests the cases with no AR @@ -2705,7 +3093,7 @@ def fit_silverkite(autoreg_dict): err = calc_pred_err(test_df[VALUE_COL], fut_df_with_ar[VALUE_COL]) enum = EvaluationMetricEnum.RootMeanSquaredError - assert err[enum.get_metric_name()] == pytest.approx(114.2, rel=1e-2) + assert err[enum.get_metric_name()] == pytest.approx(85.896, rel=1e-2) err = calc_pred_err(test_df[VALUE_COL], fut_df_no_ar[VALUE_COL]) enum = EvaluationMetricEnum.RootMeanSquaredError @@ -2863,7 +3251,7 @@ def test_forecast_silverkite_simulator_regressor(): assert list(fut_df.columns) == [ TIME_COL, VALUE_COL, - f"{VALUE_COL}_quantile_summary", + QUANTILE_SUMMARY_COL, ERR_STD_COL] assert sim_df[VALUE_COL].dtype == "float64" @@ -3086,8 +3474,8 @@ def test_forecast_silverkite_with_adjust_anomalous(): "func": adjust_anomalous_data, "params": { "anomaly_df": anomaly_df, - "start_date_col": START_DATE_COL, - "end_date_col": END_DATE_COL, + "start_time_col": START_TIME_COL, + "end_time_col": END_TIME_COL, "adjustment_delta_col": ADJUSTMENT_DELTA_COL, "filter_by_dict": {"platform": "MOBILE"}}}) @@ -4108,7 +4496,7 @@ def test_normalize_changepoint_values(): # tests min_max normalize_result = normalize_df( df=df, - method="min_max" + method="zero_to_one" ) pred_cols = normalize_result["keep_cols"] normalize_df_func = normalize_result["normalize_df_func"] diff --git a/greykite/tests/algo/forecast/silverkite/test_forecast_silverkite_helper.py b/greykite/tests/algo/forecast/silverkite/test_forecast_silverkite_helper.py index 208e99c..003e655 100644 --- a/greykite/tests/algo/forecast/silverkite/test_forecast_silverkite_helper.py +++ b/greykite/tests/algo/forecast/silverkite/test_forecast_silverkite_helper.py @@ -1,10 +1,13 @@ import datetime +import pandas as pd import pytest from greykite.algo.forecast.silverkite.forecast_silverkite_helper import get_default_changepoints_dict +from greykite.algo.forecast.silverkite.forecast_silverkite_helper import get_fourier_feature_col_names from greykite.algo.forecast.silverkite.forecast_silverkite_helper import get_silverkite_uncertainty_dict from greykite.algo.forecast.silverkite.forecast_silverkite_helper import get_similar_lag +from greykite.common.features.timeseries_features import fourier_series_multi_fcn from greykite.common.python_utils import assert_equal from greykite.common.testing_utils import generate_df_for_tests @@ -273,3 +276,34 @@ def test_get_default_changepoints_dict(): forecast_horizon_in_days=7) assert change_points_dict is None + + +def test_get_fourier_feature_col_names(): + """Tests getting Fourier feature column names.""" + df = pd.DataFrame({ + "ts": pd.date_range("2020-01-01", freq="D", periods=14) + }) + fs_components_df = pd.DataFrame({ + "name": ["tod", "tow", "toy"], + "period": [24.0, 7.0, 1.0], + "order": [1, 2, 3], + "seas_names": ["daily", "weekly", "yearly"]}) + fs_func = fourier_series_multi_fcn( + col_names=fs_components_df.get("name"), + periods=fs_components_df.get("period"), + orders=fs_components_df.get("order"), + seas_names=fs_components_df.get("seas_names") + ) + fs_cols = get_fourier_feature_col_names( + df=df, + time_col="ts", + fs_func=fs_func + ) + assert fs_cols == [ + "sin1_tod_daily", "cos1_tod_daily", + "sin1_tow_weekly", "cos1_tow_weekly", + "sin2_tow_weekly", "cos2_tow_weekly", + "sin1_toy_yearly", "cos1_toy_yearly", + "sin2_toy_yearly", "cos2_toy_yearly", + "sin3_toy_yearly", "cos3_toy_yearly", + ] diff --git a/greykite/tests/algo/forecast/silverkite/test_forecast_simple_silverkite.py b/greykite/tests/algo/forecast/silverkite/test_forecast_simple_silverkite.py index 4f736eb..2af1189 100644 --- a/greykite/tests/algo/forecast/silverkite/test_forecast_simple_silverkite.py +++ b/greykite/tests/algo/forecast/silverkite/test_forecast_simple_silverkite.py @@ -17,7 +17,11 @@ from greykite.algo.forecast.silverkite.forecast_simple_silverkite import SimpleSilverkiteForecast from greykite.algo.forecast.silverkite.forecast_simple_silverkite_helper import generate_holiday_events from greykite.common.constants import CHANGEPOINT_COL_PREFIX +from greykite.common.constants import EVENT_DF_DATE_COL +from greykite.common.constants import EVENT_DF_LABEL_COL from greykite.common.constants import LOGGER_NAME +from greykite.common.constants import TIME_COL +from greykite.common.constants import VALUE_COL from greykite.common.data_loader import DataLoader from greykite.common.enums import SimpleTimeFrequencyEnum from greykite.common.enums import TimeEnum @@ -389,7 +393,7 @@ def test_extra_pred_cols(hourly_data, daily_data_reg, weekly_data): else: excluded_cols += example_cols[feature_set_name] expected_cols = set( - [cst.GROWTH_COL_ALIAS[growth_term]] + + [cst.GrowthColEnum[growth_term].value] + example_holiday_cols + feature_set_cols + extra_pred_cols @@ -436,10 +440,11 @@ def test_extra_pred_cols(hourly_data, daily_data_reg, weekly_data): 'C(Q(\'events_China\'), levels=[\'\', "New Year\'s Day", \'Chinese New Year\', \'Tomb-Sweeping Day\', ' '\'Labor Day\', \'Dragon Boat Festival\', \'Mid-Autumn Festival\', \'National Day\', \'National Day, ' 'Mid-Autumn Festival\'])', - 'C(Q(\'events_UnitedStates\'), levels=[\'\', "New Year\'s Day", \'Martin Luther King, Jr. Day\', ' - '"Washington\'s Birthday", \'Memorial Day\', \'Independence Day\', \'Labor Day\', \'Columbus Day\', ' - '\'Veterans Day\', \'Thanksgiving\', \'Christmas Day\', \'Christmas Day (Observed)\', "New Year\'s Day (' - 'Observed)", \'Veterans Day (Observed)\', \'Independence Day (Observed)\'])'] + 'C(Q(\'events_UnitedStates\'), levels=[\'\', "New Year\'s Day", \'Martin Luther King Jr. Day\', ' + '"Washington\'s Birthday", \'Memorial Day\', \'Independence Day\', \'Independence Day (Observed)\', ' + '\'Labor Day\', \'Columbus Day\', \'Veterans Day\', \'Thanksgiving\', \'Christmas Day\', ' + '\'Christmas Day (Observed)\', "New Year\'s Day (Observed)", \'Veterans Day (Observed)\', ' + '\'Juneteenth National Independence Day\', \'Juneteenth National Independence Day (Observed)\'])'] parameters = silverkite.convert_params( df=daily_data_reg, @@ -469,7 +474,7 @@ def test_extra_pred_cols(hourly_data, daily_data_reg, weekly_data): else: excluded_cols += example_cols[feature_set_name] expected_cols = set( - [cst.GROWTH_COL_ALIAS[growth_term]] + + [cst.GrowthColEnum[growth_term].value] + regressor_cols + example_holiday_cols + more_example_holiday_cols + @@ -513,7 +518,7 @@ def test_extra_pred_cols(hourly_data, daily_data_reg, weekly_data): else: excluded_cols += example_cols[feature_set_name] expected_cols = set( - [cst.GROWTH_COL_ALIAS[growth_term]] + + [cst.GrowthColEnum[growth_term].value] + example_holiday_cols + feature_set_cols + extra_pred_cols @@ -584,7 +589,8 @@ def test_convert_simple_silverkite_params_hourly(hourly_data): # ``time_properties``, which is the default 24 for hourly data. forecast_horizon=24, simulation_based=False, - simulation_num=10 + simulation_num=10, + fast_simulation=False ) assert_equal(parameters, expected) @@ -1369,3 +1375,140 @@ def test_get_silverkite_holidays(): pre_num=0, post_num=0) assert list(holidays.keys()) == ["Other"] + + +def test_auto_config_params(daily_data_reg): + """Tests the auto options: + + - auto_growth + - auto_holiday + - auto_seasonality + + """ + dl = DataLoader() + df = dl.load_peyton_manning() + df[TIME_COL] = pd.to_datetime(df[TIME_COL]) + silverkite = SimpleSilverkiteForecast() + params = silverkite.convert_params( + df=df, + time_col=TIME_COL, + value_col=VALUE_COL, + forecast_horizon=7, + auto_holiday=True, + holidays_to_model_separately="auto", + holiday_lookup_countries="auto", + holiday_pre_num_days=2, + holiday_post_num_days=2, + daily_event_df_dict=dict( + custom_event=pd.DataFrame({ + EVENT_DF_DATE_COL: pd.to_datetime(["2010-03-03", "2011-03-03", "2012-03-03"]), + EVENT_DF_LABEL_COL: "threethree" + }) + ), + auto_growth=True, + growth_term="quadratic", + changepoints_dict=dict( + method="uniform", + n_changepoints=2 + ), + auto_seasonality=True, + yearly_seasonality=0, + quarterly_seasonality="auto", + monthly_seasonality=False, + weekly_seasonality=True, + daily_seasonality=5 + ) + + # Seasonality is overridden by auto seasonality. + # Monthly is forced to be 0 because the value if `False`. + assert params["fs_components_df"].equals(pd.DataFrame({ + "name": ["tow", "toq", "ct1"], + "period": [7.0, 1.0, 1.0], + "order": [3, 1, 6], + "seas_names": ["weekly", "quarterly", "yearly"] + })) + # Growth is overridden by auto growth. + assert "ct1" in params["extra_pred_cols"] + assert params["changepoints_dict"]["method"] == "custom" + # Holidays is overridden by auto seasonality. + assert len(params["daily_event_df_dict"]) == 198 + assert "custom_event" in params["daily_event_df_dict"] + assert "China_Chinese New Year" in params["daily_event_df_dict"] + + +def test_auto_config_run(daily_data_reg): + """Tests the auto options: + + - auto_growth + - auto_holiday + - auto_seasonality + + """ + dl = DataLoader() + df = dl.load_peyton_manning() + df[TIME_COL] = pd.to_datetime(df[TIME_COL]) + silverkite = SimpleSilverkiteForecast() + silverkite.forecast_simple( + df=df, + time_col=TIME_COL, + value_col=VALUE_COL, + forecast_horizon=7, + auto_holiday=True, + holidays_to_model_separately="auto", + holiday_lookup_countries="auto", + holiday_pre_num_days=2, + holiday_post_num_days=2, + daily_event_df_dict=dict( + custom_event=pd.DataFrame({ + EVENT_DF_DATE_COL: pd.to_datetime(["2010-03-03", "2011-03-03", "2012-03-03"]), + EVENT_DF_LABEL_COL: "event" + }) + ), + auto_growth=True, + growth_term="quadratic", + changepoints_dict=dict( + method="uniform", + n_changepoints=2 + ), + auto_seasonality=True, + yearly_seasonality=0, + quarterly_seasonality="auto", + monthly_seasonality=False, + weekly_seasonality=True, + daily_seasonality=5 + ) + + +def test_quantile_regression(): + """Tests quantile regression fit algorithm.""" + dl = DataLoader() + df = dl.load_peyton_manning() + df[TIME_COL] = pd.to_datetime(df[TIME_COL]) + silverkite = SimpleSilverkiteForecast() + trained_model = silverkite.forecast_simple( + df=df, + time_col=TIME_COL, + value_col=VALUE_COL, + forecast_horizon=7, + holidays_to_model_separately="auto", + holiday_lookup_countries="auto", + holiday_pre_num_days=2, + holiday_post_num_days=2, + growth_term="linear", + changepoints_dict=dict( + method="uniform", + n_changepoints=2 + ), + yearly_seasonality=10, + quarterly_seasonality=False, + monthly_seasonality=False, + weekly_seasonality=4, + daily_seasonality=False, + fit_algorithm="quantile_regression", + fit_algorithm_params={ + "quantile": 0.9, + "alpha": 0 + } + ) + pred = silverkite.predict(df, trained_model=trained_model)["fut_df"] + assert round(sum(pred[VALUE_COL] > df[VALUE_COL]) / len(pred), 1) == 0.9 diff --git a/greykite/tests/algo/uncertainty/conditional/test_conf_interval.py b/greykite/tests/algo/uncertainty/conditional/test_conf_interval.py index 7dc878b..4b5d4b6 100644 --- a/greykite/tests/algo/uncertainty/conditional/test_conf_interval.py +++ b/greykite/tests/algo/uncertainty/conditional/test_conf_interval.py @@ -3,6 +3,7 @@ from greykite.algo.uncertainty.conditional.conf_interval import conf_interval from greykite.algo.uncertainty.conditional.conf_interval import predict_ci from greykite.common.constants import ERR_STD_COL +from greykite.common.constants import QUANTILE_SUMMARY_COL from greykite.common.testing_utils import gen_sliced_df @@ -10,8 +11,8 @@ def data(): """Generate data for tests""" df = gen_sliced_df() - df = df[["x", "z_categ", "y", "residual"]] - new_df = df.iloc[[1, 100, 150, 200, 250, 300, 305, 400, 405, 500, 550, 609]].copy() + df = df[["x", "z_categ", "y", "y_hat", "residual"]] + new_df = df.iloc[[1, 100, 150, 200, 250, 300, 305, 400, 405, 500, 550, 609]].reset_index(drop=True) return {"df": df, "new_df": new_df} @@ -24,8 +25,8 @@ def test_conf_interval_ecdf_method(data): # ``quantile_estimation_method = "ecdf"`` ci_model = conf_interval( df=df, - value_col="y", - residual_col="residual", + distribution_col="residual", + offset_col="y_hat", conditional_cols=["x"], quantiles=[0.005, 0.025, 0.975, 0.995], quantile_estimation_method="ecdf", @@ -38,15 +39,14 @@ def test_conf_interval_ecdf_method(data): pred_df = predict_ci( new_df, ci_model) - - assert list(pred_df.columns) == ["x", "y_quantile_summary", ERR_STD_COL], ( + assert list(pred_df.columns) == list(df.columns) + [QUANTILE_SUMMARY_COL, ERR_STD_COL], ( "pred_df does not have the expected column names") - pred_df["y_quantile_summary"] = pred_df["y_quantile_summary"].apply( + pred_df[QUANTILE_SUMMARY_COL] = pred_df[QUANTILE_SUMMARY_COL].apply( lambda x: tuple(round(e, 2) for e in x)) pred_df[ERR_STD_COL] = round(pred_df[ERR_STD_COL], 2) - assert pred_df["y_quantile_summary"].values[5] == (289.32, 289.38, 291.3, 291.34), ( + assert pred_df[QUANTILE_SUMMARY_COL].values[5] == (290.69, 290.75, 292.67, 292.71), ( "quantiles are incorrect") - assert pred_df["y_quantile_summary"].values[11] == (-5.63, -5.56, -4.13, -4.08), ( + assert pred_df[QUANTILE_SUMMARY_COL].values[11] == (-4.0, -3.93, -2.5, -2.45), ( "quantiles are incorrect") expected_stds = [0.29, 0.42, 0.42, 0.42, 0.42, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.42] @@ -60,8 +60,8 @@ def test_conf_interval_normal_method(data): # ``quantile_estimation_method = "normal_fit"`` ci_model = conf_interval( df=df, - value_col="y", - residual_col="residual", + distribution_col="residual", + offset_col="y", conditional_cols=["x"], quantiles=[0.005, 0.025, 0.975, 0.995], quantile_estimation_method="normal_fit", @@ -74,13 +74,13 @@ def test_conf_interval_normal_method(data): pred_df = predict_ci( new_df, ci_model) - assert list(pred_df.columns) == ["x", "y_quantile_summary", ERR_STD_COL], ( + assert list(pred_df.columns) == list(df.columns) + [QUANTILE_SUMMARY_COL, ERR_STD_COL], ( "pred_df does not have the expected column names") - pred_df["y_quantile_summary"] = pred_df["y_quantile_summary"].apply( + pred_df[QUANTILE_SUMMARY_COL] = pred_df[QUANTILE_SUMMARY_COL].apply( lambda x: tuple(round(e, 2) for e in x)) - assert pred_df["y_quantile_summary"].values[5] == (289.9, 290.25, 292.54, 292.9), ( + assert pred_df[QUANTILE_SUMMARY_COL].values[5] == (289.9, 290.25, 292.54, 292.9), ( "quantiles are incorrect") - assert pred_df["y_quantile_summary"].values[11] == (-5.14, -4.88, -3.24, -2.98), ( + assert pred_df[QUANTILE_SUMMARY_COL].values[11] == (-5.14, -4.88, -3.24, -2.98), ( "quantiles are incorrect") @@ -92,8 +92,8 @@ def test_conf_interval_normal_method_with_bounds(data): # with enforced lower limit (``min_admissible_value``) ci_model = conf_interval( df=df, - value_col="y", - residual_col="residual", + distribution_col="residual", + offset_col="y_hat", conditional_cols=["x"], quantiles=[0.005, 0.025, 0.975, 0.995], quantile_estimation_method="normal_fit", @@ -106,13 +106,13 @@ def test_conf_interval_normal_method_with_bounds(data): pred_df = predict_ci( new_df, ci_model) - assert list(pred_df.columns) == ["x", "y_quantile_summary", ERR_STD_COL], ( + assert list(pred_df.columns) == list(df.columns) + [QUANTILE_SUMMARY_COL, ERR_STD_COL], ( "pred_df does not have the expected column names") - pred_df["y_quantile_summary"] = pred_df["y_quantile_summary"].apply( + pred_df[QUANTILE_SUMMARY_COL] = pred_df[QUANTILE_SUMMARY_COL].apply( lambda x: tuple(round(e, 2) for e in x)) - assert pred_df["y_quantile_summary"].values[5] == (290.0, 290.25, 292.54, 292.9), ( + assert pred_df[QUANTILE_SUMMARY_COL].values[5] == (290.2, 290.56, 292.85, 293.21), ( "quantiles are incorrect") - assert pred_df["y_quantile_summary"].values[11] == (290.0, 290.0, 290.0, 290.0), ( + assert pred_df[QUANTILE_SUMMARY_COL].values[11] == (290.0, 290.0, 290.0, 290.0), ( "quantiles are incorrect") @@ -129,8 +129,8 @@ def test_conf_interval_normal_method_fallback(data): with pytest.warns(Warning): ci_model = conf_interval( df=df, - value_col="y", - residual_col="residual", + distribution_col="residual", + offset_col="y", conditional_cols=["x"], quantiles=[0.005, 0.025, 0.975, 0.995], quantile_estimation_method="normal_fit", @@ -143,13 +143,13 @@ def test_conf_interval_normal_method_fallback(data): pred_df = predict_ci( new_df, ci_model) - assert list(pred_df.columns) == ["x", "y_quantile_summary", ERR_STD_COL], ( + assert list(pred_df.columns) == list(df.columns) + [QUANTILE_SUMMARY_COL, ERR_STD_COL], ( "pred_df does not have the expected column names") - pred_df["y_quantile_summary"] = pred_df["y_quantile_summary"].apply( + pred_df[QUANTILE_SUMMARY_COL] = pred_df[QUANTILE_SUMMARY_COL].apply( lambda x: tuple(round(e, 2) for e in x)) - assert pred_df["y_quantile_summary"].values[5] == (290.31, 290.57, 292.23, 292.49), ( + assert pred_df[QUANTILE_SUMMARY_COL].values[5] == (290.31, 290.57, 292.23, 292.49), ( "quantiles are incorrect") - assert pred_df["y_quantile_summary"].values[11] == (-5.15, -4.89, -3.23, -2.97), ( + assert pred_df[QUANTILE_SUMMARY_COL].values[11] == (-5.15, -4.89, -3.23, -2.97), ( "quantiles are incorrect") @@ -163,8 +163,8 @@ def test_conf_interval_normal_method_multivar_conditionals(data): # with multi-variate ``conditional_cols`` ci_model = conf_interval( df=df, - value_col="y", - residual_col="residual", + distribution_col="residual", + offset_col="y_hat", conditional_cols=["x", "z_categ"], quantiles=[0.005, 0.025, 0.975, 0.995], quantile_estimation_method="normal_fit", @@ -177,27 +177,21 @@ def test_conf_interval_normal_method_multivar_conditionals(data): pred_df = predict_ci( new_df, ci_model) - assert list(pred_df.columns) == ["x", "z_categ", "y_quantile_summary", ERR_STD_COL], ( + assert list(pred_df.columns) == list(df.columns) + [QUANTILE_SUMMARY_COL, ERR_STD_COL], ( "pred_df does not have the expected column names") - pred_df["y_quantile_summary"] = pred_df["y_quantile_summary"].apply( + pred_df[QUANTILE_SUMMARY_COL] = pred_df[QUANTILE_SUMMARY_COL].apply( lambda x: tuple(round(e, 2) for e in x)) - assert pred_df["y_quantile_summary"].values[5] == (289.9, 290.26, 292.54, 292.9), ( + assert pred_df[QUANTILE_SUMMARY_COL].values[5] == (290.2, 290.56, 292.84, 293.2), ( "quantiles are incorrect") - assert pred_df["y_quantile_summary"].values[11] == (-5.15, -4.89, -3.23, -2.97), ( + assert pred_df[QUANTILE_SUMMARY_COL].values[11] == (-4.34, -4.08, -2.42, -2.15), ( "quantiles are incorrect") - -def test_conf_interval_normal_method_no_conditionals(data): - """Testing "conf_interval" function, normal method, with no conditioning.""" - df = data["df"] - new_df = data["new_df"] - # ``quantile_estimation_method = "normal_fit"``; - # with no ``conditional_cols`` + # Tests when `offset_col` is None ci_model = conf_interval( df=df, - value_col="y", - residual_col="residual", - conditional_cols=None, + distribution_col="y", + offset_col=None, + conditional_cols=["x", "z_categ"], quantiles=[0.005, 0.025, 0.975, 0.995], quantile_estimation_method="normal_fit", sample_size_thresh=5, @@ -209,16 +203,49 @@ def test_conf_interval_normal_method_no_conditionals(data): pred_df = predict_ci( new_df, ci_model) - assert list(pred_df.columns) == ["y_quantile_summary", ERR_STD_COL], ( + assert list(pred_df.columns) == list(df.columns) + [QUANTILE_SUMMARY_COL, ERR_STD_COL], ( "pred_df does not have the expected column names") - pred_df["y_quantile_summary"] = pred_df["y_quantile_summary"].apply( + pred_df[QUANTILE_SUMMARY_COL] = pred_df[QUANTILE_SUMMARY_COL].apply( lambda x: tuple(round(e, 2) for e in x)) - assert pred_df["y_quantile_summary"].values[5] == (290.05, 290.37, 292.42, 292.74), ( + assert pred_df[QUANTILE_SUMMARY_COL].values[5] == (-7.56, -5.75, 5.75, 7.56), ( "quantiles are incorrect") - assert pred_df["y_quantile_summary"].values[11] == (-5.41, -5.08, -3.04, -2.72), ( + assert pred_df[QUANTILE_SUMMARY_COL].values[11] == (-51.14, -38.92, 38.92, 51.14), ( "quantiles are incorrect") +def test_conf_interval_normal_method_no_conditionals(data): + """Testing "conf_interval" function, normal method, with no conditioning.""" + df = data["df"] + new_df = data["new_df"] + # ``quantile_estimation_method = "normal_fit"``; + # with no ``conditional_cols`` + for conditional_cols in [None, []]: + ci_model = conf_interval( + df=df, + distribution_col="residual", + offset_col="y", + conditional_cols=conditional_cols, + quantiles=[0.005, 0.025, 0.975, 0.995], + quantile_estimation_method="normal_fit", + sample_size_thresh=5, + small_sample_size_method="std_quantiles", + small_sample_size_quantile=0.95, + min_admissible_value=None, + max_admissible_value=None) + + pred_df = predict_ci( + new_df, + ci_model) + assert list(pred_df.columns) == list(df.columns) + [QUANTILE_SUMMARY_COL, ERR_STD_COL], ( + "pred_df does not have the expected column names") + pred_df[QUANTILE_SUMMARY_COL] = pred_df[QUANTILE_SUMMARY_COL].apply( + lambda x: tuple(round(e, 2) for e in x)) + assert pred_df[QUANTILE_SUMMARY_COL].values[5] == (290.05, 290.37, 292.42, 292.74), ( + "quantiles are incorrect") + assert pred_df[QUANTILE_SUMMARY_COL].values[11] == (-5.41, -5.08, -3.04, -2.72), ( + "quantiles are incorrect") + + def test_conf_interval_normal_method_no_small_sample_calc(data): """Testing "conf_interval" function, normal method, no small sample size calculation""" @@ -228,8 +255,8 @@ def test_conf_interval_normal_method_no_small_sample_calc(data): # with no small sample size calculation ci_model = conf_interval( df=df, - value_col="y", - residual_col="residual", + distribution_col="residual", + offset_col="y", conditional_cols=["x"], quantiles=[0.005, 0.025, 0.975, 0.995], quantile_estimation_method="normal_fit", @@ -242,13 +269,13 @@ def test_conf_interval_normal_method_no_small_sample_calc(data): pred_df = predict_ci( new_df, ci_model) - assert list(pred_df.columns) == ["x", "y_quantile_summary", ERR_STD_COL], ( + assert list(pred_df.columns) == list(df.columns) + [QUANTILE_SUMMARY_COL, ERR_STD_COL], ( "pred_df does not have the expected column names") - pred_df["y_quantile_summary"] = pred_df["y_quantile_summary"].apply( + pred_df[QUANTILE_SUMMARY_COL] = pred_df[QUANTILE_SUMMARY_COL].apply( lambda x: tuple(round(e, 2) for e in x)) - assert pred_df["y_quantile_summary"].values[5] == (289.9, 290.25, 292.54, 292.9), ( + assert pred_df[QUANTILE_SUMMARY_COL].values[5] == (289.9, 290.25, 292.54, 292.9), ( "quantiles are incorrect") - assert pred_df["y_quantile_summary"].values[11] == (-5.64, -5.26, -2.86, -2.49), ( + assert pred_df[QUANTILE_SUMMARY_COL].values[11] == (-5.64, -5.26, -2.86, -2.49), ( "quantiles are incorrect") @@ -261,8 +288,8 @@ def test_conf_interval_normal_method_exception(data): match="small_sample_size_method non-implemented-method is not implemented."): conf_interval( df=df, - value_col="y", - residual_col="residual", + distribution_col="residual", + offset_col="y", conditional_cols=None, quantiles=[0.005, 0.025, 0.975, 0.995], quantile_estimation_method="normal_fit", diff --git a/greykite/tests/algo/uncertainty/conditional/test_estimate_distribution.py b/greykite/tests/algo/uncertainty/conditional/test_estimate_distribution.py index f8d8491..e87ab8a 100644 --- a/greykite/tests/algo/uncertainty/conditional/test_estimate_distribution.py +++ b/greykite/tests/algo/uncertainty/conditional/test_estimate_distribution.py @@ -1,82 +1,69 @@ import pandas as pd from greykite.algo.uncertainty.conditional.estimate_distribution import estimate_empirical_distribution +from greykite.common.python_utils import assert_equal def test_estimate_empirical_distribution(): """Testing estimate_empirical_distribution function""" df = pd.DataFrame({ "x": ["a"]*100 + ["b"]*100, - "y": list(range(100, 200)) + list(range(200, 300))}) + "y": list(range(100, 200)) + list(range(200, 300)) + }) + expected_ecdf_df = pd.DataFrame({ + "x": ["a", "b"], + "y_ecdf_quantile_summary": [(-24.75, 0.0, 24.75), (-24.75, 0.0, 24.75)], + "y_min": [100, 200], + "y_mean": [149.5, 249.5], + "y_max": [199, 299], + "y_std": [29.011492, 29.011492], + "y_count": [100, 100] + }) + expected_ecdf_df_overall = pd.DataFrame({ + "y_ecdf_quantile_summary": [(-49.75, 0.0, 49.75)], + "y_min": [100], + "y_mean": [199.5], + "y_max": [299], + "y_std": [57.87915], + "y_count": [200] + }) - # test for the case with specified quantile_grid_size + # Tests for the case with specified quantile_grid_size model = estimate_empirical_distribution( df=df, - value_col="y", + distribution_col="y", quantile_grid_size=0.25, quantiles=None, - conditional_cols=["x"]) + conditional_cols=["x"] + ) + assert_equal(model["ecdf_df"], expected_ecdf_df) + assert_equal(model["ecdf_df_overall"], expected_ecdf_df_overall) - # checking if the output dataframes have the expected column names - expected_cols_overall = ["y_quantile_summary", "y_min", "y_mean", "y_max", "y_std", "y_count"] - expected_cols = ["x"] + expected_cols_overall - assert list(model["ecdf_df_overall"].columns) == expected_cols_overall - assert list(model["ecdf_df"].columns) == expected_cols - - assert model["ecdf_df_overall"]["y_min"].values.round(1) == 100.0, ( - "minimum of response is not calculated correctly") - assert model["ecdf_df_overall"]["y_quantile_summary"].values[0][0].round(2) == 149.75, ( - "quantile summary is not correct") - assert model["ecdf_df_overall"]["y_std"].values.round(2) == 57.88, ( - "standard deviation of response is not calculated correctly") - - assert model["ecdf_df"].iloc[0]["y_quantile_summary"] == (124.75, 149.5, 174.25), ( - "quantile summary is not correct") - assert model["ecdf_df"].iloc[1]["y_quantile_summary"] == (224.75, 249.5, 274.25), ( - "quantile summary is not correct") - - assert model["ecdf_df"].iloc[0]["y_count"] == 100, "sample size (count) is not correct" - assert model["ecdf_df_overall"].iloc[0]["y_count"] == 200, "overall sample size (count) is not correct" - - # test for the case with specified quantiles argument - model = estimate_empirical_distribution( - df=df, - value_col="y", - quantile_grid_size=None, - quantiles=[0.25, 0.50, 0.75], - conditional_cols=["x"]) - - assert model["ecdf_df_overall"]["y_min"].values.round(1) == 100.0, ( - "minimum of response is not calculated correctly") - assert model["ecdf_df_overall"]["y_quantile_summary"].values[0][0].round(2) == 149.75, ( - "quantile summary is not correct") - assert model["ecdf_df_overall"]["y_std"].values.round(2) == 57.88, ( - "standard deviation of response is not calculated correctly") - - assert model["ecdf_df"].iloc[0]["y_quantile_summary"] == (124.75, 149.5, 174.25), ( - "quantile summary is not correct") - assert model["ecdf_df"].iloc[1]["y_quantile_summary"] == (224.75, 249.5, 274.25), ( - "quantile summary is not correct") - - # test for the case with conditional_cols = None + # Tests for the case with specified quantiles argument model = estimate_empirical_distribution( df=df, - value_col="y", + distribution_col="y", quantile_grid_size=None, quantiles=[0.25, 0.50, 0.75], - conditional_cols=None) - - assert model["ecdf_df_overall"]["y_min"].values.round(1) == 100.0, ( - "minimum of response is not calculated correctly") - assert model["ecdf_df_overall"]["y_quantile_summary"].values[0][0].round(2) == 149.75, ( - "quantile summary is not correct") - assert model["ecdf_df_overall"]["y_std"].values.round(2) == 57.88, ( - "standard deviation of response is not calculated correctly") + conditional_cols=["x"], + remove_conditional_mean=True + ) + assert_equal(model["ecdf_df"], expected_ecdf_df) + assert_equal(model["ecdf_df_overall"], expected_ecdf_df_overall) - # we expect same values for ecdf_df because conditional_cols = None - assert model["ecdf_df"]["y_min"].values.round(1) == 100.0, ( - "minimum of response is not calculated correctly") - assert model["ecdf_df"]["y_quantile_summary"].values[0][0].round(2) == 149.75, ( - "quantile summary is not correct") - assert model["ecdf_df"]["y_std"].values.round(2) == 57.88, ( - "standard deviation of response is not calculated correctly") + # Tests for the case when ``conditional_col`` is not given and + # ``remove_conditional_col`` is False + expected_ecdf_df_overall["y_ecdf_quantile_summary"] = expected_ecdf_df_overall["y_ecdf_quantile_summary"].apply( + lambda x: tuple(e + expected_ecdf_df_overall["y_mean"].iloc[0] for e in x)) + for conditional_cols in [None, []]: + model = estimate_empirical_distribution( + df=df, + distribution_col="y", + quantile_grid_size=None, + quantiles=[0.25, 0.50, 0.75], + conditional_cols=conditional_cols, + remove_conditional_mean=False + ) + # No conditional col is given, hence ecdf_df is same as ecdf_df_overall + assert_equal(model["ecdf_df"], expected_ecdf_df_overall) + assert_equal(model["ecdf_df_overall"], expected_ecdf_df_overall) diff --git a/greykite/tests/algo/uncertainty/conditional/test_normal_quantiles.py b/greykite/tests/algo/uncertainty/conditional/test_normal_quantiles.py index 36ae242..9ef2212 100644 --- a/greykite/tests/algo/uncertainty/conditional/test_normal_quantiles.py +++ b/greykite/tests/algo/uncertainty/conditional/test_normal_quantiles.py @@ -11,7 +11,7 @@ def test_normal_quantiles_df(): model_dict = estimate_empirical_distribution( df=df, - value_col="y", + distribution_col="y", quantile_grid_size=None, quantiles=[0.025, 0.975], conditional_cols=["x"]) @@ -39,18 +39,21 @@ def test_normal_quantiles_df(): assert expected_df.equals(quantiles_df), "quantiles are not calculated correctly" # check the case with fixed_mean + quantile_summary_col = "custom_quantiles" quantiles_df = normal_quantiles_df( df=ecdf_df, mean_col=None, std_col="y_std", fixed_mean=0, - quantiles=(0.025, 0.975)) + quantiles=(0.025, 0.975), + quantile_summary_col=quantile_summary_col + ) - quantiles_df = quantiles_df[["x", "normal_quantiles"]].copy() - quantiles_df["normal_quantiles"] = quantiles_df["normal_quantiles"].apply(lambda x: tuple(e.round(2) for e in x)) + quantiles_df = quantiles_df[["x", quantile_summary_col]].copy() + quantiles_df[quantile_summary_col] = quantiles_df[quantile_summary_col].apply(lambda x: tuple(e.round(2) for e in x)) expected_df = pd.DataFrame() expected_df["x"] = ["a", "b", "c", "d", "e"] - expected_df["normal_quantiles"] = [ + expected_df[quantile_summary_col] = [ (-6.04, 6.04), (-5.85, 5.85), (-5.83, 5.83), diff --git a/greykite/tests/common/features/test_adjust_anomalous_data.py b/greykite/tests/common/features/test_adjust_anomalous_data.py index 57e09fc..c925ea8 100644 --- a/greykite/tests/common/features/test_adjust_anomalous_data.py +++ b/greykite/tests/common/features/test_adjust_anomalous_data.py @@ -3,9 +3,9 @@ import pytest from greykite.common.constants import ADJUSTMENT_DELTA_COL -from greykite.common.constants import END_DATE_COL +from greykite.common.constants import END_TIME_COL from greykite.common.constants import METRIC_COL -from greykite.common.constants import START_DATE_COL +from greykite.common.constants import START_TIME_COL from greykite.common.constants import TIME_COL from greykite.common.features.adjust_anomalous_data import adjust_anomalous_data from greykite.common.testing_utils import generate_anomalous_data @@ -29,8 +29,8 @@ def test_adjust_anomalous_data(data): time_col=TIME_COL, value_col=value_col, anomaly_df=anomaly_df, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=ADJUSTMENT_DELTA_COL, filter_by_dict={ METRIC_COL: value_col, @@ -51,8 +51,8 @@ def test_adjust_anomalous_data(data): time_col=TIME_COL, value_col=value_col, anomaly_df=anomaly_df, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=ADJUSTMENT_DELTA_COL, filter_by_dict={ "platform": "MOBILE", @@ -73,8 +73,8 @@ def test_adjust_anomalous_data(data): time_col=TIME_COL, value_col=value_col, anomaly_df=anomaly_df, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=ADJUSTMENT_DELTA_COL, filter_by_dict={ METRIC_COL: value_col, @@ -96,8 +96,8 @@ def test_adjust_anomalous_data(data): time_col=TIME_COL, value_col="z", anomaly_df=anomaly_df, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=ADJUSTMENT_DELTA_COL, filter_by_dict={ METRIC_COL: value_col, @@ -118,8 +118,8 @@ def test_adjust_anomalous_data(data): time_col=TIME_COL, value_col="z", anomaly_df=anomaly_df, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=ADJUSTMENT_DELTA_COL, filter_by_dict={ METRIC_COL: value_col, @@ -139,8 +139,8 @@ def test_adjust_anomalous_data(data): time_col=TIME_COL, value_col="y", anomaly_df=anomaly_df, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=ADJUSTMENT_DELTA_COL, filter_by_dict={METRIC_COL: value_col}, filter_by_value_col=None) @@ -158,8 +158,8 @@ def test_adjust_anomalous_data(data): time_col=TIME_COL, value_col="y", anomaly_df=anomaly_df, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=ADJUSTMENT_DELTA_COL, filter_by_dict=None, filter_by_value_col=METRIC_COL) @@ -178,8 +178,8 @@ def test_adjust_anomalous_data(data): time_col=TIME_COL, value_col=value_col, anomaly_df=anomaly_df, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=ADJUSTMENT_DELTA_COL, filter_by_dict=None, filter_by_value_col=None) @@ -199,8 +199,8 @@ def test_adjust_anomalous_data(data): time_col=TIME_COL, value_col=value_col, anomaly_df=anomaly_df, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=None, filter_by_dict=None, filter_by_value_col=None) @@ -219,8 +219,8 @@ def test_adjust_anomalous_data(data): time_col=TIME_COL, value_col=value_col, anomaly_df=anomaly_df, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=None, filter_by_dict={ METRIC_COL: ("y", "z"), @@ -239,16 +239,16 @@ def test_adjust_anomalous_data(data): # Successful date conversion for comparison. # The provided dates are strings in `anomaly_df_format`, datetime in `df_raw`. anomaly_df_format = anomaly_df.copy() - anomaly_df_format[START_DATE_COL] = ["1/1/2018", "1/4/2018", "1/8/2018", "1/10/2018"] - anomaly_df_format[END_DATE_COL] = ["1/2/2018", "1/6/2018", "1/9/2018", "1/10/2018"] + anomaly_df_format[START_TIME_COL] = ["1/1/2018", "1/4/2018", "1/8/2018", "1/10/2018"] + anomaly_df_format[END_TIME_COL] = ["1/2/2018", "1/6/2018", "1/9/2018", "1/10/2018"] value_col = "y" adj_df_info = adjust_anomalous_data( df=df_raw, time_col=TIME_COL, value_col=value_col, anomaly_df=anomaly_df_format, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=None, filter_by_dict={ METRIC_COL: ("y", "z"), @@ -265,8 +265,8 @@ def test_adjust_anomalous_data(data): adj_values=adj_values) # Checks failure to convert date - anomaly_df_format[START_DATE_COL] = ["999/999/2018", "1/4/2018", "1/8/2018", "1/10/2018"] - anomaly_df_format[END_DATE_COL] = ["999/999/2019", "1/6/2018", "1/9/2018", "1/10/2018"] + anomaly_df_format[START_TIME_COL] = ["999/999/2018", "1/4/2018", "1/8/2018", "1/10/2018"] + anomaly_df_format[END_TIME_COL] = ["999/999/2019", "1/6/2018", "1/9/2018", "1/10/2018"] with pytest.warns( UserWarning, match=r"Dates could not be parsed by `pandas.to_datetime`, using string comparison " @@ -277,8 +277,8 @@ def test_adjust_anomalous_data(data): time_col=TIME_COL, value_col=value_col, anomaly_df=anomaly_df_format, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=None, filter_by_dict={ METRIC_COL: ("y", "z"), @@ -298,15 +298,15 @@ def test_adjust_anomalous_data(data): time_col=TIME_COL, value_col=value_col, anomaly_df=anomaly_df, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=None, filter_by_dict=None, filter_by_value_col=None) # Checks the bad timestamps exception where a start date is after end date # Test is done by inputting the column names for - # ``start_date_col`` and ``end_date_col`` in reverse order. + # ``start_time_col`` and ``end_time_col`` in reverse order. expected_match = "End Time:" with pytest.raises(ValueError, match=expected_match): value_col = "y" @@ -315,8 +315,8 @@ def test_adjust_anomalous_data(data): time_col=TIME_COL, value_col=value_col, anomaly_df=anomaly_df, - start_date_col=END_DATE_COL, - end_date_col=START_DATE_COL, + start_time_col=END_TIME_COL, + end_time_col=START_TIME_COL, adjustment_delta_col=None, filter_by_dict=None, filter_by_value_col=None) @@ -329,8 +329,8 @@ def test_adjust_anomalous_data(data): time_col=TIME_COL, value_col=value_col, anomaly_df=anomaly_df, - start_date_col=START_DATE_COL, - end_date_col=END_DATE_COL, + start_time_col=START_TIME_COL, + end_time_col=END_TIME_COL, adjustment_delta_col=None, filter_by_dict={"device": "iPhone"}, filter_by_value_col=None) diff --git a/greykite/tests/common/features/test_normalize.py b/greykite/tests/common/features/test_normalize.py index 347783c..5bb936a 100644 --- a/greykite/tests/common/features/test_normalize.py +++ b/greykite/tests/common/features/test_normalize.py @@ -6,7 +6,7 @@ def test_normalize_df(): """Testing `normalize_df`""" - df = pd.DataFrame({"x": [1, 2, 3], "y": [1, 1, 1]}) + df = pd.DataFrame({"x": [2, 1, 3], "y": [1, 1, 1]}) expected_warning = "was dropped during normalization" @@ -21,7 +21,20 @@ def test_normalize_df(): normalize_df_func = normalization_info["normalize_df_func"] normalized_df = normalize_df_func(df) assert list(normalized_df.columns) == ["x"] - assert list(normalized_df["x"].values) == [-1, 0, 1] + assert list(normalized_df["x"].values) == [0, -1, 1] + + # `"zero_at_origin"` method + with pytest.warns(Warning) as record: + normalization_info = normalize_df( + df=df, + method="zero_at_origin", + drop_degenerate_cols=True) + assert expected_warning in record[0].message.args[0] + + normalize_df_func = normalization_info["normalize_df_func"] + normalized_df = normalize_df_func(df) + assert list(normalized_df.columns) == ["x"] + assert list(normalized_df["x"].values) == [0, -0.5, 0.5] # `"statistical"` method with replacement of zero denominator normalization_info = normalize_df( @@ -33,21 +46,34 @@ def test_normalize_df(): normalize_df_func = normalization_info["normalize_df_func"] normalized_df = normalize_df_func(df) assert list(normalized_df.columns) == ["x", "y"] - assert list(normalized_df["x"].values) == [-1, 0, 1] + assert list(normalized_df["x"].values) == [0, -1, 1] assert list(normalized_df["y"].values) == [0, 0, 0] - # `"min_max"` method + # `"zero_to_one"` method + with pytest.warns(Warning) as record: + normalization_info = normalize_df( + df=df, + method="zero_to_one", + drop_degenerate_cols=True) + assert expected_warning in record[0].message.args[0] + + normalize_df_func = normalization_info["normalize_df_func"] + normalized_df = normalize_df_func(df) + assert list(normalized_df.columns) == ["x"] + assert list(normalized_df["x"].values) == [0.5, 0, 1] + + # `"minus_half_to_half"` method with pytest.warns(Warning) as record: normalization_info = normalize_df( df=df, - method="min_max", + method="minus_half_to_half", drop_degenerate_cols=True) assert expected_warning in record[0].message.args[0] normalize_df_func = normalization_info["normalize_df_func"] normalized_df = normalize_df_func(df) assert list(normalized_df.columns) == ["x"] - assert list(normalized_df["x"].values) == [0, 0.5, 1] + assert list(normalized_df["x"].values) == [0, -0.5, 0.5] # apply to a new dataframe with new elements new_df = pd.DataFrame({"x": [1, 2, 3, 4, -1], "y": [1, 1, 1, 5, 6]}) @@ -72,7 +98,7 @@ def test_normalize_df(): normalize_df_func = normalization_info["normalize_df_func"] normalized_df = normalize_df_func(df) assert list(normalized_df.columns) == ["x", "y"] - assert list(normalized_df["x"].values) == [-1, 0, 1] + assert list(normalized_df["x"].values) == [0, -1, 1] assert sum(normalized_df["y"].isnull()) == 3 # Testing for raising exception if the `method` is not available diff --git a/greykite/tests/common/features/test_timeseries_features.py b/greykite/tests/common/features/test_timeseries_features.py index 455be1f..f782c1d 100644 --- a/greykite/tests/common/features/test_timeseries_features.py +++ b/greykite/tests/common/features/test_timeseries_features.py @@ -100,12 +100,16 @@ def test_build_time_features_df(): assert time_df["hour"][0] == 0 assert time_df["minute"][0] == 0 assert time_df["second"][0] == 0 + assert time_df["year_quarter"][24*80] == "2019-1" assert time_df["year_month"][0] == "2019-01" assert time_df["year_woy"][0] == "2019_01" assert time_df["month_dom"][0] == "01/01" assert time_df["year_woy_dow"][0] == "2019_01_2" assert time_df["dow_hr"][0] == "2_00" assert time_df["dow_hr_min"][0] == "2_00_00" + assert time_df["year_iso"].iloc[-1] == 2020 + assert time_df["year_woy_iso"].iloc[-1] == "2020_01" + assert time_df["year_woy_dow_iso"].iloc[-1] == "2020_01_2" assert time_df["tod"][0] == 0.0 assert time_df["tow"][0] == 1.0 assert time_df["tom"][0] == 0.0 / 31 @@ -253,7 +257,7 @@ def test_get_holidays(): assert uk_df.loc[row_index, EVENT_DF_LABEL_COL].values[0] == "Good Friday" us_df = res_code["US"] row_index = us_df[EVENT_DF_DATE_COL] == "2017-01-16" - assert us_df.loc[row_index, EVENT_DF_LABEL_COL].values[0] == "Martin Luther King, Jr. Day" + assert us_df.loc[row_index, EVENT_DF_LABEL_COL].values[0] == "Martin Luther King Jr. Day" cn_df = res_code["CN"] row_index = cn_df[EVENT_DF_DATE_COL] == "2017-01-28" assert cn_df.loc[row_index, EVENT_DF_LABEL_COL].values[0] == "Chinese New Year" @@ -272,6 +276,9 @@ def test_get_holidays(): for code_name, full_name in names: assert res_code[code_name].equals(res_full[full_name]) + for country, holidays in res_full.items(): + assert holidays[EVENT_DF_LABEL_COL].str.contains("/").sum() == 0, "Holiday names cannot contain '/'!" + with pytest.raises(AttributeError, match="Holidays in unknown country are not currently supported!"): get_holidays(["unknown country"], year_start=2017, year_end=2025) @@ -281,7 +288,7 @@ def test_get_available_holiday_lookup_countries(): valid_countries = get_available_holiday_lookup_countries() assert "Croatia" in valid_countries assert "datetime" not in valid_countries # imported classes are excluded - assert len(valid_countries) == 112 + assert len(valid_countries) == 289 countries = ["IN", "India", "US", "UnitedStates", "UK"] valid_countries = get_available_holiday_lookup_countries(countries) @@ -313,8 +320,10 @@ def test_get_available_holidays_in_countries(): "Columbus Day", "Independence Day", "Independence Day (Observed)", + "Juneteenth National Independence Day", + "Juneteenth National Independence Day (Observed)", "Labor Day", - "Martin Luther King, Jr. Day", + "Martin Luther King Jr. Day", "Memorial Day", "New Year's Day", "New Year's Day (Observed)", @@ -338,8 +347,10 @@ def test_get_available_holidays_across_countries(): "Dragon Boat Festival", "Independence Day", "Independence Day (Observed)", + "Juneteenth National Independence Day", + "Juneteenth National Independence Day (Observed)", "Labor Day", - "Martin Luther King, Jr. Day", + "Martin Luther King Jr. Day", "Memorial Day", "Mid-Autumn Festival", "National Day", diff --git a/greykite/tests/common/features/test_timeseries_impute.py b/greykite/tests/common/features/test_timeseries_impute.py index 3e15424..5f42b09 100644 --- a/greykite/tests/common/features/test_timeseries_impute.py +++ b/greykite/tests/common/features/test_timeseries_impute.py @@ -17,7 +17,7 @@ def test_impute_with_lags(): df=df, value_col="y", orders=[7], - agg_func=np.mean, + agg_func="mean", iter_num=1) assert impute_info["initial_missing_num"] == 3 @@ -33,7 +33,7 @@ def test_impute_with_lags(): df=df, value_col="y", orders=[7, 14, 21], - agg_func=np.mean, + agg_func="mean", iter_num=1) assert impute_info["initial_missing_num"] == 3 @@ -49,7 +49,7 @@ def test_impute_with_lags(): df=df, value_col="y", orders=[7, 14, 21], - agg_func=np.mean, + agg_func="mean", iter_num=10) # large ``iter_num`` assert impute_info["initial_missing_num"] == 3 @@ -59,19 +59,17 @@ def test_impute_with_lags(): assert list(imputed_df["y"].values) == ( list(range(70)) + [56, 57, 58]) - # making sure the ``nan_agg_func`` is working + # NAs are ignored when a string `agg_func` is passed df = pd.DataFrame({"y": [1, 2, 3, np.nan, 5, 6, np.nan]}) impute_info = impute_with_lags( df=df, value_col="y", orders=[2, 3, 4], - agg_func=np.mean, + agg_func="mean", iter_num=1) - assert impute_info["initial_missing_num"] == 2 assert impute_info["final_missing_num"] == 0 imputed_df = impute_info["df"] - # since the lag orders are ``[2, 3, 4]`` # we expect the last value of the series (which is missing) # to be imputed to the average of ``[3, np.nan, 5]`` @@ -79,6 +77,20 @@ def test_impute_with_lags(): assert list(imputed_df["y"].values) == ( [1, 2, 3, 1.5, 5, 6, 4]) + # NAs are ignored when a function `agg_func` is passed + df = pd.DataFrame({"y": [1, 2, 3, np.nan, 5, 6, np.nan]}) + impute_info = impute_with_lags( + df=df, + value_col="y", + orders=[2, 3, 4], + agg_func=np.mean, + iter_num=1) + assert impute_info["initial_missing_num"] == 2 + assert impute_info["final_missing_num"] == 0 + imputed_df = impute_info["df"] + assert list(imputed_df["y"].values) == ( + [1, 2, 3, 1.5, 5, 6, 4]) + # The case where one iteration will not impute all # but two iterations will df = pd.DataFrame({"y": list(range(63)) + [np.nan]*10}) diff --git a/greykite/tests/common/features/test_timeseries_lags.py b/greykite/tests/common/features/test_timeseries_lags.py index 7194888..79fc539 100644 --- a/greykite/tests/common/features/test_timeseries_lags.py +++ b/greykite/tests/common/features/test_timeseries_lags.py @@ -7,6 +7,7 @@ from greykite.common.features.timeseries_lags import build_autoreg_df_multi from greykite.common.features.timeseries_lags import build_lag_df from greykite.common.features.timeseries_lags import min_max_lag_order +from greykite.common.python_utils import assert_equal def test_build_lag_df(): @@ -221,6 +222,15 @@ def test_build_agg_lag_df(): assert agg_lag_df["x_avglag_1_to_8"].values[7].round(1) == 2.3, ( "aggregated lags are not correct") + # agg_func "mean" produces the same result + assert_equal(agg_lag_df, build_agg_lag_df( + value_col="x", + df=df, + orders_list=[[1, 2, 5], [1, 3, 8], [2, 3, 4]], + interval_list=[(1, 5), (1, 8)], + agg_func="mean", + agg_name="avglag")["agg_lag_df"]) + # check for Exception being raised for repeated orders with pytest.raises( Exception, diff --git a/greykite/tests/common/test_aggregation_function_enum.py b/greykite/tests/common/test_aggregation_function_enum.py new file mode 100644 index 0000000..67b939e --- /dev/null +++ b/greykite/tests/common/test_aggregation_function_enum.py @@ -0,0 +1,14 @@ +import numpy as np + +from greykite.common.aggregation_function_enum import AggregationFunctionEnum + + +def test_aggregate_function_enum(): + """Tests the functions in ``AggregationFunctionEnum``.""" + array = np.array([1, 2, 6]) + assert AggregationFunctionEnum.mean.value(array) == 3 + assert AggregationFunctionEnum.median.value(array) == 2 + assert AggregationFunctionEnum.nanmean.value(array) == 3 + assert AggregationFunctionEnum.maximum.value(array) == 6 + assert AggregationFunctionEnum.minimum.value(array) == 1 + assert AggregationFunctionEnum.weighted_average.value(array) == 3 diff --git a/greykite/tests/common/test_compare_two_dfs_on_index.py b/greykite/tests/common/test_compare_two_dfs_on_index.py new file mode 100644 index 0000000..181a2e2 --- /dev/null +++ b/greykite/tests/common/test_compare_two_dfs_on_index.py @@ -0,0 +1,77 @@ +import pandas as pd + +from greykite.common.compare_two_dfs_on_index import compare_two_dfs_on_index + + +def test_compare_two_dfs_on_index(): + + n = 3 + df1 = pd.DataFrame({ + "x": range(n), + "y": [1.0, 2.0, 3.0], + "z": [-1.0, -2.0, -3.0] + }) + + df2 = pd.DataFrame({ + "x": range(n), + "y": [1.0, 2.0, 6.0], + "z": [-1.0, -2.0, -3.3] + }) + + res = compare_two_dfs_on_index( + dfs=[df1, df2], + df_labels=["one", "two"], + index_col="x", + diff_cols=None, + relative_diff=False) + + diff_df = res["diff_df"] + diff_fig = res["diff_fig"] + + expected_diff_df = pd.DataFrame({ + "x": range(n), + "y": [0.0, 0.0, 3.0], + "z": [0.0, 0.0, -0.30]}) + + assert diff_fig.layout.title.text == "change in variables from one to two" + assert len(diff_fig.data) == 2 + assert diff_df.round(2).equals(expected_diff_df.round(2)) + + # Selects columns to be differenced + res = compare_two_dfs_on_index( + dfs=[df1, df2], + df_labels=["one", "two"], + index_col="x", + diff_cols=["y"], + relative_diff=False) + + diff_df = res["diff_df"] + diff_fig = res["diff_fig"] + + expected_diff_df = pd.DataFrame({ + "x": range(n), + "y": [0.0, 0.0, 3.0]}) + + assert diff_fig.layout.title.text == "change in variables from one to two" + assert len(diff_fig.data) == 1 + assert diff_df.round(2).equals(expected_diff_df.round(2)) + + # Uses relative difference + res = compare_two_dfs_on_index( + dfs=[df1, df2], + df_labels=["one", "two"], + index_col="x", + diff_cols=None, + relative_diff=True) + + diff_df = res["diff_df"] + diff_fig = res["diff_fig"] + + expected_diff_df = pd.DataFrame({ + "x": range(n), + "y": [0.0, 0.0, 1.0], + "z": [0.0, 0.0, -0.1]}) + + assert diff_fig.layout.title.text == "change in variables from one to two" + assert len(diff_fig.data) == 2 + assert diff_df.round(2).equals(expected_diff_df.round(2)) diff --git a/greykite/tests/common/test_data_loader.py b/greykite/tests/common/test_data_loader.py index 5da2c1e..5c8ff02 100644 --- a/greykite/tests/common/test_data_loader.py +++ b/greykite/tests/common/test_data_loader.py @@ -46,7 +46,9 @@ def test_get_data_names(): "daily_hierarchical_actuals", "daily_hierarchical_forecasts", "daily_istanbul_stock", - "daily_peyton_manning"} + "daily_peyton_manning", + "daily_bitcoin_transactions" + } def test_get_aggregated_data(): @@ -105,6 +107,10 @@ def test_get_data_inventory(): "hourly_traffic_volume", "hourly_bikesharing", "hourly_beijing_pm", + "hourly_solarpower", + "hourly_windpower", + "hourly_electricity", + "hourly_sf_traffic", "daily_temperature_australia", "daily_demand_order", "daily_female_births", @@ -112,8 +118,11 @@ def test_get_data_inventory(): "daily_hierarchical_forecasts", "daily_istanbul_stock", "daily_peyton_manning", + "daily_bitcoin_transactions", "monthly_shampoo", - "monthly_sunspot" + "monthly_sunspot", + "monthly_sunspot_monash", + "monthly_fred_housing" } @@ -196,6 +205,106 @@ def test_load_hourly_beijing_pm(): assert df.shape == (60, len(agg_func) + 1) +def test_load_solarpower(): + """Tests load_solarpower function.""" + dl = DataLoader() + df = dl.load_solarpower() + assert list(df.columns) == ["ts", "y"] + assert df.shape == (8220, 2) + + agg_func = {"y": "mean"} + df = dl.load_solarpower(agg_freq="daily", agg_func=agg_func) + assert TIME_COL in df.columns + assert df.shape == (343, 2) + df = dl.load_solarpower(agg_freq="weekly", agg_func=agg_func) + assert TIME_COL in df.columns + assert df.shape == (50, 2) + df = dl.load_solarpower(agg_freq="monthly", agg_func=agg_func) + assert TIME_COL in df.columns + assert df.shape == (12, 2) + + +def test_load_windpower(): + """Tests load_windpower function.""" + dl = DataLoader() + df = dl.load_windpower() + assert list(df.columns) == ["ts", "y"] + assert df.shape == (8220, 2) + + agg_func = {"y": "mean"} + df = dl.load_windpower(agg_freq="daily", agg_func=agg_func) + assert TIME_COL in df.columns + assert df.shape == (343, 2) + df = dl.load_windpower(agg_freq="weekly", agg_func=agg_func) + assert TIME_COL in df.columns + assert df.shape == (50, 2) + df = dl.load_windpower(agg_freq="monthly", agg_func=agg_func) + assert TIME_COL in df.columns + assert df.shape == (12, 2) + + +def test_load_electricity(): + """Tests load_electricity function.""" + dl = DataLoader() + df = dl.load_electricity() + assert list(df.columns) == ["ts", "y"] + assert df.shape == (26304, 2) + + agg_func = {"y": "mean"} + df = dl.load_electricity(agg_freq="daily", agg_func=agg_func) + assert TIME_COL in df.columns + assert df.shape == (1096, 2) + df = dl.load_electricity(agg_freq="weekly", agg_func=agg_func) + assert TIME_COL in df.columns + assert df.shape == (158, 2) + df = dl.load_electricity(agg_freq="monthly", agg_func=agg_func) + assert TIME_COL in df.columns + assert df.shape == (36, 2) + + +def test_load_sf_traffic(): + """Tests load_sf_traffic function.""" + dl = DataLoader() + df = dl.load_sf_traffic() + assert list(df.columns) == ["ts", "y"] + assert df.shape == (17544, 2) + + agg_func = {"y": "mean"} + df = dl.load_sf_traffic(agg_freq="daily", agg_func=agg_func) + assert TIME_COL in df.columns + assert df.shape == (731, 2) + df = dl.load_sf_traffic(agg_freq="weekly", agg_func=agg_func) + assert TIME_COL in df.columns + assert df.shape == (105, 2) + df = dl.load_sf_traffic(agg_freq="monthly", agg_func=agg_func) + assert TIME_COL in df.columns + assert df.shape == (24, 2) + + +def test_load_bitcoin_transactions(): + """Tests load_bitcoin_transactions function.""" + dl = DataLoader() + df = dl.load_bitcoin_transactions() + assert list(df.columns) == ["ts", "y"] + assert df.shape == (4572, 2) + + agg_func = {"y": "mean"} + df = dl.load_bitcoin_transactions(agg_freq="weekly", agg_func=agg_func) + assert TIME_COL in df.columns + assert df.shape == (654, 2) + df = dl.load_bitcoin_transactions(agg_freq="monthly", agg_func=agg_func) + assert TIME_COL in df.columns + assert df.shape == (151, 2) + + +def test_load_sunspot(): + """Tests load_sunspot function.""" + dl = DataLoader() + df = dl.load_sunspot() + assert list(df.columns) == ["ts", "y"] + assert df.shape == (2429, 2) + + def test_load_hierarchical(): dl = DataLoader() actuals = dl.load_hierarchical_actuals() diff --git a/greykite/tests/common/test_evaluation.py b/greykite/tests/common/test_evaluation.py index 91beb1e..52add4e 100644 --- a/greykite/tests/common/test_evaluation.py +++ b/greykite/tests/common/test_evaluation.py @@ -273,7 +273,7 @@ def test_add_finite_filter_to_scorer(): assert "There are 0 non-null elements for evaluation." in record[0].message.args[0] with pytest.warns(UserWarning) as record, \ - pytest.raises(ValueError, match="Input contains NaN, infinity or a value too large"): + pytest.raises(ValueError, match="Input contains NaN"): y_true = pd.Series([3, 1, 3, np.nan]) y_pred = pd.Series([1, 4, np.nan, 2]) # this causes an error # ``add_finite_filter_to_scorer`` does not drop NAN which are not heading NANs in ``y_pred``. diff --git a/greykite/tests/common/test_testing_utils.py b/greykite/tests/common/test_testing_utils.py index 23bfae3..2996d88 100644 --- a/greykite/tests/common/test_testing_utils.py +++ b/greykite/tests/common/test_testing_utils.py @@ -33,7 +33,7 @@ def test_generate_df_for_tests(): train_frac=0.9, remove_extra_cols=False) - assert data["df"].shape == (24*10, 48) # Contains time_feature columns + assert data["df"].shape == (24*10, 52) # Contains time_feature columns assert not data["train_df"].isna().any().any() assert not data["test_df"][TIME_COL].isna().any().any() diff --git a/greykite/tests/common/test_time_properties.py b/greykite/tests/common/test_time_properties.py index dba9922..68208a2 100644 --- a/greykite/tests/common/test_time_properties.py +++ b/greykite/tests/common/test_time_properties.py @@ -5,9 +5,9 @@ import pytest from greykite.common.constants import ADJUSTMENT_DELTA_COL -from greykite.common.constants import END_DATE_COL +from greykite.common.constants import END_TIME_COL from greykite.common.constants import METRIC_COL -from greykite.common.constants import START_DATE_COL +from greykite.common.constants import START_TIME_COL from greykite.common.constants import TIME_COL from greykite.common.constants import VALUE_COL from greykite.common.data_loader import DataLoader @@ -311,8 +311,8 @@ def test_gcd_load_data_anomaly(): dim_one = "one" dim_two = "two" anomaly_df = pd.DataFrame({ - START_DATE_COL: ["2011-04-04-10", "2011-10-10-00", "2012-12-20-10"], - END_DATE_COL: ["2011-04-05-20", "2011-10-11-23", "2012-12-20-13"], + START_TIME_COL: ["2011-04-04-10", "2011-10-10-00", "2012-12-20-10"], + END_TIME_COL: ["2011-04-05-20", "2011-10-11-23", "2012-12-20-13"], ADJUSTMENT_DELTA_COL: [np.nan, 100.0, -100.0], METRIC_COL: [dim_one, dim_one, dim_two] # used to filter rows in this df }) @@ -320,8 +320,8 @@ def test_gcd_load_data_anomaly(): anomaly_info = { "value_col": value_col, "anomaly_df": anomaly_df, - "start_date_col": START_DATE_COL, - "end_date_col": END_DATE_COL, + "start_time_col": START_TIME_COL, + "end_time_col": END_TIME_COL, "adjustment_delta_col": ADJUSTMENT_DELTA_COL, "filter_by_dict": {METRIC_COL: dim_one}, "adjustment_method": "add" @@ -334,12 +334,12 @@ def test_gcd_load_data_anomaly(): assert_equal(canonical_data_dict2["df_before_adjustment"], canonical_data_dict["df"]) expected_df = canonical_data_dict["df"].copy() # first anomaly - idx = ((expected_df[TIME_COL] >= anomaly_df[START_DATE_COL][0]) - & (expected_df[TIME_COL] <= anomaly_df[END_DATE_COL][0])) + idx = ((expected_df[TIME_COL] >= anomaly_df[START_TIME_COL][0]) + & (expected_df[TIME_COL] <= anomaly_df[END_TIME_COL][0])) expected_df.loc[idx, VALUE_COL] = np.nan # second anomaly - idx = ((expected_df[TIME_COL] >= anomaly_df[START_DATE_COL][1]) - & (expected_df[TIME_COL] <= anomaly_df[END_DATE_COL][1])) + idx = ((expected_df[TIME_COL] >= anomaly_df[START_TIME_COL][1]) + & (expected_df[TIME_COL] <= anomaly_df[END_TIME_COL][1])) expected_df.loc[idx, VALUE_COL] += 100.0 assert_equal(canonical_data_dict2["df"], expected_df) @@ -348,8 +348,8 @@ def test_gcd_load_data_anomaly(): anomaly_info = [anomaly_info, { "value_col": value_col_two, "anomaly_df": anomaly_df, - "start_date_col": START_DATE_COL, - "end_date_col": END_DATE_COL, + "start_time_col": START_TIME_COL, + "end_time_col": END_TIME_COL, "adjustment_delta_col": ADJUSTMENT_DELTA_COL, "filter_by_dict": {METRIC_COL: dim_two}, "adjustment_method": "subtract" @@ -360,8 +360,8 @@ def test_gcd_load_data_anomaly(): value_col=value_col, anomaly_info=anomaly_info) # third anomaly. The value is subtracted, according to `adjustment_method`. - idx = ((expected_df[TIME_COL] >= anomaly_df[START_DATE_COL][2]) - & (expected_df[TIME_COL] <= anomaly_df[END_DATE_COL][2])) + idx = ((expected_df[TIME_COL] >= anomaly_df[START_TIME_COL][2]) + & (expected_df[TIME_COL] <= anomaly_df[END_TIME_COL][2])) expected_df.loc[idx, value_col_two] -= -100.0 assert_equal(canonical_data_dict3["df_before_adjustment"], canonical_data_dict["df"]) assert_equal(canonical_data_dict3["df"], expected_df) diff --git a/greykite/tests/common/viz/test_timeseries_annotate.py b/greykite/tests/common/viz/test_timeseries_annotate.py new file mode 100644 index 0000000..2d08282 --- /dev/null +++ b/greykite/tests/common/viz/test_timeseries_annotate.py @@ -0,0 +1,171 @@ +import pandas as pd +import pytest + +from greykite.common.viz.timeseries_annotate import plt_annotate_series +from greykite.common.viz.timeseries_annotate import plt_compare_series_annotations + + +def test_plt_annotate_series(): + """Tests ``plt_annotate_series`` function.""" + df = pd.DataFrame({ + "x": list(range(10)), + "y": [1, 2, 3, 4, 5, 4, 3, 3, 2, 1], + "label": ["cat", "cat", "cat", "dog", "dog", "dog", "horse", "cat", "cat", "cat"] + }) + fig = plt_annotate_series( + df=df, + x_col="x", + value_col="y", + label_col="label", + annotate_labels=["cat", "dog"], + keep_cols=None, + title=None)["fig"] + + assert fig.layout.showlegend is True + assert fig.layout.xaxis.title.text == "x" + assert fig.layout.yaxis.title.text == "y" + assert len(fig.data) == 3 + assert fig.data[0].mode == "lines" + assert fig.data[0].name == "y" + assert fig.data[1].name == "y_label_cat" + assert fig.data[2].name == "y_label_dog" + + +def test_plt_compare_series_annotations(): + """Tests ``plt_compare_series_annotations`` function.""" + df = pd.DataFrame({ + "x": list(range(10)), + "actual": [1, 2, 3, 4, 5, 4, 3, 3, 2, 1], + "forecast": [1.5, 2.5, 3.5, 4.5, 5.5, 5, 4, 4, 1, 0.5], + "actual_label": [0]*5 + [1]*5, + "forecast_label": [0, 0, 0, 1, 1, 0, 0, 1, 1, 0], + "forecast_upper": [2.5, 3.5, 4.5, 5.5, 6.5, 6, 5, 5, 2, 2], + "forecast_lower": [.5, .5, 1.5, 3.5, 4.5, 3, 3, 2, -0.5, -1] + }) + + fig = plt_compare_series_annotations( + df=df, + x_col="x", + actual_col="actual", + actual_label_col="actual_label", + forecast_label_col="forecast_label", + keep_cols=["forecast_upper", "forecast_lower"], + forecast_col="forecast", + standardize_col=None) + + assert fig.layout.showlegend is True + assert fig.layout.xaxis.title.text == "x" + assert fig.layout.yaxis.title.text is None + assert len(fig.data) == 6 + assert fig.data[0].mode == "lines" + assert fig.data[0].name == "actual" + assert fig.data[1].name == "true_anomaly" + assert fig.data[2].name == "model_anomaly" + assert fig.data[3].name == "forecast" + + # test with standardize + fig = plt_compare_series_annotations( + df=df, + x_col="x", + actual_col="actual", + actual_label_col="actual_label", + forecast_label_col="forecast_label", + forecast_col="forecast", + keep_cols=["forecast_upper", "forecast_lower"], + standardize_col="actual") + + assert fig.layout.showlegend is True + assert fig.layout.xaxis.title.text == "x" + assert fig.layout.yaxis.title.text is None + assert len(fig.data) == 6 + assert fig.data[0].mode == "lines" + assert fig.data[0].name == "actual" + assert fig.data[1].name == "true_anomaly" + assert fig.data[2].name == "model_anomaly" + assert fig.data[3].name == "forecast" + + # test with no ``forecast_col`` + fig = plt_compare_series_annotations( + df=df, + x_col="x", + actual_col="actual", + actual_label_col="actual_label", + forecast_label_col="forecast_label", + forecast_col=None, + keep_cols=["forecast_upper", "forecast_lower"], + standardize_col="actual") + + assert fig.layout.showlegend is True + assert fig.layout.xaxis.title.text == "x" + assert fig.layout.yaxis.title.text is None + assert len(fig.data) == 5 + assert fig.data[0].mode == "lines" + assert fig.data[0].name == "actual" + assert fig.data[1].name == "true_anomaly" + assert fig.data[2].name == "model_anomaly" + + +def test_fill(): + # tests plot_annotate_series + df = pd.DataFrame({ + "x": list(range(10)), + "actual": [1, 2, 3, 4, 5, 4, 3, 3, 2, 1], + "forecast": [1.5, 2.5, 3.5, 4.5, 5.5, 5, 4, 4, 1, 0.5], + "actual_label": [0] * 5 + [1] * 5, + "forecast_label": [0, 0, 0, 1, 1, 0, 0, 1, 1, 0], + "forecast_upper": [2.5, 3.5, 4.5, 5.5, 6.5, 6, 5, 5, 2, 2], + "forecast_lower": [.5, .5, 1.5, 3.5, 4.5, 3, 3, 2, -0.5, -1] + }) + fig = plt_annotate_series( + df=df, + x_col="x", + value_col="actual", + label_col="actual_label", + annotate_labels=[0, 1], + keep_cols=None, + fill_cols=[["forecast_lower", "forecast_upper"]], + title=None)["fig"] + + assert fig.data[0]["name"] == "forecast_lower" + assert fig.data[1]["name"] == "forecast_upper" + assert fig.data[1]["fill"] == "tonexty" + + # tests plot_compare_series_annotations + fig = plt_compare_series_annotations( + df=df, + x_col="x", + actual_col="actual", + actual_label_col="actual_label", + forecast_label_col="forecast_label", + forecast_col=None, + fill_cols=[["forecast_lower", "forecast_upper"]], + standardize_col="actual") + assert fig.data[0]["name"] == "forecast_lower" + assert fig.data[1]["name"] == "forecast_upper" + assert fig.data[1]["fill"] == "tonexty" + + with pytest.raises( + ValueError, + match="fill_cols must be a list of lists of strings."): + plt_annotate_series( + df=df, + x_col="x", + value_col="actual", + label_col="actual_label", + annotate_labels=[0, 1], + keep_cols=None, + fill_cols=["forecast_lower", "forecast_upper"], + title=None) + + with pytest.raises( + ValueError, + match="fill_cols must be a list of lists of strings."): + plt_compare_series_annotations( + df=df, + x_col="x", + actual_col="actual", + actual_label_col="actual_label", + forecast_label_col="forecast_label", + forecast_col=None, + fill_cols=["forecast_lower", "forecast_upper"], + standardize_col="actual") diff --git a/greykite/tests/framework/benchmark/test_benchmark_class.py b/greykite/tests/framework/benchmark/test_benchmark_class.py index b536f3e..e4e5a83 100644 --- a/greykite/tests/framework/benchmark/test_benchmark_class.py +++ b/greykite/tests/framework/benchmark/test_benchmark_class.py @@ -31,7 +31,7 @@ try: - import fbprophet # noqa + import prophet # noqa except ModuleNotFoundError: pass @@ -221,8 +221,8 @@ def valid_bm(df, valid_configs, custom_tscv): return bm -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_benchmark_class_init(df, valid_configs, custom_tscv): forecaster = Forecaster() bm = BenchmarkForecastConfig(df=df, configs=valid_configs, tscv=custom_tscv, forecaster=forecaster) @@ -239,8 +239,8 @@ def test_benchmark_class_init(df, valid_configs, custom_tscv): BenchmarkForecastConfig(tscv=custom_tscv) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_validate(df, valid_configs, custom_tscv): bm = BenchmarkForecastConfig(df=df, configs=valid_configs, tscv=custom_tscv) bm.validate() @@ -284,8 +284,8 @@ def copy(obj): bm.validate() -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_run(valid_bm, valid_configs): bm = valid_bm @@ -307,8 +307,8 @@ def test_run(valid_bm, valid_configs): assert pipeline_result.forecast is not None -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_extract_forecasts(valid_bm, df, valid_configs, custom_tscv): bm = valid_bm bm.extract_forecasts() @@ -345,8 +345,8 @@ def test_extract_forecasts(valid_bm, df, valid_configs, custom_tscv): bm.extract_forecasts() -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_plot_forecasts_by_step(valid_bm): bm = valid_bm @@ -396,8 +396,8 @@ def test_plot_forecasts_by_step(valid_bm): bm.plot_forecasts_by_step(forecast_step=forecast_step) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_plot_forecasts_by_config(valid_bm): bm = valid_bm @@ -443,8 +443,8 @@ def test_plot_forecasts_by_config(valid_bm): bm.plot_forecasts_by_config(config_name="missing_config") -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_get_evaluation_metrics(valid_bm, metric_dict, df, valid_configs, custom_tscv): bm = valid_bm @@ -498,8 +498,8 @@ def test_get_evaluation_metrics(valid_bm, metric_dict, df, valid_configs, custom bm.get_evaluation_metrics(metric_dict=metric_dict) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_plot_evaluation_metrics(valid_bm, metric_dict): bm = valid_bm @@ -547,8 +547,8 @@ def test_plot_evaluation_metrics(valid_bm, metric_dict): assert_equal(set(fig.data[0].x), expected_xaxis) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_get_grouping_evaluation(valid_bm, metric_dict, df, valid_configs, custom_tscv): bm = valid_bm @@ -625,8 +625,8 @@ def test_get_grouping_evaluation(valid_bm, metric_dict, df, valid_configs, custo bm.get_grouping_evaluation_metrics(metric_dict=metric_dict) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_plot_grouping_evaluation(valid_bm, metric_dict): bm = valid_bm @@ -691,8 +691,8 @@ def test_plot_grouping_evaluation(valid_bm, metric_dict): assert fig.data[3].name == "test RMSE_valid_silverkite" -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_get_runtimes(valid_bm, valid_configs, custom_tscv): bm = valid_bm @@ -719,8 +719,8 @@ def test_get_runtimes(valid_bm, valid_configs, custom_tscv): bm.get_runtimes() -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_plot_runtimes(valid_bm): bm = valid_bm @@ -755,8 +755,8 @@ def test_plot_runtimes(valid_bm): assert_equal(set(fig.data[0].x), expected_xaxis) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_get_valid_config_names(valid_bm): bm = valid_bm @@ -776,8 +776,8 @@ def test_get_valid_config_names(valid_bm): assert f"Input 'config_name' ({missing_config}) is missing." in str(record.value) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_autocomplete_metric_dict(valid_bm, metric_dict): bm = valid_bm updated_metric_dict = bm.autocomplete_metric_dict( diff --git a/greykite/tests/framework/benchmark/test_benchmark_class_helper.py b/greykite/tests/framework/benchmark/test_benchmark_class_helper.py index fe4db2e..420420b 100644 --- a/greykite/tests/framework/benchmark/test_benchmark_class_helper.py +++ b/greykite/tests/framework/benchmark/test_benchmark_class_helper.py @@ -21,13 +21,13 @@ try: - import fbprophet # noqa + import prophet # noqa except ModuleNotFoundError: pass -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_forecast_pipeline_rolling_evaluation_prophet(): """Checks the output rolling evaluation with Prophet template""" data = generate_df_with_reg_for_tests( diff --git a/greykite/tests/framework/input/test_univariate_time_series.py b/greykite/tests/framework/input/test_univariate_time_series.py index 093bc22..6265c25 100644 --- a/greykite/tests/framework/input/test_univariate_time_series.py +++ b/greykite/tests/framework/input/test_univariate_time_series.py @@ -7,9 +7,9 @@ from pandas.testing import assert_frame_equal from greykite.common.constants import ADJUSTMENT_DELTA_COL -from greykite.common.constants import END_DATE_COL +from greykite.common.constants import END_TIME_COL from greykite.common.constants import METRIC_COL -from greykite.common.constants import START_DATE_COL +from greykite.common.constants import START_TIME_COL from greykite.common.constants import TIME_COL from greykite.common.constants import VALUE_COL from greykite.common.python_utils import assert_equal @@ -152,8 +152,8 @@ def test_load_data_anomaly(): dim_one = "one" dim_two = "two" anomaly_df = pd.DataFrame({ - START_DATE_COL: ["2011-04-04-10", "2011-10-10-00", "2012-12-20-10"], - END_DATE_COL: ["2011-04-05-20", "2011-10-11-23", "2012-12-20-13"], + START_TIME_COL: ["2011-04-04-10", "2011-10-10-00", "2012-12-20-10"], + END_TIME_COL: ["2011-04-05-20", "2011-10-11-23", "2012-12-20-13"], ADJUSTMENT_DELTA_COL: [np.nan, 100.0, -100.0], METRIC_COL: [dim_one, dim_one, dim_two] }) @@ -161,8 +161,8 @@ def test_load_data_anomaly(): { "value_col": value_col, "anomaly_df": anomaly_df, - "start_date_col": START_DATE_COL, - "end_date_col": END_DATE_COL, + "start_time_col": START_TIME_COL, + "end_time_col": END_TIME_COL, "adjustment_delta_col": ADJUSTMENT_DELTA_COL, "filter_by_dict": {METRIC_COL: dim_one}, "adjustment_method": "add" @@ -170,8 +170,8 @@ def test_load_data_anomaly(): { "value_col": "pres", "anomaly_df": anomaly_df, - "start_date_col": START_DATE_COL, - "end_date_col": END_DATE_COL, + "start_time_col": START_TIME_COL, + "end_time_col": END_TIME_COL, "adjustment_delta_col": ADJUSTMENT_DELTA_COL, "filter_by_dict": {METRIC_COL: dim_two}, "adjustment_method": "subtract" @@ -499,8 +499,12 @@ def test_train_end_date_with_regressors(): result = ts.make_future_dataframe( periods=10, include_history=True) + # gathers all warning messages + all_warnings = "" + for i in range(len(record)): + all_warnings += record[i].message.args[0] assert "Provided periods '10' is more than allowed ('4') due to the length of " \ - "regressor columns. Using '4'." in record[0].message.args[0] + "regressor columns. Using '4'." in all_warnings expected = ts.df.copy()[[TIME_COL, VALUE_COL, "regressor2"]] expected = expected[expected.index <= ts.last_date_for_reg] assert_frame_equal(result, expected) @@ -514,8 +518,12 @@ def test_train_end_date_with_regressors(): ts.load_data(df, TIME_COL, VALUE_COL, train_end_date=train_end_date, regressor_cols=regressor_cols) assert ts.train_end_date == dt(2018, 1, 20) assert ts.last_date_for_reg == dt(2018, 1, 28) + # gathers all warning messages + all_warnings = "" + for i in range(len(record)): + all_warnings += record[i].message.args[0] assert (f"The following columns are not available to use as " - f"regressors: ['regressor4', 'regressor5']") in record[0].message.args[0] + f"regressors: ['regressor4', 'regressor5']") in all_warnings result = ts.make_future_dataframe( periods=10, include_history=True) @@ -547,16 +555,16 @@ def test_plot(): value_col = "pm" # Masks up to 2011-02-04-03, and adds 100.0 to the rest anomaly_df = pd.DataFrame({ - START_DATE_COL: ["2010-01-01-00", "2011-02-04-03"], - END_DATE_COL: ["2011-02-04-03", "2014-12-31-23"], + START_TIME_COL: ["2010-01-01-00", "2011-02-04-03"], + END_TIME_COL: ["2011-02-04-03", "2014-12-31-23"], ADJUSTMENT_DELTA_COL: [np.nan, 100.0], METRIC_COL: [value_col, value_col] }) anomaly_info = { "value_col": value_col, "anomaly_df": anomaly_df, - "start_date_col": START_DATE_COL, - "end_date_col": END_DATE_COL, + "start_time_col": START_TIME_COL, + "end_time_col": END_TIME_COL, "adjustment_delta_col": ADJUSTMENT_DELTA_COL, "filter_by_dict": {METRIC_COL: value_col}, "adjustment_method": "add" diff --git a/greykite/tests/framework/output/test_univariate_forecast.py b/greykite/tests/framework/output/test_univariate_forecast.py index 57b7b75..50d803d 100644 --- a/greykite/tests/framework/output/test_univariate_forecast.py +++ b/greykite/tests/framework/output/test_univariate_forecast.py @@ -23,7 +23,7 @@ try: - import fbprophet # noqa + import prophet # noqa except ModuleNotFoundError: pass @@ -772,8 +772,8 @@ def test_plot_components(): f"{{'DUMMY'}}, plotting the rest." in record[0].message.args[0] -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_plot_components_prophet(): X = pd.DataFrame({ cst.TIME_COL: pd.date_range("2018-01-01", periods=10, freq="D"), diff --git a/greykite/tests/framework/pipeline/test_pipeline.py b/greykite/tests/framework/pipeline/test_pipeline.py index 9df9df7..07db0e1 100644 --- a/greykite/tests/framework/pipeline/test_pipeline.py +++ b/greykite/tests/framework/pipeline/test_pipeline.py @@ -14,11 +14,12 @@ from greykite.common.constants import ACTUAL_COL from greykite.common.constants import ADJUSTMENT_DELTA_COL -from greykite.common.constants import END_DATE_COL +from greykite.common.constants import END_TIME_COL from greykite.common.constants import FRACTION_OUTSIDE_TOLERANCE from greykite.common.constants import METRIC_COL from greykite.common.constants import PREDICTED_COL -from greykite.common.constants import START_DATE_COL +from greykite.common.constants import QUANTILE_SUMMARY_COL +from greykite.common.constants import START_TIME_COL from greykite.common.constants import TIME_COL from greykite.common.constants import VALUE_COL from greykite.common.constants import R2_null_model_score @@ -50,7 +51,7 @@ try: - import fbprophet # noqa + import prophet # noqa except ModuleNotFoundError: pass @@ -254,15 +255,15 @@ def test_input(df, df_reg): # anomaly adjustment adds 10.0 to every record adjustment_size = 10.0 anomaly_df = pd.DataFrame({ - START_DATE_COL: [df[TIME_COL].min()], - END_DATE_COL: [df[TIME_COL].max()], + START_TIME_COL: [df[TIME_COL].min()], + END_TIME_COL: [df[TIME_COL].max()], ADJUSTMENT_DELTA_COL: [adjustment_size], METRIC_COL: [VALUE_COL]}) anomaly_info = { "value_col": VALUE_COL, "anomaly_df": anomaly_df, - "start_date_col": START_DATE_COL, - "end_date_col": END_DATE_COL, + "start_time_col": START_TIME_COL, + "end_time_col": END_TIME_COL, "adjustment_delta_col": ADJUSTMENT_DELTA_COL, "filter_by_dict": {METRIC_COL: VALUE_COL}, "adjustment_method": "add"} @@ -563,8 +564,8 @@ def test_train_end_date_gap_regressors(): assert result.forecast.test_start_date == expected_forecast_test_start_date -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_exceptions(df): """Tests error messages when CV is skipped and there are multiple hyperparameter options. @@ -1054,8 +1055,8 @@ def test_default(): expected_grid_size=1) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_simple(): """Tests forecast_pipeline function with Prophet and default parameters""" data = generate_df_for_tests(freq="H", periods=24*10) @@ -1103,8 +1104,8 @@ def test_prophet_simple(): assert result.backtest.df_test.shape == (24, 5) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_with_regressor(): """Tests forecast_pipeline function with Prophet, input regressors, and default parameters @@ -1157,8 +1158,8 @@ def test_prophet_with_regressor(): greater_is_better=False) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_complex(): """Tests forecast_pipeline function with Prophet, custom parameters, missing data, and holidays @@ -1279,10 +1280,14 @@ def test_silverkite_longterm(): cv_periods_between_train_test=3 * 7, cv_max_splits=None) + # gathers all warning messages + all_warnings = "" + for i in range(len(record)): + all_warnings += record[i].message.args[0] assert "`min_train_periods` is too small for your `forecast_horizon`. Should be at " \ - "least 728=2*`forecast_horizon`." in record[0].message.args[0] + "least 728=2*`forecast_horizon`." in all_warnings assert "There is a high number of CV splits (41). If training is slow, increase " \ - "`periods_between_splits` or `min_train_periods`, or decrease `max_splits`" in record[1].message.args[0] + "`periods_between_splits` or `min_train_periods`, or decrease `max_splits`" in all_warnings check_forecast_pipeline_result( result, coverage=coverage, @@ -1526,8 +1531,8 @@ def test_silverkite_regressor_with_missing_values(): assert result.model[-1].model_dict["min_lagged_regressor_order"] == 5 -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_custom_pipeline(): """Tests forecast_pipeline function with custom pipeline""" data = generate_df_for_tests(freq="D", periods=30*8) # 8 months @@ -1729,7 +1734,7 @@ def test_pipeline_end2end_predict(): pred_df = trained_estimator.predict(test_df[:forecast_horizon]) pred_df.rename(columns={"forecast": "y"}, inplace=True) - cols = ["ts", "y", "forecast_lower", "forecast_upper", "y_quantile_summary", "err_std"] + cols = ["ts", "y", "forecast_lower", "forecast_upper", QUANTILE_SUMMARY_COL, "err_std"] # We expect the predictions to be the same as original predictions # since we are passing the same test data @@ -1738,7 +1743,7 @@ def test_pipeline_end2end_predict(): # Tries a new forecast horizon (10) new_pred_df = trained_estimator.predict(test_df[:10]) new_pred_df.rename(columns={"forecast": "y"}, inplace=True) - cols = ["ts", "y", "forecast_lower", "forecast_upper", "y_quantile_summary", "err_std"] + cols = ["ts", "y", "forecast_lower", "forecast_upper", QUANTILE_SUMMARY_COL, "err_std"] # Checks to see if forecat and design matrix are updated in the estimator assert len(new_pred_df) == 10 diff --git a/greykite/tests/framework/pipeline/test_utils.py b/greykite/tests/framework/pipeline/test_utils.py index 2569607..95accf7 100644 --- a/greykite/tests/framework/pipeline/test_utils.py +++ b/greykite/tests/framework/pipeline/test_utils.py @@ -43,7 +43,7 @@ try: - import fbprophet # noqa + import prophet # noqa except ModuleNotFoundError: pass @@ -179,8 +179,8 @@ def test_get_default_time_parameters(): "cv_periods_between_train_test": 5} -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_get_basic_pipeline(): """Tests get_basic_pipeline with default parameters""" estimator = ProphetEstimator() @@ -262,8 +262,8 @@ def test_get_basic_pipeline_custom(): assert_eval_function_equal(pipeline.steps[-1][-1].score_func, expected_score_func) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_get_basic_pipeline_apply(): """Tests get_basic_pipeline fit and predict methods on a dataset without regressors""" df = generate_df_for_tests("D", 50) @@ -317,7 +317,7 @@ def test_get_basic_pipeline_apply_reg(): predictions = pipeline.predict(df["test_df"]) assert predictions.shape[0] == df["test_df"].shape[0] - with pytest.raises(ValueError, match="Invalid parameter unknown_param for estimator NormalizeTransformer"): + with pytest.raises(ValueError, match="Invalid parameter"): pipeline.set_params( degenerate__drop_degenerate=True, input__regressors_numeric__normalize__unknown_param="PowerTransformer", @@ -775,8 +775,8 @@ def test_get_forecast(): assert "denominator contains very small values. sMAPE is likely highly volatile." in record[2].message.args[0] -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_get_forecast_prophet(): X = pd.DataFrame({ cst.TIME_COL: pd.date_range("2018-01-01", periods=10, freq="D"), diff --git a/greykite/tests/framework/templates/test_auto_arima_template.py b/greykite/tests/framework/templates/test_auto_arima_template.py index c402091..1143b80 100644 --- a/greykite/tests/framework/templates/test_auto_arima_template.py +++ b/greykite/tests/framework/templates/test_auto_arima_template.py @@ -91,7 +91,7 @@ def test_auto_arima_hyperparameter_grid_default(): "estimator__start_params": [None], "estimator__trend": [None], "estimator__method": ["lbfgs"], - "estimator__maxiter": [20], # Reduced from 50 (default value in pmdarima) for improved speed and robustness, + "estimator__maxiter": [50], "estimator__offset_test_args": [None], "estimator__seasonal_test_args": [None], "estimator__suppress_warnings": [True], @@ -189,16 +189,16 @@ def test_auto_arima_template_custom(): # anomaly adjustment adds 10.0 to every record adjustment_size = 10.0 anomaly_df = pd.DataFrame({ - cst.START_DATE_COL: [df[time_col].min()], - cst.END_DATE_COL: [df[time_col].max()], + cst.START_TIME_COL: [df[time_col].min()], + cst.END_TIME_COL: [df[time_col].max()], cst.ADJUSTMENT_DELTA_COL: [adjustment_size], cst.METRIC_COL: [value_col] }) anomaly_info = { "value_col": cst.VALUE_COL, "anomaly_df": anomaly_df, - "start_date_col": cst.START_DATE_COL, - "end_date_col": cst.END_DATE_COL, + "start_time_col": cst.START_TIME_COL, + "end_time_col": cst.END_TIME_COL, "adjustment_delta_col": cst.ADJUSTMENT_DELTA_COL, "filter_by_dict": {cst.METRIC_COL: cst.VALUE_COL}, "adjustment_method": "add" @@ -461,3 +461,41 @@ def test_run_auto_arima_template_custom(): assert result.backtest.test_evaluation["MSE"] is not None assert result.forecast.train_evaluation[cst.PREDICTION_BAND_COVERAGE] is not None assert result.forecast.train_evaluation["MSE"] is not None + + +def test_run_auto_arima_template_default(): + """Tests running default auto arima template through the pipeline""" + df = generate_df_for_tests( + freq="MS", + periods=95, + conti_year_origin=2018 + )["df"] + coverage = 0.95 + forecast_horizon = 12 + metadata = MetadataParam( + time_col=TIME_COL, + value_col=VALUE_COL, + freq="MS" + ) + # Creates `AUTO_ARIMA` config + model_template = ModelTemplateEnum.AUTO_ARIMA.name + model_components = ModelComponentsParam() + arima = ForecastConfig( + metadata_param=metadata, + forecast_horizon=forecast_horizon, + coverage=coverage, + model_template=model_template, + model_components_param=model_components + ) + forecaster = Forecaster() + result = forecaster.run_forecast_config( + df=df, + config=arima + ) + forecast_df = result.forecast.df_test.reset_index(drop=True) + expected_cols = ["ts", "actual", "forecast", "forecast_lower", "forecast_upper"] + assert list(forecast_df.columns) == expected_cols + assert result.backtest.coverage == 0.95, "coverage is not correct" + # NB: coverage is poor because of very small dataset size and low uncertainty_samples + assert result.backtest.train_evaluation[cst.PREDICTION_BAND_COVERAGE] is not None + assert result.backtest.test_evaluation[cst.PREDICTION_BAND_COVERAGE] is not None diff --git a/greykite/tests/framework/templates/test_auto_model_template.py b/greykite/tests/framework/templates/test_auto_model_template.py new file mode 100644 index 0000000..9a54458 --- /dev/null +++ b/greykite/tests/framework/templates/test_auto_model_template.py @@ -0,0 +1,244 @@ +import pandas as pd +import pytest +from testfixtures import LogCapture + +from greykite.common.logging import LOGGER_NAME +from greykite.framework.templates.auto_model_template import get_auto_silverkite_model_template +from greykite.framework.templates.autogen.forecast_config import EvaluationPeriodParam +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.model_templates import ModelTemplateEnum +from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_DAILY_90 +from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_HOURLY_1 +from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_HOURLY_24 +from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_HOURLY_168 +from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_HOURLY_336 +from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_WEEKLY + + +DEFAULT_MODEL_TEMPLATE = ModelTemplateEnum.SILVERKITE.name + + +@pytest.fixture +def hourly_data(): + df = pd.DataFrame({ + "ts": pd.date_range("2020-01-01", periods=3000, freq="H"), + "y": range(3000) + }) + return df + + +@pytest.fixture +def daily_data(): + df = pd.DataFrame({ + "ts": pd.date_range("2020-01-01", periods=1000, freq="D"), + "y": range(1000) + }) + return df + + +@pytest.fixture +def weekly_data(): + df = pd.DataFrame({ + "ts": pd.date_range("2020-01-01", periods=100, freq="W"), + "y": range(100) + }) + return df + + +@pytest.fixture +def monthly_data(): + df = pd.DataFrame({ + "ts": pd.date_range("2020-01-01", periods=100, freq="MS"), + "y": range(100) + }) + return df + + +def test_exception(hourly_data): + """Exception.""" + with pytest.raises(ValueError, match="The `default_model_template_name` in " + "`get_auto_silverkite_model_template` cannot be 'AUTO'."): + get_auto_silverkite_model_template( + df=hourly_data, + default_model_template_name=ModelTemplateEnum.AUTO.name, + config=ForecastConfig( + forecast_horizon=10 + ) + ) + + +@pytest.mark.parametrize("forecast_horizon,cv_max_splits,expected_template", [ + (1, 1, SILVERKITE_HOURLY_1[0]), + (24, 1, SILVERKITE_HOURLY_24[0]), + (168, 1, SILVERKITE_HOURLY_168[0]), + (336, 1, SILVERKITE_HOURLY_336[0]), + (1, 30, ModelTemplateEnum.SILVERKITE_HOURLY_1.name), + (24, 5, ModelTemplateEnum.SILVERKITE_HOURLY_24.name), + (168, 5, ModelTemplateEnum.SILVERKITE_HOURLY_168.name), + (336, 5, ModelTemplateEnum.SILVERKITE_HOURLY_336.name)]) +def test_get_model_template_hourly(forecast_horizon, cv_max_splits, expected_template, hourly_data): + """Hourly model template.""" + df = hourly_data + config = ForecastConfig( + forecast_horizon=forecast_horizon, + evaluation_period_param=EvaluationPeriodParam( + cv_max_splits=cv_max_splits + ) + ) + with LogCapture(LOGGER_NAME) as log_capture: + model_template = get_auto_silverkite_model_template( + df=df, + default_model_template_name=DEFAULT_MODEL_TEMPLATE, + config=config + ) + assert model_template == expected_template + log_capture.check_present(( + LOGGER_NAME, + "INFO", + f"Model template was set to 'auto'. " + f"Automatically found most appropriate model template '{model_template}'." + )) + + +@pytest.mark.parametrize("forecast_horizon,cv_max_splits,expected_template", [ + (3, 1, ModelTemplateEnum.SILVERKITE_DAILY_1_CONFIG_1.name), + (90, 1, SILVERKITE_DAILY_90[0]), + (3, 10, ModelTemplateEnum.SILVERKITE_DAILY_1.name), + (90, 5, ModelTemplateEnum.SILVERKITE_DAILY_90.name), + (30, 1, ModelTemplateEnum.SILVERKITE.name)]) +def test_get_model_template_daily(forecast_horizon, cv_max_splits, expected_template, daily_data): + """Daily model template.""" + df = daily_data + config = ForecastConfig( + forecast_horizon=forecast_horizon, + evaluation_period_param=EvaluationPeriodParam( + cv_max_splits=cv_max_splits + ) + ) + with LogCapture(LOGGER_NAME) as log_capture: + model_template = get_auto_silverkite_model_template( + df=df, + default_model_template_name=DEFAULT_MODEL_TEMPLATE, + config=config + ) + assert model_template == expected_template + log_capture.check_present(( + LOGGER_NAME, + "INFO", + f"Model template was set to 'auto'. " + f"Automatically found most appropriate model template '{model_template}'." + )) + + +@pytest.mark.parametrize("forecast_horizon,cv_max_splits,expected_template", [ + (3, 1, SILVERKITE_WEEKLY[0]), + (3, 10, ModelTemplateEnum.SILVERKITE_WEEKLY.name)]) +def test_get_model_template_weekly(forecast_horizon, cv_max_splits, expected_template, weekly_data): + """Weekly model template.""" + df = weekly_data + config = ForecastConfig( + forecast_horizon=forecast_horizon, + evaluation_period_param=EvaluationPeriodParam( + cv_max_splits=cv_max_splits + ) + ) + with LogCapture(LOGGER_NAME) as log_capture: + model_template = get_auto_silverkite_model_template( + df=df, + default_model_template_name=DEFAULT_MODEL_TEMPLATE, + config=config + ) + assert model_template == expected_template + log_capture.check_present(( + LOGGER_NAME, + "INFO", + f"Model template was set to 'auto'. " + f"Automatically found most appropriate model template '{model_template}'." + )) + + +def test_get_model_template_monthly(monthly_data): + """Monthly model template.""" + df = monthly_data + config = ForecastConfig( + forecast_horizon=1, + evaluation_period_param=EvaluationPeriodParam( + cv_max_splits=1 + ) + ) + with LogCapture(LOGGER_NAME) as log_capture: + model_template = get_auto_silverkite_model_template( + df=df, + default_model_template_name=DEFAULT_MODEL_TEMPLATE, + config=config + ) + assert model_template == ModelTemplateEnum.SILVERKITE_MONTHLY.name + log_capture.check_present(( + LOGGER_NAME, + "INFO", + f"Model template was set to 'auto'. " + f"Automatically found most appropriate model template '{model_template}'." + )) + + +def test_no_frequency(daily_data): + """Frequency not given and not inferrable, using default template.""" + df = daily_data.iloc[[1, 2, 3, 5]].reset_index(drop=True) + config = ForecastConfig( + forecast_horizon=1, + evaluation_period_param=EvaluationPeriodParam( + cv_max_splits=1 + ) + ) + with LogCapture(LOGGER_NAME) as log_capture: + model_template = get_auto_silverkite_model_template( + df=df, + default_model_template_name=DEFAULT_MODEL_TEMPLATE, + config=config + ) + assert model_template == ModelTemplateEnum.SILVERKITE.name + log_capture.check_present(( + LOGGER_NAME, + "INFO", + f"Model template was set to 'auto', however, the data frequency " + f"is not given and can not be inferred. " + f"Using default model template '{model_template}'." + )) + + +def test_no_horizon(daily_data): + """Forecast horizon not given, using default template.""" + df = daily_data + config = ForecastConfig( + evaluation_period_param=EvaluationPeriodParam( + cv_max_splits=1 + ) + ) + # For daily data, when forecast horizon is not given, the default is 30 days. + # The corresponding model template is "SILVERKITE". + model_template = get_auto_silverkite_model_template( + df=df, + default_model_template_name=DEFAULT_MODEL_TEMPLATE, + config=config + ) + assert model_template == ModelTemplateEnum.SILVERKITE.name + + +def test_cv_not_enough(daily_data): + """``cv_max_split`` is 5 but data length is too short to have 5 splits. + Using single model template. + """ + df = daily_data + config = ForecastConfig( + forecast_horizon=1, + evaluation_period_param=EvaluationPeriodParam( + cv_max_splits=5, + test_horizon=len(df) - 5 + ) + ) + model_template = get_auto_silverkite_model_template( + df=df, + default_model_template_name=DEFAULT_MODEL_TEMPLATE, + config=config + ) + assert model_template == ModelTemplateEnum.SILVERKITE_DAILY_1_CONFIG_1.name diff --git a/greykite/tests/framework/templates/test_forecast_config.py b/greykite/tests/framework/templates/test_forecast_config.py index 63f5e6a..5af29d3 100644 --- a/greykite/tests/framework/templates/test_forecast_config.py +++ b/greykite/tests/framework/templates/test_forecast_config.py @@ -48,7 +48,7 @@ def assert_default_forecast_config(config: Optional[ForecastConfig] = None): """Asserts for the default ForecastConfig values""" try: config = ForecastConfigDefaults().apply_forecast_config_defaults(config) - assert config.model_template == ModelTemplateEnum.SILVERKITE.name + assert config.model_template == ModelTemplateEnum.AUTO.name assert config.metadata_param.time_col == TIME_COL assert config.metadata_param.value_col == VALUE_COL assert config.evaluation_period_param.periods_between_train_test is None diff --git a/greykite/tests/framework/templates/test_forecast_config_defaults.py b/greykite/tests/framework/templates/test_forecast_config_defaults.py index 199282c..b0eb6dc 100644 --- a/greykite/tests/framework/templates/test_forecast_config_defaults.py +++ b/greykite/tests/framework/templates/test_forecast_config_defaults.py @@ -14,8 +14,8 @@ def test_apply_model_components_defaults(): def test_apply_model_template_defaults(): """Tests apply_model_template_defaults""" - assert ForecastConfigDefaults().apply_model_template_defaults(model_template=None) == "SILVERKITE" + assert ForecastConfigDefaults().apply_model_template_defaults(model_template=None) == "AUTO" mt = "RANDOM_TEMPLATE" assert ForecastConfigDefaults().apply_model_template_defaults(model_template=mt) == mt assert ForecastConfigDefaults().apply_model_template_defaults(model_template=[mt]) == mt - assert ForecastConfigDefaults().apply_model_template_defaults(model_template=[None, mt]) == ["SILVERKITE", mt] + assert ForecastConfigDefaults().apply_model_template_defaults(model_template=[None, mt]) == ["AUTO", mt] diff --git a/greykite/tests/framework/templates/test_forecaster.py b/greykite/tests/framework/templates/test_forecaster.py index 583afa2..0e7057f 100644 --- a/greykite/tests/framework/templates/test_forecaster.py +++ b/greykite/tests/framework/templates/test_forecaster.py @@ -3,10 +3,13 @@ from enum import Enum import numpy as np +import pandas as pd import pytest from testfixtures import LogCapture from greykite.common.constants import LOGGER_NAME +from greykite.common.constants import PREDICTED_LOWER_COL +from greykite.common.constants import PREDICTED_UPPER_COL from greykite.common.constants import TIME_COL from greykite.common.constants import VALUE_COL from greykite.common.data_loader import DataLoader @@ -35,7 +38,7 @@ try: - import fbprophet # noqa + import prophet # noqa except ModuleNotFoundError: pass @@ -138,7 +141,7 @@ def test_init(): """Tests constructor""" forecaster = Forecaster() assert forecaster.model_template_enum == ModelTemplateEnum - assert forecaster.default_model_template_name == "SILVERKITE" + assert forecaster.default_model_template_name == "AUTO" forecaster = Forecaster( model_template_enum=MyModelTemplateEnum, default_model_template_name="MYSILVERKITE" @@ -152,7 +155,7 @@ def test_get_config_with_default_model_template_and_components(): forecaster = Forecaster() config = forecaster._Forecaster__get_config_with_default_model_template_and_components() assert config == ForecastConfig( - model_template=ModelTemplateEnum.SILVERKITE.name, + model_template=ModelTemplateEnum.AUTO.name, model_components_param=ModelComponentsParam() ) @@ -185,7 +188,7 @@ def test_get_template_class(): assert forecaster._Forecaster__get_template_class() == SimpleSilverkiteTemplate assert forecaster._Forecaster__get_template_class( config=ForecastConfig(model_template=ModelTemplateEnum.SILVERKITE_WEEKLY.name)) == SimpleSilverkiteTemplate - if "fbprophet" in sys.modules: + if "prophet" in sys.modules: assert forecaster._Forecaster__get_template_class( config=ForecastConfig(model_template=ModelTemplateEnum.PROPHET.name)) == ProphetTemplate assert forecaster._Forecaster__get_template_class( @@ -202,10 +205,10 @@ def test_get_template_class(): # `model_template` name is wrong model_template = "SOME_TEMPLATE" with pytest.raises(ValueError, match=f"Model Template '{model_template}' is not recognized! " - f"Must be one of: SILVERKITE, SILVERKITE_WITH_AR, " + f"Must be one of: SILVERKITE, " f"SILVERKITE_DAILY_1_CONFIG_1, SILVERKITE_DAILY_1_CONFIG_2, SILVERKITE_DAILY_1_CONFIG_3, " f"SILVERKITE_DAILY_1, SILVERKITE_DAILY_90, " - f"SILVERKITE_WEEKLY, SILVERKITE_HOURLY_1, SILVERKITE_HOURLY_24, " + f"SILVERKITE_WEEKLY, SILVERKITE_MONTHLY, SILVERKITE_HOURLY_1, SILVERKITE_HOURLY_24, " f"SILVERKITE_HOURLY_168, SILVERKITE_HOURLY_336, SILVERKITE_EMPTY"): forecaster = Forecaster() forecaster._Forecaster__get_template_class( @@ -271,7 +274,7 @@ def test_get_template_class(): ) assert forecaster._Forecaster__get_template_class() == MySimpleSilverkiteTemplate - if "fbprophet" in sys.modules: + if "prophet" in sys.modules: model_template = ModelTemplateEnum.PROPHET.name # `model_template` name is wrong with pytest.raises(ValueError, match=f"Model Template '{model_template}' is not recognized! " f"Must be one of: MYSILVERKITE, SILVERKITE or satisfy the `SimpleSilverkiteTemplate` rules."): @@ -304,8 +307,7 @@ def test_get_template_class(): "'greykite.framework.templates.simple_silverkite_template.SimpleSilverkiteTemplate'>]"), (LOGGER_NAME, 'DEBUG', - 'Using template class " + "Using template class " 'for the model template ' "SimpleSilverkiteTemplateOptions(freq=, " "seas=, gr=, " @@ -325,7 +327,7 @@ def test_apply_forecast_config(df_config): # The same class can be re-used. `df` and `config` are taken from the function call # to `apply_forecast_config`. Only `model_template_enum` and # `default_model_template_name` are persistent in the state. - forecaster = Forecaster() + forecaster = Forecaster(default_model_template_name=ModelTemplateEnum.SILVERKITE.name) # no config with warnings.catch_warnings(): @@ -366,7 +368,7 @@ def test_apply_forecast_config(df_config): assert_basic_pipeline_equal(pipeline_params.pop("pipeline"), expected_pipeline) assert_equal(pipeline_params, expected_pipeline_params) - if "fbprophet" in sys.modules: + if "prophet" in sys.modules: # `model_component` of config is incompatible with model_template forecaster = Forecaster() config = ForecastConfig( @@ -502,10 +504,10 @@ def test_run_forecast_config_custom(): mse = EvaluationMetricEnum.RootMeanSquaredError.get_metric_name() q80 = EvaluationMetricEnum.Quantile80.get_metric_name() - assert result.backtest.test_evaluation[mse] == pytest.approx(2.976, rel=1e-2) - assert result.backtest.test_evaluation[q80] == pytest.approx(1.360, rel=1e-2) - assert result.forecast.train_evaluation[mse] == pytest.approx(2.224, rel=1e-2) - assert result.forecast.train_evaluation[q80] == pytest.approx(0.941, rel=1e-2) + assert result.backtest.test_evaluation[mse] == pytest.approx(3.299, rel=1e-2) + assert result.backtest.test_evaluation[q80] == pytest.approx(1.236, rel=1e-2) + assert result.forecast.train_evaluation[mse] == pytest.approx(1.782, rel=1e-2) + assert result.forecast.train_evaluation[q80] == pytest.approx(0.746, rel=1e-2) check_forecast_pipeline_result( result, coverage=coverage, @@ -513,7 +515,8 @@ def test_run_forecast_config_custom(): score_func=metric.name, greater_is_better=False) - with pytest.raises(KeyError, match="missing_regressor"): + # Note that for newer scikit-learn version, needs to add a check for ValueError, matching "model is misconfigured" + with pytest.raises((ValueError, KeyError)) as exception_info: model_components = ModelComponentsParam( regressors={ "regressor_cols": ["missing_regressor"] @@ -533,6 +536,8 @@ def test_run_forecast_config_custom(): strategy=None, score_func=metric.get_metric_func(), greater_is_better=False) + info_str = str(exception_info.value) + assert "missing_regressor" in info_str or "model is misconfigured" in info_str def test_run_forecast_json(): @@ -669,14 +674,17 @@ def test_run_forecast_config_with_single_simple_silverkite_template(): "estimator__train_test_thresh": [None], "estimator__training_fraction": [None], "estimator__fit_algorithm_dict": [{"fit_algorithm": "linear", "fit_algorithm_params": None}], + "estimator__auto_holiday": [False], "estimator__holidays_to_model_separately": [[]], "estimator__holiday_lookup_countries": [[]], "estimator__holiday_pre_num_days": [0], "estimator__holiday_post_num_days": [0], "estimator__holiday_pre_post_num_dict": [None], "estimator__daily_event_df_dict": [None], + "estimator__auto_growth": [False], "estimator__changepoints_dict": [None], "estimator__seasonality_changepoints_dict": [None], + "estimator__auto_seasonality": [False], "estimator__yearly_seasonality": [0], "estimator__quarterly_seasonality": [0], "estimator__monthly_seasonality": [0], @@ -686,10 +694,11 @@ def test_run_forecast_config_with_single_simple_silverkite_template(): "estimator__max_weekly_seas_interaction_order": [2], "estimator__autoreg_dict": [None], "estimator__simulation_num": [10], + "estimator__fast_simulation": [False], "estimator__lagged_regressor_dict": [None], "estimator__min_admissible_value": [None], "estimator__max_admissible_value": [None], - "estimator__normalize_method": [None], + "estimator__normalize_method": ["zero_to_one"], "estimator__uncertainty_dict": [None], "estimator__growth_term": ["linear"], "estimator__regressor_cols": [[]], @@ -775,3 +784,81 @@ def test_estimator_get_coef_summary_from_forecaster(): assert "sin1_ct1_yearly" not in x["Pred_col"].tolist() x = summary.get_coef_summary(return_df=True) assert x.shape[0] == summary.info_dict["coef_summary_df"].shape[0] + + +def test_auto_model_template(): + df = pd.DataFrame({ + "ts": pd.date_range("2020-01-01", freq="D", periods=100), + "y": range(100) + }) + config = ForecastConfig( + model_template=ModelTemplateEnum.AUTO.name, + forecast_horizon=1, + metadata_param=MetadataParam( + time_col="ts", + value_col="y", + freq="D" + ), + evaluation_period_param=EvaluationPeriodParam( + cv_max_splits=1, + test_horizon=0 + ) + ) + forecaster = Forecaster() + forecaster.apply_forecast_config( + df=df, + config=config + ) + assert forecaster.config.model_template == ModelTemplateEnum.SILVERKITE_DAILY_1_CONFIG_1.name + + # Not able to infer frequency, so the default is SILVERKITE + df = df.drop([1]) # drops the second row + config.metadata_param.freq = None + forecaster = Forecaster() + assert forecaster._Forecaster__get_model_template(df, config) == ModelTemplateEnum.SILVERKITE.name + forecaster.apply_forecast_config( + df=df, + config=config + ) + assert forecaster.config.model_template == ModelTemplateEnum.SILVERKITE.name + + +def test_quantile_regression_uncertainty_model(): + """Tests the quantile regression based uncertainty model.""" + df = DataLoader().load_peyton_manning().iloc[-365:].reset_index(drop=True) + df[TIME_COL] = pd.to_datetime(df[TIME_COL]) + config = ForecastConfig( + model_template=ModelTemplateEnum.SILVERKITE.name, + forecast_horizon=7, + coverage=0.95, + metadata_param=MetadataParam( + time_col="ts", + value_col="y", + freq="D" + ), + evaluation_period_param=EvaluationPeriodParam( + cv_max_splits=1, + test_horizon=1 + ), + model_components_param=ModelComponentsParam( + uncertainty=dict( + uncertainty_dict=dict( + uncertainty_method="quantile_regression", + params=dict( + is_residual_based=False + ) + ) + ) + ) + ) + forecaster = Forecaster() + forecast_result = forecaster.run_forecast_config( + df=df, + config=config + ) + assert PREDICTED_LOWER_COL in forecast_result.forecast.df_test.columns + assert PREDICTED_UPPER_COL in forecast_result.forecast.df_test.columns + assert forecast_result.forecast.df_test[PREDICTED_LOWER_COL].isna().sum() == 0 + assert forecast_result.forecast.df_test[PREDICTED_UPPER_COL].isna().sum() == 0 + assert all( + forecast_result.forecast.df_test[PREDICTED_LOWER_COL] <= forecast_result.forecast.df_test[PREDICTED_UPPER_COL]) diff --git a/greykite/tests/framework/templates/test_lag_based_template.py b/greykite/tests/framework/templates/test_lag_based_template.py new file mode 100644 index 0000000..79a1028 --- /dev/null +++ b/greykite/tests/framework/templates/test_lag_based_template.py @@ -0,0 +1,388 @@ +import pandas as pd +import pytest +from testfixtures import LogCapture + +from greykite.common.aggregation_function_enum import AggregationFunctionEnum +from greykite.common.constants import LOGGER_NAME +from greykite.common.constants import PREDICTED_COL +from greykite.framework.templates.autogen.forecast_config import EvaluationPeriodParam +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.autogen.forecast_config import MetadataParam +from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam +from greykite.framework.templates.forecaster import Forecaster +from greykite.framework.templates.lag_based_template import LagBasedTemplate +from greykite.framework.templates.model_templates import ModelTemplateEnum +from greykite.framework.utils.result_summary import summarize_grid_search_results +from greykite.sklearn.estimator.lag_based_estimator import LagBasedEstimator +from greykite.sklearn.estimator.lag_based_estimator import LagUnitEnum + + +@pytest.fixture +def df_daily(): + df = pd.DataFrame({ + "ts": pd.date_range("2020-01-01", freq="D", periods=1000), + "y": list(range(1000)) + }) + return df + + +@pytest.fixture +def df_hourly(): + df = pd.DataFrame({ + "ts": pd.date_range("2020-01-01", freq="H", periods=24 * 365), + "y": list(range(24 * 365)) + }) + return df + + +def test_properties(): + """Tests class properties.""" + model = LagBasedTemplate() + assert model.DEFAULT_MODEL_TEMPLATE == ModelTemplateEnum.LAG_BASED.name + assert model.allow_model_template_list is False + assert model.allow_model_components_param_list is False + assert isinstance(model.estimator, LagBasedEstimator) + + +def test_regressors(): + """Tests getting regressor and lagged regressor info.""" + model = LagBasedTemplate() + assert model.get_regressor_cols() is None + assert model.get_lagged_regressor_info() == { + "lagged_regressor_cols": None, + "overall_min_lag_order": None, + "overall_max_lag_order": None + } + + +def test_apply_default_params(): + """Tests applying default parameters.""" + # No model components given. + model = LagBasedTemplate() + forecast_config = ForecastConfig() + model.config = forecast_config + model_components = ModelComponentsParam() + model_components = model.apply_lag_based_model_components_defaults(model_components=model_components) + assert model_components.custom == dict( + freq=None, + lag_unit=LagUnitEnum.week.name, + lags=[1], + agg_func=AggregationFunctionEnum.mean.name, + agg_func_params=None, + past_df=None, + series_na_fill_func=None + ) + assert model_components.uncertainty == dict( + uncertainty_dict=None + ) + + # Model components given. + model = LagBasedTemplate() + metadata_param = MetadataParam( + time_col="ts", + value_col="y", + freq="W" + ) + forecast_config = ForecastConfig(metadata_param=metadata_param) + model.config = forecast_config + model_components = ModelComponentsParam( + seasonality=dict(yearly_seasonality=5), + custom=dict( + lag_unit=LagUnitEnum.day.name + ), + uncertainty=dict( + uncertainty_dict=dict( + uncertainty_method="simple_conditional_residuals" + ) + ) + ) + model_components = model.apply_lag_based_model_components_defaults(model_components=model_components) + assert model_components.custom == dict( + freq="W", # ``freq`` is fetched from ``metadata_param``. + lag_unit=LagUnitEnum.day.name, # ``lag_unit`` is given by user + lags=[1], + agg_func=AggregationFunctionEnum.mean.name, + agg_func_params=None, + past_df=None, + series_na_fill_func=None + ) + assert model_components.uncertainty == dict( + uncertainty_dict=dict( + uncertainty_method="simple_conditional_residuals" + ) # ``uncertainty_dict`` is given by user + ) + + +def test_get_hyperparameter_grid(): + """Tests getting hyperparameter grid.""" + model = LagBasedTemplate() + metadata_param = MetadataParam( + time_col="ts", + value_col="y", + freq="H" + ) + model_components = ModelComponentsParam( + seasonality=dict(yearly_seasonality=5), + custom=dict( + lag_unit=LagUnitEnum.day.name + ), + uncertainty=dict( + uncertainty_dict=dict( + uncertainty_method="simple_conditional_residuals" + ) + ), + hyperparameter_override=dict( + estimator__lags=[[1], [1, 2, 3]] + ) + ) + forecast_config = ForecastConfig( + metadata_param=metadata_param, + model_components_param=model_components + ) + model.config = forecast_config + hyperparameter_grid = model.get_hyperparameter_grid() + assert hyperparameter_grid == { + "estimator__freq": ["H"], + "estimator__lag_unit": [LagUnitEnum.day.name], + "estimator__lags": [[1], [1, 2, 3]], + "estimator__agg_func": [AggregationFunctionEnum.mean.name], + "estimator__agg_func_params": [None], + "estimator__uncertainty_dict": [ + dict( + uncertainty_method="simple_conditional_residuals" + ) + ], + "estimator__past_df": [None], + "estimator__series_na_fill_func": [None] + } + + +def test_run_template_daily_default(df_daily): + """Tests running model template with daily data.""" + forecaster = Forecaster() + metadata_param = MetadataParam( + time_col="ts", + value_col="y", + freq="D" + ) + evaluation = EvaluationPeriodParam( + cv_max_splits=0, + test_horizon=0 + ) + forecast_config = ForecastConfig( + forecast_horizon=1, + model_template=ModelTemplateEnum.LAG_BASED.name, + metadata_param=metadata_param, + evaluation_period_param=evaluation + ) + result = forecaster.run_forecast_config( + df=df_daily, + config=forecast_config + ) + # Checks forecast values are correct. + # Default is week over week. + assert result.forecast.df_test[PREDICTED_COL].iloc[-1] == df_daily["y"].iloc[-7] + + +def test_run_template_hourly_default(df_hourly): + """Tests running model template with hourly data.""" + forecaster = Forecaster() + metadata_param = MetadataParam( + time_col="ts", + value_col="y", + freq="D" + ) + evaluation = EvaluationPeriodParam( + cv_max_splits=0, + test_horizon=0 + ) + forecast_config = ForecastConfig( + forecast_horizon=1, + model_template=ModelTemplateEnum.LAG_BASED.name, + metadata_param=metadata_param, + evaluation_period_param=evaluation + ) + result = forecaster.run_forecast_config( + df=df_hourly, + config=forecast_config + ) + # Checks forecast values are correct. + # Default is week over week. + assert result.forecast.df_test[PREDICTED_COL].iloc[-1] == df_hourly["y"].iloc[-7 * 24] + + +def test_run_template_daily(df_daily): + """Tests running model template with daily data.""" + forecaster = Forecaster() + metadata_param = MetadataParam( + time_col="ts", + value_col="y", + freq="D" + ) + model_components = ModelComponentsParam( + custom=dict( + lag_unit=LagUnitEnum.day.name, + lags=[[1], [1, 2, 3]] + ) + ) + evaluation = EvaluationPeriodParam( + cv_max_splits=1, + test_horizon=0 + ) + forecast_config = ForecastConfig( + forecast_horizon=1, + model_template=ModelTemplateEnum.LAG_BASED.name, + metadata_param=metadata_param, + model_components_param=model_components, + evaluation_period_param=evaluation + ) + result = forecaster.run_forecast_config( + df=df_daily, + config=forecast_config + ) + # 2 different sets of parameters in grid search. + cv_result = summarize_grid_search_results(result.grid_search) + assert len(cv_result) == 2 + # Checks forecast values are correct. + assert result.forecast.df_test[PREDICTED_COL].iloc[-1] == df_daily["y"].iloc[-1] + + +def test_run_template_hourly_single(df_hourly): + """Tests running model template with hourly data.""" + forecaster = Forecaster() + metadata_param = MetadataParam( + time_col="ts", + value_col="y", + freq="H" + ) + model_components = ModelComponentsParam( + custom=dict( + lag_unit=LagUnitEnum.week.name, + lags=[1, 2, 3] + ) + ) + evaluation = EvaluationPeriodParam( + cv_max_splits=1, + test_horizon=1 + ) + forecast_config = ForecastConfig( + forecast_horizon=24, + model_template=ModelTemplateEnum.LAG_BASED.name, + metadata_param=metadata_param, + model_components_param=model_components, + evaluation_period_param=evaluation + ) + result = forecaster.run_forecast_config( + df=df_hourly, + config=forecast_config + ) + # Checks forecast values are correct. + assert result.forecast.df_test[PREDICTED_COL].iloc[-24:].reset_index(drop=True).astype(float).equals( + df_hourly["y"].iloc[-(24 * 7 * 2): -(24 * 7 * 2 - 24)].reset_index(drop=True).astype(float) + ) + + +def test_run_template_hourly(df_hourly): + """Tests running model template with hourly data.""" + forecaster = Forecaster() + metadata_param = MetadataParam( + time_col="ts", + value_col="y", + freq="H" + ) + model_components = ModelComponentsParam( + custom=dict( + lag_unit=LagUnitEnum.week.name, + lags=[[1], [1, 2, 3]] + ) + ) + evaluation = EvaluationPeriodParam( + cv_max_splits=1, + test_horizon=0 + ) + forecast_config = ForecastConfig( + forecast_horizon=24, + model_template=ModelTemplateEnum.LAG_BASED.name, + metadata_param=metadata_param, + model_components_param=model_components, + evaluation_period_param=evaluation + ) + result = forecaster.run_forecast_config( + df=df_hourly, + config=forecast_config + ) + # 2 different sets of parameters in grid search. + cv_result = summarize_grid_search_results(result.grid_search) + assert len(cv_result) == 2 + # Checks forecast values are correct. + assert result.forecast.df_test[PREDICTED_COL].iloc[-24:].reset_index(drop=True).astype(float).equals( + df_hourly["y"].iloc[-(24 * 7): -(24 * 7 - 24)].reset_index(drop=True).astype(float) + ) + + +def test_unknown_keys(df_daily): + """Tests unknown keys in ``model_components.custom``.""" + with LogCapture(LOGGER_NAME) as log_capture: + forecaster = Forecaster() + metadata_param = MetadataParam( + time_col="ts", + value_col="y", + freq="D" + ) + model_components = ModelComponentsParam( + custom=dict( + lag_unit=LagUnitEnum.week.name, + unknown_key="some_value" + ) + ) + evaluation = EvaluationPeriodParam( + cv_max_splits=0, + test_horizon=0 + ) + forecast_config = ForecastConfig( + forecast_horizon=24, + model_template=ModelTemplateEnum.LAG_BASED.name, + metadata_param=metadata_param, + model_components_param=model_components, + evaluation_period_param=evaluation + ) + forecaster.run_forecast_config( + df=df_daily, + config=forecast_config + ) + log_capture.check_present(( + LOGGER_NAME, + "WARNING", + "The following keys are not recognized and ignored for `LagBasedTemplate`: ['unknown_key']" + )) + + +def test_monthly_data(): + """Tests monthly data with default template. This should raise an error.""" + df = pd.DataFrame({ + "ts": pd.date_range("2020-01-01", freq="MS", periods=100), + "y": 1 + }) + with pytest.raises( + ValueError, + match="The lag unit 'week' must be at least equal to the data frequency 'MS'."): + forecaster = Forecaster() + metadata_param = MetadataParam( + time_col="ts", + value_col="y", + freq="MS" + ) + evaluation = EvaluationPeriodParam( + cv_max_splits=0, + test_horizon=0 + ) + forecast_config = ForecastConfig( + forecast_horizon=24, + model_template=ModelTemplateEnum.LAG_BASED.name, + metadata_param=metadata_param, + evaluation_period_param=evaluation + ) + forecaster.run_forecast_config( + df=df, + config=forecast_config + ) diff --git a/greykite/tests/framework/templates/test_model_templates.py b/greykite/tests/framework/templates/test_model_templates.py index 3bfbb15..fb6894f 100644 --- a/greykite/tests/framework/templates/test_model_templates.py +++ b/greykite/tests/framework/templates/test_model_templates.py @@ -1,7 +1,8 @@ from greykite.framework.templates.auto_arima_template import AutoArimaTemplate +from greykite.framework.templates.lag_based_template import LagBasedTemplate from greykite.framework.templates.model_templates import ModelTemplateEnum +from greykite.framework.templates.multistage_forecast_template import MultistageForecastTemplate from greykite.framework.templates.prophet_template import ProphetTemplate -from greykite.framework.templates.silverkite_multistage_template import SilverkiteMultistageTemplate from greykite.framework.templates.silverkite_template import SilverkiteTemplate from greykite.framework.templates.simple_silverkite_template import SimpleSilverkiteTemplate @@ -11,9 +12,6 @@ def test_model_template_enum(): assert ModelTemplateEnum.SILVERKITE.value.template_class == SimpleSilverkiteTemplate assert "Silverkite model with automatic growth, seasonality, holidays," in ModelTemplateEnum.SILVERKITE.value.description - assert ModelTemplateEnum.SILVERKITE_WITH_AR.value.template_class == SimpleSilverkiteTemplate - assert "Has the same config as ``SILVERKITE`` except for adding autoregression." in ModelTemplateEnum.SILVERKITE_WITH_AR.value.description - assert ModelTemplateEnum.SILVERKITE_DAILY_1_CONFIG_1.value.template_class == SimpleSilverkiteTemplate assert "Config 1 in template ``SILVERKITE_DAILY_1``." in ModelTemplateEnum.SILVERKITE_DAILY_1_CONFIG_1.value.description @@ -32,6 +30,21 @@ def test_model_template_enum(): assert ModelTemplateEnum.SILVERKITE_WEEKLY.value.template_class == SimpleSilverkiteTemplate assert "Silverkite model specifically tuned for weekly" in ModelTemplateEnum.SILVERKITE_WEEKLY.value.description + assert ModelTemplateEnum.SILVERKITE_MONTHLY.value.template_class == SimpleSilverkiteTemplate + assert "Silverkite model specifically tuned for monthly" in ModelTemplateEnum.SILVERKITE_MONTHLY.value.description + + assert ModelTemplateEnum.SILVERKITE_HOURLY_1.value.template_class == SimpleSilverkiteTemplate + assert "Silverkite model specifically tuned for hourly data with 1 hour" in ModelTemplateEnum.SILVERKITE_HOURLY_1.value.description + + assert ModelTemplateEnum.SILVERKITE_HOURLY_24.value.template_class == SimpleSilverkiteTemplate + assert "Silverkite model specifically tuned for hourly data with 24 hours" in ModelTemplateEnum.SILVERKITE_HOURLY_24.value.description + + assert ModelTemplateEnum.SILVERKITE_HOURLY_168.value.template_class == SimpleSilverkiteTemplate + assert "Silverkite model specifically tuned for hourly data with 168 hours" in ModelTemplateEnum.SILVERKITE_HOURLY_168.value.description + + assert ModelTemplateEnum.SILVERKITE_HOURLY_336.value.template_class == SimpleSilverkiteTemplate + assert "Silverkite model specifically tuned for hourly data with 336 hours" in ModelTemplateEnum.SILVERKITE_HOURLY_336.value.description + assert ModelTemplateEnum.SILVERKITE_EMPTY.value.template_class == SimpleSilverkiteTemplate assert "Silverkite model with no component included by default" in ModelTemplateEnum.SILVERKITE_EMPTY.value.description @@ -44,8 +57,17 @@ def test_model_template_enum(): assert ModelTemplateEnum.AUTO_ARIMA.value.template_class == AutoArimaTemplate assert "Auto ARIMA model" in ModelTemplateEnum.AUTO_ARIMA.value.description - assert ModelTemplateEnum.SILVERKITE_TWO_STAGE.value.template_class == SilverkiteMultistageTemplate - assert "SilverkiteMultistageTemplate's default model template." in ModelTemplateEnum.SILVERKITE_TWO_STAGE.value.description + assert ModelTemplateEnum.SILVERKITE_TWO_STAGE.value.template_class == MultistageForecastTemplate + assert "MultistageForecastTemplate's default model template." in ModelTemplateEnum.SILVERKITE_TWO_STAGE.value.description + + assert ModelTemplateEnum.MULTISTAGE_EMPTY.value.template_class == MultistageForecastTemplate + assert "Empty configuration for Multistage Forecast." in ModelTemplateEnum.MULTISTAGE_EMPTY.value.description + + assert ModelTemplateEnum.AUTO.value.template_class == SimpleSilverkiteTemplate + assert "Automatically selects the SimpleSilverkite model template" in ModelTemplateEnum.AUTO.value.description + + assert ModelTemplateEnum.LAG_BASED.value.template_class == LagBasedTemplate + assert "Uses aggregated past observations as predictions. " in ModelTemplateEnum.LAG_BASED.value.description - assert ModelTemplateEnum.SILVERKITE_MULTISTAGE_EMPTY.value.template_class == SilverkiteMultistageTemplate - assert "Empty configuration for Silverkite Multistage." in ModelTemplateEnum.SILVERKITE_MULTISTAGE_EMPTY.value.description + assert ModelTemplateEnum.SILVERKITE_WOW.value.template_class == MultistageForecastTemplate + assert "The Silverkite+WOW model uses Silverkite to model" in ModelTemplateEnum.SILVERKITE_WOW.value.description diff --git a/greykite/tests/framework/templates/test_multistage_forecast_template.py b/greykite/tests/framework/templates/test_multistage_forecast_template.py new file mode 100644 index 0000000..7b626c5 --- /dev/null +++ b/greykite/tests/framework/templates/test_multistage_forecast_template.py @@ -0,0 +1,956 @@ +import datetime + +import numpy as np +import pytest +from testfixtures import LogCapture + +from greykite.common.constants import LOGGER_NAME +from greykite.common.constants import PREDICTED_COL +from greykite.common.constants import PREDICTED_LOWER_COL +from greykite.common.constants import PREDICTED_UPPER_COL +from greykite.common.constants import TIME_COL +from greykite.common.constants import VALUE_COL +from greykite.common.testing_utils import generate_df_for_tests +from greykite.framework.templates.autogen.forecast_config import EvaluationPeriodParam +from greykite.framework.templates.autogen.forecast_config import ForecastConfig +from greykite.framework.templates.autogen.forecast_config import MetadataParam +from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam +from greykite.framework.templates.forecaster import Forecaster +from greykite.framework.templates.multistage_forecast_template import MultistageForecastTemplate +from greykite.framework.templates.multistage_forecast_template_config import SILVERKITE_TWO_STAGE +from greykite.framework.templates.multistage_forecast_template_config import MultistageForecastTemplateConfig +from greykite.framework.templates.simple_silverkite_template import SimpleSilverkiteTemplate +from greykite.sklearn.estimator.simple_silverkite_estimator import SimpleSilverkiteEstimator +from greykite.sklearn.uncertainty.uncertainty_methods import UncertaintyMethodEnum + + +@pytest.fixture +def df(): + df = generate_df_for_tests( + freq="H", + periods=24 * 7 * 8, + train_start_date=datetime.datetime(2018, 1, 1), + conti_year_origin=2018)["df"] + df["regressor"] = np.arange(len(df)) + return df + + +@pytest.fixture +def df_daily(): + df = generate_df_for_tests( + freq="D", + periods=1000, + train_start_date=datetime.datetime(2018, 1, 1), + conti_year_origin=2018)["df"] + return df + + +@pytest.fixture +def multistage_forecast_configs(): + configs = [ + MultistageForecastTemplateConfig( + train_length="30D", + fit_length=None, + agg_func="nanmean", + agg_freq="D", + model_template="SILVERKITE", + model_components=ModelComponentsParam( + seasonality={ + "yearly_seasonality": 12, + "quarterly_seasonality": 5, + "monthly_seasonality": 5, + "weekly_seasonality": 4, + "daily_seasonality": 0, + }, + growth={ + "growth_term": "linear" + }, + events={ + "holidays_to_model_separately": "auto", + "holiday_lookup_countries": "auto", + "holiday_pre_num_days": 1, + "holiday_post_num_days": 1, + "holiday_pre_post_num_dict": None, + "daily_event_df_dict": None, + }, + changepoints={ + "changepoints_dict": None, + "seasonality_changepoints_dict": None + }, + autoregression={ + "autoreg_dict": "auto" + }, + regressors={ + "regressor_cols": [] + }, + lagged_regressors={ + "lagged_regressor_dict": None + }, + uncertainty={ + "uncertainty_dict": None + }, + custom={ + "fit_algorithm_dict": { + "fit_algorithm": "ridge", + "fit_algorithm_params": None, + }, + "feature_sets_enabled": "auto", # "auto" based on data freq and size + "max_daily_seas_interaction_order": 0, + "max_weekly_seas_interaction_order": 2, + "extra_pred_cols": [], + "min_admissible_value": None, + "max_admissible_value": None, + "drop_pred_cols": None, + "explicit_pred_cols": None, + "regression_weight_col": None, + "normalize_method": "zero_to_one" + } + ) + ), + MultistageForecastTemplateConfig( + train_length="7D", + fit_length=None, + agg_func="nanmean", + agg_freq=None, + model_template="SILVERKITE", + model_components=ModelComponentsParam( + seasonality={ + "yearly_seasonality": 0, + "quarterly_seasonality": 0, + "monthly_seasonality": 0, + "weekly_seasonality": 0, + "daily_seasonality": 12, + }, + growth={ + "growth_term": None + }, + events={ + "holidays_to_model_separately": [], + "holiday_lookup_countries": [], + "holiday_pre_num_days": 0, + "holiday_post_num_days": 0, + "holiday_pre_post_num_dict": None, + "daily_event_df_dict": None, + }, + changepoints={ + "changepoints_dict": None, + "seasonality_changepoints_dict": None + }, + autoregression={ + "autoreg_dict": "auto" + }, + regressors={ + "regressor_cols": [] + }, + lagged_regressors={ + "lagged_regressor_dict": None + }, + uncertainty={ + "uncertainty_dict": None + }, + custom={ + "fit_algorithm_dict": { + "fit_algorithm": "ridge", + "fit_algorithm_params": None, + }, + "feature_sets_enabled": "auto", # "auto" based on data freq and size + "max_daily_seas_interaction_order": 5, + "max_weekly_seas_interaction_order": 2, + "extra_pred_cols": [], + "min_admissible_value": None, + "max_admissible_value": None, + "drop_pred_cols": None, + "explicit_pred_cols": None, + "regression_weight_col": None, + "normalize_method": "zero_to_one" + } + ) + ) + ] + return configs + + +@pytest.fixture +def forecast_config(multistage_forecast_configs): + forecast_config = ForecastConfig( + model_template="SILVERKITE_TWO_STAGE", + forecast_horizon=12, + metadata_param=MetadataParam( + time_col=TIME_COL, + value_col=VALUE_COL, + freq="H" + ), + model_components_param=ModelComponentsParam( + custom=dict( + multistage_forecast_configs=multistage_forecast_configs + ) + ), + evaluation_period_param=EvaluationPeriodParam( + cv_max_splits=1, + cv_horizon=12, + test_horizon=12 + ) + ) + return forecast_config + + +def test_get_regressor_cols(df, forecast_config): + """Tests the `self.get_regressor_cols` method.""" + template = MultistageForecastTemplate() + df["reg1"] = 1 + df["reg2"] = 2 + template.df = df + template.config = forecast_config + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][0].model_components.regressors["regressor_cols"] = ["reg1"] + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][1].model_components.regressors["regressor_cols"] = ["reg2"] + regressor_cols = template.get_regressor_cols() + assert set(regressor_cols) == {"reg1", "reg2"} + + +def test_get_lagged_regressor_info(df, forecast_config): + template = MultistageForecastTemplate() + df["reg1"] = 1 + df["reg2"] = 2 + template.df = df + template.config = forecast_config + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][0].model_components.lagged_regressors["lagged_regressor_dict"] = [{ + "reg1": { + "lag_dict": {"orders": [12]}, + "series_na_fill_func": lambda s: s.bfill().ffill()} + }] + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][1].model_components.lagged_regressors["lagged_regressor_dict"] = [{ + "reg2": { + "lag_dict": {"orders": [12]}, + "series_na_fill_func": lambda s: s.bfill().ffill()} + }] + lagged_regressor_info = template.get_lagged_regressor_info() + assert lagged_regressor_info == dict( + lagged_regressor_cols=["reg1", "reg2"], + overall_min_lag_order=12.0, + overall_max_lag_order=12.0 + ) + + +def test_get_hyperparameter_grid(df, forecast_config): + template = MultistageForecastTemplate() + + # Error when `self.config` is not available. + with pytest.raises( + ValueError, + match="Forecast config must be provided"): + template.get_hyperparameter_grid() + + template.df = df + # Adds a list of length 2 to each submodel. + # The result hyperparameter grid should have 2 * 2 = 4 grids. + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][0].model_components.seasonality["weekly_seasonality"] = [1, 2] + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][1].model_components.seasonality["daily_seasonality"] = [10, 12] + template.config = forecast_config + hyperparameter_grid = template.get_hyperparameter_grid() + assert hyperparameter_grid["estimator__forecast_horizon"] == [12] + assert hyperparameter_grid["estimator__freq"] == ["H"] + assert len(hyperparameter_grid["estimator__model_configs"]) == 4 + assert hyperparameter_grid["estimator__model_configs"][0][0].estimator_params["weekly_seasonality"] == 1 + assert hyperparameter_grid["estimator__model_configs"][0][1].estimator_params["daily_seasonality"] == 10 + assert hyperparameter_grid["estimator__model_configs"][1][0].estimator_params["weekly_seasonality"] == 1 + assert hyperparameter_grid["estimator__model_configs"][1][1].estimator_params["daily_seasonality"] == 12 + assert hyperparameter_grid["estimator__model_configs"][2][0].estimator_params["weekly_seasonality"] == 2 + assert hyperparameter_grid["estimator__model_configs"][2][1].estimator_params["daily_seasonality"] == 10 + assert hyperparameter_grid["estimator__model_configs"][3][0].estimator_params["weekly_seasonality"] == 2 + assert hyperparameter_grid["estimator__model_configs"][3][1].estimator_params["daily_seasonality"] == 12 + + +def test_get_hyperparameter_grid_same_template(df, forecast_config): + # Tests the behavior of using the same ``model_template`` to override. + template = MultistageForecastTemplate() + template.df = df + # Sets weekly seasonality to 5. + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][1].model_components.seasonality["weekly_seasonality"] = 5 + # Removes the daily seasonality specification. + del forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][1].model_components.seasonality["daily_seasonality"] + template.config = forecast_config + hyperparameter_grid = template.get_hyperparameter_grid() + # The original template has daily seasonality 12 and no weekly seasonality. + # The second model was overriden with the same ``model_template``, which is ``SILVERKITE``, + # so the hyperparameter_grid should have both daily seasonality 12 and weekly seasonality 5. + assert hyperparameter_grid["estimator__model_configs"][0][1].estimator_params["daily_seasonality"] == 12 + assert hyperparameter_grid["estimator__model_configs"][0][1].estimator_params["weekly_seasonality"] == 5 + + +def test_get_hyperparameter_grid_different_template(df, forecast_config): + # Tests the behavior of using the different ``model_template`` to override. + template = MultistageForecastTemplate() + template.df = df + # Sets the model template to be ``SILVERKITE_EMPTY``. + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][1].model_template = "SILVERKITE_EMPTY" + # Sets weekly seasonality to 5. + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][1].model_components.seasonality["weekly_seasonality"] = 5 + # Removes the daily seasonality specification. + del forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][1].model_components.seasonality["daily_seasonality"] + template.config = forecast_config + hyperparameter_grid = template.get_hyperparameter_grid() + # The original template has daily seasonality 12 and no weekly seasonality. + # The second model was overriden with a different ``model_template``, which is ``SILVERKITE_EMPTY``, + # so the hyperparameter_grid should have only weekly seasonality 5 and daily seasonality 0. + assert hyperparameter_grid["estimator__model_configs"][0][1].estimator_params["daily_seasonality"] == 0 + assert hyperparameter_grid["estimator__model_configs"][0][1].estimator_params["weekly_seasonality"] == 5 + + +def test_get_hyperparameter_grid_extra_configs(df, forecast_config): + """Tests gets hyperparameter grid when the default and override have different lengths.""" + # The empty template has no configs. + # The override components has two configs. + forecast_config.model_template = "MULTISTAGE_EMPTY" + template = MultistageForecastTemplate() + template.df = df + template.config = forecast_config + # The grid should have exactly two configs which are the same as the override configs. + hyperparameter_grid = template.get_hyperparameter_grid() + assert hyperparameter_grid["estimator__model_configs"][0][0].estimator_params == { + 'auto_seasonality': False, + 'yearly_seasonality': 12, + 'quarterly_seasonality': 5, + 'monthly_seasonality': 5, + 'weekly_seasonality': 4, + 'daily_seasonality': 0, + 'auto_growth': False, + 'growth_term': 'linear', + 'changepoints_dict': None, + 'seasonality_changepoints_dict': None, + 'auto_holiday': False, + 'holidays_to_model_separately': 'auto', + 'holiday_lookup_countries': 'auto', + 'holiday_pre_num_days': 1, + 'holiday_post_num_days': 1, + 'holiday_pre_post_num_dict': None, + 'daily_event_df_dict': None, + 'feature_sets_enabled': 'auto', + 'fit_algorithm_dict': { + 'fit_algorithm': 'ridge', + 'fit_algorithm_params': None}, + 'max_daily_seas_interaction_order': 0, + 'max_weekly_seas_interaction_order': 2, + 'extra_pred_cols': [], + 'drop_pred_cols': None, + 'explicit_pred_cols': None, + 'min_admissible_value': None, + 'max_admissible_value': None, + 'autoreg_dict': 'auto', + 'simulation_num': 10, + 'fast_simulation': False, + 'normalize_method': "zero_to_one", + 'regressor_cols': [], + 'lagged_regressor_dict': None, + 'regression_weight_col': None, + 'uncertainty_dict': None, + 'origin_for_time_vars': None, + 'train_test_thresh': None, + 'training_fraction': None} + assert hyperparameter_grid["estimator__model_configs"][0][1].estimator_params == { + 'auto_seasonality': False, + 'yearly_seasonality': 0, + 'quarterly_seasonality': 0, + 'monthly_seasonality': 0, + 'weekly_seasonality': 0, + 'daily_seasonality': 12, + 'auto_growth': False, + 'growth_term': None, + 'changepoints_dict': None, + 'seasonality_changepoints_dict': None, + 'auto_holiday': False, + 'holidays_to_model_separately': [], + 'holiday_lookup_countries': [], + 'holiday_pre_num_days': 0, + 'holiday_post_num_days': 0, + 'holiday_pre_post_num_dict': None, + 'daily_event_df_dict': None, + 'feature_sets_enabled': 'auto', + 'fit_algorithm_dict': { + 'fit_algorithm': 'ridge', + 'fit_algorithm_params': None}, + 'max_daily_seas_interaction_order': 5, + 'max_weekly_seas_interaction_order': 2, + 'extra_pred_cols': [], + 'drop_pred_cols': None, + 'explicit_pred_cols': None, + 'min_admissible_value': None, + 'max_admissible_value': None, + 'normalize_method': "zero_to_one", + 'autoreg_dict': 'auto', + 'simulation_num': 10, + 'fast_simulation': False, + 'regressor_cols': [], + 'lagged_regressor_dict': None, + 'regression_weight_col': None, + 'uncertainty_dict': None, + 'origin_for_time_vars': None, + 'train_test_thresh': None, + 'training_fraction': None} + + +def test_get_multistage_forecast_configs_override(df, forecast_config): + template = MultistageForecastTemplate() + template.df = df + # Adds a list of length 2 to each submodel. + # The result hyperparameter grid should have 2 * 2 = 4 grids. + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][0].model_components.seasonality["weekly_seasonality"] = [1, 2] + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][1].model_components.seasonality["daily_seasonality"] = [10, 12] + template.config = forecast_config + + default_model_components = template._MultistageForecastTemplate__get_default_model_components( + forecast_config.model_template) + default_multistage_forecast_configs = default_model_components.custom.get("multistage_forecast_configs") + + new_configs = template._MultistageForecastTemplate__get_multistage_forecast_configs_override( + custom=forecast_config.model_components_param.custom, + model_template="SILVERKITE_TWO_STAGE", + default_multistage_forecast_configs=default_multistage_forecast_configs + ) + + assert new_configs == [ + MultistageForecastTemplateConfig( + train_length='30D', + fit_length=None, + agg_func='nanmean', + agg_freq='D', + model_template='SILVERKITE', + model_components=ModelComponentsParam( + autoregression={ + 'autoreg_dict': 'auto' + }, + changepoints={ + 'changepoints_dict': None, + 'seasonality_changepoints_dict': None + }, + custom={ + 'fit_algorithm_dict': { + 'fit_algorithm': 'ridge', + 'fit_algorithm_params': None + }, + 'feature_sets_enabled': 'auto', + 'max_daily_seas_interaction_order': 0, + 'max_weekly_seas_interaction_order': 2, + 'extra_pred_cols': [], + 'min_admissible_value': None, + 'max_admissible_value': None, + 'drop_pred_cols': None, + 'explicit_pred_cols': None, + 'regression_weight_col': None, + 'normalize_method': 'zero_to_one' + }, + events={ + 'holidays_to_model_separately': 'auto', + 'holiday_lookup_countries': 'auto', + 'holiday_pre_num_days': 1, + 'holiday_post_num_days': 1, + 'holiday_pre_post_num_dict': None, + 'daily_event_df_dict': None + }, + growth={ + 'growth_term': 'linear' + }, + hyperparameter_override={}, + regressors={ + 'regressor_cols': [] + }, + lagged_regressors={ + 'lagged_regressor_dict': None + }, + seasonality={ + 'yearly_seasonality': 12, + 'quarterly_seasonality': 5, + 'monthly_seasonality': 5, + 'weekly_seasonality': [1, 2], + 'daily_seasonality': 0}, + uncertainty={ + 'uncertainty_dict': None + })), + MultistageForecastTemplateConfig( + train_length='7D', + fit_length=None, + agg_func='nanmean', + agg_freq=None, + model_template='SILVERKITE', + model_components=ModelComponentsParam( + autoregression={ + 'autoreg_dict': 'auto' + }, + changepoints={ + 'changepoints_dict': None, + 'seasonality_changepoints_dict': None + }, + custom={ + 'fit_algorithm_dict': { + 'fit_algorithm': 'ridge', + 'fit_algorithm_params': None + }, + 'feature_sets_enabled': 'auto', + 'max_daily_seas_interaction_order': 5, + 'max_weekly_seas_interaction_order': 2, + 'extra_pred_cols': [], + 'min_admissible_value': None, + 'max_admissible_value': None, + 'drop_pred_cols': None, + 'explicit_pred_cols': None, + 'regression_weight_col': None, + 'normalize_method': 'zero_to_one' + }, + events={ + 'holidays_to_model_separately': [], + 'holiday_lookup_countries': [], + 'holiday_pre_num_days': 0, + 'holiday_post_num_days': 0, + 'holiday_pre_post_num_dict': None, + 'daily_event_df_dict': None + }, + growth={ + 'growth_term': None + }, + hyperparameter_override={}, + regressors={ + 'regressor_cols': [] + }, + lagged_regressors={ + 'lagged_regressor_dict': None + }, + seasonality={ + 'yearly_seasonality': 0, + 'quarterly_seasonality': 0, + 'monthly_seasonality': 0, + 'weekly_seasonality': 0, + 'daily_seasonality': [10, 12] + }, + uncertainty={ + 'uncertainty_dict': None + }))] + + +def test_get_estimators_and_params_from_template_configs(df, forecast_config): + template = MultistageForecastTemplate() + template.df = df + # Adds a list of length 2 to each submodel. + # The result hyperparameter grid should have 2 * 2 = 4 grids. + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][0].model_components.seasonality["weekly_seasonality"] = [1, 2] + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][1].model_components.seasonality["daily_seasonality"] = [10, 12] + template.config = forecast_config + + default_model_components = template._MultistageForecastTemplate__get_default_model_components( + forecast_config.model_template) + default_multistage_forecast_configs = default_model_components.custom.get("multistage_forecast_configs") + + new_configs = template._MultistageForecastTemplate__get_multistage_forecast_configs_override( + custom=forecast_config.model_components_param.custom, + model_template="SILVERKITE_TWO_STAGE", + default_multistage_forecast_configs=default_multistage_forecast_configs + ) + + estimator_list, estimator_params_list = template._MultistageForecastTemplate__get_estimators_and_params_from_template_configs( + new_configs=new_configs + ) + + # We can't test ``time_properties`` + for d in estimator_params_list: + del d["estimator__time_properties"] + + assert estimator_list == [SimpleSilverkiteEstimator, SimpleSilverkiteEstimator] + assert estimator_params_list == [ + { + 'estimator__auto_seasonality': [False], + 'estimator__yearly_seasonality': [12], + 'estimator__quarterly_seasonality': [5], + 'estimator__monthly_seasonality': [5], + 'estimator__weekly_seasonality': [1, 2], + 'estimator__daily_seasonality': [0], + 'estimator__auto_growth': [False], + 'estimator__growth_term': ['linear'], + 'estimator__changepoints_dict': [None], + 'estimator__seasonality_changepoints_dict': [None], + 'estimator__auto_holiday': [False], + 'estimator__holidays_to_model_separately': ['auto'], + 'estimator__holiday_lookup_countries': ['auto'], + 'estimator__holiday_pre_num_days': [1], + 'estimator__holiday_post_num_days': [1], + 'estimator__holiday_pre_post_num_dict': [None], + 'estimator__daily_event_df_dict': [None], + 'estimator__feature_sets_enabled': ['auto'], + 'estimator__fit_algorithm_dict': [{ + 'fit_algorithm': 'ridge', + 'fit_algorithm_params': None}], + 'estimator__max_daily_seas_interaction_order': [0], + 'estimator__max_weekly_seas_interaction_order': [2], + 'estimator__extra_pred_cols': [[]], + 'estimator__drop_pred_cols': [None], + 'estimator__explicit_pred_cols': [None], + 'estimator__min_admissible_value': [None], + 'estimator__max_admissible_value': [None], + 'estimator__normalize_method': ["zero_to_one"], + 'estimator__autoreg_dict': ['auto'], + 'estimator__simulation_num': [10], + 'estimator__fast_simulation': [False], + 'estimator__regressor_cols': [[]], + 'estimator__lagged_regressor_dict': [None], + 'estimator__regression_weight_col': [None], + 'estimator__uncertainty_dict': [None], + 'estimator__origin_for_time_vars': [None], + 'estimator__train_test_thresh': [None], + 'estimator__training_fraction': [None] + }, + { + 'estimator__auto_seasonality': [False], + 'estimator__yearly_seasonality': [0], + 'estimator__quarterly_seasonality': [0], + 'estimator__monthly_seasonality': [0], + 'estimator__weekly_seasonality': [0], + 'estimator__daily_seasonality': [10, 12], + 'estimator__auto_growth': [False], + 'estimator__growth_term': [None], + 'estimator__changepoints_dict': [None], + 'estimator__seasonality_changepoints_dict': [None], + 'estimator__auto_holiday': [False], + 'estimator__holidays_to_model_separately': [[]], + 'estimator__holiday_lookup_countries': [[]], + 'estimator__holiday_pre_num_days': [0], + 'estimator__holiday_post_num_days': [0], + 'estimator__holiday_pre_post_num_dict': [None], + 'estimator__daily_event_df_dict': [None], + 'estimator__feature_sets_enabled': ['auto'], + 'estimator__fit_algorithm_dict': [{ + 'fit_algorithm': 'ridge', + 'fit_algorithm_params': None}], + 'estimator__max_daily_seas_interaction_order': [5], + 'estimator__max_weekly_seas_interaction_order': [2], + 'estimator__extra_pred_cols': [[]], + 'estimator__drop_pred_cols': [None], + 'estimator__explicit_pred_cols': [None], + 'estimator__min_admissible_value': [None], + 'estimator__max_admissible_value': [None], + 'estimator__normalize_method': ["zero_to_one"], + 'estimator__autoreg_dict': ['auto'], + 'estimator__simulation_num': [10], + 'estimator__fast_simulation': [False], + 'estimator__regressor_cols': [[]], + 'estimator__lagged_regressor_dict': [None], + 'estimator__regression_weight_col': [None], + 'estimator__uncertainty_dict': [None], + 'estimator__origin_for_time_vars': [None], + 'estimator__train_test_thresh': [None], + 'estimator__training_fraction': [None] + }] + + +def test_flatten_estimator_params_list(): + template = MultistageForecastTemplate() + x = [{ + "estimator__a": [1], + "estimator__b": [2, 3] + }, { + "estimator__c": [4, 5] + }] + flattened_params = template._MultistageForecastTemplate__flatten_estimator_params_list( + estimator_params_list=x + ) + assert flattened_params == [ + [{'a': 1, 'b': 2}, {'c': 4}], + [{'a': 1, 'b': 2}, {'c': 5}], + [{'a': 1, 'b': 3}, {'c': 4}], + [{'a': 1, 'b': 3}, {'c': 5}] + ] + + +def test_multistage_forecast_model_template(df, forecast_config): + forecaster = Forecaster() + forecast_result = forecaster.run_forecast_config( + df=df, + config=forecast_config + ) + assert forecast_result.backtest is not None + assert forecast_result.grid_search is not None + assert forecast_result.forecast is not None + + assert len(forecast_result.model[-1].models) == 2 + # Checks the forecast horizons in each model. + assert forecast_result.model[-1].models[0].forecast_horizon == 1 # daily model + assert forecast_result.model[-1].models[1].forecast_horizon == 12 # hourly model + + # Checks the autoregression orders are as expected. + assert "y_lag1" in forecast_result.model[-1].models[0].model_dict["x_mat"].columns + assert "y_lag12" in forecast_result.model[-1].models[1].model_dict["x_mat"].columns + + # Checks the forecast is not NAN + assert len(forecast_result.forecast.df_test[PREDICTED_COL].dropna()) == len(forecast_result.forecast.df_test) + assert len(forecast_result.backtest.df_test[PREDICTED_COL].dropna()) == len(forecast_result.backtest.df_test) + + +def test_multistage_forecast_model_template_with_regressor(df, forecast_config): + forecaster = Forecaster() + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][0].model_components.regressors["regressor_cols"] = ["regressor"] + df.iloc[-12:, 1] = np.nan + forecast_result = forecaster.run_forecast_config( + df=df, + config=forecast_config + ) + assert forecast_result.backtest is not None + assert forecast_result.grid_search is not None + assert forecast_result.forecast is not None + + assert len(forecast_result.model[-1].models) == 2 + # Checks the forecast horizons in each model. + assert forecast_result.model[-1].models[0].forecast_horizon == 1 # daily model + assert forecast_result.model[-1].models[1].forecast_horizon == 12 # hourly model + + # Checks the autoregression orders are as expected. + assert "y_lag1" in forecast_result.model[-1].models[0].model_dict["x_mat"].columns + assert "y_lag12" in forecast_result.model[-1].models[1].model_dict["x_mat"].columns + + # Checks that the regressor column is included. + assert "regressor" in forecast_result.model[-1].models[0].model_dict["x_mat"].columns + + # Checks the forecast is not NAN + assert len(forecast_result.forecast.df_test[PREDICTED_COL].dropna()) == len(forecast_result.forecast.df_test) + assert len(forecast_result.backtest.df_test[PREDICTED_COL].dropna()) == len(forecast_result.backtest.df_test) + + +def test_multistage_forecast_model_template_with_lagged_regressor(df, forecast_config): + forecaster = Forecaster() + forecast_config.model_components_param.custom[ + "multistage_forecast_configs"][0].model_components.lagged_regressors["lagged_regressor_dict"] = [{ + "regressor": { + "lag_dict": {"orders": [12]}, + "series_na_fill_func": lambda s: s.bfill().ffill()} + }] + forecast_result = forecaster.run_forecast_config( + df=df, + config=forecast_config + ) + assert forecast_result.backtest is not None + assert forecast_result.grid_search is not None + assert forecast_result.forecast is not None + + assert len(forecast_result.model[-1].models) == 2 + # Checks the forecast horizons in each model. + assert forecast_result.model[-1].models[0].forecast_horizon == 1 # daily model + assert forecast_result.model[-1].models[1].forecast_horizon == 12 # hourly model + + # Checks the autoregression orders are as expected. + assert "y_lag1" in forecast_result.model[-1].models[0].model_dict["x_mat"].columns + assert "y_lag12" in forecast_result.model[-1].models[1].model_dict["x_mat"].columns + + # Checks that the regressor column is included. + assert "regressor_lag12" in forecast_result.model[-1].models[0].model_dict["x_mat"].columns + + # Checks the forecast is not NAN + assert len(forecast_result.forecast.df_test[PREDICTED_COL].dropna()) == len(forecast_result.forecast.df_test) + assert len(forecast_result.backtest.df_test[PREDICTED_COL].dropna()) == len(forecast_result.backtest.df_test) + + +def test_errors(df, forecast_config): + # No configs with MULTISTAGE_EMPTY. + template = MultistageForecastTemplate() + template.df = df + forecast_config.model_components_param.custom["multistage_forecast_configs"] = None + forecast_config.model_template = "MULTISTAGE_EMPTY" + template.config = forecast_config + with pytest.raises( + ValueError, + match="``MULTISTAGE_EMPTY`` can not be used without over"): + template.get_hyperparameter_grid() + + # The config has wrong type. + template = MultistageForecastTemplate() + template.df = df + forecast_config.model_components_param.custom["multistage_forecast_configs"] = 5 + forecast_config.model_template = "SILVERKITE_TWO_STAGE" + template.config = forecast_config + with pytest.raises( + ValueError, + match="The ``multistage_forecast_configs`` parameter must be a list of"): + template.get_hyperparameter_grid() + + +def test_get_default_model_components(): + template = MultistageForecastTemplate() + assert template._MultistageForecastTemplate__get_default_model_components( + "SILVERKITE_TWO_STAGE") == SILVERKITE_TWO_STAGE + with pytest.raises( + ValueError, + match="The template name "): + template._MultistageForecastTemplate__get_default_model_components("some_template") + + +def test_get_template_class(): + template = MultistageForecastTemplate() + assert template._MultistageForecastTemplate__get_template_class( + ForecastConfig(model_template="SILVERKITE") + ) == SimpleSilverkiteTemplate + with pytest.raises( + ValueError, + match="Currently Multistage Forecast only supports"): + template._MultistageForecastTemplate__get_template_class( + ForecastConfig(model_template="DAILY_CP_NONE") + ) + + +def test_uncertainty(df, forecast_config): + """Tests the uncertainty methods.""" + + # Tests no coverage and no uncertainty, there is no uncertainty. + + forecaster = Forecaster() + forecast_result = forecaster.run_forecast_config( + df=df, + config=forecast_config + ) + assert PREDICTED_LOWER_COL not in forecast_result.backtest.df_test + assert PREDICTED_LOWER_COL not in forecast_result.forecast.df_test + + # Tests coverage and no uncertainty, there is uncertainty. + forecast_config.coverage = 0.99 + forecaster = Forecaster() + forecast_result = forecaster.run_forecast_config( + df=df, + config=forecast_config + ) + assert PREDICTED_LOWER_COL in forecast_result.backtest.df_test + assert PREDICTED_LOWER_COL in forecast_result.forecast.df_test + assert forecast_result.model[-1].coverage == 0.99 + # Default method is used when coverage is given but ``uncertainty_dict`` is not given. + assert (forecast_result.model[-1].uncertainty_model.UNCERTAINTY_METHOD + == UncertaintyMethodEnum.simple_conditional_residuals.name) + last_interval_width_99 = (forecast_result.forecast.df[PREDICTED_UPPER_COL].iloc[-1] + - forecast_result.forecast.df[PREDICTED_LOWER_COL].iloc[-1]) + + # Tests coverage and uncertainty, there is uncertainty. + forecast_config.model_components_param.uncertainty = dict( + uncertainty_dict=dict( + uncertainty_method=UncertaintyMethodEnum.simple_conditional_residuals.name, + params=dict( + conditional_cols=["dow"] + ) + ) + ) + forecaster = Forecaster() + forecast_result = forecaster.run_forecast_config( + df=df, + config=forecast_config + ) + assert PREDICTED_LOWER_COL in forecast_result.backtest.df_test + assert PREDICTED_LOWER_COL in forecast_result.forecast.df_test + assert forecast_result.model[-1].coverage == 0.99 + # The last 2 days intervals should have different lengths due to conditioning on "dow". + last_day_interval_width_99 = (forecast_result.forecast.df[PREDICTED_UPPER_COL].iloc[-1] + - forecast_result.forecast.df[PREDICTED_LOWER_COL].iloc[-1]) + second_last_day_interval_width_99 = (forecast_result.forecast.df[PREDICTED_UPPER_COL].iloc[-25] + - forecast_result.forecast.df[PREDICTED_LOWER_COL].iloc[-25]) + assert last_day_interval_width_99 != second_last_day_interval_width_99 + + # Tests 95% coverage has narrower interval. + forecast_config.coverage = 0.95 + forecast_config.model_components_param.uncertainty = dict( + uncertainty_dict=dict( + uncertainty_method=UncertaintyMethodEnum.simple_conditional_residuals.name, + params=dict() + ) + ) + forecaster = Forecaster() + forecast_result = forecaster.run_forecast_config( + df=df, + config=forecast_config + ) + assert PREDICTED_LOWER_COL in forecast_result.backtest.df_test + assert PREDICTED_LOWER_COL in forecast_result.forecast.df_test + assert forecast_result.model[-1].coverage == 0.95 + # 95 interval is narrower than 99 interval. + last_interval_width_95 = (forecast_result.forecast.df[PREDICTED_UPPER_COL].iloc[-1] + - forecast_result.forecast.df[PREDICTED_LOWER_COL].iloc[-1]) + assert last_interval_width_99 > last_interval_width_95 + + +def test_uncertainty_fail(df, forecast_config): + """Tests the pipeline won't fail when uncertainty fails.""" + with LogCapture(LOGGER_NAME) as log_capture: + forecast_config.coverage = 0.95 + forecast_config.model_components_param.uncertainty = dict( + uncertainty_dict=dict( + uncertainty_method=UncertaintyMethodEnum.simple_conditional_residuals.name, + params=dict( + conditional_cols=["dowww"] + ) + ) + ) + forecaster = Forecaster() + forecast_result = forecaster.run_forecast_config( + df=df, + config=forecast_config + ) + # The forecast is still generated. + assert forecast_result.forecast is not None + assert (LOGGER_NAME, + "WARNING", + "The following errors occurred during fitting the uncertainty model, " + "the uncertainty model is skipped. " + "The following conditional columns are not found in `train_df`: ['dowww'].") in log_capture.actual() + + +def test_silverkite_wow(df_daily): + """Tests the SILVERKITE_WOW model template.""" + forecaster = Forecaster() + config = ForecastConfig( + model_template="SILVERKITE_WOW", + forecast_horizon=7, + metadata_param=MetadataParam( + freq="D" + ), + model_components_param=ModelComponentsParam( + custom=dict( + multistage_forecast_configs=[ + MultistageForecastTemplateConfig( + train_length="1000D", + model_template="SILVERKITE_EMPTY", + model_components=ModelComponentsParam( + seasonality=dict(quarterly_seasonality=False) + ) + ), + MultistageForecastTemplateConfig( + train_length="500D", + model_template="LAG_BASED", + model_components=ModelComponentsParam( + custom=dict(lags=[1, 2, 3]) + ) + ) + ] + ) + ), + evaluation_period_param=EvaluationPeriodParam( + cv_max_splits=1, + test_horizon=7 + ) + ) + forecast_result = forecaster.run_forecast_config( + df=df_daily, + config=config + ) + assert all(["quarterly" not in col for col in forecast_result.model[-1].models[0].model_dict["x_mat"].columns]) + with LogCapture(LOGGER_NAME) as log_capture: + forecast_result.model[-1].models[1].summary() + log_capture.check_present(( + LOGGER_NAME, + "INFO", + f"This is a lag based forecast model that uses lags '[1, 2, 3]', " + f"with unit 'week' and aggregation function 'mean'." + )) diff --git a/greykite/tests/framework/templates/test_multistage_forecast_template_config.py b/greykite/tests/framework/templates/test_multistage_forecast_template_config.py new file mode 100644 index 0000000..e612ff6 --- /dev/null +++ b/greykite/tests/framework/templates/test_multistage_forecast_template_config.py @@ -0,0 +1,255 @@ +from greykite.framework.templates.auto_arima_template import AutoArimaTemplate +from greykite.framework.templates.autogen.forecast_config import ModelComponentsParam +from greykite.framework.templates.multistage_forecast_template_config import MULTISTAGE_EMPTY +from greykite.framework.templates.multistage_forecast_template_config import SILVERKITE_TWO_STAGE +from greykite.framework.templates.multistage_forecast_template_config import SILVERKITE_WOW +from greykite.framework.templates.multistage_forecast_template_config import MultistageForecastModelTemplateEnum +from greykite.framework.templates.multistage_forecast_template_config import MultistageForecastTemplateConfig +from greykite.framework.templates.multistage_forecast_template_config import MultistageForecastTemplateConstants +from greykite.framework.templates.prophet_template import ProphetTemplate +from greykite.framework.templates.silverkite_template import SilverkiteTemplate +from greykite.framework.templates.simple_silverkite_template import SimpleSilverkiteTemplate + + +def test_multistage_forecast_template_constants(): + """Tests `muiltistage_forecast_template_constants`""" + constants = MultistageForecastTemplateConstants() + + assert constants.SILVERKITE_TWO_STAGE == SILVERKITE_TWO_STAGE + assert constants.MULTISTAGE_EMPTY == MULTISTAGE_EMPTY + assert constants.MultistageForecastModelTemplateEnum == MultistageForecastModelTemplateEnum + assert constants.SILVERKITE_WOW == SILVERKITE_WOW + + +def test_multistage_forecast_template_config(): + """Tests the `MultistageForecastTemplateConfig` data class.""" + assert MultistageForecastTemplateConfig.train_length == f"{7 * 56}D" + assert MultistageForecastTemplateConfig.fit_length is None + assert MultistageForecastTemplateConfig.agg_freq is None + assert MultistageForecastTemplateConfig.agg_func == "nanmean" + assert MultistageForecastTemplateConfig.model_template == "SILVERKITE" + assert MultistageForecastTemplateConfig.model_components is None + + +def test_multistage_forecast(): + """Tests the SILVERKITE_TWO_STAGE template. To alert any changes to the template.""" + assert len(SILVERKITE_TWO_STAGE.custom["multistage_forecast_configs"]) == 2 + + assert SILVERKITE_TWO_STAGE.custom["multistage_forecast_configs"][0].train_length == f"{7 * 56}D" + assert SILVERKITE_TWO_STAGE.custom["multistage_forecast_configs"][0].fit_length is None + assert SILVERKITE_TWO_STAGE.custom["multistage_forecast_configs"][0].agg_func == "nanmean" + assert SILVERKITE_TWO_STAGE.custom["multistage_forecast_configs"][0].agg_freq == "D" + assert SILVERKITE_TWO_STAGE.custom["multistage_forecast_configs"][0].model_template == "SILVERKITE" + assert SILVERKITE_TWO_STAGE.custom["multistage_forecast_configs"][0].model_components == ModelComponentsParam( + seasonality={ + "yearly_seasonality": 12, + "quarterly_seasonality": 5, + "monthly_seasonality": 5, + "weekly_seasonality": 4, + "daily_seasonality": 0, + }, + growth={ + "growth_term": "linear" + }, + events={ + "holidays_to_model_separately": "auto", + "holiday_lookup_countries": "auto", + "holiday_pre_num_days": 1, + "holiday_post_num_days": 1, + "holiday_pre_post_num_dict": None, + "daily_event_df_dict": None, + }, + changepoints={ + "changepoints_dict": { + "method": "auto", + "resample_freq": "D", + "regularization_strength": 0.5, + "potential_changepoint_distance": "15D", + "no_changepoint_distance_from_end": "30D", + "yearly_seasonality_order": 15, + "yearly_seasonality_change_freq": "365D" + }, + "seasonality_changepoints_dict": None + }, + autoregression={ + "autoreg_dict": "auto" + }, + regressors={ + "regressor_cols": [] + }, + lagged_regressors={ + "lagged_regressor_dict": None + }, + uncertainty={ + "uncertainty_dict": None + }, + custom={ + "fit_algorithm_dict": { + "fit_algorithm": "ridge", + "fit_algorithm_params": None, + }, + "feature_sets_enabled": "auto", # "auto" based on data freq and size + "max_daily_seas_interaction_order": 0, + "max_weekly_seas_interaction_order": 2, + "extra_pred_cols": [], + "min_admissible_value": None, + "max_admissible_value": None, + "drop_pred_cols": None, + "explicit_pred_cols": None, + "regression_weight_col": None, + "normalize_method": "zero_to_one" + } + ) + + assert SILVERKITE_TWO_STAGE.custom["multistage_forecast_configs"][1].train_length == f"{7 * 4}D" + assert SILVERKITE_TWO_STAGE.custom["multistage_forecast_configs"][1].fit_length is None + assert SILVERKITE_TWO_STAGE.custom["multistage_forecast_configs"][1].agg_func == "nanmean" + assert SILVERKITE_TWO_STAGE.custom["multistage_forecast_configs"][1].agg_freq is None + assert SILVERKITE_TWO_STAGE.custom["multistage_forecast_configs"][1].model_template == "SILVERKITE" + assert SILVERKITE_TWO_STAGE.custom["multistage_forecast_configs"][1].model_components == ModelComponentsParam( + seasonality={ + "yearly_seasonality": 0, + "quarterly_seasonality": 0, + "monthly_seasonality": 0, + "weekly_seasonality": 0, + "daily_seasonality": 12, + }, + growth={ + "growth_term": None + }, + events={ + "holidays_to_model_separately": [], + "holiday_lookup_countries": [], + "holiday_pre_num_days": 0, + "holiday_post_num_days": 0, + "holiday_pre_post_num_dict": None, + "daily_event_df_dict": None, + }, + changepoints={ + "changepoints_dict": None, + "seasonality_changepoints_dict": None + }, + autoregression={ + "autoreg_dict": "auto" + }, + regressors={ + "regressor_cols": [] + }, + lagged_regressors={ + "lagged_regressor_dict": None + }, + uncertainty={ + "uncertainty_dict": None + }, + custom={ + "fit_algorithm_dict": { + "fit_algorithm": "ridge", + "fit_algorithm_params": None, + }, + "feature_sets_enabled": "auto", # "auto" based on data freq and size + "max_daily_seas_interaction_order": 5, + "max_weekly_seas_interaction_order": 2, + "extra_pred_cols": [], + "min_admissible_value": None, + "max_admissible_value": None, + "drop_pred_cols": None, + "explicit_pred_cols": None, + "regression_weight_col": None, + "normalize_method": "zero_to_one" + } + ) + + +def test_multistage_forecast_silverkite_wow(): + """Tests the SILVERKITE_WOW template. To alert any changes to the template.""" + assert len(SILVERKITE_WOW.custom["multistage_forecast_configs"]) == 2 + + assert SILVERKITE_WOW.custom["multistage_forecast_configs"][0].train_length == f"1096D" + assert SILVERKITE_WOW.custom["multistage_forecast_configs"][0].fit_length is None + assert SILVERKITE_WOW.custom["multistage_forecast_configs"][0].agg_func == "nanmean" + assert SILVERKITE_WOW.custom["multistage_forecast_configs"][0].agg_freq == "D" + assert SILVERKITE_WOW.custom["multistage_forecast_configs"][0].model_template == "SILVERKITE_EMPTY" + assert SILVERKITE_WOW.custom["multistage_forecast_configs"][0].model_components == ModelComponentsParam( + seasonality={ + "auto_seasonality": True, + "yearly_seasonality": True, + "quarterly_seasonality": True, + "monthly_seasonality": True, + "weekly_seasonality": False, + "daily_seasonality": False, + }, + growth={ + "growth_term": "linear" + }, + events={ + "auto_holiday": True, + "holidays_to_model_separately": None, + "holiday_lookup_countries": ("US",), + "holiday_pre_num_days": 0, + "holiday_post_num_days": 0, + "holiday_pre_post_num_dict": None, + "daily_event_df_dict": None, + }, + changepoints={ + "auto_growth": True, + "changepoints_dict": None, + "seasonality_changepoints_dict": None + }, + autoregression={ + "autoreg_dict": None + }, + regressors={ + "regressor_cols": None + }, + lagged_regressors={ + "lagged_regressor_dict": None + }, + uncertainty={ + "uncertainty_dict": None + }, + custom={ + "fit_algorithm_dict": { + "fit_algorithm": "ridge", + "fit_algorithm_params": None, + }, + "feature_sets_enabled": None, + "max_daily_seas_interaction_order": 0, + "max_weekly_seas_interaction_order": 0, + "extra_pred_cols": [], + "min_admissible_value": None, + "max_admissible_value": None, + "drop_pred_cols": None, + "explicit_pred_cols": None, + "regression_weight_col": None, + "normalize_method": "zero_to_one" + } + ) + + assert SILVERKITE_WOW.custom["multistage_forecast_configs"][1].train_length == f"28D" + assert SILVERKITE_WOW.custom["multistage_forecast_configs"][1].fit_length is None + assert SILVERKITE_WOW.custom["multistage_forecast_configs"][1].agg_func == "nanmean" + assert SILVERKITE_WOW.custom["multistage_forecast_configs"][1].agg_freq is None + assert SILVERKITE_WOW.custom["multistage_forecast_configs"][1].model_template == "LAG_BASED" + assert SILVERKITE_WOW.custom["multistage_forecast_configs"][1].model_components == ModelComponentsParam( + custom={ + "freq": None, + "lag_unit": "week", + "lags": [1], + "agg_func": "mean", + "agg_func_params": None, + "past_df": None, + "series_na_fill_func": None + }, + uncertainty={ + "uncertainty_dict": None + } + ) + + +def test_multistage_forecast_model_template_enum(): + """Tests the members of `MultistageForecastModelTemplateEnum`.""" + assert MultistageForecastModelTemplateEnum.SILVERKITE.value == SimpleSilverkiteTemplate + assert MultistageForecastModelTemplateEnum.SILVERKITE_EMPTY.value == SimpleSilverkiteTemplate + assert MultistageForecastModelTemplateEnum.PROPHET.value == ProphetTemplate + assert MultistageForecastModelTemplateEnum.SK.value == SilverkiteTemplate + assert MultistageForecastModelTemplateEnum.AUTO_ARIMA.value == AutoArimaTemplate diff --git a/greykite/tests/framework/templates/test_pickle_utils.py b/greykite/tests/framework/templates/test_pickle_utils.py index a2f2aa8..c8b6508 100644 --- a/greykite/tests/framework/templates/test_pickle_utils.py +++ b/greykite/tests/framework/templates/test_pickle_utils.py @@ -21,7 +21,7 @@ try: - import fbprophet # noqa + import prophet # noqa except ModuleNotFoundError: pass @@ -192,12 +192,12 @@ def test_forecast_result_silverkite(df, result): for key in result.model[-1].model_dict.keys(): # Functions and classes are not testable. if key not in ["x_design_info", "fs_func", "ml_model", "plt_pred", - "autoreg_dict", "changepoint_detector", "autoreg_func"]: + "autoreg_dict", "changepoint_detector", "autoreg_func", "normalize_df_func"]: assert_equal( result.model[-1].model_dict[key], result_rec.model[-1].model_dict[key]) # Tests function source code. - elif key in ["fs_func", "plt_pred", "autoreg_func"]: + elif key in ["fs_func", "plt_pred", "autoreg_func", "normalize_df_func"]: assert_equal( inspect.getsource(result.model[-1].model_dict[key]), inspect.getsource(result_rec.model[-1].model_dict[key])) @@ -240,12 +240,12 @@ def test_forecast_result_silverkite(df, result): for key in result.forecast.estimator.model_dict.keys(): # Functions and classes are not testable. if key not in ["x_design_info", "fs_func", "ml_model", "plt_pred", - "autoreg_dict", "changepoint_detector", "autoreg_func"]: + "autoreg_dict", "changepoint_detector", "autoreg_func", "normalize_df_func"]: assert_equal( result.forecast.estimator.model_dict[key], result_rec.forecast.estimator.model_dict[key]) # Tests function source code. - elif key in ["fs_func", "plt_pred", "autoreg_func"]: + elif key in ["fs_func", "plt_pred", "autoreg_func", "normalize_df_func"]: assert_equal( inspect.getsource(result.forecast.estimator.model_dict[key]), inspect.getsource(result_rec.forecast.estimator.model_dict[key])) @@ -288,12 +288,12 @@ def test_forecast_result_silverkite(df, result): for key in result.backtest.estimator.model_dict.keys(): # Functions and classes are not testable. if key not in ["x_design_info", "fs_func", "ml_model", "plt_pred", - "autoreg_dict", "changepoint_detector", "autoreg_func"]: + "autoreg_dict", "changepoint_detector", "autoreg_func", "normalize_df_func"]: assert_equal( result.backtest.estimator.model_dict[key], result_rec.backtest.estimator.model_dict[key]) # Tests function source code. - elif key in ["fs_func", "plt_pred", "autoreg_func"]: + elif key in ["fs_func", "plt_pred", "autoreg_func", "normalize_df_func"]: assert_equal( inspect.getsource(result.backtest.estimator.model_dict[key]), inspect.getsource(result_rec.backtest.estimator.model_dict[key])) @@ -314,8 +314,8 @@ def test_forecast_result_silverkite(df, result): result_rec.timeseries.__dict__[key]) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_forecast_result_prophet(df): forecaster = Forecaster() # Run the forecast @@ -519,12 +519,12 @@ def test_forecast_result_one_by_one(df): for key in result.model[-1].estimators[0].model_dict.keys(): # Functions and classes are not testable. if key not in ["x_design_info", "fs_func", "ml_model", "plt_pred", - "autoreg_dict", "changepoint_detector", "autoreg_func"]: + "autoreg_dict", "changepoint_detector", "autoreg_func", "normalize_df_func"]: assert_equal( result.model[-1].estimators[0].model_dict[key], result_rec.model[-1].estimators[0].model_dict[key]) # Tests function source code. - elif key in ["fs_func", "plt_pred", "autoreg_func"]: + elif key in ["fs_func", "plt_pred", "autoreg_func", "normalize_df_func"]: assert_equal( inspect.getsource(result.model[-1].estimators[0].model_dict[key]), inspect.getsource(result_rec.model[-1].estimators[0].model_dict[key])) @@ -567,12 +567,12 @@ def test_forecast_result_one_by_one(df): for key in result.forecast.estimator.estimators[0].model_dict.keys(): # Functions and classes are not testable. if key not in ["x_design_info", "fs_func", "ml_model", "plt_pred", - "autoreg_dict", "changepoint_detector", "autoreg_func"]: + "autoreg_dict", "changepoint_detector", "autoreg_func", "normalize_df_func"]: assert_equal( result.forecast.estimator.estimators[0].model_dict[key], result_rec.forecast.estimator.estimators[0].model_dict[key]) # Tests function source code. - elif key in ["fs_func", "plt_pred", "autoreg_func"]: + elif key in ["fs_func", "plt_pred", "autoreg_func", "normalize_df_func"]: assert_equal( inspect.getsource(result.forecast.estimator.estimators[0].model_dict[key]), inspect.getsource(result_rec.forecast.estimator.estimators[0].model_dict[key])) @@ -615,12 +615,12 @@ def test_forecast_result_one_by_one(df): for key in result.backtest.estimator.estimators[0].model_dict.keys(): # Functions and classes are not testable. if key not in ["x_design_info", "fs_func", "ml_model", "plt_pred", - "autoreg_dict", "changepoint_detector", "autoreg_func"]: + "autoreg_dict", "changepoint_detector", "autoreg_func", "normalize_df_func"]: assert_equal( result.backtest.estimator.estimators[0].model_dict[key], result_rec.backtest.estimator.estimators[0].model_dict[key]) # Tests function source code. - elif key in ["fs_func", "plt_pred", "autoreg_func"]: + elif key in ["fs_func", "plt_pred", "autoreg_func", "normalize_df_func"]: assert_equal( inspect.getsource(result.backtest.estimator.estimators[0].model_dict[key]), inspect.getsource(result_rec.backtest.estimator.estimators[0].model_dict[key])) diff --git a/greykite/tests/framework/templates/test_prophet_template.py b/greykite/tests/framework/templates/test_prophet_template.py index 5ccfd08..28de556 100644 --- a/greykite/tests/framework/templates/test_prophet_template.py +++ b/greykite/tests/framework/templates/test_prophet_template.py @@ -28,15 +28,15 @@ try: - import fbprophet - from fbprophet.make_holidays import make_holidays_df - fbprophet + import prophet + from prophet.make_holidays import make_holidays_df + prophet except ModuleNotFoundError: pass -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") @pytest.fixture def default_holidays(): """Default holidays by country params""" @@ -52,8 +52,8 @@ def default_holidays(): return expected_holidays -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_property(): """Tests properties""" assert ProphetTemplate().allow_model_template_list is False @@ -70,8 +70,8 @@ def test_property(): assert template.estimator is estimator -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_get_prophet_holidays(): """Tests get_prophet_holidays""" year_list = list(range(2014, 2030+2)) @@ -91,7 +91,7 @@ def test_get_prophet_holidays(): year_list=year_list, country=ctry) # sort df and reset index to ensure assert_frame_equal works well. Without it, assert throws an error. - expected_ctry_holidays = expected_ctry_holidays.sort_values(by=["ds"]).reset_index(drop=True) + expected_ctry_holidays = expected_ctry_holidays.sort_values(by=["ds", "holiday"]).reset_index(drop=True) actual = actual_holidays[["ds", "holiday"]] # All actual holidays actual_ctry_holidays = actual.merge( # Ensure country-level holidays are a subset of actual holidays @@ -99,7 +99,7 @@ def test_get_prophet_holidays(): on=["ds", "holiday"], how="inner", validate="1:1") # Ensures 1:1 mapping - actual_ctry_holidays = actual_ctry_holidays.sort_values(by=["ds"]).reset_index(drop=True) + actual_ctry_holidays = actual_ctry_holidays.sort_values(by=["ds", "holiday"]).reset_index(drop=True) assert_frame_equal(expected_ctry_holidays, actual_ctry_holidays) # there are no duplicates at date and holiday level in the final holidays df @@ -152,8 +152,8 @@ def test_get_prophet_holidays(): upper_window=upper_window) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_get_regressor_cols(): """Tests get_regressor_names""" # `add_regressor_dict` is a list of dict @@ -245,8 +245,8 @@ def test_get_regressor_cols(): assert template.get_regressor_cols() is None -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_hyperparameter_grid_default(): """Tests get_hyperparameter_grid and apply_prophet_model_components_defaults""" template = ProphetTemplate() @@ -279,8 +279,8 @@ def test_prophet_hyperparameter_grid_default(): assert_equal(actual=hyperparameter_grid, expected=expected_grid) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_hyperparameter_grid_seasonality_growth(default_holidays): """Tests get_hyperparameter_grid for basic seasonality, growth and other default params""" seasonality = {"yearly_seasonality": [True], "weekly_seasonality": [False]} @@ -316,8 +316,8 @@ def test_prophet_hyperparameter_grid_seasonality_growth(default_holidays): assert_equal(actual=hyperparameter_grid, expected=expected_grid) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_hyperparameter_grid_events(): """Tests get_prophet_hyperparameter_grid for selected Countries" holidays""" # holiday params @@ -371,8 +371,8 @@ def test_prophet_hyperparameter_grid_events(): assert_equal(actual=hyperparameter_grid, expected=expected_grid) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_hyperparameter_grid_exception(): """Tests prophet_hyperparameter_grid exceptions""" # unknown argument @@ -414,8 +414,8 @@ def test_prophet_hyperparameter_grid_exception(): template.get_hyperparameter_grid() -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_hyperparameter_grid_warn(): """Tests get_prophet_hyperparameter_grid warnings""" # holiday params @@ -480,8 +480,8 @@ def test_prophet_hyperparameter_grid_warn(): assert_equal(hyp1, hyp2) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_hyperparameter_grid_custom_seasonality(default_holidays): """Tests get_prophet_hyperparameter_grid for custom seasonality params, other params being defaults""" seasonality = { @@ -650,8 +650,8 @@ def test_prophet_hyperparameter_grid_custom_seasonality(default_holidays): assert_equal(actual=hyperparameter_grid, expected=expected_grid) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_hyperparameter_grid_changepoints_uncertainty_custom(default_holidays): """Tests get_prophet_hyperparameter_grid for selected changepoints, regressor, and uncertainty""" @@ -747,8 +747,8 @@ def test_prophet_hyperparameter_grid_changepoints_uncertainty_custom(default_hol assert_equal(actual=hyperparameter_grid, expected=expected_grid) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_hyperparameter_grid_auto_list(default_holidays): """Tests `get_prophet_hyperparameter_grid` automatic list conversion via `dictionaries_values_to_lists`. Holidays are tested separately @@ -850,8 +850,8 @@ def test_prophet_hyperparameter_grid_auto_list(default_holidays): assert_equal(actual=hyperparameter_grid, expected=expected_grid) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_hyperparameter_override(default_holidays): """Tests the hyperparameter_override functionality. Use hyperparameter_override to override parameters and @@ -899,8 +899,8 @@ def test_hyperparameter_override(default_holidays): assert_equal(hyperparameter_grid, [updated_grid, expected_grid]) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_apply_template_decorator(): data = generate_df_for_tests(freq="D", periods=10) df = data["df"] @@ -914,8 +914,8 @@ def test_apply_template_decorator(): ) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_template_default(): """Tests prophet_template with default values, for limited data""" # prepares input data @@ -975,8 +975,8 @@ def test_prophet_template_default(): assert_equal(params, expected_params) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_template_custom(): """Tests prophet_template with custom values, with long range input""" # prepares input data @@ -997,16 +997,16 @@ def test_prophet_template_custom(): # anomaly adjustment adds 10.0 to every record adjustment_size = 10.0 anomaly_df = pd.DataFrame({ - cst.START_DATE_COL: [df[time_col].min()], - cst.END_DATE_COL: [df[time_col].max()], + cst.START_TIME_COL: [df[time_col].min()], + cst.END_TIME_COL: [df[time_col].max()], cst.ADJUSTMENT_DELTA_COL: [adjustment_size], cst.METRIC_COL: [value_col] }) anomaly_info = { "value_col": cst.VALUE_COL, "anomaly_df": anomaly_df, - "start_date_col": cst.START_DATE_COL, - "end_date_col": cst.END_DATE_COL, + "start_time_col": cst.START_TIME_COL, + "end_time_col": cst.END_TIME_COL, "adjustment_delta_col": cst.ADJUSTMENT_DELTA_COL, "filter_by_dict": {cst.METRIC_COL: cst.VALUE_COL}, "adjustment_method": "add" @@ -1169,8 +1169,8 @@ def test_prophet_template_custom(): assert_equal(params, expected_params) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_run_prophet_template_custom(): """Tests running prophet template through the pipeline""" data = generate_df_with_reg_for_tests( @@ -1254,17 +1254,17 @@ def test_run_prophet_template_custom(): assert list(forecast_df.columns) == expected_cols assert result.backtest.coverage == 0.95, "coverage is not correct" # NB: coverage is poor because of very small dataset size and low uncertainty_samples - assert result.backtest.train_evaluation[cst.PREDICTION_BAND_COVERAGE] == pytest.approx(0.677, rel=1e-3), \ + assert result.backtest.train_evaluation[cst.PREDICTION_BAND_COVERAGE] == pytest.approx(0.742, rel=1e-3), \ "training coverage is None or less than expected" assert result.backtest.test_evaluation[cst.PREDICTION_BAND_COVERAGE] == pytest.approx(0.800, rel=1e-3), \ "testing coverage is None or less than expected" - assert result.backtest.train_evaluation["MSE"] == pytest.approx(3.7849, rel=1e-3), \ + assert result.backtest.train_evaluation["MSE"] == pytest.approx(3.3942, rel=1e-3), \ "training MSE is None or more than expected" - assert result.backtest.test_evaluation["MSE"] == pytest.approx(2.9609, rel=1e-3), \ + assert result.backtest.test_evaluation["MSE"] == pytest.approx(1.9477, rel=1e-3), \ "testing MSE is None or more than expected" assert result.forecast.train_evaluation[cst.PREDICTION_BAND_COVERAGE] == pytest.approx(0.7805, rel=1e-3), \ "forecast coverage is None or less than expected" - assert result.forecast.train_evaluation["MSE"] == pytest.approx(4.1806, rel=1e-3), \ + assert result.forecast.train_evaluation["MSE"] == pytest.approx(3.6025, rel=1e-3), \ "forecast MSE is None or more than expected" # ensure regressors were used in the model diff --git a/greykite/tests/framework/templates/test_silverkite_template.py b/greykite/tests/framework/templates/test_silverkite_template.py index fd4f935..5fc78e3 100644 --- a/greykite/tests/framework/templates/test_silverkite_template.py +++ b/greykite/tests/framework/templates/test_silverkite_template.py @@ -9,12 +9,11 @@ from greykite.algo.forecast.silverkite.forecast_silverkite import SilverkiteForecast from greykite.algo.forecast.silverkite.forecast_simple_silverkite_helper import generate_holiday_events from greykite.algo.forecast.silverkite.forecast_simple_silverkite_helper import get_event_pred_cols -from greykite.algo.forecast.silverkite.silverkite_diagnostics import SilverkiteDiagnostics from greykite.common.constants import ADJUSTMENT_DELTA_COL -from greykite.common.constants import END_DATE_COL +from greykite.common.constants import END_TIME_COL from greykite.common.constants import METRIC_COL from greykite.common.constants import PREDICTION_BAND_COVERAGE -from greykite.common.constants import START_DATE_COL +from greykite.common.constants import START_TIME_COL from greykite.common.constants import TIME_COL from greykite.common.constants import VALUE_COL from greykite.common.evaluation import EvaluationMetricEnum @@ -36,6 +35,7 @@ from greykite.framework.templates.silverkite_template import get_extra_pred_cols from greykite.framework.utils.framework_testing_utils import assert_basic_pipeline_equal from greykite.framework.utils.framework_testing_utils import check_forecast_pipeline_result +from greykite.sklearn.estimator.silverkite_diagnostics import SilverkiteDiagnostics from greykite.sklearn.estimator.silverkite_estimator import SilverkiteEstimator @@ -134,7 +134,8 @@ def test_apply_default_model_components(model_components_param, silverkite, silv } assert model_components.autoregression == { "autoreg_dict": [None], - "simulation_num": [10] + "simulation_num": [10], + "fast_simulation": [False] } assert model_components.regressors == {} assert model_components.uncertainty == { @@ -182,7 +183,10 @@ def test_apply_default_model_components(model_components_param, silverkite, silv }, "seasonality_changepoints_dict": [None], } - assert updated_components.autoregression == {"autoreg_dict": [None], "simulation_num": [10]} + assert updated_components.autoregression == { + "autoreg_dict": [None], + "simulation_num": [10], + "fast_simulation": [False]} assert updated_components.uncertainty == model_components_param.uncertainty assert updated_components.custom == { # combination of defaults and provided params "silverkite": silverkite, # the same object that was passed in (not a copy) @@ -350,6 +354,7 @@ def test_get_silverkite_hyperparameter_grid(model_components_param, silverkite, "seas_names": ["daily", "weekly", "monthly", "quarterly", "yearly"]})], "estimator__autoreg_dict": [None], "estimator__simulation_num": [10], + "estimator__fast_simulation": [False], "estimator__lagged_regressor_dict": [None], "estimator__changepoints_dict": [None], "estimator__seasonality_changepoints_dict": [None], @@ -360,7 +365,10 @@ def test_get_silverkite_hyperparameter_grid(model_components_param, silverkite, "estimator__regression_weight_col": [None], "estimator__uncertainty_dict": [None], } - assert_equal(hyperparameter_grid, expected_grid, ignore_keys={"estimator__silverkite": None, "estimator__silverkite_diagnostics": None}) + assert_equal( + hyperparameter_grid, + expected_grid, + ignore_keys={"estimator__silverkite": None, "estimator__silverkite_diagnostics": None}) assert hyperparameter_grid["estimator__silverkite"][0] != silverkite assert hyperparameter_grid["estimator__silverkite_diagnostics"][0] != silverkite_diagnostics @@ -385,6 +393,7 @@ def test_get_silverkite_hyperparameter_grid(model_components_param, silverkite, "estimator__fs_components_df": [None], "estimator__autoreg_dict": [None], "estimator__simulation_num": [10], + "estimator__fast_simulation": [False], "estimator__lagged_regressor_dict": [None], "estimator__changepoints_dict": [{ "method": "uniform", @@ -523,16 +532,16 @@ def test_silverkite_template_custom(model_components_param): # anomaly adjustment adds 10.0 to every record adjustment_size = 10.0 anomaly_df = pd.DataFrame({ - START_DATE_COL: [df[time_col].min()], - END_DATE_COL: [df[time_col].max()], + START_TIME_COL: [df[time_col].min()], + END_TIME_COL: [df[time_col].max()], ADJUSTMENT_DELTA_COL: [adjustment_size], METRIC_COL: [value_col] }) anomaly_info = { "value_col": VALUE_COL, "anomaly_df": anomaly_df, - "start_date_col": START_DATE_COL, - "end_date_col": END_DATE_COL, + "start_time_col": START_TIME_COL, + "end_time_col": END_TIME_COL, "adjustment_delta_col": ADJUSTMENT_DELTA_COL, "filter_by_dict": {METRIC_COL: VALUE_COL}, "adjustment_method": "add" @@ -843,6 +852,51 @@ def test_run_template_4(): def test_run_template_5(): + """Runs custom template with monthly data and auto-regression with fast simulation""" + data = generate_df_with_reg_for_tests( + freq="MS", + periods=48, + remove_extra_cols=True, + mask_test_actuals=True) + reg_cols = ["regressor1", "regressor2", "regressor_categ"] + keep_cols = [TIME_COL, VALUE_COL] + reg_cols + df = data["df"][keep_cols] + forecast_horizon = data["test_df"].shape[0] + + model_components = ModelComponentsParam( + custom=dict( + fit_algorithm_dict=dict(fit_algorithm="linear"), + extra_pred_cols=["ct2"]), + autoregression=dict( + autoreg_dict=dict(lag_dict=dict(orders=[1])), + fast_simulation=True), + uncertainty=dict(uncertainty_dict=None)) + config = ForecastConfig( + model_template=ModelTemplateEnum.SK.name, + forecast_horizon=forecast_horizon, + coverage=0.9, + model_components_param=model_components, + ) + + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + result = Forecaster().run_forecast_config( + df=df, + config=config, + ) + rmse = EvaluationMetricEnum.RootMeanSquaredError.get_metric_name() + assert result.backtest.test_evaluation[rmse] == pytest.approx(4.95, rel=1e-1) + check_forecast_pipeline_result( + result, + coverage=0.9, + strategy=None, + score_func=EvaluationMetricEnum.MeanAbsolutePercentError.name, + greater_is_better=False) + + assert result.model._final_estimator.model_dict["fast_simulation"] is True + + +def test_run_template_6(): """Runs custom template with monthly data, auto-regression and lagged regressors""" data = generate_df_with_reg_for_tests( freq="MS", @@ -853,7 +907,8 @@ def test_run_template_5(): reg_cols = ["regressor1"] keep_cols = [TIME_COL, VALUE_COL] + reg_cols_all df = data["df"][keep_cols] - forecast_horizon = data["test_df"].shape[0] + test_df = data["test_df"] + forecast_horizon = test_df.shape[0] model_components = ModelComponentsParam( custom=dict( @@ -891,15 +946,32 @@ def test_run_template_5(): actual_pred_cols = set(result.model[-1].model_dict["pred_cols"]) actual_x_mat_cols = set(result.model[-1].model_dict["x_mat"].columns) expected_pred_cols = { - 'regressor1', - 'y_lag1', - 'regressor_categ_lag5' + "regressor1", + "y_lag1", + "regressor_categ_lag5" } expected_x_mat_cols = { - 'regressor1', - 'y_lag1', - 'regressor_categ_lag5[T.c2]', - 'regressor_categ_lag5[T.c2]' + "regressor1", + "y_lag1", + "regressor_categ_lag5[T.c2]", + "regressor_categ_lag5[T.c2]" } assert expected_pred_cols.issubset(actual_pred_cols) assert expected_x_mat_cols.issubset(actual_x_mat_cols) + + trained_estimator = result.model[-1] + forecast = trained_estimator.forecast + forecast_x_mat = trained_estimator.forecast_x_mat + fit_x_mat = trained_estimator.model_dict["x_mat"] + assert len(forecast) == len(df) + assert len(forecast_x_mat) == len(df) + assert len(fit_x_mat) == len(df) - forecast_horizon + + # Does a new prediction and checks if the ``forecast`` and + # ``forecast_x_mat`` are updated + pred_df = trained_estimator.predict(test_df[:3]) + forecast_x_mat = trained_estimator.forecast_x_mat + forecast = trained_estimator.forecast + assert len(pred_df) == 3 + assert len(forecast) == 3 + assert len(forecast_x_mat) == 3 diff --git a/greykite/tests/framework/templates/test_simple_silverkite_template.py b/greykite/tests/framework/templates/test_simple_silverkite_template.py index cd51f4f..8307595 100644 --- a/greykite/tests/framework/templates/test_simple_silverkite_template.py +++ b/greykite/tests/framework/templates/test_simple_silverkite_template.py @@ -6,20 +6,21 @@ import numpy as np import pandas as pd import pytest +from testfixtures import LogCapture from greykite.algo.forecast.silverkite.constants.silverkite_constant import SilverkiteConstant from greykite.algo.forecast.silverkite.constants.silverkite_holiday import SilverkiteHoliday from greykite.algo.forecast.silverkite.forecast_simple_silverkite import SimpleSilverkiteForecast -from greykite.algo.forecast.silverkite.silverkite_diagnostics import SilverkiteDiagnostics from greykite.common.constants import ADJUSTMENT_DELTA_COL -from greykite.common.constants import END_DATE_COL +from greykite.common.constants import END_TIME_COL from greykite.common.constants import METRIC_COL from greykite.common.constants import PREDICTED_COL -from greykite.common.constants import START_DATE_COL +from greykite.common.constants import START_TIME_COL from greykite.common.constants import TIME_COL from greykite.common.constants import VALUE_COL from greykite.common.data_loader import DataLoader from greykite.common.evaluation import EvaluationMetricEnum +from greykite.common.logging import LOGGER_NAME from greykite.common.python_utils import assert_equal from greykite.common.testing_utils import generate_df_for_tests from greykite.common.testing_utils import generate_df_with_reg_for_tests @@ -40,6 +41,7 @@ from greykite.framework.utils.framework_testing_utils import assert_basic_pipeline_equal from greykite.framework.utils.framework_testing_utils import check_forecast_pipeline_result from greykite.framework.utils.result_summary import summarize_grid_search_results +from greykite.sklearn.estimator.silverkite_diagnostics import SilverkiteDiagnostics from greykite.sklearn.estimator.simple_silverkite_estimator import SimpleSilverkiteEstimator @@ -89,9 +91,8 @@ def test_template_name_from_dataclass(): def test_decode_single_template(): sst = SimpleSilverkiteTemplate() - # Does not change "SILVERKITE" or "SILVERKITE_WITH_AR" or "SILVERKITE_DAILY_1_CONFIG_{i}", i = 1, 2, 3. + # Does not change "SILVERKITE" or "SILVERKITE_DAILY_1_CONFIG_{i}", i = 1, 2, 3. assert sst._SimpleSilverkiteTemplate__decode_single_template("SILVERKITE") == "SILVERKITE" - assert sst._SimpleSilverkiteTemplate__decode_single_template("SILVERKITE_WITH_AR") == "SILVERKITE_WITH_AR" assert sst._SimpleSilverkiteTemplate__decode_single_template("SILVERKITE_DAILY_1_CONFIG_1") == "SILVERKITE_DAILY_1_CONFIG_1" assert sst._SimpleSilverkiteTemplate__decode_single_template("SILVERKITE_DAILY_1_CONFIG_2") == "SILVERKITE_DAILY_1_CONFIG_2" assert sst._SimpleSilverkiteTemplate__decode_single_template("SILVERKITE_DAILY_1_CONFIG_3") == "SILVERKITE_DAILY_1_CONFIG_3" @@ -162,7 +163,6 @@ def test_decode_single_template(): def test_check_template_type(): sst = SimpleSilverkiteTemplate() assert sst.check_template_type("SILVERKITE") == "single" - assert sst.check_template_type("SILVERKITE_WITH_AR") == "single" assert sst.check_template_type("SILVERKITE_DAILY_1_CONFIG_1") == "single" assert sst.check_template_type("SILVERKITE_DAILY_1_CONFIG_2") == "single" assert sst.check_template_type("SILVERKITE_DAILY_1_CONFIG_3") == "single" @@ -175,7 +175,7 @@ def test_check_template_type(): assert sst.check_template_type(SimpleSilverkiteTemplateOptions()) == "single" with pytest.raises( ValueError, - match=f"The template name SILVERKITE_WEEKLY_100 is not recognized. It must be 'SILVERKITE', 'SILVERKITE_WITH_AR', " + match=f"The template name SILVERKITE_WEEKLY_100 is not recognized. It must be 'SILVERKITE', " f"'SILVERKITE_DAILY_1_CONFIG_1', 'SILVERKITE_DAILY_1_CONFIG_2', 'SILVERKITE_DAILY_1_CONFIG_3', 'SILVERKITE_EMPTY', " f"a `SimpleSilverkiteTemplateOptions` data class, of the type" " '\\{FREQ\\}_SEAS_\\{VAL\\}_GR_\\{VAL\\}_CP_\\{VAL\\}_HOL_\\{VAL\\}_FEASET_\\{VAL\\}_ALGO_\\{VAL\\}_AR_\\{VAL\\}' or" @@ -188,8 +188,6 @@ def test_get_name_string_from_model_template(): sst = SimpleSilverkiteTemplate() name_string = sst._SimpleSilverkiteTemplate__get_name_string_from_model_template("SILVERKITE") assert name_string == ["SILVERKITE"] - name_string = sst._SimpleSilverkiteTemplate__get_name_string_from_model_template("SILVERKITE_WITH_AR") - assert name_string == ["SILVERKITE_WITH_AR"] name_string = sst._SimpleSilverkiteTemplate__get_name_string_from_model_template("SILVERKITE_DAILY_1_CONFIG_1") assert name_string == ["SILVERKITE_DAILY_1_CONFIG_1"] name_string = sst._SimpleSilverkiteTemplate__get_name_string_from_model_template("SILVERKITE_DAILY_1_CONFIG_2") @@ -211,7 +209,6 @@ def test_get_name_string_from_model_template(): name_strings = sst._SimpleSilverkiteTemplate__get_name_string_from_model_template( [ "SILVERKITE", - "SILVERKITE_WITH_AR", "SILVERKITE_DAILY_1_CONFIG_1", "SILVERKITE_DAILY_1_CONFIG_2", "SILVERKITE_DAILY_1_CONFIG_3", @@ -225,7 +222,6 @@ def test_get_name_string_from_model_template(): ) assert name_strings == [ "SILVERKITE", - "SILVERKITE_WITH_AR", "SILVERKITE_DAILY_1_CONFIG_1", "SILVERKITE_DAILY_1_CONFIG_2", "SILVERKITE_DAILY_1_CONFIG_3", @@ -244,6 +240,7 @@ def test_get_single_model_components_param_from_template(): model_components = sst._SimpleSilverkiteTemplate__get_single_model_components_param_from_template("SILVERKITE") assert model_components == ModelComponentsParam( seasonality={ + "auto_seasonality": False, "yearly_seasonality": "auto", "quarterly_seasonality": "auto", "monthly_seasonality": "auto", @@ -254,6 +251,7 @@ def test_get_single_model_components_param_from_template(): "growth_term": "linear" }, events={ + "auto_holiday": False, "holidays_to_model_separately": "auto", "holiday_lookup_countries": "auto", "holiday_pre_num_days": 2, @@ -262,66 +260,22 @@ def test_get_single_model_components_param_from_template(): "daily_event_df_dict": None, }, changepoints={ - "changepoints_dict": None, - "seasonality_changepoints_dict": None - }, - autoregression={ - "autoreg_dict": None, - "simulation_num": 10 - }, - regressors={ - "regressor_cols": [] - }, - lagged_regressors={ - "lagged_regressor_dict": None - }, - uncertainty={ - "uncertainty_dict": None - }, - custom={ - "fit_algorithm_dict": { - "fit_algorithm": "ridge", - "fit_algorithm_params": None, + "auto_growth": False, + "changepoints_dict": { + "method": "auto", + "yearly_seasonality_order": 15, + "resample_freq": "3D", + "regularization_strength": 0.6, + "actual_changepoint_min_distance": "30D", + "potential_changepoint_distance": "15D", + "no_changepoint_distance_from_end": "90D" }, - "feature_sets_enabled": "auto", # "auto" based on data freq and size - "max_daily_seas_interaction_order": 5, - "max_weekly_seas_interaction_order": 2, - "extra_pred_cols": [], - "drop_pred_cols": None, - "explicit_pred_cols": None, - "regression_weight_col": None, - "min_admissible_value": None, - "max_admissible_value": None, - "normalize_method": None - } - ) - model_components = sst._SimpleSilverkiteTemplate__get_single_model_components_param_from_template("SILVERKITE_WITH_AR") - assert model_components == ModelComponentsParam( - seasonality={ - "yearly_seasonality": "auto", - "quarterly_seasonality": "auto", - "monthly_seasonality": "auto", - "weekly_seasonality": "auto", - "daily_seasonality": "auto", - }, - growth={ - "growth_term": "linear" - }, - events={ - "holidays_to_model_separately": "auto", - "holiday_lookup_countries": "auto", - "holiday_pre_num_days": 2, - "holiday_post_num_days": 2, - "holiday_pre_post_num_dict": None, - "daily_event_df_dict": None, - }, - changepoints={ - "changepoints_dict": None, "seasonality_changepoints_dict": None }, autoregression={ "autoreg_dict": "auto", - "simulation_num": 10 + "simulation_num": 10, + "fast_simulation": False, }, regressors={ "regressor_cols": [] @@ -346,12 +300,14 @@ def test_get_single_model_components_param_from_template(): "regression_weight_col": None, "min_admissible_value": None, "max_admissible_value": None, - "normalize_method": None + "normalize_method": "zero_to_one" } ) + model_components = sst._SimpleSilverkiteTemplate__get_single_model_components_param_from_template("SILVERKITE_DAILY_1_CONFIG_1") assert model_components == ModelComponentsParam( seasonality={ + "auto_seasonality": False, "yearly_seasonality": 8, "quarterly_seasonality": 0, "monthly_seasonality": 7, @@ -362,6 +318,7 @@ def test_get_single_model_components_param_from_template(): "growth_term": "linear" }, events={ + "auto_holiday": False, "holidays_to_model_separately": SilverkiteHoliday.HOLIDAYS_TO_MODEL_SEPARATELY_AUTO, "holiday_lookup_countries": SilverkiteHoliday.HOLIDAY_LOOKUP_COUNTRIES_AUTO, "holiday_pre_num_days": 2, @@ -370,6 +327,7 @@ def test_get_single_model_components_param_from_template(): "daily_event_df_dict": None, }, changepoints={ + "auto_growth": False, "changepoints_dict": { "method": "auto", "resample_freq": "7D", @@ -383,7 +341,8 @@ def test_get_single_model_components_param_from_template(): }, autoregression={ "autoreg_dict": "auto", - "simulation_num": 10 + "simulation_num": 10, + "fast_simulation": False }, regressors={ "regressor_cols": [] @@ -408,12 +367,13 @@ def test_get_single_model_components_param_from_template(): "regression_weight_col": None, "min_admissible_value": None, "max_admissible_value": None, - "normalize_method": None + "normalize_method": "zero_to_one" } ) model_components = sst._SimpleSilverkiteTemplate__get_single_model_components_param_from_template("SILVERKITE_DAILY_1_CONFIG_2") assert model_components == ModelComponentsParam( seasonality={ + "auto_seasonality": False, "yearly_seasonality": 1, "quarterly_seasonality": 0, "monthly_seasonality": 4, @@ -424,6 +384,7 @@ def test_get_single_model_components_param_from_template(): "growth_term": "linear" }, events={ + "auto_holiday": False, "holidays_to_model_separately": SilverkiteHoliday.HOLIDAYS_TO_MODEL_SEPARATELY_AUTO, "holiday_lookup_countries": SilverkiteHoliday.HOLIDAY_LOOKUP_COUNTRIES_AUTO, "holiday_pre_num_days": 2, @@ -432,6 +393,7 @@ def test_get_single_model_components_param_from_template(): "daily_event_df_dict": None, }, changepoints={ + "auto_growth": False, "changepoints_dict": { "method": "auto", "resample_freq": "7D", @@ -445,7 +407,8 @@ def test_get_single_model_components_param_from_template(): }, autoregression={ "autoreg_dict": "auto", - "simulation_num": 10 + "simulation_num": 10, + "fast_simulation": False }, regressors={ "regressor_cols": [] @@ -470,12 +433,13 @@ def test_get_single_model_components_param_from_template(): "regression_weight_col": None, "min_admissible_value": None, "max_admissible_value": None, - "normalize_method": None + "normalize_method": "zero_to_one" } ) model_components = sst._SimpleSilverkiteTemplate__get_single_model_components_param_from_template("SILVERKITE_DAILY_1_CONFIG_3") assert model_components == ModelComponentsParam( seasonality={ + "auto_seasonality": False, "yearly_seasonality": 40, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -486,6 +450,7 @@ def test_get_single_model_components_param_from_template(): "growth_term": "linear" }, events={ + "auto_holiday": False, "holidays_to_model_separately": SilverkiteHoliday.HOLIDAYS_TO_MODEL_SEPARATELY_AUTO, "holiday_lookup_countries": SilverkiteHoliday.HOLIDAY_LOOKUP_COUNTRIES_AUTO, "holiday_pre_num_days": 2, @@ -494,6 +459,7 @@ def test_get_single_model_components_param_from_template(): "daily_event_df_dict": None, }, changepoints={ + "auto_growth": False, "changepoints_dict": { "method": "auto", "resample_freq": "7D", @@ -507,7 +473,8 @@ def test_get_single_model_components_param_from_template(): }, autoregression={ "autoreg_dict": "auto", - "simulation_num": 10 + "simulation_num": 10, + "fast_simulation": False }, regressors={ "regressor_cols": [] @@ -532,13 +499,14 @@ def test_get_single_model_components_param_from_template(): "regression_weight_col": None, "min_admissible_value": None, "max_admissible_value": None, - "normalize_method": None + "normalize_method": "zero_to_one" } ) model_components = sst._SimpleSilverkiteTemplate__get_single_model_components_param_from_template( "DAILY_SEAS_NONE_GR_NONE_CP_NONE_HOL_NONE_FEASET_OFF_ALGO_LINEAR_AR_OFF_DSI_OFF_WSI_OFF") assert model_components == ModelComponentsParam( seasonality={ + "auto_seasonality": False, "yearly_seasonality": 0, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -549,6 +517,7 @@ def test_get_single_model_components_param_from_template(): "growth_term": None }, events={ + "auto_holiday": False, "holidays_to_model_separately": [], "holiday_lookup_countries": [], "holiday_pre_num_days": 0, @@ -557,12 +526,14 @@ def test_get_single_model_components_param_from_template(): "daily_event_df_dict": None, }, changepoints={ + "auto_growth": False, "changepoints_dict": None, "seasonality_changepoints_dict": None }, autoregression={ "autoreg_dict": None, - "simulation_num": 10 + "simulation_num": 10, + "fast_simulation": False }, regressors={ "regressor_cols": [] @@ -587,7 +558,7 @@ def test_get_single_model_components_param_from_template(): "regression_weight_col": None, "min_admissible_value": None, "max_admissible_value": None, - "normalize_method": None + "normalize_method": "zero_to_one" } ) @@ -597,6 +568,7 @@ def test_get_model_components_from_model_template(silverkite, silverkite_diagnos sst = SimpleSilverkiteTemplate() model_components = sst.get_model_components_from_model_template("SILVERKITE")[0] assert model_components.seasonality == { + "auto_seasonality": False, "yearly_seasonality": "auto", "quarterly_seasonality": "auto", "monthly_seasonality": "auto", @@ -607,6 +579,7 @@ def test_get_model_components_from_model_template(silverkite, silverkite_diagnos "growth_term": "linear" } assert model_components.events == { + "auto_holiday": False, "holidays_to_model_separately": "auto", "holiday_lookup_countries": "auto", "holiday_pre_num_days": 2, @@ -615,12 +588,22 @@ def test_get_model_components_from_model_template(silverkite, silverkite_diagnos "daily_event_df_dict": None, } assert model_components.changepoints == { - "changepoints_dict": None, + "auto_growth": False, + "changepoints_dict": { + "method": "auto", + "yearly_seasonality_order": 15, + "resample_freq": "3D", + "regularization_strength": 0.6, + "actual_changepoint_min_distance": "30D", + "potential_changepoint_distance": "15D", + "no_changepoint_distance_from_end": "90D" + }, "seasonality_changepoints_dict": None } assert model_components.autoregression == { - "autoreg_dict": None, - "simulation_num": 10 + "autoreg_dict": "auto", + "simulation_num": 10, + "fast_simulation": False } assert model_components.regressors == { "regressor_cols": [] @@ -645,7 +628,7 @@ def test_get_model_components_from_model_template(silverkite, silverkite_diagnos "regression_weight_col": None, "min_admissible_value": None, "max_admissible_value": None, - "normalize_method": None + "normalize_method": "zero_to_one" } assert model_components.hyperparameter_override is None @@ -659,6 +642,7 @@ def test_get_model_components_from_model_template(silverkite, silverkite_diagnos post_num=2) model_components = ModelComponentsParam( seasonality={ + "auto_seasonality": False, "yearly_seasonality": True, "weekly_seasonality": False }, @@ -666,6 +650,7 @@ def test_get_model_components_from_model_template(silverkite, silverkite_diagnos "growth_term": "quadratic" }, events={ + "auto_holiday": False, "holidays_to_model_separately": SilverkiteHoliday.ALL_HOLIDAYS_IN_COUNTRIES, "holiday_lookup_countries": ["UnitedStates"], "holiday_pre_num_days": 3, @@ -673,6 +658,7 @@ def test_get_model_components_from_model_template(silverkite, silverkite_diagnos "daily_event_df_dict": daily_event_df_dict }, changepoints={ + "auto_growth": False, "changepoints_dict": { "method": "uniform", "n_changepoints": 20, @@ -685,7 +671,8 @@ def test_get_model_components_from_model_template(silverkite, silverkite_diagnos "autoreg_dict": { "dummy_key": "test_value" }, - "simulation_num": 10 + "simulation_num": 10, + "fast_simulation": False }, regressors={ "regressor_cols": ["r1", "r2"] @@ -720,6 +707,7 @@ def test_get_model_components_from_model_template(silverkite, silverkite_diagnos "growth_term": "quadratic" } assert updated_components.seasonality == { + "auto_seasonality": False, "yearly_seasonality": True, "quarterly_seasonality": "auto", "weekly_seasonality": False, @@ -727,6 +715,7 @@ def test_get_model_components_from_model_template(silverkite, silverkite_diagnos "daily_seasonality": "auto", } assert_equal(updated_components.events, { + "auto_holiday": False, "holidays_to_model_separately": SilverkiteHoliday.ALL_HOLIDAYS_IN_COUNTRIES, "holiday_lookup_countries": ["UnitedStates"], "holiday_pre_num_days": 3, @@ -735,6 +724,7 @@ def test_get_model_components_from_model_template(silverkite, silverkite_diagnos "daily_event_df_dict": daily_event_df_dict }) assert updated_components.changepoints == { + "auto_growth": False, "changepoints_dict": { "method": "uniform", "n_changepoints": 20, @@ -747,7 +737,8 @@ def test_get_model_components_from_model_template(silverkite, silverkite_diagnos "autoreg_dict": { "dummy_key": "test_value" }, - "simulation_num": 10 + "simulation_num": 10, + "fast_simulation": False } assert updated_components.regressors == { "regressor_cols": ["r1", "r2"] @@ -774,7 +765,7 @@ def test_get_model_components_from_model_template(silverkite, silverkite_diagnos "regression_weight_col": None, "min_admissible_value": None, "max_admissible_value": None, - "normalize_method": None + "normalize_method": "zero_to_one" } assert updated_components.hyperparameter_override == { "input__response__null__max_frac": 0.1, @@ -795,6 +786,7 @@ def test_get_model_components_from_model_template(silverkite, silverkite_diagnos template="SILVERKITE", model_components=model_components)[0] assert updated_components.changepoints == { + "auto_growth": False, "changepoints_dict": { "method": "auto", "yearly_seasonality_order": 10, @@ -808,6 +800,7 @@ def test_override_model_components(silverkite, silverkite_diagnostics): sst = SimpleSilverkiteTemplate() default_model_components = ModelComponentsParam( seasonality={ + "auto_seasonality": False, "yearly_seasonality": 8, "quarterly_seasonality": 3, "monthly_seasonality": 2, @@ -818,6 +811,7 @@ def test_override_model_components(silverkite, silverkite_diagnostics): "growth_term": "linear" }, changepoints={ + "auto_growth": False, "changepoints_dict": { "method": "auto", "resample_freq": "7D", @@ -829,6 +823,7 @@ def test_override_model_components(silverkite, silverkite_diagnostics): "seasonality_changepoints_dict": None }, events={ + "auto_holiday": False, "holidays_to_model_separately": [], "holiday_lookup_countries": [], "holiday_pre_num_days": 0, @@ -850,7 +845,8 @@ def test_override_model_components(silverkite, silverkite_diagnostics): }, autoregression={ "autoreg_dict": None, - "simulation_num": 10 + "simulation_num": 10, + "fast_simulation": False }, regressors={ "regressor_cols": None @@ -881,6 +877,7 @@ def test_override_model_components(silverkite, silverkite_diagnostics): model_components=model_components) assert new_model_components == ModelComponentsParam( seasonality={ + "auto_seasonality": False, "yearly_seasonality": 15, "quarterly_seasonality": 3, "monthly_seasonality": 2, @@ -891,6 +888,7 @@ def test_override_model_components(silverkite, silverkite_diagnostics): "growth_term": "linear" }, changepoints={ + "auto_growth": False, "changepoints_dict": { "method": "auto", "resample_freq": "7D", @@ -902,6 +900,7 @@ def test_override_model_components(silverkite, silverkite_diagnostics): "seasonality_changepoints_dict": None }, events={ + "auto_holiday": False, "holidays_to_model_separately": [], "holiday_lookup_countries": [], "holiday_pre_num_days": 0, @@ -923,7 +922,8 @@ def test_override_model_components(silverkite, silverkite_diagnostics): }, autoregression={ "autoreg_dict": None, - "simulation_num": 10 + "simulation_num": 10, + "fast_simulation": False, }, regressors={ "regressor_cols": None @@ -943,6 +943,7 @@ def test_override_model_components(silverkite, silverkite_diagnostics): new_model_components = sst._SimpleSilverkiteTemplate__override_model_components(default_model_components) assert new_model_components == ModelComponentsParam( seasonality={ + "auto_seasonality": False, "yearly_seasonality": 8, "quarterly_seasonality": 3, "monthly_seasonality": 2, @@ -953,6 +954,7 @@ def test_override_model_components(silverkite, silverkite_diagnostics): "growth_term": "linear" }, changepoints={ + "auto_growth": False, "changepoints_dict": { "method": "auto", "resample_freq": "7D", @@ -964,6 +966,7 @@ def test_override_model_components(silverkite, silverkite_diagnostics): "seasonality_changepoints_dict": None }, events={ + "auto_holiday": False, "holidays_to_model_separately": [], "holiday_lookup_countries": [], "holiday_pre_num_days": 0, @@ -985,7 +988,8 @@ def test_override_model_components(silverkite, silverkite_diagnostics): }, autoregression={ "autoreg_dict": None, - "simulation_num": 10 + "simulation_num": 10, + "fast_simulation": False }, regressors={ "regressor_cols": None @@ -1012,6 +1016,7 @@ def test_get_model_components_and_override_from_model_template_single(): # Checks it pulls the correct model template and overrides the parameters. assert model_components[0] == ModelComponentsParam( seasonality={ + "auto_seasonality": False, "yearly_seasonality": 8, "quarterly_seasonality": 0, "monthly_seasonality": 0, @@ -1022,6 +1027,7 @@ def test_get_model_components_and_override_from_model_template_single(): "growth_term": "linear" }, changepoints={ + "auto_growth": False, "changepoints_dict": { "method": "auto", "resample_freq": "7D", @@ -1034,6 +1040,7 @@ def test_get_model_components_and_override_from_model_template_single(): "seasonality_changepoints_dict": None }, events={ + "auto_holiday": False, "holidays_to_model_separately": [], "holiday_lookup_countries": [], "holiday_pre_num_days": 0, @@ -1055,11 +1062,12 @@ def test_get_model_components_and_override_from_model_template_single(): "regression_weight_col": None, "min_admissible_value": None, "max_admissible_value": None, - "normalize_method": None + "normalize_method": "zero_to_one" }, autoregression={ "autoreg_dict": None, - "simulation_num": 10 + "simulation_num": 10, + "fast_simulation": False, }, regressors={ "regressor_cols": ["x"] @@ -1246,12 +1254,14 @@ def test_apply_default_model_components_daily_1(): # Config 1 dict( # Seasonality orders + estimator__auto_seasonality=[False], estimator__yearly_seasonality=[8], estimator__quarterly_seasonality=[0], estimator__monthly_seasonality=[7], estimator__weekly_seasonality=[1], estimator__daily_seasonality=[0], # Growth and changepoints + estimator__auto_growth=[False], estimator__growth_term=["linear"], estimator__changepoints_dict=[{ "method": "auto", @@ -1264,6 +1274,7 @@ def test_apply_default_model_components_daily_1(): }], estimator__seasonality_changepoints_dict=[None], # Holidays + estimator__auto_holiday=[False], estimator__holidays_to_model_separately=[SilverkiteHoliday.HOLIDAYS_TO_MODEL_SEPARATELY_AUTO], estimator__holiday_lookup_countries=[SilverkiteHoliday.HOLIDAY_LOOKUP_COUNTRIES_AUTO], estimator__holiday_pre_num_days=[2], @@ -1286,9 +1297,10 @@ def test_apply_default_model_components_daily_1(): estimator__regression_weight_col=[None], estimator__min_admissible_value=[None], estimator__max_admissible_value=[None], - estimator__normalize_method=[None], + estimator__normalize_method=["zero_to_one"], estimator__autoreg_dict=["auto"], estimator__simulation_num=[10], + estimator__fast_simulation=[False], estimator__regressor_cols=[[]], estimator__lagged_regressor_dict=[None], estimator__uncertainty_dict=[None], @@ -1300,12 +1312,14 @@ def test_apply_default_model_components_daily_1(): # Config 2 dict( # Seasonality orders + estimator__auto_seasonality=[False], estimator__yearly_seasonality=[1], estimator__quarterly_seasonality=[0], estimator__monthly_seasonality=[4], estimator__weekly_seasonality=[6], estimator__daily_seasonality=[0], # Growth and changepoints + estimator__auto_growth=[False], estimator__growth_term=["linear"], estimator__changepoints_dict=[{ "method": "auto", @@ -1318,6 +1332,7 @@ def test_apply_default_model_components_daily_1(): }], estimator__seasonality_changepoints_dict=[None], # Holidays + estimator__auto_holiday=[False], estimator__holidays_to_model_separately=[SilverkiteHoliday.HOLIDAYS_TO_MODEL_SEPARATELY_AUTO], estimator__holiday_lookup_countries=[SilverkiteHoliday.HOLIDAY_LOOKUP_COUNTRIES_AUTO], estimator__holiday_pre_num_days=[2], @@ -1340,9 +1355,10 @@ def test_apply_default_model_components_daily_1(): estimator__regression_weight_col=[None], estimator__min_admissible_value=[None], estimator__max_admissible_value=[None], - estimator__normalize_method=[None], + estimator__normalize_method=["zero_to_one"], estimator__autoreg_dict=["auto"], estimator__simulation_num=[10], + estimator__fast_simulation=[False], estimator__regressor_cols=[[]], estimator__lagged_regressor_dict=[None], estimator__uncertainty_dict=[None], @@ -1354,12 +1370,14 @@ def test_apply_default_model_components_daily_1(): # Config 3 dict( # Seasonality orders + estimator__auto_seasonality=[False], estimator__yearly_seasonality=[40], estimator__quarterly_seasonality=[0], estimator__monthly_seasonality=[0], estimator__weekly_seasonality=[2], estimator__daily_seasonality=[0], # Growth and changepoints + estimator__auto_growth=[False], estimator__growth_term=["linear"], estimator__changepoints_dict=[{ "method": "auto", @@ -1372,6 +1390,7 @@ def test_apply_default_model_components_daily_1(): }], estimator__seasonality_changepoints_dict=[None], # Holidays + estimator__auto_holiday=[False], estimator__holidays_to_model_separately=[SilverkiteHoliday.HOLIDAYS_TO_MODEL_SEPARATELY_AUTO], estimator__holiday_lookup_countries=[SilverkiteHoliday.HOLIDAY_LOOKUP_COUNTRIES_AUTO], estimator__holiday_pre_num_days=[2], @@ -1394,9 +1413,10 @@ def test_apply_default_model_components_daily_1(): estimator__regression_weight_col=[None], estimator__min_admissible_value=[None], estimator__max_admissible_value=[None], - estimator__normalize_method=[None], + estimator__normalize_method=["zero_to_one"], estimator__autoreg_dict=["auto"], estimator__simulation_num=[10], + estimator__fast_simulation=[False], estimator__regressor_cols=[[]], estimator__lagged_regressor_dict=[None], estimator__uncertainty_dict=[None], @@ -1423,12 +1443,14 @@ def test_apply_default_model_components_daily_90(): estimator__train_test_thresh=[None], estimator__training_fraction=[None], # Seasonality orders + estimator__auto_seasonality=[False], estimator__yearly_seasonality=[8], estimator__quarterly_seasonality=[3], estimator__monthly_seasonality=[2], estimator__weekly_seasonality=[3], estimator__daily_seasonality=[0], # Growth and changepoints + estimator__auto_growth=[False], estimator__growth_term=["linear"], estimator__changepoints_dict=[{ "method": "auto", @@ -1441,6 +1463,7 @@ def test_apply_default_model_components_daily_90(): }], estimator__seasonality_changepoints_dict=[None], # Holidays + estimator__auto_holiday=[False], estimator__holidays_to_model_separately=["auto"], estimator__holiday_lookup_countries=["auto"], estimator__holiday_pre_num_days=[2], @@ -1463,9 +1486,10 @@ def test_apply_default_model_components_daily_90(): estimator__regression_weight_col=[None], estimator__min_admissible_value=[None], estimator__max_admissible_value=[None], - estimator__normalize_method=[None], + estimator__normalize_method=["zero_to_one"], estimator__autoreg_dict=[None], estimator__simulation_num=[10], + estimator__fast_simulation=[False], estimator__regressor_cols=[[]], estimator__lagged_regressor_dict=[None], estimator__uncertainty_dict=[None] @@ -1479,16 +1503,19 @@ def test_apply_default_model_components_daily_90(): estimator__train_test_thresh=[None], estimator__training_fraction=[None], # Seasonality orders + estimator__auto_seasonality=[False], estimator__yearly_seasonality=[8], estimator__quarterly_seasonality=[3], estimator__monthly_seasonality=[2], estimator__weekly_seasonality=[3], estimator__daily_seasonality=[0], # Growth and changepoints + estimator__auto_growth=[False], estimator__growth_term=["linear"], estimator__changepoints_dict=[None], estimator__seasonality_changepoints_dict=[None], # Holidays + estimator__auto_holiday=[False], estimator__holidays_to_model_separately=["auto"], estimator__holiday_lookup_countries=["auto"], estimator__holiday_pre_num_days=[2], @@ -1511,9 +1538,10 @@ def test_apply_default_model_components_daily_90(): estimator__regression_weight_col=[None], estimator__min_admissible_value=[None], estimator__max_admissible_value=[None], - estimator__normalize_method=[None], + estimator__normalize_method=["zero_to_one"], estimator__autoreg_dict=[None], estimator__simulation_num=[10], + estimator__fast_simulation=[False], estimator__regressor_cols=[[]], estimator__lagged_regressor_dict=[None], estimator__uncertainty_dict=[None] @@ -1527,12 +1555,14 @@ def test_apply_default_model_components_daily_90(): estimator__train_test_thresh=[None], estimator__training_fraction=[None], # Seasonality orders + estimator__auto_seasonality=[False], estimator__yearly_seasonality=[8], estimator__quarterly_seasonality=[3], estimator__monthly_seasonality=[2], estimator__weekly_seasonality=[3], estimator__daily_seasonality=[0], # Growth and changepoints + estimator__auto_growth=[False], estimator__growth_term=["linear"], estimator__changepoints_dict=[{ "method": "auto", @@ -1545,6 +1575,7 @@ def test_apply_default_model_components_daily_90(): }], estimator__seasonality_changepoints_dict=[None], # Holidays + estimator__auto_holiday=[False], estimator__holidays_to_model_separately=["auto"], estimator__holiday_lookup_countries=["auto"], estimator__holiday_pre_num_days=[2], @@ -1567,9 +1598,10 @@ def test_apply_default_model_components_daily_90(): estimator__regression_weight_col=[None], estimator__min_admissible_value=[None], estimator__max_admissible_value=[None], - estimator__normalize_method=[None], + estimator__normalize_method=["zero_to_one"], estimator__autoreg_dict=[None], estimator__simulation_num=[10], + estimator__fast_simulation=[False], estimator__regressor_cols=[[]], estimator__lagged_regressor_dict=[None], estimator__uncertainty_dict=[None] @@ -1583,12 +1615,14 @@ def test_apply_default_model_components_daily_90(): estimator__train_test_thresh=[None], estimator__training_fraction=[None], # Seasonality orders + estimator__auto_seasonality=[False], estimator__yearly_seasonality=[15], estimator__quarterly_seasonality=[0], estimator__monthly_seasonality=[0], estimator__weekly_seasonality=[3], estimator__daily_seasonality=[0], # Growth and changepoints + estimator__auto_growth=[False], estimator__growth_term=["linear"], estimator__changepoints_dict=[{ "method": "auto", @@ -1601,6 +1635,7 @@ def test_apply_default_model_components_daily_90(): }], estimator__seasonality_changepoints_dict=[None], # Holidays + estimator__auto_holiday=[False], estimator__holidays_to_model_separately=["auto"], estimator__holiday_lookup_countries=["auto"], estimator__holiday_pre_num_days=[4], @@ -1623,9 +1658,10 @@ def test_apply_default_model_components_daily_90(): estimator__regression_weight_col=[None], estimator__min_admissible_value=[None], estimator__max_admissible_value=[None], - estimator__normalize_method=[None], + estimator__normalize_method=["zero_to_one"], estimator__autoreg_dict=[None], estimator__simulation_num=[10], + estimator__fast_simulation=[False], estimator__regressor_cols=[[]], estimator__lagged_regressor_dict=[None], estimator__uncertainty_dict=[None] @@ -1648,16 +1684,19 @@ def test_apply_default_model_components_weekly(): estimator__train_test_thresh=[None], estimator__training_fraction=[None], # Seasonality orders + estimator__auto_seasonality=[False], estimator__yearly_seasonality=[15], estimator__quarterly_seasonality=[0], estimator__monthly_seasonality=[0], estimator__weekly_seasonality=[0], estimator__daily_seasonality=[0], # Growth and changepoints + estimator__auto_growth=[False], estimator__growth_term=["linear"], estimator__changepoints_dict=[None], estimator__seasonality_changepoints_dict=[None], # Holidays + estimator__auto_holiday=[False], estimator__holidays_to_model_separately=[[]], estimator__holiday_lookup_countries=[[]], estimator__holiday_pre_num_days=[0], @@ -1680,9 +1719,10 @@ def test_apply_default_model_components_weekly(): estimator__regression_weight_col=[None], estimator__min_admissible_value=[None], estimator__max_admissible_value=[None], - estimator__normalize_method=[None], + estimator__normalize_method=["zero_to_one"], estimator__autoreg_dict=[None], estimator__simulation_num=[10], + estimator__fast_simulation=[False], estimator__regressor_cols=[[]], estimator__lagged_regressor_dict=[None], estimator__uncertainty_dict=[None] @@ -1696,12 +1736,14 @@ def test_apply_default_model_components_weekly(): estimator__train_test_thresh=[None], estimator__training_fraction=[None], # Seasonality orders + estimator__auto_seasonality=[False], estimator__yearly_seasonality=[15], estimator__quarterly_seasonality=[0], estimator__monthly_seasonality=[0], estimator__weekly_seasonality=[0], estimator__daily_seasonality=[0], # Growth and changepoints + estimator__auto_growth=[False], estimator__growth_term=["linear"], estimator__changepoints_dict=[dict( method="auto", @@ -1714,6 +1756,7 @@ def test_apply_default_model_components_weekly(): )], estimator__seasonality_changepoints_dict=[None], # Holidays + estimator__auto_holiday=[False], estimator__holidays_to_model_separately=[[]], estimator__holiday_lookup_countries=[[]], estimator__holiday_pre_num_days=[0], @@ -1736,9 +1779,10 @@ def test_apply_default_model_components_weekly(): estimator__regression_weight_col=[None], estimator__min_admissible_value=[None], estimator__max_admissible_value=[None], - estimator__normalize_method=[None], + estimator__normalize_method=["zero_to_one"], estimator__autoreg_dict=[None], estimator__simulation_num=[10], + estimator__fast_simulation=[False], estimator__regressor_cols=[[]], estimator__lagged_regressor_dict=[None], estimator__uncertainty_dict=[None] @@ -1752,12 +1796,14 @@ def test_apply_default_model_components_weekly(): estimator__train_test_thresh=[None], estimator__training_fraction=[None], # Seasonality orders + estimator__auto_seasonality=[False], estimator__yearly_seasonality=[25], estimator__quarterly_seasonality=[0], estimator__monthly_seasonality=[0], estimator__weekly_seasonality=[0], estimator__daily_seasonality=[0], # Growth and changepoints + estimator__auto_growth=[False], estimator__growth_term=["linear"], estimator__changepoints_dict=[{ "method": "auto", @@ -1770,6 +1816,7 @@ def test_apply_default_model_components_weekly(): }], estimator__seasonality_changepoints_dict=[None], # Holidays + estimator__auto_holiday=[False], estimator__holidays_to_model_separately=[[]], estimator__holiday_lookup_countries=[[]], estimator__holiday_pre_num_days=[0], @@ -1792,9 +1839,10 @@ def test_apply_default_model_components_weekly(): estimator__regression_weight_col=[None], estimator__min_admissible_value=[None], estimator__max_admissible_value=[None], - estimator__normalize_method=[None], + estimator__normalize_method=["zero_to_one"], estimator__autoreg_dict=[None], estimator__simulation_num=[10], + estimator__fast_simulation=[False], estimator__regressor_cols=[[]], estimator__lagged_regressor_dict=[None], estimator__uncertainty_dict=[None] @@ -1808,12 +1856,14 @@ def test_apply_default_model_components_weekly(): estimator__train_test_thresh=[None], estimator__training_fraction=[None], # Seasonality orders + estimator__auto_seasonality=[False], estimator__yearly_seasonality=[25], estimator__quarterly_seasonality=[0], estimator__monthly_seasonality=[0], estimator__weekly_seasonality=[0], estimator__daily_seasonality=[0], # Growth and changepoints + estimator__auto_growth=[False], estimator__growth_term=["linear"], estimator__changepoints_dict=[dict( method="auto", @@ -1826,6 +1876,7 @@ def test_apply_default_model_components_weekly(): )], estimator__seasonality_changepoints_dict=[None], # Holidays + estimator__auto_holiday=[False], estimator__holidays_to_model_separately=[[]], estimator__holiday_lookup_countries=[[]], estimator__holiday_pre_num_days=[0], @@ -1848,9 +1899,10 @@ def test_apply_default_model_components_weekly(): estimator__regression_weight_col=[None], estimator__min_admissible_value=[None], estimator__max_admissible_value=[None], - estimator__normalize_method=[None], + estimator__normalize_method=["zero_to_one"], estimator__autoreg_dict=[None], estimator__simulation_num=[10], + estimator__fast_simulation=[False], estimator__regressor_cols=[[]], estimator__lagged_regressor_dict=[None], estimator__uncertainty_dict=[None] @@ -1885,14 +1937,25 @@ def test_get_simple_silverkite_hyperparameter_grid(silverkite, silverkite_diagno "estimator__train_test_thresh": [None], "estimator__training_fraction": [None], "estimator__fit_algorithm_dict": [{"fit_algorithm": "ridge", "fit_algorithm_params": None}], + "estimator__auto_holiday": [False], "estimator__holidays_to_model_separately": ["auto"], "estimator__holiday_lookup_countries": ["auto"], "estimator__holiday_pre_num_days": [2], "estimator__holiday_post_num_days": [2], "estimator__holiday_pre_post_num_dict": [None], "estimator__daily_event_df_dict": [None], - "estimator__changepoints_dict": [None], + "estimator__auto_growth": [False], + "estimator__changepoints_dict": [{ + "method": "auto", + "yearly_seasonality_order": 15, + "resample_freq": "3D", + "regularization_strength": 0.6, + "actual_changepoint_min_distance": "30D", + "potential_changepoint_distance": "15D", + "no_changepoint_distance_from_end": "90D" + }], "estimator__seasonality_changepoints_dict": [None], + "estimator__auto_seasonality": [False], "estimator__yearly_seasonality": ["auto"], "estimator__quarterly_seasonality": ["auto"], "estimator__monthly_seasonality": ["auto"], @@ -1900,11 +1963,12 @@ def test_get_simple_silverkite_hyperparameter_grid(silverkite, silverkite_diagno "estimator__daily_seasonality": ["auto"], "estimator__max_daily_seas_interaction_order": [5], "estimator__max_weekly_seas_interaction_order": [2], - "estimator__autoreg_dict": [None], + "estimator__autoreg_dict": ["auto"], "estimator__simulation_num": [10], + "estimator__fast_simulation": [False], "estimator__min_admissible_value": [None], "estimator__max_admissible_value": [None], - "estimator__normalize_method": [None], + "estimator__normalize_method": ["zero_to_one"], "estimator__uncertainty_dict": [None], "estimator__growth_term": ["linear"], "estimator__regressor_cols": [[]], @@ -2127,16 +2191,16 @@ def test_simple_silverkite_template_custom(): # anomaly adjustment adds 10.0 to every record adjustment_size = 10.0 anomaly_df = pd.DataFrame({ - START_DATE_COL: [df[time_col].min()], - END_DATE_COL: [df[time_col].max()], + START_TIME_COL: [df[time_col].min()], + END_TIME_COL: [df[time_col].max()], ADJUSTMENT_DELTA_COL: [adjustment_size], METRIC_COL: [value_col] }) anomaly_info = { "value_col": VALUE_COL, "anomaly_df": anomaly_df, - "start_date_col": START_DATE_COL, - "end_date_col": END_DATE_COL, + "start_time_col": START_TIME_COL, + "end_time_col": END_TIME_COL, "adjustment_delta_col": ADJUSTMENT_DELTA_COL, "filter_by_dict": {METRIC_COL: VALUE_COL}, "adjustment_method": "add" @@ -2385,10 +2449,10 @@ def test_run_template_2(): rmse = EvaluationMetricEnum.RootMeanSquaredError.get_metric_name() q80 = EvaluationMetricEnum.Quantile80.get_metric_name() - assert result.backtest.test_evaluation[rmse] == pytest.approx(2.019, rel=1e-2) - assert result.backtest.test_evaluation[q80] == pytest.approx(0.541, rel=1e-2) - assert result.forecast.train_evaluation[rmse] == pytest.approx(2.159, rel=1e-2) - assert result.forecast.train_evaluation[q80] == pytest.approx(0.872, rel=1e-2) + assert result.backtest.test_evaluation[rmse] == pytest.approx(1.968, rel=1e-2) + assert result.backtest.test_evaluation[q80] == pytest.approx(0.573, rel=1e-2) + assert result.forecast.train_evaluation[rmse] == pytest.approx(1.953, rel=1e-2) + assert result.forecast.train_evaluation[q80] == pytest.approx(0.784, rel=1e-2) check_forecast_pipeline_result( result, coverage=coverage, @@ -2467,10 +2531,10 @@ def test_run_template_3(): config=config) rmse = EvaluationMetricEnum.RootMeanSquaredError.get_metric_name() q80 = EvaluationMetricEnum.Quantile80.get_metric_name() - assert result.backtest.test_evaluation[rmse] == pytest.approx(2.976, rel=1e-2) - assert result.backtest.test_evaluation[q80] == pytest.approx(1.360, rel=1e-2) - assert result.forecast.train_evaluation[rmse] == pytest.approx(2.224, rel=1e-2) - assert result.forecast.train_evaluation[q80] == pytest.approx(0.941, rel=1e-2) + assert result.backtest.test_evaluation[rmse] == pytest.approx(3.299, rel=1e-2) + assert result.backtest.test_evaluation[q80] == pytest.approx(1.236, rel=1e-2) + assert result.forecast.train_evaluation[rmse] == pytest.approx(1.782, rel=1e-2) + assert result.forecast.train_evaluation[q80] == pytest.approx(0.746, rel=1e-2) check_forecast_pipeline_result( result, coverage=coverage, @@ -2478,7 +2542,8 @@ def test_run_template_3(): score_func=metric.name, greater_is_better=False) - with pytest.raises(KeyError, match="missing_regressor"), pytest.warns( + # Note that for newer scikit-learn version, needs to add a check for ValueError, matching "model is misconfigured" + with pytest.raises((ValueError, KeyError)) as exception_info, pytest.warns( UserWarning, match="Removing the columns from the input list of 'regressor_cols'" " that are unavailable in the input DataFrame"): @@ -2493,6 +2558,8 @@ def test_run_template_3(): model_template=ModelTemplateEnum.SILVERKITE.name, model_components_param=model_components, )) + info_str = str(exception_info.value) + assert "missing_regressor" in info_str or "model is misconfigured" in info_str def test_run_template_4(): @@ -2557,11 +2624,11 @@ def test_run_template_4(): [('estimator__yearly_seasonality', 2), ('estimator__growth_term', 'linear')], ] assert all(param in list(grid_results["params"]) for param in expected_params) - assert result.grid_search.best_index_ == 1 - assert result.backtest.test_evaluation[rmse] == pytest.approx(14.57, rel=1e-2) - assert result.backtest.test_evaluation[q80] == pytest.approx(2.636, rel=1e-2) - assert result.forecast.train_evaluation[rmse] == pytest.approx(3.869, rel=1e-2) - assert result.forecast.train_evaluation[q80] == pytest.approx(1.413, rel=1e-2) + assert result.grid_search.best_index_ == 2 + assert result.backtest.test_evaluation[rmse] == pytest.approx(5.425, rel=1e-2) + assert result.backtest.test_evaluation[q80] == pytest.approx(1.048, rel=1e-2) + assert result.forecast.train_evaluation[rmse] == pytest.approx(2.526, rel=1e-2) + assert result.forecast.train_evaluation[q80] == pytest.approx(0.991, rel=1e-2) check_forecast_pipeline_result( result, coverage=0.99, @@ -2650,7 +2717,7 @@ def test_run_template_5(): metric_name = EvaluationMetricEnum.MeanAbsolutePercentError.get_metric_name() cv_results = result.grid_search.cv_results_ assert cv_results[f"mean_train_{metric_name}"][0] == pytest.approx(1.221, rel=1e-2) - assert cv_results[f"mean_test_{metric_name}"][0] == pytest.approx(3.566, rel=1e-2) + assert cv_results[f"mean_test_{metric_name}"][0] == pytest.approx(38.81, rel=1e-2) # The model with `origin_for_time_vars=None` should have poor CV test error # because the growth term has the wrong origin. @@ -2665,14 +2732,14 @@ def test_run_template_5(): )) cv_results = result_dynamic_origin.grid_search.cv_results_ assert cv_results[f"mean_train_{metric_name}"][0] == pytest.approx(1.226, rel=1e-2) - assert cv_results[f"mean_test_{metric_name}"][0] == pytest.approx(19.446, rel=1e-2) + assert cv_results[f"mean_test_{metric_name}"][0] == pytest.approx(9.320, rel=1e-2) def test_run_template_6(): """Tests automatic change point detection feature """ dl = DataLoader() - data = dl.load_peyton_manning() + data = dl.load_peyton_manning().iloc[-730:] model_components = ModelComponentsParam( seasonality={ "weekly_seasonality": 0 # No weekly seasonality @@ -2699,7 +2766,7 @@ def test_run_template_6(): ) evaluation_period = EvaluationPeriodParam( cv_expanding_window=False, # rolling start date - cv_horizon=30, + cv_horizon=0, cv_min_train_periods=55, cv_periods_between_train_test=10, test_horizon=30 @@ -2737,7 +2804,7 @@ def test_run_template_7(): """Tests custom events """ dl = DataLoader() - data = dl.load_peyton_manning() + data = dl.load_peyton_manning().iloc[-1000:] model_components = ModelComponentsParam( custom={ "fit_algorithm_dict": { @@ -2753,6 +2820,9 @@ def test_run_template_7(): "event_name": ["event"] * 9 # labels }) } + }, + changepoints={ + "changepoints_dict": None } ) evaluation_period = EvaluationPeriodParam( @@ -2816,7 +2886,7 @@ def test_run_template_8(): config=config, ) rmse = EvaluationMetricEnum.RootMeanSquaredError.get_metric_name() - assert result.backtest.test_evaluation[rmse] == pytest.approx(3.25, rel=1e-1) + assert result.backtest.test_evaluation[rmse] == pytest.approx(6.691, rel=1e-1) check_forecast_pipeline_result( result, coverage=0.9, @@ -2910,10 +2980,10 @@ def test_run_template_9(): config=config) rmse = EvaluationMetricEnum.RootMeanSquaredError.get_metric_name() q80 = EvaluationMetricEnum.Quantile80.get_metric_name() - assert result.backtest.test_evaluation[rmse] == pytest.approx(3.021, rel=1e-2) - assert result.backtest.test_evaluation[q80] == pytest.approx(0.885, rel=1e-2) - assert result.forecast.train_evaluation[rmse] == pytest.approx(2.439, rel=1e-2) - assert result.forecast.train_evaluation[q80] == pytest.approx(0.891, rel=1e-2) + assert result.backtest.test_evaluation[rmse] == pytest.approx(3.360, rel=1e-2) + assert result.backtest.test_evaluation[q80] == pytest.approx(1.139, rel=1e-2) + assert result.forecast.train_evaluation[rmse] == pytest.approx(2.069, rel=1e-2) + assert result.forecast.train_evaluation[q80] == pytest.approx(0.771, rel=1e-2) check_forecast_pipeline_result( result, coverage=coverage, @@ -2943,7 +3013,8 @@ def test_run_template_9(): assert expected_pred_cols.issubset(actual_pred_cols) assert expected_x_mat_cols.issubset(actual_x_mat_cols) - with pytest.raises(KeyError, match="missing_regressor"): + # Note that for newer scikit-learn version, needs to add a check for ValueError, matching "model is misconfigured" + with pytest.raises((ValueError, KeyError)) as exception_info: model_components = ModelComponentsParam( regressors={ "regressor_cols": ["missing_regressor"] @@ -2955,8 +3026,11 @@ def test_run_template_9(): model_template=ModelTemplateEnum.SILVERKITE.name, model_components_param=model_components, )) + info_str = str(exception_info.value) + assert "missing_regressor" in info_str or "model is misconfigured" in info_str - with pytest.raises(KeyError, match="missing_lagged_regressor"): + # Note that for newer scikit-learn version, needs to add a check for ValueError, matching "model is misconfigured" + with pytest.raises((ValueError, KeyError)) as exception_info: model_components = ModelComponentsParam( lagged_regressors={ "lagged_regressor_dict": { @@ -2970,8 +3044,11 @@ def test_run_template_9(): model_template=ModelTemplateEnum.SILVERKITE.name, model_components_param=model_components, )) + info_str = str(exception_info.value) + assert "missing_lagged_regressor" in info_str or "model is misconfigured" in info_str - with pytest.raises(KeyError, match="missing_lagged_regressor"): + # Note that for newer scikit-learn version, needs to add a check for ValueError, matching "model is misconfigured" + with pytest.raises((ValueError, KeyError)) as exception_info: model_components = ModelComponentsParam( lagged_regressors={ "lagged_regressor_dict": { @@ -2986,58 +3063,8 @@ def test_run_template_9(): model_template=ModelTemplateEnum.SILVERKITE.name, model_components_param=model_components, )) - - -def test_run_template_with_ar(): - """Tests: - SILVERKITE_WITH_AR template - - coverage - - daily data - - default `hyperparameter_grid` (all interaction terms enabled) - """ - # sets random state for consistent comparison - model_components = ModelComponentsParam( - custom={ - "fit_algorithm_dict": { - "fit_algorithm": "sgd", - "fit_algorithm_params": {"random_state": 1234} - } - } - ) - - data = generate_df_for_tests( - freq="D", - periods=90) - df = data["train_df"] - forecast_horizon = data["test_df"].shape[0] - coverage = 0.90 - - config = ForecastConfig( - model_template=ModelTemplateEnum.SILVERKITE_WITH_AR.name, - forecast_horizon=forecast_horizon, - coverage=coverage, - model_components_param=model_components, - ) - - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - result = Forecaster().run_forecast_config( - df=df, - config=config, - ) - - rmse = EvaluationMetricEnum.RootMeanSquaredError.get_metric_name() - q80 = EvaluationMetricEnum.Quantile80.get_metric_name() - assert result.backtest.test_evaluation[rmse] == pytest.approx(2.146, rel=1e-2) - assert result.backtest.test_evaluation[q80] == pytest.approx(0.498, rel=1e-2) - assert result.forecast.train_evaluation[rmse] == pytest.approx(2.020, rel=1e-2) - assert result.forecast.train_evaluation[q80] == pytest.approx(0.831, rel=1e-2) - check_forecast_pipeline_result( - result, - coverage=coverage, - strategy=None, - score_func=EvaluationMetricEnum.MeanAbsolutePercentError.name, - greater_is_better=False) + info_str = str(exception_info.value) + assert "missing_lagged_regressor" in info_str or "model is misconfigured" in info_str def test_run_template_daily_1(): @@ -3252,3 +3279,134 @@ def test_silverkite_simulation_num(): config=config, ) assert result.model[-1].model_dict["simulation_num"] == 2 + assert result.model[-1].model_dict["fast_simulation"] is False + + # Tests fast simulation + config = ForecastConfig( + model_template="SILVERKITE_EMPTY", + forecast_horizon=2, + evaluation_period_param=evaluation_period, + model_components_param=ModelComponentsParam( + autoregression=dict( + autoreg_dict={ + "lag_dict": {"orders": [1]}}, + simulation_num=2, + fast_simulation=True + ) + ) + ) + result = Forecaster().run_forecast_config( + df=new_df, + config=config, + ) + assert result.model[-1].model_dict["simulation_num"] == 2 + assert result.model[-1].model_dict["fast_simulation"] is True + + +def test_silverkite_float32(): + dl = DataLoader() + data = dl.load_peyton_manning() + data[TIME_COL] = pd.to_datetime(data[TIME_COL]) + data[VALUE_COL] = data[VALUE_COL].astype("float32") + evaluation_period = EvaluationPeriodParam( + cv_expanding_window=False, # rolling start date + cv_horizon=0, + cv_min_train_periods=52, + cv_periods_between_train_test=0, + test_horizon=1, + cv_max_splits=1 + ) + config = ForecastConfig( + model_template="SILVERKITE", + forecast_horizon=1, + evaluation_period_param=evaluation_period, + model_components_param=ModelComponentsParam() + ) + new_df = data.iloc[:365] + Forecaster().run_forecast_config( + df=new_df, + config=config, + ) + + +def test_silverkite_monthly_template(): + dl = DataLoader() + data = dl.load_peyton_manning() + data[TIME_COL] = pd.to_datetime(data[TIME_COL]) + data = data.resample("MS", on=TIME_COL).sum().reset_index(drop=False) + evaluation_period = EvaluationPeriodParam( + test_horizon=1, + cv_max_splits=1 + ) + config = ForecastConfig( + model_template="SILVERKITE_MONTHLY", + forecast_horizon=1, + evaluation_period_param=evaluation_period, + model_components_param=ModelComponentsParam() + ) + Forecaster().run_forecast_config( + df=data, + config=config, + ) + + +def test_silverkite_monthly_template_potential_changepoint_cap(): + df = pd.DataFrame({ + TIME_COL: pd.date_range("2000-01-01", freq="MS", periods=12 * 200), + VALUE_COL: 1 + }) + with LogCapture(LOGGER_NAME) as log_capture: + evaluation_period = EvaluationPeriodParam( + test_horizon=0, + cv_max_splits=0 + ) + config = ForecastConfig( + model_template="SILVERKITE_MONTHLY", + forecast_horizon=1, + evaluation_period_param=evaluation_period, + ) + Forecaster().run_forecast_config( + df=df, + config=config, + ) + log_capture.check_present(( + LOGGER_NAME, + "INFO", + f"Number of potential changepoints is capped by 'potential_changepoint_n_max' " + f"as 100. The 'potential_changepoint_distance' " + f"180D is ignored. The original number of changepoints was 405." + )) + + +def test_silverkite_auto_config(): + """Tests automatic seasonality, growth and holidays.""" + dl = DataLoader() + data = dl.load_peyton_manning() + data[TIME_COL] = pd.to_datetime(data[TIME_COL]) + evaluation_period = EvaluationPeriodParam( + test_horizon=1, + cv_max_splits=1 + ) + config = ForecastConfig( + model_template="SILVERKITE", + forecast_horizon=1, + evaluation_period_param=evaluation_period, + model_components_param=ModelComponentsParam( + growth=dict(growth_term="quadratic"), # will be overriden by auto growth + seasonality=dict(auto_seasonality=True), + events=dict(auto_holiday=True), + changepoints=dict(auto_growth=True) + ) + ) + result = Forecaster().run_forecast_config( + df=data, + config=config, + ) + assert result.model[-1].model_dict["fs_components_df"][["name", "period", "order", "seas_names"]].equals(pd.DataFrame({ + "name": ["tow", "tom", "toq", "ct1"], + "period": [7.0, 1.0, 1.0, 1.0], + "order": [3, 1, 1, 6], + "seas_names": ["weekly", "monthly", "quarterly", "yearly"] + })) + assert len(result.model[-1].model_dict["daily_event_df_dict"]) == 194 + assert "ct1" in result.model[-1].model_dict["x_mat"].columns diff --git a/greykite/tests/framework/templates/test_simple_silverkite_template_config.py b/greykite/tests/framework/templates/test_simple_silverkite_template_config.py index 06572c0..e47a620 100644 --- a/greykite/tests/framework/templates/test_simple_silverkite_template_config.py +++ b/greykite/tests/framework/templates/test_simple_silverkite_template_config.py @@ -15,8 +15,8 @@ from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_FREQ from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_GR from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_HOL +from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_MONTHLY from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_SEAS -from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_WITH_AR from greykite.framework.templates.simple_silverkite_template_config import SILVERKITE_WSI from greykite.framework.templates.simple_silverkite_template_config import VALID_FREQ from greykite.framework.templates.simple_silverkite_template_config import SimpleSilverkiteTemplateConstants @@ -68,7 +68,7 @@ def test_simple_silvekite_template_constants(): assert constants.MULTI_TEMPLATES == MULTI_TEMPLATES assert constants.SILVERKITE == SILVERKITE - assert constants.SILVERKITE_WITH_AR == SILVERKITE_WITH_AR + assert constants.SILVERKITE_MONTHLY == SILVERKITE_MONTHLY assert constants.SILVERKITE_DAILY_1_CONFIG_1 == SILVERKITE_DAILY_1_CONFIG_1 assert constants.SILVERKITE_DAILY_1_CONFIG_2 == SILVERKITE_DAILY_1_CONFIG_2 assert constants.SILVERKITE_DAILY_1_CONFIG_3 == SILVERKITE_DAILY_1_CONFIG_3 diff --git a/greykite/tests/sklearn/estimator/test_auto_arima_estimator.py b/greykite/tests/sklearn/estimator/test_auto_arima_estimator.py index 0cb7a18..a548cf5 100644 --- a/greykite/tests/sklearn/estimator/test_auto_arima_estimator.py +++ b/greykite/tests/sklearn/estimator/test_auto_arima_estimator.py @@ -78,6 +78,14 @@ def daily_data(): conti_year_origin=2018) +@pytest.fixture +def monthly_data(): + return generate_df_for_tests( + freq="MS", + periods=50, + conti_year_origin=2018) + + @pytest.fixture def X(): return pd.DataFrame({ @@ -204,55 +212,56 @@ def test_summary(daily_data): model.summary() -def test_fit_predict(daily_data): +def test_fit_predict(daily_data, monthly_data): """Tests fit and predict.""" - model = AutoArimaEstimator() - train_df = daily_data["train_df"] - test_df = daily_data["test_df"] - assert model.last_predicted_X_ is None - assert model.cached_predictions_ is None - - model.fit(train_df, time_col=TIME_COL, value_col=VALUE_COL) - assert model.last_predicted_X_ is None - assert model.cached_predictions_ is None - with LogCapture(LOGGER_NAME) as log_capture: - predicted = model.predict(test_df) - assert list(predicted.columns) == [TIME_COL, PREDICTED_COL, PREDICTED_LOWER_COL, PREDICTED_UPPER_COL] - assert_equal(model.last_predicted_X_, test_df) - assert_equal(model.cached_predictions_, predicted) - log_capture.check() # no log messages (not using cached predictions) - - y_true = test_df[VALUE_COL] - y_pred = predicted[PREDICTED_COL] - - err = calc_pred_err(y_true, y_pred) - enum = EvaluationMetricEnum.Correlation - assert err[enum.get_metric_name()] > 0.50 - enum = EvaluationMetricEnum.MeanAbsoluteError - assert err[enum.get_metric_name()] < 2.5 - enum = EvaluationMetricEnum.RootMeanSquaredError - assert err[enum.get_metric_name()] < 3.0 - enum = EvaluationMetricEnum.MedianAbsoluteError - assert err[enum.get_metric_name()] < 3.0 - - # Uses cached predictions - with LogCapture(LOGGER_NAME) as log_capture: - assert_equal(model.predict(test_df), predicted) - log_capture.check( - (LOGGER_NAME, LoggingLevelEnum.DEBUG.name, "Returning cached predictions.") - ) - - # Predicts on a different dataset - with LogCapture(LOGGER_NAME) as log_capture: - predicted = model.predict(train_df) - assert_equal(model.last_predicted_X_, train_df) - assert_equal(model.cached_predictions_, predicted) - log_capture.check() # no log messages (not using cached predictions) - - # .fit() clears the cached result - model.fit(train_df, time_col=TIME_COL, value_col=VALUE_COL) - assert model.last_predicted_X_ is None - assert model.cached_predictions_ is None + for data in daily_data, monthly_data: + model = AutoArimaEstimator() + train_df = daily_data["train_df"] + test_df = daily_data["test_df"] + assert model.last_predicted_X_ is None + assert model.cached_predictions_ is None + + model.fit(train_df, time_col=TIME_COL, value_col=VALUE_COL) + assert model.last_predicted_X_ is None + assert model.cached_predictions_ is None + with LogCapture(LOGGER_NAME) as log_capture: + predicted = model.predict(test_df) + assert list(predicted.columns) == [TIME_COL, PREDICTED_COL, PREDICTED_LOWER_COL, PREDICTED_UPPER_COL] + assert_equal(model.last_predicted_X_, test_df) + assert_equal(model.cached_predictions_, predicted) + log_capture.check() # no log messages (not using cached predictions) + + y_true = test_df[VALUE_COL] + y_pred = predicted[PREDICTED_COL] + + err = calc_pred_err(y_true, y_pred) + enum = EvaluationMetricEnum.Correlation + assert err[enum.get_metric_name()] > 0.50 + enum = EvaluationMetricEnum.MeanAbsoluteError + assert err[enum.get_metric_name()] < 10.0 + enum = EvaluationMetricEnum.RootMeanSquaredError + assert err[enum.get_metric_name()] < 10.0 + enum = EvaluationMetricEnum.MedianAbsoluteError + assert err[enum.get_metric_name()] < 10.0 + + # Uses cached predictions + with LogCapture(LOGGER_NAME) as log_capture: + assert_equal(model.predict(test_df), predicted) + log_capture.check( + (LOGGER_NAME, LoggingLevelEnum.DEBUG.name, "Returning cached predictions.") + ) + + # Predicts on a different dataset + with LogCapture(LOGGER_NAME) as log_capture: + predicted = model.predict(train_df) + assert_equal(model.last_predicted_X_, train_df) + assert_equal(model.cached_predictions_, predicted) + log_capture.check() # no log messages (not using cached predictions) + + # .fit() clears the cached result + model.fit(train_df, time_col=TIME_COL, value_col=VALUE_COL) + assert model.last_predicted_X_ is None + assert model.cached_predictions_ is None def test_predict_interaction(daily_data): diff --git a/greykite/tests/sklearn/estimator/test_base_forecast_estimator.py b/greykite/tests/sklearn/estimator/test_base_forecast_estimator.py index b282bdd..7217e26 100644 --- a/greykite/tests/sklearn/estimator/test_base_forecast_estimator.py +++ b/greykite/tests/sklearn/estimator/test_base_forecast_estimator.py @@ -308,7 +308,7 @@ def test_uncertainty(df): uncertainty_method=UncertaintyMethodEnum.simple_conditional_residuals.name, params=dict( value_col=VALUE_COL, - residual_col="residual_col" + is_residual_based=True ) ) ) @@ -350,26 +350,6 @@ def test_uncertainty_errors(df): assert res is None assert model.uncertainty_model is None - # Fit failed. - with LogCapture(LOGGER_NAME) as log_capture: - model.fit_uncertainty( - df=df[[TIME_COL, VALUE_COL]], - uncertainty_dict=dict( - uncertainty_method=UncertaintyMethodEnum.simple_conditional_residuals.name, - params=dict( - value_col=VALUE_COL, - residual_col="residual_col" - ) - ) - ) - assert ( - (LOGGER_NAME, - "WARNING", - f"The following errors occurred during fitting the uncertainty model, " - f"the uncertainty model is skipped." - f" `residual_col` residual_col not found in `train_df.columns`.") - ) in log_capture.actual() - # Uncertainty model not trained. with LogCapture(LOGGER_NAME) as log_capture: model = ConstantBaseForecastEstimator() @@ -391,7 +371,13 @@ def test_uncertainty_errors(df): model.value_col_ = VALUE_COL model.fit_uncertainty( df=df, - uncertainty_dict={} + uncertainty_dict={ + "uncertainty_method": "simple_conditional_residuals", + "params": { + "is_residual_based": True, + "predicted_col": PREDICTED_COL + } + } ) model.predict_uncertainty( df=df[[TIME_COL]] @@ -401,5 +387,5 @@ def test_uncertainty_errors(df): "WARNING", f"The following errors occurred during predicting the uncertainty model, " f"the uncertainty model is skipped." - f" The value column y is not found in `fut_df`.") + f" The offset column {PREDICTED_COL} is not found in `fut_df`.") ) in log_capture.actual() diff --git a/greykite/tests/sklearn/estimator/test_base_silverkite_estimator.py b/greykite/tests/sklearn/estimator/test_base_silverkite_estimator.py index c8c7011..02387b6 100644 --- a/greykite/tests/sklearn/estimator/test_base_silverkite_estimator.py +++ b/greykite/tests/sklearn/estimator/test_base_silverkite_estimator.py @@ -733,6 +733,92 @@ def test_pred_category(df_pt): assert pred_category["interaction_features"] == ["x:ct1"] +def test_pred_category_regressor(df_pt): + """Tests regressors are classified into the correct category, + even their names matches some specific patterns such as "cp" or "lag". + """ + model = BaseSilverkiteEstimator() + df_pt = df_pt.copy() + model.fit( + X=df_pt.iloc[:100], # speeds up + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL) + params = { + "fit_algorithm": "linear", + "training_fraction": 0.8, + "extra_pred_cols": ["ct1", "x", "x:ct1", + "weather_wghtd_avg_cld_cvr_tot_pct_max_mid"], + "lagged_regressor_dict": { + "media_total_spend_lag4": { + "lag_dict": {"orders": [5]}, + "agg_lag_dict": { + "orders_list": [[7, 7 * 2, 7 * 3]], + "interval_list": [(8, 7 * 2)]}, + "series_na_fill_func": lambda s: s.bfill().ffill() + } + } + } + df_pt["x"] = np.random.randn(df_pt.shape[0]) + df_pt["weather_wghtd_avg_cld_cvr_tot_pct_max_mid"] = np.random.randn(df_pt.shape[0]) + df_pt["media_total_spend_lag4"] = np.random.randn(df_pt.shape[0]) + silverkite = SilverkiteForecast() + model.model_dict = silverkite.forecast( + df=df_pt.iloc[:100], + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + **params) + model.extra_pred_cols = ["ct1", "x", "x:ct1", + "weather_wghtd_avg_cld_cvr_tot_pct_max_mid", + "media_total_spend_lag4"] # set in subclass initialization + model.lagged_regressor_dict = { + "media_total_spend_lag4": { + "lag_dict": {"orders": [5]}, + "agg_lag_dict": { + "orders_list": [[7, 7 * 2, 7 * 3]], + "interval_list": [(8, 7 * 2)]}, + "series_na_fill_func": lambda s: s.bfill().ffill() + } + } # set in subclass initialization + + # Regressor features are not colluded with other features, + # even the regex matches. + pred_category = model.pred_category + assert pred_category["intercept"] == ["Intercept"] + assert pred_category["time_features"] == ["ct1", "x:ct1"] + assert pred_category["event_features"] == [] + assert pred_category["trend_features"] == ["ct1", "x:ct1"] + assert pred_category["seasonality_features"] == ["sin1_tod_daily", + "cos1_tod_daily", + "sin2_tod_daily", + "cos2_tod_daily", + "sin3_tod_daily", + "cos3_tod_daily", + "sin1_tow_weekly", + "cos1_tow_weekly", + "sin2_tow_weekly", + "cos2_tow_weekly", + "sin3_tow_weekly", + "cos3_tow_weekly", + "sin1_toy_yearly", + "cos1_toy_yearly", + "sin2_toy_yearly", + "cos2_toy_yearly", + "sin3_toy_yearly", + "cos3_toy_yearly", + "sin4_toy_yearly", + "cos4_toy_yearly", + "sin5_toy_yearly", + "cos5_toy_yearly"] + assert pred_category["lag_features"] == [ + "media_total_spend_lag4_lag5", + "media_total_spend_lag4_avglag_7_14_21", + "media_total_spend_lag4_avglag_8_to_14" + ] + assert pred_category["regressor_features"] == ["x", "x:ct1", + "weather_wghtd_avg_cld_cvr_tot_pct_max_mid"] + assert pred_category["interaction_features"] == ["x:ct1"] + + def test_get_max_ar_order(): model = BaseSilverkiteEstimator() model.autoreg_dict = "auto" @@ -850,7 +936,8 @@ def test_x_mat_in_predict(daily_data): assert len(coef) == 3 pred_df = model.predict(test_df) - cols = ["ts", "y_quantile_summary", "err_std", "forecast_lower", "forecast_upper"] + cols = [cst.TIME_COL, cst.QUANTILE_SUMMARY_COL, cst.ERR_STD_COL, + cst.PREDICTED_LOWER_COL, cst.PREDICTED_UPPER_COL] assert_equal(model.forecast[cols], pred_df[cols]) assert (model.forecast["y"].values == pred_df["forecast"].values).all() @@ -858,3 +945,227 @@ def test_x_mat_in_predict(daily_data): assert list(forecast_x_mat.columns) == [ "Intercept", "C(dow == 1)[T.True]", "ct1"] assert len(forecast_x_mat) == len(pred_df) + + +def test_forecast_breakdown(daily_data): + """Tests ``forecast_breakdown``.""" + model = BaseSilverkiteEstimator() + train_df = daily_data["train_df"] + test_df = daily_data["test_df"] + + uncertainty_dict = { + "uncertainty_method": "simple_conditional_residuals", + "params": { + "conditional_cols": ["dow_hr"], + "quantiles": [0.025, 0.975], + "quantile_estimation_method": "normal_fit", + "sample_size_thresh": 20, + "small_sample_size_method": "std_quantiles", + "small_sample_size_quantile": 0.98}} + + model.fit( + X=train_df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL) + + silverkite = SilverkiteForecast() + model.model_dict = silverkite.forecast( + df=train_df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + origin_for_time_vars=None, + extra_pred_cols=["ct1", "ct2", "month", "dow"], + train_test_thresh=None, + training_fraction=None, + fit_algorithm="linear", + fit_algorithm_params=None, + daily_event_df_dict=None, + changepoints_dict=None, + fs_components_df=None, + autoreg_dict=None, + min_admissible_value=None, + max_admissible_value=None, + uncertainty_dict=uncertainty_dict + ) + model.finish_fit() + coef = model.model_dict["ml_model"].coef_ + assert len(coef) == 5 + + pred_df = model.predict(test_df) + cols = [cst.TIME_COL, cst.QUANTILE_SUMMARY_COL, cst.ERR_STD_COL, + cst.PREDICTED_LOWER_COL, cst.PREDICTED_UPPER_COL] + assert_equal(model.forecast[cols], pred_df[cols]) + assert (model.forecast["y"].values == pred_df["forecast"].values).all() + + forecast_x_mat = model.forecast_x_mat + assert list(forecast_x_mat.columns) == [ + "Intercept", "ct1", "ct2", "month", "dow"] + assert len(forecast_x_mat) == len(pred_df) + + grouping_regex_patterns_dict = { + "seasonality": ".*month.*|dow", + "growth": "ct1|ct2"} + + # applies to estimator with original forecasts + breakdown_result = model.forecast_breakdown( + grouping_regex_patterns_dict=grouping_regex_patterns_dict) + + column_grouping_result = breakdown_result["column_grouping_result"] + breakdown_df = breakdown_result["breakdown_df"] + breakdown_fig = breakdown_result["breakdown_fig"] + assert breakdown_df.shape == (len(forecast_x_mat), 3) + assert breakdown_fig.layout.title.text == "breakdown of forecasts" + assert len(breakdown_fig.data) == 3 + assert list(breakdown_df.columns) == ["Intercept", "seasonality", "growth"] + assert column_grouping_result == { + "str_groups": [["month", "dow"], ["ct1", "ct2"]], + "remainder": []} + + # Applies to estimator with passed ``forecast_x_mat`` + # In this case, we do not pass the time values + # Therefore a generic index (0 to n) will be used in creating the figure + breakdown_result = model.forecast_breakdown( + grouping_regex_patterns_dict=grouping_regex_patterns_dict, + forecast_x_mat=forecast_x_mat.head(10)) + + breakdown_df = breakdown_result["breakdown_df"] + column_grouping_result = breakdown_result["column_grouping_result"] + breakdown_df = breakdown_result["breakdown_df"] + breakdown_fig = breakdown_result["breakdown_fig"] + assert breakdown_df.shape == (10, 3) + assert breakdown_fig.layout.title.text == "breakdown of forecasts" + assert len(breakdown_fig.data) == 3 + assert list(breakdown_df.columns) == ["Intercept", "seasonality", "growth"] + assert column_grouping_result == { + "str_groups": [["month", "dow"], ["ct1", "ct2"]], + "remainder": []} + + # Makes sure ``forecast_x_mat`` is not over-written + # as a result of applying ``forecast_breakdown`` + forecast_x_mat = model.forecast_x_mat + assert len(forecast_x_mat) == len(pred_df) + + # Applies to estimator with passed ``forecast_x_mat`` + # We pass the appropriate timestamps too by extracting from ``pred_df`` + breakdown_result = model.forecast_breakdown( + grouping_regex_patterns_dict=grouping_regex_patterns_dict, + forecast_x_mat=forecast_x_mat.head(10), + time_values=pred_df.head(10)[cst.TIME_COL]) + + breakdown_df = breakdown_result["breakdown_df"] + column_grouping_result = breakdown_result["column_grouping_result"] + breakdown_df = breakdown_result["breakdown_df"] + breakdown_fig = breakdown_result["breakdown_fig"] + assert breakdown_df.shape == (10, 3) + assert breakdown_fig.layout.title.text == "breakdown of forecasts" + assert len(breakdown_fig.data) == 3 + assert list(breakdown_df.columns) == ["Intercept", "seasonality", "growth"] + assert column_grouping_result == { + "str_groups": [["month", "dow"], ["ct1", "ct2"]], + "remainder": []} + + +def test_forecast_breakdown_center_components(daily_data): + """Tests ``center_components`` argument of ``forecast_breakdown``.""" + model = BaseSilverkiteEstimator() + train_df = daily_data["train_df"] + test_df = daily_data["test_df"] + + uncertainty_dict = { + "uncertainty_method": "simple_conditional_residuals", + "params": { + "conditional_cols": ["dow_hr"], + "quantiles": [0.025, 0.975], + "quantile_estimation_method": "normal_fit", + "sample_size_thresh": 20, + "small_sample_size_method": "std_quantiles", + "small_sample_size_quantile": 0.98}} + + model.fit( + X=train_df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL) + + silverkite = SilverkiteForecast() + model.model_dict = silverkite.forecast( + df=train_df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL, + origin_for_time_vars=None, + extra_pred_cols=["ct1", "ct2", "month", "dow"], + train_test_thresh=None, + training_fraction=None, + fit_algorithm="linear", + fit_algorithm_params=None, + daily_event_df_dict=None, + changepoints_dict=None, + fs_components_df=None, + autoreg_dict=None, + min_admissible_value=None, + max_admissible_value=None, + uncertainty_dict=uncertainty_dict + ) + model.finish_fit() + coef = model.model_dict["ml_model"].coef_ + assert len(coef) == 5 + + pred_df = model.predict(test_df) + cols = [cst.TIME_COL, cst.QUANTILE_SUMMARY_COL, cst.ERR_STD_COL, + cst.PREDICTED_LOWER_COL, cst.PREDICTED_UPPER_COL] + assert_equal(model.forecast[cols], pred_df[cols]) + assert (model.forecast["y"].values == pred_df["forecast"].values).all() + + forecast_x_mat = model.forecast_x_mat + assert list(forecast_x_mat.columns) == [ + "Intercept", "ct1", "ct2", "month", "dow"] + assert len(forecast_x_mat) == len(pred_df) + + grouping_regex_patterns_dict = { + "seasonality": ".*month.*|dow", + "growth": "ct1|ct2"} + + # ``center_components=False`` + breakdown_result = model.forecast_breakdown( + grouping_regex_patterns_dict=grouping_regex_patterns_dict, + center_components=False) + + column_grouping_result = breakdown_result["column_grouping_result"] + breakdown_df = breakdown_result["breakdown_df"] + breakdown_fig = breakdown_result["breakdown_fig"] + assert breakdown_df.shape == (len(forecast_x_mat), 3) + assert breakdown_fig.layout.title.text == "breakdown of forecasts" + assert len(breakdown_fig.data) == 3 + assert list(breakdown_df.columns) == ["Intercept", "seasonality", "growth"] + assert column_grouping_result == { + "str_groups": [["month", "dow"], ["ct1", "ct2"]], + "remainder": []} + + # commented out plot for testing purposes only + # import plotly + # html_file_name = "breakdown_no_centering.html" + # plotly.offline.plot(breakdown_fig, filename=html_file_name) + + # ``center_components=True`` + breakdown_result = model.forecast_breakdown( + grouping_regex_patterns_dict=grouping_regex_patterns_dict, + center_components=True) + + column_grouping_result = breakdown_result["column_grouping_result"] + breakdown_df = breakdown_result["breakdown_df"] + breakdown_fig = breakdown_result["breakdown_fig"] + assert breakdown_df.shape == (len(forecast_x_mat), 3) + assert breakdown_fig.layout.title.text == "breakdown of forecasts" + assert len(breakdown_fig.data) == 3 + assert list(breakdown_df.columns) == ["Intercept", "seasonality", "growth"] + assert column_grouping_result == { + "str_groups": [["month", "dow"], ["ct1", "ct2"]], + "remainder": []} + + # commented out plot for testing purposes only + # import plotly + # html_file_name = "breakdown_with_centering.html" + # plotly.offline.plot(breakdown_fig, filename=html_file_name) + + # Check to see if components are centered. + assert round(breakdown_df["seasonality"].mean(), 5) == 0.0 + assert round(breakdown_df["growth"].mean(), 5) == 0.0 diff --git a/greykite/tests/sklearn/estimator/test_lag_based_estimator.py b/greykite/tests/sklearn/estimator/test_lag_based_estimator.py new file mode 100644 index 0000000..314e855 --- /dev/null +++ b/greykite/tests/sklearn/estimator/test_lag_based_estimator.py @@ -0,0 +1,764 @@ +from datetime import timedelta + +import numpy as np +import pandas as pd +import pytest +from dateutil.relativedelta import relativedelta +from testfixtures import LogCapture + +from greykite.common.constants import ERR_STD_COL +from greykite.common.constants import LOGGER_NAME +from greykite.common.constants import PREDICTED_COL +from greykite.common.constants import PREDICTED_LOWER_COL +from greykite.common.constants import PREDICTED_UPPER_COL +from greykite.sklearn.estimator.lag_based_estimator import LagBasedEstimator + + +@pytest.fixture +def df_daily(): + """Defines a dataframe with values from a sequence, + so it's easy to track lagged values.""" + df = pd.DataFrame({ + "ts": pd.date_range( + start="2021-01-01", + periods=314, + freq="D" + ), + "y": list(range(314)) + }) + df_train = df.iloc[:300].reset_index(drop=True) + df_test = df.iloc[300:].reset_index(drop=True) + return { + "df_train": df_train, + "df_test": df_test + } + + +@pytest.fixture +def df_hourly(): + """Defines a dataframe with values from a sequence, + so it's easy to track lagged values.""" + df = pd.DataFrame({ + "ts": pd.date_range( + start="2021-01-01", + periods=314 * 24, + freq="H" + ), + "y": list(range(314 * 24)) + }) + df_train = df.iloc[:300 * 24].reset_index(drop=True) + df_test = df.iloc[300 * 24:].reset_index(drop=True) + return { + "df_train": df_train, + "df_test": df_test + } + + +@pytest.fixture +def df_monthly(): + """Defines a dataframe with values from a sequence, + so it's easy to track lagged values.""" + df = pd.DataFrame({ + "ts": pd.date_range( + start="2021-01-01", + periods=314, + freq="MS" + ), + "y": list(range(314)) + }) + df_train = df.iloc[:300].reset_index(drop=True) + df_test = df.iloc[300:].reset_index(drop=True) + return { + "df_train": df_train, + "df_test": df_test + } + + +@pytest.fixture +def df_yearly(): + """Defines a dataframe with values from a sequence, + so it's easy to track lagged values.""" + df = pd.DataFrame({ + "ts": pd.date_range( + start="2021-01-01", + periods=34, + freq="Y" + ), + "y": list(range(34)) + }) + df_train = df.iloc[:20].reset_index(drop=True) + df_test = df.iloc[20:].reset_index(drop=True) + return { + "df_train": df_train, + "df_test": df_test + } + + +def test_instantiation(): + """Tests instantiation.""" + model = LagBasedEstimator( + coverage=0.95, + freq="D", + lag_unit="day", + lags=[1, 2, 3], + agg_func="weighted_average", + agg_func_params={ + "weights": [3, 2, 1] + }, + uncertainty_dict={ + "uncertainty_method": "simple_conditional_residuals", + "conditional_cols": ["dow_hr"], + "value_col": "y" + }, + past_df=pd.DataFrame({}), + series_na_fill_func=lambda s: s.bfill() + ) + assert model.coverage == 0.95 + assert model.freq == "D" + assert model.lag_unit == "day" + assert model.lags == [1, 2, 3] + assert model.agg_func == "weighted_average" + assert model.agg_func_params == { + "weights": [3, 2, 1] + } + assert model.uncertainty_dict == { + "uncertainty_method": "simple_conditional_residuals", + "conditional_cols": ["dow_hr"], + "value_col": "y" + } + assert model.past_df.equals(pd.DataFrame({})) + assert model.df is None + assert model.uncertainty_model is None + assert model.max_lag_order is None + assert model.min_lag_order is None + assert model.train_start is None + assert model.train_end is None + + +def test_daily_data(df_daily): + """Tests functionality on daily data.""" + df_train = df_daily["df_train"] + df_test = df_daily["df_test"] + + model = LagBasedEstimator( + series_na_fill_func=lambda s: s.bfill().ffill() + ) + model.fit(df_train) + # Checks ``model.df``. + # It should include the past 1 week data interpolated. + # The interpolated values are zero with the default function. + df_expanded = pd.concat([ + pd.DataFrame({ + "ts": pd.date_range( + start=df_train["ts"].iloc[0] - timedelta(weeks=1), + periods=7, + freq="D" + ), + "y": 0. + }), + df_train + ], axis=0).reset_index(drop=True) + assert model.df.equals(df_expanded) + assert model.uncertainty_model is None + assert model.max_lag_order == 1 + assert model.min_lag_order == 1 + assert model.train_start == df_train["ts"].iloc[0] + assert model.train_end == df_train["ts"].iloc[-1] + + # Checks prediction within training. + df_fit = model.predict(df_train) + # The value column should be the same as the input. + assert df_fit["y"].equals(df_train["y"].astype(float)) + # The predicted column is the last week. + assert df_fit[PREDICTED_COL].iloc[-5:].reset_index(drop=True).equals( + df_fit["y"].iloc[-12:-7].reset_index(drop=True) + ) + assert list(df_fit.columns) == ["ts", "y", PREDICTED_COL] + + # Checks prediction in the future. + df_pred = model.predict(df_test) + # The value column should be NANs. + assert all(df_pred["y"].isna()) + # The predicted column is the last week. + assert df_pred[PREDICTED_COL].iloc[:7].reset_index(drop=True).equals( + df_fit["y"].iloc[-7:].reset_index(drop=True) + ) + # The future predictions use the predicted values. + assert df_pred[PREDICTED_COL].iloc[7:14].reset_index(drop=True).equals( + df_pred[PREDICTED_COL].iloc[:7].reset_index(drop=True) + ) + + +def test_hourly_data(df_hourly): + """Tests functionality on hourly data.""" + df_train = df_hourly["df_train"] + df_test = df_hourly["df_test"] + + model = LagBasedEstimator( + series_na_fill_func=lambda s: s.bfill().ffill() + ) + model.fit(df_train) + # Checks ``model.df``. + # It should include the past 1 week data interpolated. + # The interpolated values are zero with the default function. + df_expanded = pd.concat([ + pd.DataFrame({ + "ts": pd.date_range( + start=df_train["ts"].iloc[0] - timedelta(weeks=1), + periods=7 * 24, + freq="H" + ), + "y": 0. + }), + df_train + ], axis=0).reset_index(drop=True) + assert model.df.equals(df_expanded) + assert model.uncertainty_model is None + assert model.max_lag_order == 1 + assert model.min_lag_order == 1 + assert model.train_start == df_train["ts"].iloc[0] + assert model.train_end == df_train["ts"].iloc[-1] + + # Checks prediction within training. + df_fit = model.predict(df_train) + # The value column should be the same as the input. + assert df_fit["y"].equals(df_train["y"].astype(float)) + # The predicted column is the last week. + assert df_fit[PREDICTED_COL].iloc[-5:].reset_index(drop=True).equals( + df_fit["y"].iloc[-(24 * 7 + 5):-(24 * 7)].reset_index(drop=True) + ) + assert list(df_fit.columns) == ["ts", "y", PREDICTED_COL] + + # Checks prediction in the future. + df_pred = model.predict(df_test) + # The value column should be NANs. + assert all(df_pred["y"].isna()) + # The predicted column is the last week. + assert df_pred[PREDICTED_COL].iloc[:(24 * 7)].reset_index(drop=True).equals( + df_fit["y"].iloc[-(24 * 7):].reset_index(drop=True) + ) + # The future predictions use the predicted values. + assert df_pred[PREDICTED_COL].iloc[(24 * 7):(24 * 14)].reset_index(drop=True).equals( + df_pred[PREDICTED_COL].iloc[:(24 * 7)].reset_index(drop=True) + ) + + +def test_multiple_lags_and_weights(df_daily): + """Test multiple lags and weights.""" + df_train = df_daily["df_train"] + df_test = df_daily["df_test"] + + model = LagBasedEstimator( + lags=[1, 2], + agg_func="weighted_average", + agg_func_params={ + "weights": [0.4, 0.6] + }, + series_na_fill_func=lambda s: s.bfill().ffill() + ) + model.fit(df_train) + # Checks ``model.df``. + # It should include the past 2 weeks data interpolated. + # The interpolated values are zero with the default function. + df_expanded = pd.concat([ + pd.DataFrame({ + "ts": pd.date_range( + start=df_train["ts"].iloc[0] - timedelta(weeks=2), + periods=14, + freq="D" + ), + "y": 0. + }), + df_train + ], axis=0).reset_index(drop=True) + assert model.df.equals(df_expanded) + assert model.uncertainty_model is None + assert model.max_lag_order == 2 + assert model.min_lag_order == 1 + assert model.train_start == df_train["ts"].iloc[0] + assert model.train_end == df_train["ts"].iloc[-1] + + # Checks prediction within training. + df_fit = model.predict(df_train) + # The value column should be the same as the input. + assert df_fit["y"].equals(df_train["y"].astype(float)) + # The predicted column is the weighted average of last two weeks. + assert df_fit[PREDICTED_COL].iloc[-5:].reset_index(drop=True).equals( + df_fit["y"].iloc[-12:-7].reset_index(drop=True) * 0.4 + df_fit["y"].iloc[-19:-14].reset_index(drop=True) * 0.6 + ) + assert list(df_fit.columns) == ["ts", "y", PREDICTED_COL] + + # Checks prediction in the future. + df_pred = model.predict(df_test) + # The value column should be NANs. + assert all(df_pred["y"].isna()) + # The predicted column is the weighted average of last two weeks. + assert df_pred[PREDICTED_COL].iloc[:7].reset_index(drop=True).equals( + df_fit["y"].iloc[-7:].reset_index(drop=True) * 0.4 + df_fit["y"].iloc[-14:-7].reset_index(drop=True) * 0.6 + ) + # The future predictions use the predicted values. + assert df_pred[PREDICTED_COL].iloc[7:14].reset_index(drop=True).equals( + df_pred[PREDICTED_COL].iloc[:7].reset_index(drop=True) * 0.4 + + df_fit["y"].iloc[-7:].reset_index(drop=True) * 0.6 + ) + + +def test_past_df(df_daily): + """Test past df.""" + df_train = df_daily["df_train"] + + past_df = pd.DataFrame({ + "ts": pd.date_range( + start=df_train["ts"].iloc[0] - timedelta(weeks=1), + periods=7, + freq="D" + ), + "y": -1. + }) + + model = LagBasedEstimator( + past_df=past_df + ) + model.fit(df_train) + # Checks ``model.df``. + # It should include the past 1 week data from ``past_df``. + df_expanded = pd.concat([ + past_df, + df_train + ], axis=0).reset_index(drop=True) + assert model.df.equals(df_expanded) + + # Checks prediction within training. + df_fit = model.predict(df_train) + # The value column should be the same as the input. + assert df_fit["y"].equals(df_train["y"].astype(float)) + # The first week's fitted values is the ``past_df``. + assert df_fit[PREDICTED_COL].iloc[:7].reset_index(drop=True).equals(past_df["y"]) + assert list(df_fit.columns) == ["ts", "y", PREDICTED_COL] + + +def test_no_fill_na(df_daily): + """Test no ``series_na_fill_func``.""" + df_train = df_daily["df_train"] + + model = LagBasedEstimator( + series_na_fill_func=None + ) + model.fit(df_train) + # Checks ``model.df``. + # It should include the past 1 week NA data due to no NA fill function. + df_expanded = pd.concat([ + pd.DataFrame({ + "ts": pd.date_range( + start=df_train["ts"].iloc[0] - timedelta(weeks=1), + periods=7, + freq="D" + ), + "y": np.nan + }), + df_train + ], axis=0).reset_index(drop=True) + assert model.df.equals(df_expanded) + + # Checks prediction within training. + df_fit = model.predict(df_train) + # The value column should be the same as the input. + assert df_fit["y"].equals(df_train["y"].astype(float)) + # The first week's fitted values are all NANs due to no NA fill function. + print(df_fit[PREDICTED_COL].iloc[:7].reset_index(drop=True)) + print(pd.Series({"y": [np.nan] * 7})) + assert df_fit[PREDICTED_COL].iloc[:7].reset_index(drop=True).equals( + pd.DataFrame({"y": [np.nan] * 7})["y"]) + assert list(df_fit.columns) == ["ts", "y", PREDICTED_COL] + + +def test_uncertainty(df_daily): + """Tests uncertainty.""" + df_train = df_daily["df_train"] + df_test = df_daily["df_test"] + + model = LagBasedEstimator( + coverage=0.95, + uncertainty_dict={ + "uncertainty_method": "simple_conditional_residuals", + "value_col": "y", + "conditional_cols": ["dow"] + } + ) + model.fit(df_train) + assert model.uncertainty_model is not None + + # Checks prediction within training. + df_fit = model.predict(df_train) + # The value column should be the same as the input. + assert df_fit["y"].equals(df_train["y"].astype(float)) + # The predicted column is the last week. + assert df_fit[PREDICTED_COL].iloc[-5:].reset_index(drop=True).equals( + df_fit["y"].iloc[-12:-7].reset_index(drop=True) + ) + # Uncertainty columns are in the output. + assert list(df_fit.columns) == ["ts", "y", PREDICTED_COL, PREDICTED_LOWER_COL, PREDICTED_UPPER_COL, ERR_STD_COL] + + # Checks prediction in the future. + df_pred = model.predict(df_test) + # The value column should be NANs. + assert all(df_pred["y"].isna()) + # The predicted column is the last week. + assert df_pred[PREDICTED_COL].iloc[:7].reset_index(drop=True).equals( + df_fit["y"].iloc[-7:].reset_index(drop=True) + ) + # The future predictions use the predicted values. + assert df_pred[PREDICTED_COL].iloc[7:14].reset_index(drop=True).equals( + df_pred[PREDICTED_COL].iloc[:7].reset_index(drop=True) + ) + # Uncertainty columns are in the output. + assert list(df_pred.columns) == ["ts", "y", PREDICTED_COL, PREDICTED_LOWER_COL, PREDICTED_UPPER_COL, ERR_STD_COL] + + +def test_agg_func(df_daily): + """Tests different aggregation functions.""" + df_train = df_daily["df_train"] + df_test = df_daily["df_test"] + + # wo3w median + model = LagBasedEstimator( + lag_unit="week", + lags=[1, 2, 3], + agg_func="median" + ) + model.fit(df_train) + # Checks prediction within training. + df_fit = model.predict(df_train) + # The value column should be the same as the input. + assert df_fit["y"].equals(df_train["y"].astype(float)) + # The predicted column is the median of the past three weeks. + assert df_fit[PREDICTED_COL].iloc[-5:].reset_index(drop=True).equals( + df_fit["y"].iloc[-19:-14].reset_index(drop=True) + ) + assert list(df_fit.columns) == ["ts", "y", PREDICTED_COL] + + # Checks prediction in the future. + df_pred = model.predict(df_test) + # The value column should be NANs. + assert all(df_pred["y"].isna()) + # The predicted column is the median of the past three weeks. + assert df_pred[PREDICTED_COL].iloc[:7].reset_index(drop=True).equals( + df_fit["y"].iloc[-14:-7].reset_index(drop=True) + ) + # The future predictions use the predicted values. + assert df_pred[PREDICTED_COL].iloc[7:14].reset_index(drop=True).equals( + df_pred[PREDICTED_COL].iloc[-7:].reset_index(drop=True) + ) + + # wo3w minimum + model = LagBasedEstimator( + lag_unit="week", + lags=[1, 2, 3], + agg_func="minimum" + ) + model.fit(df_train) + # Checks prediction within training. + df_fit = model.predict(df_train) + # The value column should be the same as the input. + assert df_fit["y"].equals(df_train["y"].astype(float)) + # The predicted column is the minimum of the past three weeks. + assert df_fit[PREDICTED_COL].iloc[-5:].reset_index(drop=True).equals( + df_fit["y"].iloc[-26:-21].reset_index(drop=True) + ) + assert list(df_fit.columns) == ["ts", "y", PREDICTED_COL] + + # Checks prediction in the future. + df_pred = model.predict(df_test) + # The value column should be NANs. + assert all(df_pred["y"].isna()) + # The predicted column is the minimum of the past three weeks. + assert df_pred[PREDICTED_COL].iloc[:7].reset_index(drop=True).equals( + df_fit["y"].iloc[-21:-14].reset_index(drop=True) + ) + # The future predictions use the predicted values. + assert df_pred[PREDICTED_COL].iloc[7:14].reset_index(drop=True).equals( + df_pred[PREDICTED_COL].iloc[-7:].reset_index(drop=True) + ) + + +def test_monthly_data(df_monthly): + """Tests functionality on monthly data.""" + df_train = df_monthly["df_train"] + df_test = df_monthly["df_test"] + + model = LagBasedEstimator( + lag_unit="month", + lags=[2, 3], + series_na_fill_func=lambda s: s.bfill().ffill() + ) + model.fit(df_train) + # Checks ``model.df``. + # It should include the past 3 months data interpolated. + # The interpolated values are zero with the default function. + df_expanded = pd.concat([ + pd.DataFrame({ + "ts": pd.date_range( + start=df_train["ts"].iloc[0] - relativedelta(months=3), + periods=3, + freq="MS" + ), + "y": 0. + }), + df_train + ], axis=0).reset_index(drop=True) + assert model.df.equals(df_expanded) + assert model.uncertainty_model is None + assert model.max_lag_order == 3 + assert model.min_lag_order == 2 + assert model.train_start == df_train["ts"].iloc[0] + assert model.train_end == df_train["ts"].iloc[-1] + + # Checks prediction within training. + df_fit = model.predict(df_train) + # The value column should be the same as the input. + assert df_fit["y"].equals(df_train["y"].astype(float)) + # The predicted column is the average of the last 2 and 3 months. + assert df_fit[PREDICTED_COL].iloc[-5:].reset_index(drop=True).equals( + (df_fit["y"].iloc[-8:-3].reset_index(drop=True) + + df_fit["y"].iloc[-7:-2].reset_index(drop=True)) / 2 + ) + assert list(df_fit.columns) == ["ts", "y", PREDICTED_COL] + + # Checks prediction in the future. + df_pred = model.predict(df_test) + # The value column should be NANs. + assert all(df_pred["y"].isna()) + # The predicted column is the average of the last 2 and 3 months. + assert df_pred[PREDICTED_COL].iloc[:2].reset_index(drop=True).equals( + (df_fit["y"].iloc[-2:].reset_index(drop=True) + + df_fit["y"].iloc[-3:-1].reset_index(drop=True)) / 2 + ) + # The future predictions use the predicted values. + assert df_pred[PREDICTED_COL].iloc[3:5].reset_index(drop=True).equals( + (df_pred[PREDICTED_COL].iloc[:2].reset_index(drop=True) + + df_pred[PREDICTED_COL].iloc[1:3].reset_index(drop=True)) / 2 + ) + + +def test_yearly_data(df_yearly): + """Tests functionality on yearly data.""" + df_train = df_yearly["df_train"] + df_test = df_yearly["df_test"] + + model = LagBasedEstimator( + lag_unit="year", + lags=[5, 10], + series_na_fill_func=lambda s: s.bfill().ffill() + ) + model.fit(df_train) + # Checks ``model.df``. + # It should include the past 10 years data interpolated. + # The interpolated values are zero with the default function. + df_expanded = pd.concat([ + pd.DataFrame({ + "ts": pd.date_range( + start=df_train["ts"].iloc[0] - relativedelta(years=10), + periods=10, + freq="Y" + ), + "y": 0. + }), + df_train + ], axis=0).reset_index(drop=True) + assert model.df.equals(df_expanded) + assert model.uncertainty_model is None + assert model.max_lag_order == 10 + assert model.min_lag_order == 5 + assert model.train_start == df_train["ts"].iloc[0] + assert model.train_end == df_train["ts"].iloc[-1] + + # Checks prediction within training. + df_fit = model.predict(df_train) + # The value column should be the same as the input. + assert df_fit["y"].equals(df_train["y"].astype(float)) + # The predicted column is the average of the last 5 and 10 years. + assert df_fit[PREDICTED_COL].iloc[-5:].reset_index(drop=True).equals( + (df_fit["y"].iloc[-10:-5].reset_index(drop=True) + + df_fit["y"].iloc[-15:-10].reset_index(drop=True)) / 2 + ) + assert list(df_fit.columns) == ["ts", "y", PREDICTED_COL] + + # Checks prediction in the future. + df_pred = model.predict(df_test) + # The value column should be NANs. + assert all(df_pred["y"].isna()) + # The predicted column is the average of the last 5 and 10 years. + assert df_pred[PREDICTED_COL].iloc[:2].reset_index(drop=True).equals( + (df_fit["y"].iloc[-5:-3].reset_index(drop=True) + + df_fit["y"].iloc[-10:-8].reset_index(drop=True)) / 2 + ) + # The future predictions use the predicted values. + assert df_pred[PREDICTED_COL].iloc[10:12].reset_index(drop=True).equals( + (df_pred[PREDICTED_COL].iloc[:2].reset_index(drop=True) + + df_pred[PREDICTED_COL].iloc[5:7].reset_index(drop=True)) / 2 + ) + + +def test_log_message(df_daily): + """Tests log messages.""" + df_train = df_daily["df_train"] + df_test = df_daily["df_test"] + # Lag not provided, using default 1. + # Weights not provided, using default equal weights. + with LogCapture(LOGGER_NAME) as log_capture: + model = LagBasedEstimator() + model.fit(df_train) + assert ( + LOGGER_NAME, + "DEBUG", + "Lags not provided, setting lags = [1]." + ) in log_capture.actual() + + # Inferred frequency is different. + with LogCapture(LOGGER_NAME) as log_capture: + model = LagBasedEstimator( + freq="H" + ) + model.fit(df_train) + assert ( + LOGGER_NAME, + "INFO", + f"The inferred frequency 'D' is different from the provided 'H'. " + f"Using the provided frequency." + ) in log_capture.actual() + # Prediction has irregular time increments. + with LogCapture(LOGGER_NAME) as log_capture: + model = LagBasedEstimator() + model.fit(df_train) + df_test_with_irregular = pd.concat([ + df_test, + pd.DataFrame({ + "ts": [df_test["ts"].iloc[0] + timedelta(hours=6)], + "y": [np.nan] + }) + ]) + model.predict(df_test_with_irregular) + assert ( + LOGGER_NAME, + "WARNING", + f"Some timestamps in the provided time periods for prediction do not match the " + f"training frequency. Returning the matched timestamps." + ) in log_capture.actual() + # Warning on frequency "M". + with LogCapture(LOGGER_NAME) as log_capture: + df_month = pd.DataFrame({ + "ts": pd.date_range("2020-01-31", freq="M", periods=10), + "y": list(range(10)) + }) + model = LagBasedEstimator( + lag_unit="month" + ) + model.fit(df_month) + assert ( + LOGGER_NAME, + "WARNING", + "The data frequency is 'M' which may lead to unexpected behaviors. " + "Please convert to 'MS' if applicable." + ) in log_capture.actual() + + +def test_errors(df_daily): + """Tests errors.""" + df_train = df_daily["df_train"] + # Illegal lag unit. + with pytest.raises( + ValueError, + match=f"The lag unit 'happy' is not recognized."): + model = LagBasedEstimator( + lag_unit="happy" + ) + model.fit(df_train) + # Illegal lags. + lags = [1, "a"] + with pytest.raises( + ValueError, + match=f"Not all lags in '\\[1, 'a'\\]' can be converted to integers."): + model = LagBasedEstimator( + lags=lags + ) + model.fit(df_train) + # Negative lags. + lags = [1, -1] + with pytest.raises( + ValueError, + match="All lags must be positive integers."): + model = LagBasedEstimator( + lags=lags + ) + model.fit(df_train) + # Lags is not a list. + lags = 1 + with pytest.raises( + ValueError, + match="The lags must be a list of integers, found '1'."): + model = LagBasedEstimator( + lags=lags + ) + model.fit(df_train) + # Aggregation function not valid. + with pytest.raises( + ValueError, + match=f"The aggregation function 'happy' is not recognized as a string. " + f"Please either pass a known string or a function."): + model = LagBasedEstimator( + agg_func="happy" + ) + model.fit(df_train) + # Empty df. + with pytest.raises( + ValueError, + match="The input df is empty!"): + model = LagBasedEstimator() + model.fit(pd.DataFrame({})) + # Frequency not provided and can not be inferred. + df = df_train.iloc[[0, 1, 3]].reset_index(drop=True) + with pytest.raises( + ValueError, + match="Frequency can not be inferred. Please provide frequency."): + model = LagBasedEstimator() + model.fit(df) + # Lag unit is less than data frequency. + with pytest.raises( + ValueError, + match=f"The lag unit 'minute' must be at least equal to the data frequency 'D'."): + model = LagBasedEstimator( + lag_unit="minute", + freq="D" + ) + model.fit(df_train) + # Prediction before train start. + with pytest.raises( + ValueError, + match="The lag based estimator does not support hindcasting."): + model = LagBasedEstimator() + model.fit(df_train) + df = pd.concat([ + pd.DataFrame({ + "ts": [df_train["ts"].iloc[0] - timedelta(days=1)], + "y": [0] + }), + df_train + ], axis=0) + model.predict(df) + + +def test_summary(df_daily): + """Tests functionality on daily data.""" + df_train = df_daily["df_train"] + + model = LagBasedEstimator( + lag_unit="day", + lags=[2, 3], + agg_func="median" + ) + model.fit(df_train) + summary = model.summary() + assert ( + f"This is a lag based forecast model that uses lags '[2, 3]', " + f"with unit 'day' and aggregation function" + ) in summary diff --git a/greykite/tests/sklearn/estimator/test_multistage_forecast_estimator.py b/greykite/tests/sklearn/estimator/test_multistage_forecast_estimator.py new file mode 100644 index 0000000..63edd52 --- /dev/null +++ b/greykite/tests/sklearn/estimator/test_multistage_forecast_estimator.py @@ -0,0 +1,722 @@ +import datetime + +import numpy as np +import pandas as pd +import pytest +from testfixtures import LogCapture + +import greykite.common.constants as cst +from greykite.common.testing_utils import generate_df_for_tests +from greykite.sklearn.estimator.lag_based_estimator import LagBasedEstimator +from greykite.sklearn.estimator.multistage_forecast_estimator import MultistageForecastEstimator +from greykite.sklearn.estimator.multistage_forecast_estimator import MultistageForecastModelConfig +from greykite.sklearn.estimator.simple_silverkite_estimator import SimpleSilverkiteEstimator +from greykite.sklearn.uncertainty.uncertainty_methods import UncertaintyMethodEnum + + +@pytest.fixture +def params(): + params = dict( + forecast_horizon=12, + freq="H", + model_configs=[ + MultistageForecastModelConfig( + train_length="30D", + fit_length="30D", + agg_func="mean", + agg_freq="D", + estimator=SimpleSilverkiteEstimator, + estimator_params=dict( + coverage=None, + forecast_horizon=1, + freq="D", + daily_seasonality=0, + weekly_seasonality=3, + quarterly_seasonality=5, + monthly_seasonality=0, + yearly_seasonality=0, + changepoints_dict=None, + autoreg_dict="auto", + holidays_to_model_separately="auto", + holiday_lookup_countries="auto", + holiday_pre_num_days=1, + holiday_post_num_days=1, + holiday_pre_post_num_dict=None, + daily_event_df_dict=None, + fit_algorithm_dict={ + "fit_algorithm": "ridge", + "fit_algorithm_params": None, + }, + feature_sets_enabled="auto", + max_daily_seas_interaction_order=5, + max_weekly_seas_interaction_order=2, + extra_pred_cols=[], + min_admissible_value=None, + max_admissible_value=None, + normalize_method="zero_to_one" + ) + ), + MultistageForecastModelConfig( + train_length="7D", + fit_length="7D", + agg_func="mean", + agg_freq=None, + estimator=SimpleSilverkiteEstimator, + estimator_params=dict( + coverage=None, + forecast_horizon=12, + freq="H", + growth_term=None, + daily_seasonality=12, + weekly_seasonality=0, + quarterly_seasonality=0, + monthly_seasonality=0, + yearly_seasonality=0, + autoreg_dict="auto", + holidays_to_model_separately=[], + holiday_lookup_countries=[], + holiday_pre_num_days=0, + holiday_post_num_days=0, + holiday_pre_post_num_dict=None, + daily_event_df_dict=None, + fit_algorithm_dict={ + "fit_algorithm": "ridge", + "fit_algorithm_params": None, + }, + feature_sets_enabled="auto", + max_daily_seas_interaction_order=5, + max_weekly_seas_interaction_order=2, + regressor_cols=None, + extra_pred_cols=None, + min_admissible_value=None, + max_admissible_value=None, + normalize_method="zero_to_one" + ) + ) + ] + ) + return params + + +@pytest.fixture +def hourly_data(): + df = generate_df_for_tests( + freq="H", + periods=24 * 7 * 8, + train_start_date=datetime.datetime(2018, 1, 1), + conti_year_origin=2018)["df"] + return df + + +@pytest.fixture +def hourly_data_with_reg(): + df = generate_df_for_tests( + freq="H", + periods=24 * 7 * 8, + train_start_date=datetime.datetime(2018, 1, 1), + conti_year_origin=2018)["df"] + df["regressor"] = np.arange(len(df)) + return df + + +@pytest.fixture +def daily_data(): + data = generate_df_for_tests( + freq="D", + periods=500, + train_frac=0.99, + train_start_date=datetime.datetime(2018, 1, 1), + conti_year_origin=2018) + return data + + +@pytest.fixture +def config_silverkite_daily(): + config = MultistageForecastModelConfig( + train_length="500D", + fit_length="500D", + agg_func="mean", + agg_freq="D", + estimator=SimpleSilverkiteEstimator, + estimator_params=dict( + coverage=None, + forecast_horizon=1, + freq="D", + daily_seasonality=0, + weekly_seasonality=3, + quarterly_seasonality=5, + monthly_seasonality=0, + yearly_seasonality=0, + changepoints_dict=None, + autoreg_dict=None, + holidays_to_model_separately=None, + holiday_lookup_countries=None, + holiday_pre_num_days=0, + holiday_post_num_days=0, + holiday_pre_post_num_dict=None, + daily_event_df_dict=None, + fit_algorithm_dict={ + "fit_algorithm": "ridge", + "fit_algorithm_params": None, + }, + feature_sets_enabled=None, + max_daily_seas_interaction_order=5, + max_weekly_seas_interaction_order=2, + extra_pred_cols=[], + min_admissible_value=None, + normalize_method="zero_to_one" + ) + ) + return config + + +@pytest.fixture +def config_silverkite_daily_2(): + config = MultistageForecastModelConfig( + train_length="500D", + fit_length="500D", + agg_func="mean", + agg_freq="D", + estimator=SimpleSilverkiteEstimator, + estimator_params=dict( + coverage=None, + forecast_horizon=1, + freq="D", + growth_term=None, + daily_seasonality=0, + weekly_seasonality=0, + quarterly_seasonality=0, + monthly_seasonality=0, + yearly_seasonality=0, + autoreg_dict="auto", + holidays_to_model_separately=[], + holiday_lookup_countries=[], + holiday_pre_num_days=0, + holiday_post_num_days=0, + holiday_pre_post_num_dict=None, + daily_event_df_dict=None, + fit_algorithm_dict={ + "fit_algorithm": "linear", + "fit_algorithm_params": None, + }, + feature_sets_enabled=None, + max_daily_seas_interaction_order=0, + max_weekly_seas_interaction_order=0, + regressor_cols=None, + extra_pred_cols=None, + min_admissible_value=None, + max_admissible_value=None, + normalize_method="zero_to_one" + ) + ) + return config + + +def test_multistage_model_config(): + """Tests the default parameters in ``MultistageForecastModelConfig``.""" + config = MultistageForecastModelConfig() + assert config.train_length == f"{7 * 56}D" + assert config.fit_length is None + assert config.agg_func == "nanmean" + assert config.agg_freq is None + assert config.estimator == SimpleSilverkiteEstimator + assert config.estimator_params is None + + +def test_set_up(params): + """Tests the set up of ``MultistageForecastEstimator``.""" + # Instatiation. + model = MultistageForecastEstimator(**params) + assert model.model_configs == params["model_configs"] + assert model.forecast_horizon == params["forecast_horizon"] + assert model.freq == params["freq"] + assert model.train_lengths is None + assert model.fit_lengths is None + assert model.agg_funcs is None + assert model.agg_freqs is None + assert model.estimators is None + assert model.estimator_params is None + assert model.train_lengths_in_seconds is None + assert model.fit_lengths_in_seconds is None + assert model.fit_lengths_in_seconds is None + assert model.max_ar_orders is None + assert model.data_freq_in_seconds is None + assert model.num_points_per_agg_freqs is None + assert model.models is None + assert model.fit_df is None + assert model.train_end is None + + # Initialization for some derived parameters. + model._initialize() + assert model.train_lengths == ["30D", "7D"] + assert model.fit_lengths == ["30D", "7D"] + assert len(model.agg_funcs) == 2 + assert model.agg_freqs == ["D", "H"] + assert model.estimators == [SimpleSilverkiteEstimator, SimpleSilverkiteEstimator] + assert model.estimator_params == [config.estimator_params for config in params["model_configs"]] + assert model.train_lengths_in_seconds == [60 * 60 * 24 * 30, 60 * 60 * 24 * 7] + assert model.fit_lengths_in_seconds == [60 * 60 * 24 * 30, 60 * 60 * 24 * 7] + assert len(model.models) == 2 + assert model.data_freq_in_seconds == 60 * 60 + + +def test_get_agg_func(params): + model = MultistageForecastEstimator(**params) + with pytest.raises( + ValueError, + match="The aggregation function "): + model._get_agg_func("some_function") + + +def test_get_freq_col(params): + model = MultistageForecastEstimator(**params) + model.time_col_ = "ttt" + freq_col = model._get_freq_col(freq="D", index=0) + assert freq_col == "ttt__0__D" + + +def test_get_non_time_cols(params): + model = MultistageForecastEstimator(**params) + model.time_col_ = "ttt" + columns = ["ttt", "ttt__0__D", "ttt__2__5T", "ttt_H", "value", "reg"] + non_time_cols = model._get_non_time_cols(columns=columns) + assert non_time_cols == ["ttt_H", "value", "reg"] + + +def test_get_num_points_per_agg_freq(params): + model = MultistageForecastEstimator(**params) + assert model._get_num_points_per_agg_freq( + data_freq="H", + agg_freqs=["D", "2H"]) == [24, 2] + + +def test_add_agg_freq_cols(params, hourly_data_with_reg): + model = MultistageForecastEstimator(**params) + model.time_col_ = cst.TIME_COL + model.value_col_ = cst.VALUE_COL + model._initialize() + df = model._add_agg_freq_cols(df=hourly_data_with_reg) + assert df.shape[1] == 5 # includes the original 3 and 2 extra columns from the two aggregations. + assert list(df.columns) == [cst.TIME_COL, cst.VALUE_COL, "regressor", + f"{cst.TIME_COL}__0__D", f"{cst.TIME_COL}__1__H"] + assert df[f"{cst.TIME_COL}__0__D"].unique().shape[0] == 7 * 8 # data has 7 weeks. + assert df[f"{cst.TIME_COL}__1__H"].unique().shape[0] == df.shape[0] # hourly is the original freq. + + # Tests error. + with pytest.raises( + ValueError, + match="The df size is zero. Does your"): + model._add_agg_freq_cols(df.iloc[:0]) + + +def test_drop_incomplete_agg(params, hourly_data_with_reg): + model = MultistageForecastEstimator(**params) + model.time_col_ = cst.TIME_COL + model.value_col_ = cst.VALUE_COL + model._initialize() + df = model._add_agg_freq_cols(df=hourly_data_with_reg) + df = df.iloc[:-1] # removes the last row so the last period becomes incomplete. + df_new = model._drop_incomplete_agg( + df=df, + agg_freq="D", + location=-1, + num_points_per_agg_freq=24, + index=0 + ) + assert len(df_new) == len(hourly_data_with_reg) - 24 # minus 1 day. + assert df_new.reset_index(drop=True).equals(df.iloc[:-23]) + + +def test_aggregate_values(params, hourly_data_with_reg): + model = MultistageForecastEstimator(**params) + model.time_col_ = cst.TIME_COL + model.value_col_ = cst.VALUE_COL + model._initialize() + df = model._add_agg_freq_cols(df=hourly_data_with_reg) + df_agg = model._aggregate_values( + df=df[[f"{cst.TIME_COL}__0__D", cst.VALUE_COL, "regressor"]], + agg_freq="D", + agg_func=np.nanmean, + index=0 + ) + assert len(df_agg) == 7 * 8 # data is 8 weeks. + assert round(df_agg[cst.VALUE_COL].iloc[0], 3) == round(df[cst.VALUE_COL].iloc[:24].mean(), 3) + assert round(df_agg["regressor"].iloc[0], 3) == round(df["regressor"].iloc[:24].mean(), 3) + + +def test_get_agg_dfs(params, hourly_data_with_reg): + model = MultistageForecastEstimator(**params) + model.time_col_ = cst.TIME_COL + model.value_col_ = cst.VALUE_COL + model._initialize() + df = model._add_agg_freq_cols(df=hourly_data_with_reg) + df = df.iloc[1:-1] # both the beginning period and the end period are incomplete. + result = model._get_agg_dfs( + df=df, + agg_freq="D", + agg_func=np.mean, + train_length_in_seconds=60 * 60 * 24 * 30, + fit_length_in_seconds=60 * 60 * 24 * 30, + num_points_per_agg_freq=24, + max_ar_order=5, + index=0 + ) + assert len(result["train_df"]) == 30 + assert len(result["fit_df"]) == 32 # fit includes incomplete periods on purpose + # ``past_df`` includes 1 more period to avoid errors + # This is to ensure there is no gap between ``past_df`` and ``train_df``, + # as well as to ensure we have at least the length of ``past_df`` needed for AR. + # Extra terms of ``past_df`` will be handled in ``SilverkiteForecast``. + assert len(result["past_df"]) == 6 + assert result["fit_df_has_incomplete_period"] is True + + +def test_get_silverkite_ar_max_order(params): + model = MultistageForecastEstimator(**params) + model.time_col_ = cst.TIME_COL + model.value_col_ = cst.VALUE_COL + model._initialize() + assert model._get_silverkite_ar_max_order() == [21, 24 * 21] + + +def test_train_and_predict(params, hourly_data_with_reg): + """Tests train and prediction functionality.""" + params["model_configs"][0].estimator_params["regressor_cols"] = ["regressor"] + model = MultistageForecastEstimator(**params) + # fit + model.fit(hourly_data_with_reg) + # predict training period + pred = model.predict(hourly_data_with_reg) + assert pred.shape[0] == hourly_data_with_reg.shape[0] + # predict future period + pred = model.predict(pd.DataFrame({ + cst.TIME_COL: pd.date_range(start=hourly_data_with_reg[cst.TIME_COL].max(), freq="H", periods=13)[1:], + cst.VALUE_COL: np.nan, + "regressor": 1 + })) + assert pred.shape[0] == 12 + assert pred[cst.PREDICTED_COL].dropna().shape[0] == 12 + # checks values- + assert model.fit_df[f"{cst.VALUE_COL}__0__D"].dropna().shape[0] >= 30 # daily training size + assert model.fit_df[f"{cst.VALUE_COL}__1__H"].dropna().shape[0] >= 24 * 7 # hourly training size + assert model.fit_df[f"{cst.PREDICTED_COL}__0__D"].dropna().shape[0] >= 30 # daily fit size + assert model.fit_df[f"{cst.PREDICTED_COL}__1__H"].dropna().shape[0] >= 30 # daily fit size + + # makes sure the AR orders are correct + assert "y_lag1" in model.models[0].model_dict["x_mat"].columns + assert "y_lag12" in model.models[1].model_dict["x_mat"].columns + # components plot + plots = model.plot_components() + assert len(plots) == 2 + # summary + summaries = model.summary() + assert len(summaries) == 2 + + +def test_error(params, hourly_data_with_reg): + model = MultistageForecastEstimator(**params) + + # Calling plot components or summary before fitting. + with pytest.raises( + ValueError, + match="Please call `fit` before"): + model.plot_components() + + with pytest.raises( + ValueError, + match="Please call `fit` before"): + model.summary() + + # Minimum aggregation frequency is less than data frequency. + params["model_configs"][0].agg_freq = "5T" + with pytest.raises( + ValueError, + match="The minimum aggregation frequency"): + model.fit(hourly_data_with_reg) + + +def test_incomplete_fit_df_warning(params, hourly_data_with_reg): + model = MultistageForecastEstimator(**params) + model.model_configs[0].estimator_params["regressor_cols"] = ["regressor"] + with LogCapture(cst.LOGGER_NAME) as log_capture: + model.fit(X=hourly_data_with_reg.iloc[:-1]) # The last period is incomplete. + log_capture.check( + (cst.LOGGER_NAME, + "WARNING", + "There are incomplete periods in `fit_df`, thus the regressor values are " + "biased after aggregation.") + ) + + +def test_missing_timestamps_during_aggregation(params, hourly_data_with_reg): + model = MultistageForecastEstimator(**params) + model.time_col_ = cst.TIME_COL + model.value_col_ = cst.VALUE_COL + model._initialize() + df = model._add_agg_freq_cols(df=hourly_data_with_reg) + df = df.iloc[1:-1] # both the beginning period and the end period are incomplete. + # Removes one timestamp in the middle. + df = pd.concat([df.iloc[:50], df.iloc[51:]], axis=0).reset_index(drop=True) + with LogCapture(cst.LOGGER_NAME) as log_capture: + model._drop_incomplete_agg_and_aggregate_values( + df=df, + agg_freq="D", + agg_func=np.mean, + num_points_per_agg_freq=24, + drop_incomplete=True, + index=0 + ) + log_capture.check( + (cst.LOGGER_NAME, + "WARNING", + "There are missing timestamps in `df` when performing aggregation with " + "frequency D. These points are ts y\nts " + "\n2018-01-03 23 23. " + "This may cause the aggregated values to be biased.") + ) + + +def test_infer_forecast_horizons(hourly_data_with_reg, params): + """Tests that the estimator is able to infer the correct forecast horizon for + each stage of model, under different situations. + """ + model = MultistageForecastEstimator(**params) + # The default forecast horizon is 12. + # We truncate df to have the future period overlapping 2 days. + df = hourly_data_with_reg.iloc[:-3] + model.fit(df) + assert model.forecast_horizons == (2, 12) + # Now we do not truncate df to have the future period overlapping 1 day. + model.fit(hourly_data_with_reg) + assert model.forecast_horizons == (1, 12) + + +def test_short_fit_length(params): + params["model_configs"][0].fit_length = "29D" + model = MultistageForecastEstimator(**params) + with LogCapture(cst.LOGGER_NAME) as log_capture: + model._initialize() + log_capture.check( + (cst.LOGGER_NAME, + "INFO", + "Some `fit_length` is None or is shorter than `train_length`. " + "These `fit_length` have been replaced with `train_length`.") + ) + + +def test_uncertainty(hourly_data_with_reg, params): + # ``uncertainty_dict`` is given. + params["uncertainty_dict"] = dict( + uncertainty_method=UncertaintyMethodEnum.simple_conditional_residuals.name, + params={} + ) + model = MultistageForecastEstimator(**params) + # fit + model.fit(hourly_data_with_reg) + # predict + pred = model.predict(pd.DataFrame({ + cst.TIME_COL: pd.date_range(start=hourly_data_with_reg[cst.TIME_COL].max(), freq="H", periods=13)[1:], + cst.VALUE_COL: np.nan, + })) + assert cst.PREDICTED_LOWER_COL in pred + assert cst.PREDICTED_UPPER_COL in pred + assert (pred[cst.PREDICTED_LOWER_COL] + pred[cst.PREDICTED_UPPER_COL]).round(2).equals( + (pred[cst.PREDICTED_COL] * 2).round(2)) + + # ``uncertainty_dict`` is not given but coverage is given. + del params["uncertainty_dict"] + params["coverage"] = 0.95 + model = MultistageForecastEstimator(**params) + # fit + model.fit(hourly_data_with_reg) + # predict + pred = model.predict(pd.DataFrame({ + cst.TIME_COL: pd.date_range(start=hourly_data_with_reg[cst.TIME_COL].max(), freq="H", periods=13)[1:], + cst.VALUE_COL: np.nan, + })) + assert cst.PREDICTED_LOWER_COL in pred + assert cst.PREDICTED_UPPER_COL in pred + assert (pred[cst.PREDICTED_LOWER_COL] + pred[cst.PREDICTED_UPPER_COL]).round(2).equals( + (pred[cst.PREDICTED_COL] * 2).round(2)) + + # ``uncertainty_dict`` and ``coverage`` are not given. + del params["coverage"] + model = MultistageForecastEstimator(**params) + # fit + model.fit(hourly_data_with_reg) + # predict + pred = model.predict(pd.DataFrame({ + cst.TIME_COL: pd.date_range(start=hourly_data_with_reg[cst.TIME_COL].max(), freq="H", periods=13)[1:], + cst.VALUE_COL: np.nan, + })) + assert cst.PREDICTED_LOWER_COL not in pred + assert cst.PREDICTED_UPPER_COL not in pred + + +def test_uncertainty_nonstandard_cols(hourly_data_with_reg, params): + params["uncertainty_dict"] = dict( + uncertainty_method=UncertaintyMethodEnum.simple_conditional_residuals.name, + params={} + ) + model = MultistageForecastEstimator(**params) + # fit + model.fit( + hourly_data_with_reg.rename(columns={ + cst.TIME_COL: "t", + cst.VALUE_COL: "z" + }), + time_col="t", + value_col="z" + ) + # predict + pred = model.predict(pd.DataFrame({ + "t": pd.date_range(start=hourly_data_with_reg[cst.TIME_COL].max(), freq="H", periods=13)[1:], + "z": np.nan, + })) + assert cst.PREDICTED_LOWER_COL in pred + assert cst.PREDICTED_UPPER_COL in pred + assert (pred[cst.PREDICTED_LOWER_COL] + pred[cst.PREDICTED_UPPER_COL]).round(2).equals( + (pred[cst.PREDICTED_COL] * 2).round(2)) + + +def test_uncertainty_with_error(hourly_data_with_reg, params): + """Tests model still produces results when uncertainty model fails.""" + with LogCapture(cst.LOGGER_NAME) as log_capture: + params["coverage"] = 0.95 + params["uncertainty_dict"] = dict( + uncertainty_method=UncertaintyMethodEnum.simple_conditional_residuals.name, + params={ + "value_col": "non_exist" + } + ) + model = MultistageForecastEstimator(**params) + # fit + model.fit(hourly_data_with_reg) + # predict + pred = model.predict(pd.DataFrame({ + cst.TIME_COL: pd.date_range(start=hourly_data_with_reg[cst.TIME_COL].max(), freq="H", periods=13)[1:], + cst.VALUE_COL: np.nan, + })) + assert pred is not None + assert cst.PREDICTED_LOWER_COL not in pred + assert cst.PREDICTED_UPPER_COL not in pred + assert ( + cst.LOGGER_NAME, + "WARNING", + "The following errors occurred during fitting the uncertainty model, " + "the uncertainty model is skipped. `value_col` non_exist not found in `train_df`." + ) in log_capture.actual() + + +def test_same_agg_freq(daily_data, config_silverkite_daily, config_silverkite_daily_2): + """Tests two stages with the same aggregation frequency. + Data is daily, and both stages uses daily aggregation. + """ + df = daily_data["train_df"] + df_test = daily_data["test_df"] + forecast_horizon = len(df_test) + config_silverkite_daily.estimator_params["forecast_horizon"] = forecast_horizon + config_silverkite_daily_2.estimator_params["forecast_horizon"] = forecast_horizon + params = dict( + forecast_horizon=forecast_horizon, + freq="D", + model_configs=[ + config_silverkite_daily, + config_silverkite_daily_2 + ] + ) + model = MultistageForecastEstimator(**params) + # Tests fit + model.fit(df) + # Checks models + # Intercept, ct1, 6 weekly seas terms, 10 quarterly seas terms + assert model.models[0].model_dict["x_mat"].shape[1] == 18 + # Intercept, 6 ar terms + assert model.models[1].model_dict["x_mat"].shape[1] == 7 + + # Tests prediction + df_fit = model.predict(df) + assert df_fit[cst.PREDICTED_COL].isna().sum() == 0 + df_predict = model.predict(df_test) + assert df_predict[cst.PREDICTED_COL].isna().sum() == 0 + + +def test_silverkite_wow_daily(daily_data, config_silverkite_daily): + """Tests Silverkite + WOW estimator.""" + + df = daily_data["train_df"] + df_test = daily_data["test_df"] + forecast_horizon = len(df_test) + config_silverkite_daily.estimator_params["forecast_horizon"] = forecast_horizon + params = dict( + forecast_horizon=forecast_horizon, + freq="D", + model_configs=[ + config_silverkite_daily, + MultistageForecastModelConfig( + train_length="500D", + fit_length="500D", + agg_func="mean", + agg_freq="D", + estimator=LagBasedEstimator, + estimator_params=dict( + lags=[1], + lag_unit="week", + agg_func="mean", + series_na_fill_func=lambda x: x.bfill().ffill() + ) + ) + ] + ) + model = MultistageForecastEstimator(**params) + # Tests fit + model.fit(df) + # Checks models + # Intercept, ct1, 6 weekly seas terms, 10 quarterly seas terms + assert model.models[0].model_dict["x_mat"].shape[1] == 18 + + # Tests prediction + df_fit = model.predict(df) + assert df_fit[cst.PREDICTED_COL].isna().sum() == 0 + df_predict = model.predict(df_test) + assert df_predict[cst.PREDICTED_COL].isna().sum() == 0 + + +def test_silverkite_wow_hourly(hourly_data, config_silverkite_daily): + """Tests Silverkite + WOW estimator.""" + df = hourly_data.iloc[:-24] + df_test = hourly_data.iloc[-24:].reset_index(drop=True) + forecast_horizon = len(df_test) + config_silverkite_daily.estimator_params["forecast_horizon"] = forecast_horizon + params = dict( + forecast_horizon=forecast_horizon, + freq="H", + model_configs=[ + config_silverkite_daily, + MultistageForecastModelConfig( + train_length="500D", + fit_length="500D", + agg_func="mean", + agg_freq="H", + estimator=LagBasedEstimator, + estimator_params=dict( + lags=[1], + lag_unit="week", + agg_func="mean", + series_na_fill_func=lambda x: x.bfill().ffill() + ) + ) + ] + ) + model = MultistageForecastEstimator(**params) + # Tests fit + model.fit(df) + # Checks models + # Intercept, ct1, 6 weekly seas terms, 10 quarterly seas terms + assert model.models[0].model_dict["x_mat"].shape[1] == 18 + + # Tests prediction + df_fit = model.predict(df) + assert df_fit[cst.PREDICTED_COL].isna().sum() == 0 + df_predict = model.predict(df_test) + assert df_predict[cst.PREDICTED_COL].isna().sum() == 0 diff --git a/greykite/tests/sklearn/estimator/test_one_by_one_estimator.py b/greykite/tests/sklearn/estimator/test_one_by_one_estimator.py index 08fe219..358314a 100644 --- a/greykite/tests/sklearn/estimator/test_one_by_one_estimator.py +++ b/greykite/tests/sklearn/estimator/test_one_by_one_estimator.py @@ -12,7 +12,7 @@ try: - import fbprophet # noqa + import prophet # noqa except ModuleNotFoundError: pass @@ -115,8 +115,8 @@ def test_no_coverage(daily_data): assert cst.PREDICTED_UPPER_COL not in predict.columns -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet(daily_data): """Tests prophet estimator.""" model = OneByOneEstimator( diff --git a/greykite/tests/sklearn/estimator/test_prophet_estimator.py b/greykite/tests/sklearn/estimator/test_prophet_estimator.py index bc8b8df..c716f73 100644 --- a/greykite/tests/sklearn/estimator/test_prophet_estimator.py +++ b/greykite/tests/sklearn/estimator/test_prophet_estimator.py @@ -3,6 +3,7 @@ import numpy as np import pandas as pd import pytest +from sklearn.exceptions import NotFittedError from sklearn.metrics import mean_absolute_error from sklearn.metrics import mean_squared_error from testfixtures import LogCapture @@ -22,13 +23,13 @@ try: - import fbprophet # noqa + import prophet # noqa except ModuleNotFoundError: pass -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") @pytest.fixture def params(): holidays = pd.DataFrame({ @@ -55,8 +56,8 @@ def params(): } -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") @pytest.fixture def params_multiple_regressors(): add_regressor_dict = { @@ -77,8 +78,8 @@ def params_multiple_regressors(): } -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") @pytest.fixture def params_add_seasonality(): add_seasonality_dict = { @@ -98,8 +99,8 @@ def params_add_seasonality(): } -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") @pytest.fixture def params_reg(params_add_seasonality, params_multiple_regressors): holidays = pd.DataFrame({ @@ -130,8 +131,8 @@ def params_reg(params_add_seasonality, params_multiple_regressors): } -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") @pytest.fixture def daily_data(): return generate_df_for_tests( @@ -140,8 +141,8 @@ def daily_data(): conti_year_origin=2018) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") @pytest.fixture def daily_data_reg(): return generate_df_with_reg_for_tests( @@ -149,8 +150,8 @@ def daily_data_reg(): periods=500) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") @pytest.fixture def X(): return pd.DataFrame({ @@ -159,8 +160,8 @@ def X(): }) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") @pytest.fixture def X_reg(): return pd.DataFrame({ @@ -172,8 +173,8 @@ def X_reg(): }) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_setup(params, X): """Checks if parameters are passed to Prophet correctly""" coverage = 0.99 @@ -193,7 +194,7 @@ def test_prophet_setup(params, X): assert model2.__dict__ == model.__dict__ model.fit(X) - direct_model = fbprophet.Prophet(**params) + direct_model = prophet.Prophet(**params) model_params = model.model.__dict__ direct_model_params = direct_model.__dict__ @@ -220,25 +221,25 @@ def test_prophet_setup(params, X): # test regressor and custom seasonality hyper parameters being passed to ProphetEstimator vs Direct model -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_prophet_reg_seas_setup(params_reg, X_reg): """Checks if parameters are passed to Prophet correctly""" coverage = 0.99 model = ProphetEstimator(score_func=mean_squared_error, coverage=coverage, null_model_params=None, **params_reg) model.fit(X_reg) - # remove custom seasonalities and regressors before passing params to fbprophet + # remove custom seasonalities and regressors before passing params to prophet params_no_reg_no_custom_seas = {key: value for (key, value) in params_reg.items() if key not in ['add_regressor_dict', 'add_seasonality_dict']} - direct_model = fbprophet.Prophet(**params_no_reg_no_custom_seas) + direct_model = prophet.Prophet(**params_no_reg_no_custom_seas) - # add regressors in direct (fbprophet) model in the usual way (add_regressor method) + # add regressors in direct (prophet) model in the usual way (add_regressor method) for reg_col, reg_params in params_reg["add_regressor_dict"].items(): direct_model.add_regressor(name=reg_col, **reg_params) - # add custom seasonality in direct (fbprophet) model in the usual way (add_seasonality method) + # add custom seasonality in direct (prophet) model in the usual way (add_seasonality method) for seasonality_type, seasonality_params in params_reg["add_seasonality_dict"].items(): direct_model.add_seasonality(name=seasonality_type, **seasonality_params) @@ -267,8 +268,8 @@ def test_prophet_reg_seas_setup(params_reg, X_reg): assert direct_model_seasonalities == model_seasonalities -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_null_model(X): """Checks null model""" model = ProphetEstimator(null_model_params={"strategy": "quantile", @@ -290,8 +291,8 @@ def test_null_model(X): assert null_score == mean_absolute_error(y, np.repeat(9.0, X.shape[0])) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_score_function_null(daily_data): """Checks score function accuracy with null model""" model = ProphetEstimator(null_model_params={"strategy": "mean"}) @@ -305,8 +306,8 @@ def test_score_function_null(daily_data): assert score == pytest.approx(0.42, rel=1e-2) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_score_function(daily_data): """Checks score function accuracy without null model""" model = ProphetEstimator() @@ -320,8 +321,8 @@ def test_score_function(daily_data): assert score == pytest.approx(5.77, rel=1e-1) -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_summary(daily_data): """Checks summary function output without error""" model = ProphetEstimator() @@ -335,8 +336,8 @@ def test_summary(daily_data): model.summary() -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_fit_predict(daily_data): """Tests fit and predict.""" model = ProphetEstimator() @@ -388,8 +389,8 @@ def test_fit_predict(daily_data): assert model.cached_predictions_ is None -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_forecast_via_prophet_daily_reg( daily_data_reg, params_add_seasonality, @@ -421,8 +422,8 @@ def test_forecast_via_prophet_daily_reg( assert err[enum.get_metric_name()] < 3.0 -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_forecast_via_prophet_freq(): """Tests prophet model at different frequencies""" holidays = pd.DataFrame({ @@ -475,8 +476,8 @@ def test_forecast_via_prophet_freq(): model.summary() -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_forecast_via_prophet_no_uncertainty( daily_data): """Tests fit and predict with no uncertainty interval.""" @@ -494,13 +495,13 @@ def test_forecast_via_prophet_no_uncertainty( model.fit(train_df, time_col=TIME_COL, value_col=VALUE_COL) model.predict(test_df) # The following asserts are temporarily disabled, - # since they work under fbprophet >= 0.6 only. + # since they work under prophet >= 0.6 only. # assert PREDICTED_LOWER_COL not in pred.columns # assert PREDICTED_UPPER_COL not in pred.columns -@pytest.mark.skipif("fbprophet" not in sys.modules, - reason="Module 'fbprophet' not installed, pytest for 'ProphetTemplate' skipped.") +@pytest.mark.skipif("prophet" not in sys.modules, + reason="Module 'prophet' not installed, pytest for 'ProphetTemplate' skipped.") def test_plot_components(daily_data, params): """Test plot_components""" train_df = daily_data["train_df"] @@ -517,26 +518,21 @@ def test_plot_components(daily_data, params): "trend_upper", "weekly", "weekly_lower", "weekly_upper"} assert expected_forecast_cols.issubset(list(forecast.columns)) - # Prophet 0.5 has issue with component plots and later versions do not - with pytest.raises(Exception, match=r"Prophet 0.5 component plots are incompatible with pandas 1\.\*\."): - model.plot_components(uncertainty=True, plot_cap=False) - - # Tests are disabled until fbprophet:0.6 upgrade allows Prophet component plots. - # fig = model.plot_components(uncertainty=True, plot_cap=False) - # assert fig - # - # direct_model = model.model - # direct_fig = direct_model.plot_components( - # fcst=forecast, - # uncertainty=True, - # plot_cap=False) - # assert direct_fig - # - # # Tests plot_components warnings - # model = ProphetEstimator() - # with pytest.raises(NotFittedError, match="The fit method has not been run yet."): - # model.plot_components() - # - # with pytest.raises(RuntimeError, match="The predict method has not been run yet."): - # model.fit(train_df) - # model.plot_components() + fig = model.plot_components(uncertainty=True, plot_cap=False) + assert fig + + direct_model = model.model + direct_fig = direct_model.plot_components( + fcst=forecast, + uncertainty=True, + plot_cap=False) + assert direct_fig + + # Tests plot_components warnings + model = ProphetEstimator() + with pytest.raises(NotFittedError, match="The fit method has not been run yet."): + model.plot_components() + + with pytest.raises(RuntimeError, match="The predict method has not been run yet."): + model.fit(train_df) + model.plot_components() diff --git a/greykite/tests/sklearn/estimator/test_silverkite_diagnostics.py b/greykite/tests/sklearn/estimator/test_silverkite_diagnostics.py new file mode 100644 index 0000000..586d9c0 --- /dev/null +++ b/greykite/tests/sklearn/estimator/test_silverkite_diagnostics.py @@ -0,0 +1,252 @@ +import datetime + +import numpy as np +import pandas as pd +import pytest +from pandas.testing import assert_frame_equal + +from greykite.common import constants as cst +from greykite.common.features.timeseries_features import build_time_features_df +from greykite.sklearn.estimator.silverkite_diagnostics import SilverkiteDiagnostics + + +@pytest.fixture(scope="module") +def test_params(): + time_col = "ts" + # value_col name is chosen such that it contains keywords "ct" and "sin" + # so that we can test patterns specified for each component work correctly + value_col = "basin_impact" + return dict( + time_col=time_col, + value_col=value_col, + df=pd.DataFrame({ + time_col: [ + datetime.datetime(2018, 1, 1), + datetime.datetime(2018, 1, 2), + datetime.datetime(2018, 1, 3), + datetime.datetime(2018, 1, 4), + datetime.datetime(2018, 1, 5)], + value_col: [10, 10, 10, 10, 10], + "dummy_col": [0, 0, 0, 0, 0], + }), + feature_df=pd.DataFrame({ + # Trend columns: growth, changepoints and interactions (total 5 columns) + "ct1": np.array([1.0, 1.0, 1.0, 1.0, 1.0]), + "ct1:tod": np.array([1.0, 1.0, 1.0, 1.0, 1.0]), + "ct_sqrt": np.array([1.0, 1.0, 1.0, 1.0, 1.0]), + "changepoint0_2018_01_02_00": np.array([1.0, 1.0, 1.0, 1.0, 1.0]), + "changepoint1_2018_01_04_00": np.array([1.0, 1.0, 1.0, 1.0, 1.0]), + # Lag columns: autoregression, lagged regressor + f"{value_col}_lag1": np.array([4.0, 4.0, 4.0, 4.0, 4.0]), + f"{value_col}_avglag_3_5": np.array([4.0, 4.0, 4.0, 4.0, 4.0]), + "regressor1_lag1": np.array([4.0, 4.0, 4.0, 4.0, 4.0]), + "regressor_categ_avglag_4_6": np.array([4.0, 4.0, 4.0, 4.0, 4.0]), + # Daily seasonality with interaction (total 4 columns) + "sin1_tow_weekly": np.array([2.0, 2.0, 2.0, 2.0, 2.0]), + "cos1_tow_weekly": np.array([2.0, 2.0, 2.0, 2.0, 2.0]), + "is_weekend[T.True]:sin1_tow_weekly": np.array([2.0, 2.0, 2.0, 2.0, 2.0]), + "is_weekend[T.True]:cos1_tow_weekly": np.array([2.0, 2.0, 2.0, 2.0, 2.0]), + # Yearly seasonality (total 6 columns) + "sin1_ct1_yearly": np.array([3.0, 3.0, 3.0, 3.0, 3.0]), + "cos1_ct1_yearly": np.array([3.0, 3.0, 3.0, 3.0, 3.0]), + "sin2_ct1_yearly": np.array([3.0, 3.0, 3.0, 3.0, 3.0]), + "cos2_ct1_yearly": np.array([3.0, 3.0, 3.0, 3.0, 3.0]), + "sin3_ct1_yearly": np.array([3.0, 3.0, 3.0, 3.0, 3.0]), + "cos3_ct1_yearly": np.array([3.0, 3.0, 3.0, 3.0, 3.0]), + # Holiday with pre and post effect (1 at the where the date and event match) + # e.g. New Years Day is 1 at 1st January, 0 rest of the days + "Q('events_New Years Day')[T.event]": np.array([1.0, 0.0, 0.0, 0.0, 0.0]), + "Q('events_New Years Day_minus_1')[T.event]": np.array([0.0, 0.0, 0.0, 0.0, 0.0]), + "Q('events_New Years Day_minus_2')[T.event]": np.array([0.0, 0.0, 0.0, 0.0, 0.0]), + "Q('events_New Years Day_plus_1')[T.event]": np.array([0.0, 1.0, 0.0, 0.0, 0.0]), + "Q('events_New Years Day_plus_2')[T.event]": np.array([0.0, 0.0, 1.0, 0.0, 0.0]), + }) + ) + + +def test_get_silverkite_components(test_params): + """Tests get_silverkite_components function""" + time_col = test_params["time_col"] + value_col = test_params["value_col"] + df = test_params["df"] + feature_df = test_params["feature_df"] + + silverkite_diagnostics: SilverkiteDiagnostics = SilverkiteDiagnostics() + components = silverkite_diagnostics.get_silverkite_components(df, time_col, value_col, feature_df) + expected_residual = df[value_col].values - feature_df.sum(axis=1).values + expected_df = pd.DataFrame({ + time_col: df[time_col], + value_col: df[value_col], + "trend": 5 * np.array([1.0, 1.0, 1.0, 1.0, 1.0]), + "autoregression": 2 * np.array([4.0, 4.0, 4.0, 4.0, 4.0]), + "lagged_regressor": 2 * np.array([4.0, 4.0, 4.0, 4.0, 4.0]), + "WEEKLY_SEASONALITY": 4 * np.array([2.0, 2.0, 2.0, 2.0, 2.0]), + "YEARLY_SEASONALITY": 6 * np.array([3.0, 3.0, 3.0, 3.0, 3.0]), + cst.EVENT_PREFIX: np.array([1.0, 1.0, 1.0, 0.0, 0.0]), + "residual": expected_residual, + "trend_changepoints": np.array([0, 1, 0, 1, 0]), + }) + assert_frame_equal(components, expected_df) + + # Test error messages + with pytest.raises(ValueError, match="feature_df must be non-empty"): + silverkite_diagnostics.get_silverkite_components(df, time_col, value_col, feature_df=pd.DataFrame()) + + with pytest.raises(ValueError, match="df and feature_df must have same number of rows."): + silverkite_diagnostics.get_silverkite_components(df, time_col, value_col, feature_df=pd.DataFrame({"ts": [1, 2, 3]})) + + +def test_plot_silverkite_components(test_params): + """Tests plot_silverkite_components function""" + time_col = test_params["time_col"] + value_col = test_params["value_col"] + df = test_params["df"] + feature_df = test_params["feature_df"] + + silverkite_diagnostics: SilverkiteDiagnostics = SilverkiteDiagnostics() + components = silverkite_diagnostics.get_silverkite_components(df, time_col, value_col, feature_df) + + # Check plot_silverkite_components with defaults + fig = silverkite_diagnostics.plot_silverkite_components(components) + assert len(fig.data) == 8 + 2 # 2 changepoints + assert [fig.data[i].name for i in range(len(fig.data))] == list(components.columns)[1: -1] + ["trend change point"] * 2 + + assert fig.layout.height == (len(fig.data) - 2) * 350 # changepoints do not create separate subplots + assert fig.layout.showlegend is True # legend for changepoints + assert fig.layout.title["text"] == "Component plots" + assert fig.layout.title["x"] == 0.5 + + assert fig.layout.xaxis.title["text"] == time_col + assert fig.layout.xaxis2.title["text"] == time_col + assert fig.layout.xaxis3.title["text"] == time_col + assert fig.layout.xaxis4.title["text"] == time_col + assert fig.layout.xaxis5.title["text"] == "Day of week" + assert fig.layout.xaxis6.title["text"] == "Time of year" + assert fig.layout.xaxis7.title["text"] == time_col + assert fig.layout.xaxis8.title["text"] == time_col + + assert fig.layout.yaxis.title["text"] == value_col + assert fig.layout.yaxis2.title["text"] == "trend" + assert fig.layout.yaxis3.title["text"] == "autoregression" + assert fig.layout.yaxis4.title["text"] == "lagged_regressor" + assert fig.layout.yaxis5.title["text"] == "weekly" + assert fig.layout.yaxis6.title["text"] == "yearly" + assert fig.layout.yaxis7.title["text"] == "events" + assert fig.layout.yaxis8.title["text"] == "residual" + + # Check plot_silverkite_components with provided component list and warnings + with pytest.warns(Warning) as record: + names = ["YEARLY_SEASONALITY", value_col, "DUMMY"] + title = "Component plot without trend and weekly seasonality" + fig = silverkite_diagnostics.plot_silverkite_components(components, names=names, title=title) + + expected_length = 2 + assert len(fig.data) == expected_length + assert [fig.data[i].name for i in range(len(fig.data))] == [value_col, "YEARLY_SEASONALITY"] + + assert fig.layout.height == expected_length*350 + assert fig.layout.showlegend is True + assert fig.layout.title["text"] == title + assert fig.layout.title["x"] == 0.5 + + assert fig.layout.xaxis.title["text"] == time_col + assert fig.layout.xaxis2.title["text"] == "Time of year" + + assert fig.layout.yaxis.title["text"] == value_col + assert fig.layout.yaxis2.title["text"] == "yearly" + assert f"The following components have not been specified in the model: " \ + f"{{'DUMMY'}}, plotting the rest." in record[0].message.args[0] + + # Check plot_silverkite_components with exception + with pytest.raises(ValueError, match="None of the provided components have been specified in the model."): + names = ["DUMMY"] + silverkite_diagnostics.plot_silverkite_components(components, names=names) + + +def test_group_silverkite_seas_components(): + """Tests group_silverkite_seas_components""" + silverkite_diagnostics: SilverkiteDiagnostics = SilverkiteDiagnostics() + time_col = "ts" + # Daily + date_list = pd.date_range(start="2018-01-01", end="2018-01-07", freq="H").tolist() + time_df = build_time_features_df(date_list, conti_year_origin=2018) + df = pd.DataFrame({ + time_col: time_df["datetime"], + "DAILY_SEASONALITY": time_df["hour"] + }) + res = silverkite_diagnostics.group_silverkite_seas_components(df) + expected_df = pd.DataFrame({ + "Hour of day": np.arange(24.0), + "daily": np.arange(24.0), + }) + assert_frame_equal(res, expected_df) + + # Weekly + date_list = pd.date_range(start="2018-01-01", end="2018-01-20", freq="D").tolist() + time_df = build_time_features_df(date_list, conti_year_origin=2018) + df = pd.DataFrame({ + time_col: time_df["datetime"], + "WEEKLY_SEASONALITY": time_df["tow"] + }) + res = silverkite_diagnostics.group_silverkite_seas_components(df) + expected_df = pd.DataFrame({ + "Day of week": np.arange(7.0), + "weekly": np.arange(7.0), + }) + assert_frame_equal(res, expected_df) + + # Monthly + date_list = pd.date_range(start="2018-01-01", end="2018-01-31", freq="D").tolist() + time_df = build_time_features_df(date_list, conti_year_origin=2018) + df = pd.DataFrame({ + time_col: time_df["datetime"], + "MONTHLY_SEASONALITY": time_df["dom"] + }) + res = silverkite_diagnostics.group_silverkite_seas_components(df) + expected_df = pd.DataFrame({ + "Time of month": np.arange(31.0)/31, + "monthly": np.arange(1.0, 32.0), + }) + assert_frame_equal(res, expected_df) + + # Quarterly (92 day quarters) + date_list = pd.date_range(start="2018-07-01", end="2018-12-31", freq="D").tolist() + time_df = build_time_features_df(date_list, conti_year_origin=2018) + df = pd.DataFrame({ + time_col: time_df["datetime"], + "QUARTERLY_SEASONALITY": time_df["toq"] + }) + res = silverkite_diagnostics.group_silverkite_seas_components(df) + expected_df = pd.DataFrame({ + "Time of quarter": np.arange(92.0)/92, + "quarterly": np.arange(92.0)/92, + }) + assert_frame_equal(res, expected_df) + + # Quarterly (90 day quarter) + date_list = pd.date_range(start="2018-01-01", end="2018-03-31", freq="D").tolist() + time_df = build_time_features_df(date_list, conti_year_origin=2018) + df = pd.DataFrame({ + time_col: time_df["datetime"], + "QUARTERLY_SEASONALITY": time_df["toq"] + }) + res = silverkite_diagnostics.group_silverkite_seas_components(df) + expected_df = pd.DataFrame({ + "Time of quarter": np.arange(90.0)/90, + "quarterly": np.arange(90.0)/90, + }) + assert_frame_equal(res, expected_df) + + # Yearly (non-leap years) + date_list = pd.date_range(start="2018-01-01", end="2019-12-31", freq="D").tolist() + time_df = build_time_features_df(date_list, conti_year_origin=2018) + df = pd.DataFrame({ + time_col: time_df["datetime"], + "YEARLY_SEASONALITY": time_df["toy"] + }) + res = silverkite_diagnostics.group_silverkite_seas_components(df) + expected_df = pd.DataFrame({ + "Time of year": np.arange(365.0)/365, + "yearly": np.arange(365.0)/365, + }) + assert_frame_equal(res, expected_df) diff --git a/greykite/tests/sklearn/estimator/test_silverkite_estimator.py b/greykite/tests/sklearn/estimator/test_silverkite_estimator.py index 67211d2..fe59976 100644 --- a/greykite/tests/sklearn/estimator/test_silverkite_estimator.py +++ b/greykite/tests/sklearn/estimator/test_silverkite_estimator.py @@ -66,7 +66,7 @@ def params(): "min_admissible_value": None, "max_admissible_value": None, "uncertainty_dict": uncertainty_dict, - "normalize_method": "min_max", + "normalize_method": "zero_to_one", "adjust_anomalous_dict": None, "impute_dict": { "func": impute_with_lags, @@ -124,7 +124,7 @@ def params2(): "min_admissible_value": None, "max_admissible_value": None, "uncertainty_dict": uncertainty_dict, - "normalize_method": "min_max", + "normalize_method": "zero_to_one", "adjust_anomalous_dict": None, "impute_dict": { "func": impute_with_lags, @@ -367,7 +367,7 @@ def test_uncertainty(daily_data): predictions = model.predict(test_df) expected_forecast_cols = \ - {"ts", "y", "y_quantile_summary", "err_std", "forecast_lower", "forecast_upper"} + {"ts", "y", cst.QUANTILE_SUMMARY_COL, "err_std", "forecast_lower", "forecast_upper"} assert expected_forecast_cols.issubset(list(model.forecast.columns)) actual = daily_data["test_df"][cst.VALUE_COL] @@ -504,7 +504,7 @@ def test_autoreg(daily_data): predictions = model.predict(test_df) expected_forecast_cols = { - "ts", "y", "y_quantile_summary", "err_std", "forecast_lower", + "ts", "y", cst.QUANTILE_SUMMARY_COL, "err_std", "forecast_lower", "forecast_upper"} assert expected_forecast_cols.issubset(list(model.forecast.columns)) @@ -639,7 +639,7 @@ def test_lagged_regressors(daily_data_with_reg, params): assert expected_lagged_regression_terms.issubset(pred_cols) model.predict(test_df) - expected_forecast_cols = {"ts", "y", "y_quantile_summary", "err_std", + expected_forecast_cols = {"ts", "y", cst.QUANTILE_SUMMARY_COL, "err_std", "forecast_lower", "forecast_upper"} assert expected_forecast_cols.issubset(list(model.forecast.columns)) @@ -687,7 +687,7 @@ def test_various_predictor_settings(daily_data_with_reg, params): model.predict(test_df) expected_forecast_cols = { - "ts", "y", "y_quantile_summary", "err_std", "forecast_lower", + "ts", "y", cst.QUANTILE_SUMMARY_COL, "err_std", "forecast_lower", "forecast_upper"} assert expected_forecast_cols.issubset(list(model.forecast.columns)) @@ -755,7 +755,7 @@ def test_x_mat_in_predict(daily_data): value_col=cst.VALUE_COL) pred_df = model.predict(test_df) - cols = ["ts", "y_quantile_summary", "err_std", "forecast_lower", "forecast_upper"] + cols = ["ts", cst.QUANTILE_SUMMARY_COL, "err_std", "forecast_lower", "forecast_upper"] assert_equal(model.forecast[cols], pred_df[cols]) assert (model.forecast["y"].values == pred_df["forecast"].values).all() @@ -763,3 +763,10 @@ def test_x_mat_in_predict(daily_data): assert list(forecast_x_mat.columns) == [ "Intercept", "C(dow == 1)[T.True]", "ct1"] assert len(forecast_x_mat) == len(pred_df) + + assert len(model.forecast_x_mat) == 20 + + # Predicts with a smaller length + pred_df = model.predict(test_df[:5]) + assert len(model.forecast_x_mat) == 5 + assert len(pred_df) == 5 diff --git a/greykite/tests/sklearn/estimator/test_simple_silverkite_estimator.py b/greykite/tests/sklearn/estimator/test_simple_silverkite_estimator.py index 4d9058f..c833778 100644 --- a/greykite/tests/sklearn/estimator/test_simple_silverkite_estimator.py +++ b/greykite/tests/sklearn/estimator/test_simple_silverkite_estimator.py @@ -9,6 +9,9 @@ import greykite.common.constants as cst from greykite.algo.forecast.silverkite.forecast_simple_silverkite import SimpleSilverkiteForecast +from greykite.common.constants import EVENT_DF_DATE_COL +from greykite.common.constants import EVENT_DF_LABEL_COL +from greykite.common.data_loader import DataLoader from greykite.common.features.timeseries_features import convert_date_to_continuous_time from greykite.common.python_utils import assert_equal from greykite.common.testing_utils import daily_data_reg @@ -391,7 +394,7 @@ def test_uncertainty(daily_data): predictions = model.predict(test_df) expected_forecast_cols = \ - {"ts", "y", "y_quantile_summary", "err_std", "forecast_lower", "forecast_upper"} + {"ts", "y", cst.QUANTILE_SUMMARY_COL, "err_std", "forecast_lower", "forecast_upper"} assert expected_forecast_cols.issubset(list(model.forecast.columns)) actual = daily_data["test_df"][cst.VALUE_COL] @@ -439,7 +442,7 @@ def test_normalize_method(daily_data): predictions = model.predict(test_df) expected_forecast_cols = \ - {"ts", "y", "y_quantile_summary", "err_std", "forecast_lower", "forecast_upper"} + {"ts", "y", cst.QUANTILE_SUMMARY_COL, "err_std", "forecast_lower", "forecast_upper"} assert expected_forecast_cols.issubset(list(model.forecast.columns)) actual = daily_data["test_df"][cst.VALUE_COL] @@ -599,7 +602,7 @@ def test_x_mat_in_predict(daily_data): value_col=cst.VALUE_COL) pred_df = model.predict(test_df) - cols = ["ts", "y_quantile_summary", "err_std", "forecast_lower", "forecast_upper"] + cols = ["ts", cst.QUANTILE_SUMMARY_COL, "err_std", "forecast_lower", "forecast_upper"] assert_equal(model.forecast[cols], pred_df[cols]) assert (model.forecast["y"].values == pred_df["forecast"].values).all() @@ -623,3 +626,107 @@ def test_uncertainty_with_nonstandard_cols(daily_data): pred_df = model.predict(df) assert cst.PREDICTED_LOWER_COL in pred_df assert cst.PREDICTED_UPPER_COL in pred_df + + +def test_auto_config(): + df = DataLoader().load_peyton_manning() + df[cst.TIME_COL] = pd.to_datetime(df[cst.TIME_COL]) + model = SimpleSilverkiteEstimator( + forecast_horizon=7, + auto_holiday=True, + holidays_to_model_separately="auto", + holiday_lookup_countries="auto", + holiday_pre_num_days=2, + holiday_post_num_days=2, + daily_event_df_dict=dict( + custom_event=pd.DataFrame({ + EVENT_DF_DATE_COL: pd.to_datetime(["2010-03-03", "2011-03-03", "2012-03-03"]), + EVENT_DF_LABEL_COL: "threethree" + }) + ), + auto_growth=True, + growth_term="quadratic", + changepoints_dict=dict( + method="uniform", + n_changepoints=2 + ), + auto_seasonality=True, + yearly_seasonality=0, + quarterly_seasonality="auto", + monthly_seasonality=False, + weekly_seasonality=True, + daily_seasonality=5 + ) + model.fit( + X=df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL + ) + # Seasonality is overridden by auto seasonality. + assert model.model_dict["fs_components_df"][["name", "period", "order", "seas_names"]].equals(pd.DataFrame({ + "name": ["tow", "toq", "ct1"], + "period": [7.0, 1.0, 1.0], + "order": [3, 1, 6], + "seas_names": ["weekly", "quarterly", "yearly"] + })) + # Growth is overridden by auto growth. + assert "ct1" in model.model_dict["x_mat"].columns + assert model.model_dict["changepoints_dict"]["method"] == "custom" + # Holidays is overridden by auto seasonality. + assert len(model.model_dict["daily_event_df_dict"]) == 198 + assert "custom_event" in model.model_dict["daily_event_df_dict"] + assert "China_Chinese New Year" in model.model_dict["daily_event_df_dict"] + + +def test_quantile_regression_uncertainty_model(): + """Tests the quantile regression uncertainty model.""" + df = DataLoader().load_peyton_manning().iloc[-365:].reset_index(drop=True) + df[cst.TIME_COL] = pd.to_datetime(df[cst.TIME_COL]) + + # Residual based + model = SimpleSilverkiteEstimator( + coverage=0.99, + uncertainty_dict=dict( + uncertainty_method="quantile_regression", + params=dict( + is_residual_based=True + ) + ) + ) + model.fit( + X=df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL + ) + assert model.uncertainty_model is not None + assert len(model.uncertainty_model.models) == 2 + df_fut = pd.DataFrame({ + "ts": pd.date_range(df["ts"].max(), freq="D", periods=15), + "y": np.nan + }).iloc[1:].reset_index(drop=True) + pred = model.predict(df_fut) + assert cst.PREDICTED_LOWER_COL in pred.columns + assert cst.PREDICTED_UPPER_COL in pred.columns + assert all(pred[cst.PREDICTED_LOWER_COL] <= pred[cst.PREDICTED_UPPER_COL]) + + # Not residual based + model = SimpleSilverkiteEstimator( + coverage=0.95, + uncertainty_dict=dict( + uncertainty_method="quantile_regression", + params=dict( + is_residual_based=False + ) + ) + ) + model.fit( + X=df, + time_col=cst.TIME_COL, + value_col=cst.VALUE_COL + ) + assert model.uncertainty_model is not None + assert len(model.uncertainty_model.models) == 2 + pred = model.predict(df) + assert cst.PREDICTED_LOWER_COL in pred.columns + assert cst.PREDICTED_UPPER_COL in pred.columns + assert all(pred[cst.PREDICTED_LOWER_COL].round(5) <= pred[cst.PREDICTED_UPPER_COL].round(5)) diff --git a/greykite/tests/sklearn/uncertainty/test_quantile_regression_uncertainty_model.py b/greykite/tests/sklearn/uncertainty/test_quantile_regression_uncertainty_model.py new file mode 100644 index 0000000..c2f25b3 --- /dev/null +++ b/greykite/tests/sklearn/uncertainty/test_quantile_regression_uncertainty_model.py @@ -0,0 +1,228 @@ +"""Tests the quantile regression based uncertainty model.""" + +import pandas as pd +import pytest + +from greykite.common import constants as cst +from greykite.common.data_loader import DataLoader +from greykite.sklearn.estimator.simple_silverkite_estimator import SimpleSilverkiteEstimator +from greykite.sklearn.uncertainty.exceptions import UncertaintyError +from greykite.sklearn.uncertainty.quantile_regression_uncertainty_model import QuantileRegressionUncertaintyModel + + +@pytest.fixture +def forecast_result(): + """The forecast model results.""" + df = DataLoader().load_peyton_manning().iloc[-365:].reset_index(drop=True) + df["ts"] = pd.to_datetime(df["ts"]) + model = SimpleSilverkiteEstimator() + model.fit(df) + x_mat = model.model_dict["x_mat"] + fit_df = model.predict(df) + fit_df["y"] = df["y"] + fut_df = pd.DataFrame({ + "ts": pd.date_range(df["ts"].max(), freq="D", periods=15) + }).iloc[1:].reset_index(drop=True) + predict_df = model.predict(fut_df) + fut_x_mat = model.forecast_x_mat + return { + "df": df, + "fit_df": fit_df, + "x_mat": x_mat, + "predict_df": predict_df, + "fut_x_mat": fut_x_mat + } + + +def test_init(): + """Tests instantiation.""" + model = QuantileRegressionUncertaintyModel( + uncertainty_dict={} + ) + assert model.coverage is None + assert model.time_col is None + assert model.uncertainty_dict == {} + assert model.is_residual_based is None + assert model.x_mat is None + assert model.build_x_mat is None + assert model.value_col is None + assert model.residual_col is None + assert model.quantiles is None + assert model.models is None + assert model.distribution_col is None + assert model.offset_col is None + + +def test_check_input(forecast_result): + """Tests processing inputs.""" + # Method name wrong. + with pytest.raises( + UncertaintyError, + match=f"The uncertainty method uncertainty_method is not as expected quantile_regression."): + model = QuantileRegressionUncertaintyModel( + uncertainty_dict={ + "uncertainty_method": "uncertainty_method", + } + ) + model.train_df = forecast_result["df"] + model.x_mat = forecast_result["x_mat"] + model._check_input() + + # Value column not found. + with pytest.raises( + UncertaintyError, + match=f"The parameter value_col is required but not found in"): + model = QuantileRegressionUncertaintyModel( + uncertainty_dict={ + "uncertainty_method": "quantile_regression", + } + ) + model.train_df = forecast_result["df"][["ts"]] + model.x_mat = forecast_result["x_mat"] + model._check_input() + + # Value column not found in df. + with pytest.raises( + UncertaintyError, + match=f"`value_col` col not found in `train_df`."): + model = QuantileRegressionUncertaintyModel( + uncertainty_dict={ + "uncertainty_method": "quantile_regression", + "params": { + "value_col": "col" + } + } + ) + model.train_df = forecast_result["df"] + model.x_mat = forecast_result["x_mat"] + model._check_input() + + # No time column or ``x_mat``. + with pytest.raises( + UncertaintyError, + match=f"Time column must be provided when `x_mat` is not given."): + model = QuantileRegressionUncertaintyModel( + uncertainty_dict={ + "uncertainty_method": "quantile_regression", + "params": { + } + } + ) + model.train_df = forecast_result["df"][["y"]] + model._check_input() + + +def test_is_residual_based_x_mat(forecast_result): + """Tests predicting residual based interval with ``x_mat``.""" + model = QuantileRegressionUncertaintyModel( + uncertainty_dict={ + "uncertainty_method": "quantile_regression", + "params": { + "value_col": "y", + "is_residual_based": True + } + }, + coverage=0.9 + ) + model.fit( + train_df=forecast_result["fit_df"], + x_mat=forecast_result["x_mat"] + ) + pred = model.predict( + fut_df=forecast_result["fit_df"], + x_mat=forecast_result["x_mat"] + ) + assert cst.PREDICTED_LOWER_COL in pred + assert cst.PREDICTED_UPPER_COL in pred + pred = model.predict( + fut_df=forecast_result["predict_df"], + x_mat=forecast_result["fut_x_mat"] + ) + assert cst.PREDICTED_LOWER_COL in pred + assert cst.PREDICTED_UPPER_COL in pred + + +def test_is_residual_based_no_x_mat(forecast_result): + """Tests predicting residual based interval without ``x_mat``.""" + model = QuantileRegressionUncertaintyModel( + uncertainty_dict={ + "uncertainty_method": "quantile_regression", + "params": { + "value_col": "y", + "is_residual_based": True + } + }, + coverage=0.9 + ) + model.fit( + train_df=forecast_result["fit_df"], + x_mat=None + ) + pred = model.predict( + fut_df=forecast_result["fit_df"] + ) + assert cst.PREDICTED_LOWER_COL in pred + assert cst.PREDICTED_UPPER_COL in pred + pred = model.predict( + fut_df=forecast_result["predict_df"] + ) + assert cst.PREDICTED_LOWER_COL in pred + assert cst.PREDICTED_UPPER_COL in pred + + +def test_non_is_residual_based_x_mat(forecast_result): + """Tests predicting non-residual based interval with ``x_mat``.""" + model = QuantileRegressionUncertaintyModel( + uncertainty_dict={ + "uncertainty_method": "quantile_regression", + "params": { + "value_col": "y", + "is_residual_based": False + } + }, + coverage=0.9 + ) + model.fit( + train_df=forecast_result["fit_df"], + x_mat=forecast_result["x_mat"] + ) + pred = model.predict( + fut_df=forecast_result["fit_df"], + x_mat=forecast_result["x_mat"] + ) + assert cst.PREDICTED_LOWER_COL in pred + assert cst.PREDICTED_UPPER_COL in pred + pred = model.predict( + fut_df=forecast_result["predict_df"], + x_mat=forecast_result["fut_x_mat"] + ) + assert cst.PREDICTED_LOWER_COL in pred + assert cst.PREDICTED_UPPER_COL in pred + + +def test_non_is_residual_based_no_x_mat(forecast_result): + """Tests predicting non-residual based interval without ``x_mat``.""" + model = QuantileRegressionUncertaintyModel( + uncertainty_dict={ + "uncertainty_method": "quantile_regression", + "params": { + "value_col": "y", + "is_residual_based": False + } + }, + coverage=0.9 + ) + model.fit( + train_df=forecast_result["fit_df"], + x_mat=None + ) + pred = model.predict( + fut_df=forecast_result["fit_df"] + ) + assert cst.PREDICTED_LOWER_COL in pred + assert cst.PREDICTED_UPPER_COL in pred + pred = model.predict( + fut_df=forecast_result["predict_df"] + ) + assert cst.PREDICTED_LOWER_COL in pred + assert cst.PREDICTED_UPPER_COL in pred diff --git a/greykite/tests/sklearn/uncertainty/test_simple_conditional_residuals_model.py b/greykite/tests/sklearn/uncertainty/test_simple_conditional_residuals_model.py index 0648f93..9ff0e5f 100644 --- a/greykite/tests/sklearn/uncertainty/test_simple_conditional_residuals_model.py +++ b/greykite/tests/sklearn/uncertainty/test_simple_conditional_residuals_model.py @@ -3,9 +3,7 @@ import numpy as np import pandas as pd import pytest -from testfixtures import LogCapture -from greykite.common.constants import LOGGER_NAME from greykite.common.constants import PREDICTED_COL from greykite.common.constants import PREDICTED_LOWER_COL from greykite.common.constants import PREDICTED_UPPER_COL @@ -77,20 +75,6 @@ def test_check_input(df, uncertainty_dict): model.train_df = df[[TIME_COL]] model._check_input() - # ``value_col`` is not a string. - with pytest.raises( - UncertaintyError, - match="`value_col` has to be a string, but found "): - uncertainty_dict1 = deepcopy(uncertainty_dict) - uncertainty_dict1["params"]["value_col"] = 1 - model = SimpleConditionalResidualsModel( - uncertainty_dict=uncertainty_dict1, - coverage=0.95, - time_col=TIME_COL - ) - model.train_df = df - model._check_input() - # ``value_col`` not in ``train_df``. with pytest.raises( UncertaintyError, @@ -105,45 +89,13 @@ def test_check_input(df, uncertainty_dict): model.train_df = df model._check_input() - # ``residual_col`` is not a string. - with pytest.raises( - UncertaintyError, - match="`residual_col` has to be a string or None, but found "): - uncertainty_dict1 = deepcopy(uncertainty_dict) - uncertainty_dict1["params"]["residual_col"] = 1 - model = SimpleConditionalResidualsModel( - uncertainty_dict=uncertainty_dict1, - coverage=0.95, - time_col=TIME_COL - ) - model.train_df = df - model._check_input() - - # ``residual_col`` inferred from data. - with LogCapture(LOGGER_NAME) as log_capture: - uncertainty_dict1 = deepcopy(uncertainty_dict) - uncertainty_dict1["params"]["residual_col"] = "residual_col" - model = SimpleConditionalResidualsModel( - uncertainty_dict=uncertainty_dict1, - coverage=0.95, - time_col=TIME_COL - ) - model.train_df = df - model._check_input() - assert ( - LOGGER_NAME, - "INFO", - f"`residual_col` {model.residual_col} is given but not found in `train_df.columns`, " - f"however, the prediction column {PREDICTED_COL} is found. " - f"Calculating residuals based on the prediction column." - ) in log_capture.actual() - # ``conditional_cols`` not a list of strings. with pytest.raises( UncertaintyError, match="`conditional_cols` \\['a', 1\\] must be a list of strings."): uncertainty_dict1 = deepcopy(uncertainty_dict) uncertainty_dict1["params"]["conditional_cols"] = ["a", 1] + uncertainty_dict1["params"]["value_col"] = "y" model = SimpleConditionalResidualsModel( uncertainty_dict=uncertainty_dict1, coverage=0.95, @@ -168,8 +120,8 @@ def test_check_input(df, uncertainty_dict): # ``coverage`` is not in bound. with pytest.raises( - UncertaintyError, - match="Coverage must be between 0 and 1, found 1.95"): + ValueError, + match="coverage must be between 0 and 1"): model = SimpleConditionalResidualsModel( uncertainty_dict=uncertainty_dict, coverage=1.95, @@ -178,6 +130,20 @@ def test_check_input(df, uncertainty_dict): model.train_df = df model._check_input() + # ``is_residual_based`` is False + with pytest.raises( + UncertaintyError, + match="\\'is_residual_based\\' must be True when the uncertainty method is simple_conditional_residuals."): + uncertainty_dict1 = deepcopy(uncertainty_dict) + uncertainty_dict1["params"]["is_residual_based"] = False + model = SimpleConditionalResidualsModel( + uncertainty_dict=uncertainty_dict1, + coverage=1.95, + time_col=TIME_COL + ) + model.train_df = df + model._check_input() + # Smooth run. model = SimpleConditionalResidualsModel( uncertainty_dict=uncertainty_dict, @@ -217,5 +183,5 @@ def test_fit_and_predict(df, uncertainty_dict): # ``value_col`` not in ``fut_df``. with pytest.raises( UncertaintyError, - match=f"The value column {VALUE_COL} is not found in `fut_df`."): + match=f"The offset column forecast is not found in `fut_df`."): model.predict(fut_df=df[[TIME_COL]]) diff --git a/requirements-dev.txt b/requirements-dev.txt index 908edf1..abb32e9 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,20 +1,20 @@ bump2version==0.5.11 Click==7.0 -Cython==0.29.17 coverage==4.5.4 cvxpy==1.1.12 dill==0.3.3 -fbprophet==0.5 flake8==3.7.8 -holidays==0.9.10 +holidays==0.13 holidays-ext==0.0.7 ipykernel==4.8.2 ipython==7.1.1 ipywidgets==7.2.1 jupyter==1.0.0 -jupyter-client==6.1.5 -jupyter-console==6. +jupyter-client==6.1.7 +jupyter-console==6.4.0 jupyter-core==4.7.1 +jupyter-server==0.1.1 +LunarCalendar==0.0.9 matplotlib==3.4.1 nbformat==5.1.3 notebook==5.4.1 @@ -27,16 +27,18 @@ Pillow==8.0.1 pip==20.3.3 plotly==5.4.0 pmdarima==1.8.0 -pystan==2.18.0.0 +prophet==1.0 +pystan==2.19.0.0 pytest==4.6.5 pytest-runner==5.1 pyzmq==22.0.3 +requests==2.22.0 scipy==1.5.4 seaborn==0.9.0 six==1.15.0 scikit-learn==0.24.1 Sphinx==3.2.1 -sphinx-gallery==0.6.1 +sphinx-gallery==0.10.1 sphinx-rtd-theme==0.4.2 statsmodels==0.12.2 testfixtures==6.14.2 diff --git a/setup.py b/setup.py index 010115b..cc1892a 100644 --- a/setup.py +++ b/setup.py @@ -57,13 +57,13 @@ include_package_data=True, keywords="greykite", name="greykite", - author="R. Hosseini, A. Chen, K. Yang, S. Patra, R. Arora", + author="R. Hosseini, A. Chen, K. Yang, S. Patra, Y. Su, R. Arora", author_email="reza1317@gmail.com", packages=find_packages(include=['greykite', 'greykite.*']), setup_requires=setup_requirements, test_suite="tests", tests_require=test_requirements, url="https://github.com/linkedin/greykite", - version="0.3.0", + version="0.4.0", zip_safe=False, )