daru 0.1.4.1 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/.travis.yml +3 -0
- data/CONTRIBUTING.md +27 -3
- data/Guardfile +7 -0
- data/History.md +39 -1
- data/README.md +1 -1
- data/daru.gemspec +9 -2
- data/lib/daru.rb +4 -1
- data/lib/daru/accessors/gsl_wrapper.rb +93 -91
- data/lib/daru/accessors/nmatrix_wrapper.rb +109 -107
- data/lib/daru/category.rb +22 -15
- data/lib/daru/core/group_by.rb +13 -2
- data/lib/daru/core/merge.rb +37 -31
- data/lib/daru/core/query.rb +10 -2
- data/lib/daru/dataframe.rb +95 -34
- data/lib/daru/date_time/index.rb +15 -16
- data/lib/daru/date_time/offsets.rb +14 -11
- data/lib/daru/formatters/table.rb +2 -2
- data/lib/daru/index/categorical_index.rb +201 -0
- data/lib/daru/index/index.rb +289 -0
- data/lib/daru/index/multi_index.rb +266 -0
- data/lib/daru/maths/statistics/vector.rb +13 -9
- data/lib/daru/monkeys.rb +0 -7
- data/lib/daru/plotting/gruff/category.rb +1 -0
- data/lib/daru/plotting/gruff/dataframe.rb +3 -3
- data/lib/daru/plotting/nyaplot/dataframe.rb +1 -1
- data/lib/daru/vector.rb +36 -21
- data/lib/daru/version.rb +1 -1
- data/spec/accessors/array_wrapper_spec.rb +3 -0
- data/spec/accessors/{wrappers_spec.rb → gsl_wrapper_spec.rb} +0 -35
- data/spec/accessors/nmatrix_wrapper_spec.rb +32 -0
- data/spec/{categorical_spec.rb → category_spec.rb} +3 -0
- data/spec/core/group_by_spec.rb +17 -1
- data/spec/core/merge_spec.rb +38 -1
- data/spec/core/query_spec.rb +5 -0
- data/spec/dataframe_spec.rb +230 -57
- data/spec/date_time/offsets_spec.rb +84 -3
- data/spec/formatters/table_formatter_spec.rb +9 -0
- data/spec/index/categorical_index_spec.rb +2 -0
- data/spec/index/index_spec.rb +17 -2
- data/spec/{math → maths}/arithmetic/dataframe_spec.rb +0 -0
- data/spec/{math → maths}/arithmetic/vector_spec.rb +0 -0
- data/spec/{math → maths}/statistics/dataframe_spec.rb +1 -1
- data/spec/{math → maths}/statistics/vector_spec.rb +7 -12
- data/spec/plotting/gruff/category_spec.rb +44 -0
- data/spec/plotting/gruff/dataframe_spec.rb +84 -0
- data/spec/plotting/gruff/vector_spec.rb +70 -0
- data/spec/plotting/nyaplot/category_spec.rb +51 -0
- data/spec/plotting/{dataframe_spec.rb → nyaplot/dataframe_spec.rb} +0 -83
- data/spec/plotting/nyaplot/vector_spec.rb +66 -0
- data/spec/spec_helper.rb +3 -2
- data/spec/vector_spec.rb +68 -1
- metadata +53 -24
- data/lib/daru/index.rb +0 -761
- data/spec/plotting/vector_spec.rb +0 -230
@@ -1,230 +0,0 @@
|
|
1
|
-
require 'spec_helper.rb'
|
2
|
-
|
3
|
-
describe Daru::Vector, 'plotting' do
|
4
|
-
let(:vector) { Daru::Vector.new([11, 22, 33], index: [:a, :b, :c]) }
|
5
|
-
let(:plot) { instance_double('Nyaplot::Plot') }
|
6
|
-
let(:diagram) { instance_double('Nyaplot::Diagram') }
|
7
|
-
|
8
|
-
before do
|
9
|
-
Daru.plotting_library = :nyaplot
|
10
|
-
allow(Nyaplot::Plot).to receive(:new).and_return(plot)
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'plots the vector' do
|
14
|
-
expect(plot).to receive(:add).with(:box, [11, 22, 33]).ordered
|
15
|
-
expect(plot).to receive(:show).ordered
|
16
|
-
|
17
|
-
vector.plot(type: :box)
|
18
|
-
end
|
19
|
-
|
20
|
-
context 'scatter' do
|
21
|
-
it 'is default type' do
|
22
|
-
expect(plot).to receive(:add).with(:scatter, instance_of(Array), instance_of(Array)).ordered
|
23
|
-
expect(plot).to receive(:show).ordered
|
24
|
-
|
25
|
-
vector.plot
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'sets x_axis to 0...size' do
|
29
|
-
expect(plot).to receive(:add).with(:scatter, [0, 1, 2], [11, 22, 33]).ordered
|
30
|
-
expect(plot).to receive(:show).ordered
|
31
|
-
|
32
|
-
vector.plot(type: :scatter)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
[:box, :histogram].each do |type|
|
37
|
-
context type.to_s do
|
38
|
-
it 'does not set x axis' do
|
39
|
-
expect(plot).to receive(:add).with(type, [11, 22, 33]).ordered
|
40
|
-
expect(plot).to receive(:show).ordered
|
41
|
-
|
42
|
-
vector.plot(type: type)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
[:bar, :line].each do |type| # FIXME: what other types 2D plot could have?..
|
48
|
-
context type.to_s do
|
49
|
-
it 'sets x axis to index' do
|
50
|
-
expect(plot).to receive(:add).with(type, [:a, :b, :c], [11, 22, 33]).ordered
|
51
|
-
expect(plot).to receive(:show).ordered
|
52
|
-
|
53
|
-
vector.plot(type: type)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
context 'with block provided' do
|
59
|
-
it 'yields plot and diagram' do
|
60
|
-
expect(plot).to receive(:add).with(:box, [11, 22, 33]).ordered.and_return(diagram)
|
61
|
-
expect(plot).to receive(:show).ordered
|
62
|
-
|
63
|
-
expect { |b| vector.plot(type: :box, &b) }.to yield_with_args(plot, diagram)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
describe Daru::Vector, 'plotting category' do
|
69
|
-
let(:plot) { instance_double('Nyaplot::Plot') }
|
70
|
-
let(:diagram) { instance_double('Nyaplot::Diagram') }
|
71
|
-
let(:dv) do
|
72
|
-
Daru::Vector.new ['III']*10 + ['II']*5 + ['I']*5,
|
73
|
-
type: :category,
|
74
|
-
categories: ['I', 'II', 'III']
|
75
|
-
end
|
76
|
-
before do
|
77
|
-
Daru.plotting_library = :nyaplot
|
78
|
-
allow(Nyaplot::Plot).to receive(:new).and_return(plot)
|
79
|
-
end
|
80
|
-
context 'bar' do
|
81
|
-
it 'plots bar graph taking a block' do
|
82
|
-
expect(plot).to receive(:add).with(:bar, ['I', 'II', 'III'], [5, 5, 10])
|
83
|
-
expect(plot).to receive :x_label
|
84
|
-
expect(plot).to receive :y_label
|
85
|
-
expect(plot).to receive(:show)
|
86
|
-
dv.plot(type: :bar) do |p|
|
87
|
-
p.x_label 'Categories'
|
88
|
-
p.y_label 'Frequency'
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
it 'plots bar graph without taking a block' do
|
93
|
-
expect(plot).to receive(:add).with(:bar, ["I", "II", "III"], [5, 5, 10])
|
94
|
-
expect(plot).to receive(:show)
|
95
|
-
dv.plot(type: :bar)
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'plots bar graph with percentage' do
|
99
|
-
expect(plot).to receive(:add).with(:bar, ["I", "II", "III"], [25, 25, 50])
|
100
|
-
expect(plot).to receive(:yrange).with [0, 100]
|
101
|
-
expect(plot).to receive(:show)
|
102
|
-
dv.plot(type: :bar, method: :percentage)
|
103
|
-
end
|
104
|
-
|
105
|
-
it 'plots bar graph with fraction' do
|
106
|
-
expect(plot).to receive(:add).with(:bar, ["I", "II", "III"], [0.25, 0.25, 0.50])
|
107
|
-
expect(plot).to receive(:yrange).with [0, 1]
|
108
|
-
expect(plot).to receive(:show)
|
109
|
-
dv.plot(type: :bar, method: :fraction)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
context 'other type' do
|
114
|
-
it { expect { dv.plot(type: :scatter) }.to raise_error ArgumentError }
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
describe Daru::Vector, 'plotting vector with gruff' do
|
119
|
-
let(:dv) { Daru::Vector.new [1, 2, 3] }
|
120
|
-
before { Daru.plotting_library = :gruff }
|
121
|
-
|
122
|
-
context 'line' do
|
123
|
-
let(:plot) { instance_double 'Gruff::Line' }
|
124
|
-
before { allow(Gruff::Line).to receive(:new).and_return(plot) }
|
125
|
-
|
126
|
-
it 'plots line graph without block' do
|
127
|
-
expect(plot).to receive(:labels=)
|
128
|
-
expect(plot).to receive(:data)
|
129
|
-
dv.plot type: :line
|
130
|
-
end
|
131
|
-
|
132
|
-
it 'plots line graph with block' do
|
133
|
-
expect(plot).to receive :labels=
|
134
|
-
expect(plot).to receive :data
|
135
|
-
expect(plot).to receive :title=
|
136
|
-
dv.plot(type: :line) { |p| p.title = 'hello' }
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
context 'bar' do
|
141
|
-
let(:plot) { instance_double 'Gruff::Bar' }
|
142
|
-
before { allow(Gruff::Bar).to receive(:new).and_return(plot) }
|
143
|
-
|
144
|
-
it 'plots bar graph' do
|
145
|
-
expect(plot).to receive :labels=
|
146
|
-
expect(plot).to receive :data
|
147
|
-
dv.plot type: :bar
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
context 'pie' do
|
152
|
-
let(:plot) { instance_double 'Gruff::Pie' }
|
153
|
-
before { allow(Gruff::Pie).to receive(:new).and_return(plot) }
|
154
|
-
|
155
|
-
it 'plots pie graph' do
|
156
|
-
expect(plot).to receive(:data).exactly(3).times
|
157
|
-
dv.plot type: :pie
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
context 'scatter' do
|
162
|
-
let(:plot) { instance_double 'Gruff::Scatter' }
|
163
|
-
before { allow(Gruff::Scatter).to receive(:new).and_return(plot) }
|
164
|
-
|
165
|
-
it 'plots scatter graph' do
|
166
|
-
expect(plot).to receive :data
|
167
|
-
dv.plot type: :scatter
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
context 'sidebar' do
|
172
|
-
let(:plot) { instance_double 'Gruff::SideBar' }
|
173
|
-
before { allow(Gruff::SideBar).to receive(:new).and_return(plot) }
|
174
|
-
|
175
|
-
it 'plots sidebar' do
|
176
|
-
expect(plot).to receive :labels=
|
177
|
-
expect(plot).to receive(:data).exactly(3).times
|
178
|
-
dv.plot type: :sidebar
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
context 'invalid type' do
|
183
|
-
it { expect { dv.plot type: :lol }.to raise_error ArgumentError }
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
describe Daru::Vector, 'plotting category vector with gruff' do
|
188
|
-
before { Daru.plotting_library = :gruff }
|
189
|
-
let(:dv) { Daru::Vector.new [1, 2, 3], type: :category }
|
190
|
-
|
191
|
-
context 'bar' do
|
192
|
-
let(:plot) { instance_double 'Gruff::Bar' }
|
193
|
-
before { allow(Gruff::Bar).to receive(:new).and_return(plot) }
|
194
|
-
it 'plots bar graph' do
|
195
|
-
expect(plot).to receive :labels=
|
196
|
-
expect(plot).to receive :data
|
197
|
-
dv.plot type: :bar
|
198
|
-
end
|
199
|
-
|
200
|
-
it 'plots bar graph with block' do
|
201
|
-
expect(plot).to receive :labels=
|
202
|
-
expect(plot).to receive :data
|
203
|
-
expect(plot).to receive :title=
|
204
|
-
dv.plot(type: :bar) { |p| p.title = 'hello' }
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
context 'pie' do
|
209
|
-
let(:plot) { instance_double 'Gruff::Pie' }
|
210
|
-
before { allow(Gruff::Pie).to receive(:new).and_return(plot) }
|
211
|
-
it 'plots pie graph' do
|
212
|
-
expect(plot).to receive(:data).exactly(3).times
|
213
|
-
dv.plot type: :pie
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
context 'sidebar' do
|
218
|
-
let(:plot) { instance_double 'Gruff::SideBar' }
|
219
|
-
before { allow(Gruff::SideBar).to receive(:new).and_return(plot) }
|
220
|
-
it 'plots sidebar graph' do
|
221
|
-
expect(plot).to receive :labels=
|
222
|
-
expect(plot).to receive(:data).exactly(3).times
|
223
|
-
dv.plot type: :sidebar
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
context 'invalid type' do
|
228
|
-
it { expect { dv.plot type: :lol }.to raise_error ArgumentError }
|
229
|
-
end
|
230
|
-
end
|