@@ -53,6 +53,15 @@ const runningMean = (data, windowSize) => {
53
53
return smoothedMean ;
54
54
} ;
55
55
56
+ export const translateMeans = ( means , latest ) => {
57
+ if ( ! means || ! means . length ) return null ;
58
+ const currentWeek = moment ( latest ) . isoWeek ( ) ;
59
+ const firstHalf = means . slice ( 0 , currentWeek ) ;
60
+ const secondHalf = means . slice ( currentWeek ) ;
61
+
62
+ return secondHalf . concat ( firstHalf ) ;
63
+ } ;
64
+
56
65
export const getData = createSelector (
57
66
[ getAlerts , getLatestDates ] ,
58
67
( data , latest ) => {
@@ -90,28 +99,32 @@ export const getData = createSelector(
90
99
}
91
100
) ;
92
101
93
- export const getMeans = createSelector ( [ getData ] , data => {
94
- if ( ! data ) return null ;
95
- const minYear = minBy ( data , 'year' ) . year ;
96
- const maxYear = maxBy ( data , 'year' ) . year ;
97
- const grouped = groupBy ( data , 'week' ) ;
98
- const centralMeans = Object . keys ( grouped ) . map ( d => {
99
- const weekData = grouped [ d ] ;
100
- return meanBy ( weekData , 'count' ) ;
101
- } ) ;
102
- const leftYears = data . filter ( d => d . year !== maxYear ) ;
103
- const rightYears = data . filter ( d => d . year !== minYear ) ;
104
- const leftMeans = meanData ( getYearsObj ( leftYears , - 6 ) ) ;
105
- const rightMeans = meanData ( getYearsObj ( rightYears , 0 , 6 ) ) ;
106
- const allMeans = concat ( leftMeans , centralMeans , rightMeans ) ;
107
- const smoothedMeans = runningMean ( allMeans , 12 ) ;
108
- const pastYear = data . slice ( - 52 ) ;
109
- const parsedData = pastYear . map ( ( d , i ) => ( {
110
- ...d ,
111
- mean : smoothedMeans [ i ]
112
- } ) ) ;
113
- return parsedData ;
114
- } ) ;
102
+ export const getMeans = createSelector (
103
+ [ getData , getLatestDates ] ,
104
+ ( data , latest ) => {
105
+ if ( ! data ) return null ;
106
+ const minYear = minBy ( data , 'year' ) . year ;
107
+ const maxYear = maxBy ( data , 'year' ) . year ;
108
+ const grouped = groupBy ( data , 'week' ) ;
109
+ const centralMeans = Object . keys ( grouped ) . map ( d => {
110
+ const weekData = grouped [ d ] ;
111
+ return meanBy ( weekData , 'count' ) ;
112
+ } ) ;
113
+ const leftYears = data . filter ( d => d . year !== maxYear ) ;
114
+ const rightYears = data . filter ( d => d . year !== minYear ) ;
115
+ const leftMeans = meanData ( getYearsObj ( leftYears , - 6 ) ) ;
116
+ const rightMeans = meanData ( getYearsObj ( rightYears , 0 , 6 ) ) ;
117
+ const allMeans = concat ( leftMeans , centralMeans , rightMeans ) ;
118
+ const smoothedMeans = runningMean ( allMeans , 12 ) ;
119
+ const translatedMean = translateMeans ( smoothedMeans , latest ) ;
120
+ const pastYear = data . slice ( - 52 ) ;
121
+ const parsedData = pastYear . map ( ( d , i ) => ( {
122
+ ...d ,
123
+ mean : translatedMean [ i ]
124
+ } ) ) ;
125
+ return parsedData ;
126
+ }
127
+ ) ;
115
128
116
129
export const getStdDev = createSelector (
117
130
[ getMeans , getData ] ,
0 commit comments