simple_time_series 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|