simple_time_series 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 022c7f24717b5750931b1a724b4c501f35faa824
4
- data.tar.gz: 790727d3ebc4c5f2e661cdc2c2924c1851f6303f
3
+ metadata.gz: b5f5ca203967d4af50f16d5afa45797faf88de47
4
+ data.tar.gz: 1d6b4d7b3446fd5141150054fd9bd65fb8840980
5
5
  SHA512:
6
- metadata.gz: cdecc62389e5e0d65fbccf6437ad5213351310228084da6a3a955d949f462c28909cb1489f97915ab12cad6e459d74644ce644b5b4179f1c3103fb457923c2a3
7
- data.tar.gz: 9be0f918259ebcde9f315eb92c5ec93dfc734decbd25defb0a3263ac3143a889f97748c417f142a4f792493aa14d370985fd7dfe24e89b533c3cd708c25d6264
6
+ metadata.gz: f3472c7f10c78314440774986600b67b1a00d1827abd68afae448602d1b3aec6249fbb87851f0651e2d3e2232effb6bc0e057a2da3fb044469bf531e8e4db2a5
7
+ data.tar.gz: c6cedd819610bcb1366e747afa536f8baea398493b5b94db1f707f5e76c040f59570163c1de75175d1b7d3e96957d01dde86d956fd32dc321a9610cad835bc00
data/README.md CHANGED
@@ -173,6 +173,23 @@ It returns an array if you ask for a range of values:
173
173
  my_data.tasks_done_diff('Sunday','Monday') # returns [nil, 1]
174
174
  my_data.tasks_done_diff('Tuesday','Saturday') # returns [-3, 14, -11, 8, -11]
175
175
 
176
+ It also calculates cumulative sums for any data_var:
177
+
178
+ my_data.tasks_done_cumsum # returns [2, 5, 5, 19, 22, 33, 33]
179
+ my_data.tasks_done_cumsum[3] # returns 19
180
+ my_data.tasks_done_cumsum[3, 2] # returns [19, 22]
181
+ my_data.tasks_done_cumsum[3, 4] # returns [19, 22, 33, 33]
182
+ my_data.pizzas_cumsum # returns [0, 0, 1, 1, 1.5, 1.5, 3.5]
183
+
184
+ my_data.tasks_done_cumsum('Saturday') # returns 33
185
+ my_data.tasks_done_cumsum('Sunday') # returns 2
186
+ my_data.pizzas_cumsum('Saturday') # returns 3.5
187
+ my_data.pizzas_cumsum('2014-01-01') # returns 0
188
+ my_data.pizzas_cumsum('Jan 4, 2014') # returns 1
189
+
190
+ my_data.tasks_done_cumsum('Sunday','Monday') # returns [2, 5]
191
+ my_data.tasks_done_cumsum('Tuesday','Saturday') # returns [5, 19, 22, 33, 33]
192
+
176
193
  Currently, SimpleTimeSeries assumes all variable arrays have equal lengths and represent the same sequence of observations. Though the gem says "time series," it should work with any kind of sequential data.
177
194
 
178
195
  ## Disclaimer
@@ -63,6 +63,17 @@ class SimpleTimeSeries
63
63
  return answer.length == 1 ? answer[0] : answer
64
64
  end
65
65
  end
66
+ # should DRY out variable creation, probably by passing in a strategy along with the variable name
67
+ define_method("#{var}_cumsum") do |first=nil, last=nil| # should work only on numeric data
68
+ # this could be made more efficient by caching the full array and/or calculating only a subset of values
69
+ time_vars.each do |tv_key, tv_val|
70
+ start_idx = index_of_date_value(first) || 0
71
+ last_idx = index_of_date_value(last) || (first.nil? ? -1 : start_idx)
72
+ sum = eval(var)[0]
73
+ answer = (eval(var).each_cons(2).map { |val1, val2| sum += val2 }.unshift(eval(var)[start_idx]))[start_idx..last_idx]
74
+ return answer.length == 1 ? answer[0] : answer
75
+ end
76
+ end
66
77
  define_method(var_on) do |date|
67
78
  time_vars.each do |tv_key, tv_val|
68
79
  # tv_key is something like 'dows' or 'dates'
@@ -1,3 +1,3 @@
1
1
  class SimpleTimeSeries
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -202,6 +202,8 @@ describe SimpleTimeSeries do
202
202
  it "should calculate the correct vector of differences for the referenced data_var" do
203
203
  @my_data.tasks_done_diff.should == [nil, 1, -3, 14, -11, 8, -11]
204
204
  @my_data.tasks_done_diff[3].should == 14
205
+ @my_data.tasks_done_diff[3, 2].should == [14, -11]
206
+ @my_data.tasks_done_diff[3, 4].should == [14, -11, 8, -11]
205
207
  @my_data.pizzas_diff.should == [nil, 0, 1, -1, 0.5, -0.5, 2]
206
208
  end
207
209
 
@@ -220,4 +222,30 @@ describe SimpleTimeSeries do
220
222
 
221
223
  end
222
224
 
225
+ describe "#xyz_cumsum" do
226
+
227
+ it "should calculate the correct vector of cumulative sums for the referenced data_var" do
228
+ # @tasks_done = [2, 3, 0, 14, 3, 11, 0]
229
+ @my_data.tasks_done_cumsum.should == [2, 5, 5, 19, 22, 33, 33]
230
+ @my_data.tasks_done_cumsum[3].should == 19
231
+ @my_data.tasks_done_cumsum[3, 2].should == [19, 22]
232
+ @my_data.tasks_done_cumsum[3, 4].should == [19, 22, 33, 33]
233
+ @my_data.pizzas_cumsum.should == [0, 0, 1, 1, 1.5, 1.5, 3.5]
234
+ end
235
+
236
+ it "should let me access a single value in a vector of cumulative sums with any time_var value" do
237
+ @my_data.tasks_done_cumsum('Saturday').should == 33
238
+ @my_data.tasks_done_cumsum('Sunday').should == 2
239
+ @my_data.pizzas_cumsum('Saturday').should == 3.5
240
+ @my_data.pizzas_cumsum('2014-01-01').should == 0
241
+ @my_data.pizzas_cumsum('Jan 4, 2014').should == 1
242
+ end
243
+
244
+ it "should let me access a subarray of a vector of differences with any time_var value" do
245
+ @my_data.tasks_done_cumsum('Sunday','Monday').should == [2, 5]
246
+ @my_data.tasks_done_cumsum('Tuesday','Saturday').should == [5, 19, 22, 33, 33]
247
+ end
248
+
249
+ end
250
+
223
251
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_time_series
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Lavin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-04 00:00:00.000000000 Z
11
+ date: 2014-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler