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 +4 -4
- data/README.md +17 -0
- data/lib/simple_time_series/simple_time_series.rb +11 -0
- data/lib/simple_time_series/version.rb +1 -1
- data/spec/lib/simple_time_series_spec.rb +28 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5f5ca203967d4af50f16d5afa45797faf88de47
|
4
|
+
data.tar.gz: 1d6b4d7b3446fd5141150054fd9bd65fb8840980
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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'
|
@@ -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.
|
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-
|
11
|
+
date: 2014-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|