superset-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From maximebeauche...@apache.org
Subject [incubator-superset] branch master updated: [line chart] add 'min_periods' control related to rolling windows (#3397)
Date Wed, 30 Aug 2017 20:32:10 GMT
This is an automated email from the ASF dual-hosted git repository.

maximebeauchemin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git


The following commit(s) were added to refs/heads/master by this push:
     new ac5da46  [line chart] add 'min_periods' control related to rolling windows (#3397)
ac5da46 is described below

commit ac5da46fb2ddc225f02152a51cbaafcb171b1227
Author: Maxime Beauchemin <maximebeauchemin@gmail.com>
AuthorDate: Wed Aug 30 13:32:07 2017 -0700

    [line chart] add 'min_periods' control related to rolling windows (#3397)
    
    * [line chart] add 'min_periods' control related to rolling windows
    
    * Linting js
---
 superset/assets/javascripts/explore/stores/controls.jsx | 13 +++++++++++++
 superset/assets/javascripts/explore/stores/visTypes.js  |  7 +++----
 superset/viz.py                                         | 16 +++++++++++-----
 3 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/superset/assets/javascripts/explore/stores/controls.jsx b/superset/assets/javascripts/explore/stores/controls.jsx
index 554554c..21d8cc8 100644
--- a/superset/assets/javascripts/explore/stores/controls.jsx
+++ b/superset/assets/javascripts/explore/stores/controls.jsx
@@ -654,6 +654,19 @@ export const controls = {
     'relative to the time granularity selected',
   },
 
+  min_periods: {
+    type: 'TextControl',
+    label: 'Min Periods',
+    isInt: true,
+    description: (
+      'The minimum number of rolling periods required to show ' +
+      'a value. For instance if you do a cumulative sum on 7 days ' +
+      'you may want your "Min Period" to be 7, so that all data points ' +
+      'shown are the total of 7 periods. This will hide the "ramp up" ' +
+      'taking place over the first 7 periods'
+    ),
+  },
+
   series: {
     type: 'SelectControl',
     label: 'Series',
diff --git a/superset/assets/javascripts/explore/stores/visTypes.js b/superset/assets/javascripts/explore/stores/visTypes.js
index d3ee320..318d3327 100644
--- a/superset/assets/javascripts/explore/stores/visTypes.js
+++ b/superset/assets/javascripts/explore/stores/visTypes.js
@@ -59,11 +59,10 @@ export const sections = {
       'that allow for advanced analytical post processing ' +
       'of query results',
       controlSetRows: [
-        ['rolling_type', 'rolling_periods'],
-        ['time_compare'],
+        ['rolling_type', 'rolling_periods', 'min_periods'],
+        ['time_compare', null],
         ['num_period_compare', 'period_ratio_type'],
-        ['resample_how', 'resample_rule'],
-        ['resample_fillmethod'],
+        ['resample_how', 'resample_rule', 'resample_fillmethod'],
       ],
     },
   ],
diff --git a/superset/viz.py b/superset/viz.py
index a3d9a5a..b3c49bb 100644
--- a/superset/viz.py
+++ b/superset/viz.py
@@ -886,18 +886,25 @@ class NVD3TimeSeriesViz(NVD3Viz):
             dft = df.T
             df = (dft / dft.sum()).T
 
-        rolling_periods = fd.get("rolling_periods")
         rolling_type = fd.get("rolling_type")
+        rolling_periods = int(fd.get("rolling_periods") or 0)
+        min_periods = int(fd.get("min_periods") or 0)
 
         if rolling_type in ('mean', 'std', 'sum') and rolling_periods:
+            kwargs = dict(
+                arg=df,
+                window=rolling_periods,
+                min_periods=min_periods)
             if rolling_type == 'mean':
-                df = pd.rolling_mean(df, int(rolling_periods), min_periods=0)
+                df = pd.rolling_mean(**kwargs)
             elif rolling_type == 'std':
-                df = pd.rolling_std(df, int(rolling_periods), min_periods=0)
+                df = pd.rolling_std(**kwargs)
             elif rolling_type == 'sum':
-                df = pd.rolling_sum(df, int(rolling_periods), min_periods=0)
+                df = pd.rolling_sum(**kwargs)
         elif rolling_type == 'cumsum':
             df = df.cumsum()
+        if min_periods:
+            df = df[min_periods:]
 
         num_period_compare = fd.get("num_period_compare")
         if num_period_compare:
@@ -911,7 +918,6 @@ class NVD3TimeSeriesViz(NVD3Viz):
                 df = df / df.shift(num_period_compare)
 
             df = df[num_period_compare:]
-
         return df
 
     def get_data(self, df):

-- 
To stop receiving notification emails like this one, please contact
['"commits@superset.apache.org" <commits@superset.apache.org>'].

Mime
View raw message