simple_time_series 0.0.6 → 0.0.7
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 +11 -3
- data/lib/simple_time_series/simple_time_series.rb +15 -5
- data/lib/simple_time_series/version.rb +1 -1
- data/spec/lib/simple_time_series_spec.rb +9 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b73fd7c9b64515cb0d5c39ec11df549bd0f1ae4
|
4
|
+
data.tar.gz: 36f02c014942abfc3b83dbd766b1410df5952871
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e71952e875add4b1f8a6801a1f16e6e460b1ba71c0ec61d4101c50835599aaf898a0f617f2962a8352b4febbccfa3cb0012620a241d0fdb0531716f0ddae0f4
|
7
|
+
data.tar.gz: 3a781828fcffcca857d2139ec7719961e7678c06415f564457bfa1a29dc910baafdcafe1b863243bf7ddbcdd160c047645bb392753b0f7a9f3c4513643bb8496
|
data/README.md
CHANGED
@@ -64,6 +64,15 @@ You can get the same values by calling SimpleTimeSeries#find with two arguments,
|
|
64
64
|
puts "Tasks done on Wednesday: #{my_data.find('tasks_done', 'Wednesday')}" # prints 14
|
65
65
|
puts "Tasks done on 2014-01-05: #{my_data.find('tasks_done', '2014-01-05')}" # prints 3
|
66
66
|
|
67
|
+
You can also get ranges of values using SimpleTimeSeries#find with three arguments: 1) data_var name; 2) start time_var value; and, 3) end time_var value:
|
68
|
+
|
69
|
+
my_data.find('pizzas', 'Tuesday', 'Thursday') # returns [1, 0, 0.5]
|
70
|
+
my_data.find('pizzas', 'Thursday', '2014-01-07') # returns [0.5, 0, 2]
|
71
|
+
my_data.find('miles', 'Saturday', '2014-01-07') # returns 2.3 (a value, not an array, because the start/end dates are the same)
|
72
|
+
my_data.find('miles', 'Sunday', '2014-01-07') # returns [2.2, 3.1, 0.0, 4.3, 1.2, 12.2, 2.3]
|
73
|
+
my_data.find('miles', 'Jan 2, 2014','2014-01-06') # returns [3.1, 0.0, 4.3, 1.2, 12.2]
|
74
|
+
my_data.find('tasks_done', '2014-01-02', 'Friday') # returns [3, 0, 14, 3, 11]
|
75
|
+
|
67
76
|
You can view all the values associated with any variable:
|
68
77
|
|
69
78
|
my_data.miles # prints [2.2, 3.1, 0.0, 4.3, 1.2, 12.2, 2.3]
|
@@ -206,9 +215,8 @@ This began as a simple code example for a collague who had programmed something
|
|
206
215
|
|
207
216
|
## Todo
|
208
217
|
|
209
|
-
1. Enable
|
210
|
-
2. Enable range
|
211
|
-
3. Enable setting values for a range via data_var[start_time, end_time]=
|
218
|
+
1. Enable range extraction via data_var[start_time, end_time]. This currently works as data_var_subset(start_time, end_time) and data_var_diff(), data_var_cumsum(), etc. but would be nice to grab subsets using array ranges.
|
219
|
+
2. Enable setting values for a range via data_var[start_time, end_time]=. You can do this with data_var_subset_set(start_time, end_time), but it would be nice to make this work using array ranges.
|
212
220
|
|
213
221
|
## Acknowledgements
|
214
222
|
|
@@ -9,8 +9,12 @@ class SimpleTimeSeries
|
|
9
9
|
define_time_methods_and_set_values
|
10
10
|
end
|
11
11
|
|
12
|
-
def find(what, date)
|
13
|
-
|
12
|
+
def find(what, date, end_date=nil)
|
13
|
+
if end_date
|
14
|
+
send (what + '_on').to_sym, date, end_date
|
15
|
+
else
|
16
|
+
send (what + '_on').to_sym, date
|
17
|
+
end
|
14
18
|
end
|
15
19
|
|
16
20
|
def current(what)
|
@@ -74,13 +78,19 @@ class SimpleTimeSeries
|
|
74
78
|
return answer.length == 1 ? answer[0] : answer
|
75
79
|
end
|
76
80
|
end
|
77
|
-
define_method(var_on) do |
|
81
|
+
define_method(var_on) do |first, last=nil|
|
78
82
|
time_vars.each do |tv_key, tv_val|
|
79
83
|
# tv_key is something like 'dows' or 'dates'
|
80
84
|
# tv_val is an array of associated values
|
81
|
-
|
85
|
+
start_idx = index_of_date_value(first) || 0
|
86
|
+
last_idx = index_of_date_value(last) || (first.nil? ? -1 : start_idx)
|
87
|
+
if start_idx != last_idx #&& tv_val.include?(last)
|
88
|
+
return eval(var)[start_idx..last_idx]
|
89
|
+
elsif tv_val.include?(first)
|
90
|
+
return eval(var)[start_idx]
|
91
|
+
end
|
82
92
|
end
|
83
|
-
raise "Can't find #{var_on} for #{
|
93
|
+
raise "Can't find #{var_on} for #{first}"
|
84
94
|
end
|
85
95
|
end
|
86
96
|
instance_variable_set("@#{var}", vals) if vals
|
@@ -48,6 +48,15 @@ describe SimpleTimeSeries do
|
|
48
48
|
@my_data.find('tasks_done', '2014-01-02').should == 3
|
49
49
|
end
|
50
50
|
|
51
|
+
it "creates a #find method for finding any data values for a range of observations" do
|
52
|
+
@my_data.find('pizzas', 'Tuesday', 'Thursday').should == [1, 0, 0.5]
|
53
|
+
@my_data.find('pizzas', 'Thursday', '2014-01-07').should == [0.5, 0, 2]
|
54
|
+
@my_data.find('miles', 'Saturday', '2014-01-07').should == 2.3
|
55
|
+
@my_data.find('miles', 'Sunday', '2014-01-07').should == [2.2, 3.1, 0.0, 4.3, 1.2, 12.2, 2.3]
|
56
|
+
@my_data.find('miles', 'Jan 2, 2014','2014-01-06').should == [3.1, 0.0, 4.3, 1.2, 12.2]
|
57
|
+
@my_data.find('tasks_done', '2014-01-02', 'Friday').should == [3, 0, 14, 3, 11]
|
58
|
+
end
|
59
|
+
|
51
60
|
it "creates setter methods for updating a data series" do
|
52
61
|
@my_data.pizzas_on('Tuesday').should == 1
|
53
62
|
@my_data.pizzas = [10, 11, 12, 13, 14, 15, 16]
|