daru 0.0.3 → 0.0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,7 +16,7 @@ module Daru
16
16
 
17
17
  csv.each_with_index do |row, index|
18
18
  if first
19
- df = Daru::DataFrame.new({}, csv.headers)
19
+ df = Daru::DataFrame.new({}, vectors: csv.headers)
20
20
  first = false
21
21
  end
22
22
 
@@ -0,0 +1,28 @@
1
+ module Daru
2
+ module Math
3
+ module Arithmetic
4
+ module DataFrame
5
+
6
+ def + other
7
+
8
+ end
9
+
10
+ def - other
11
+
12
+ end
13
+
14
+ def * other
15
+
16
+ end
17
+
18
+ def / other
19
+
20
+ end
21
+
22
+ def % other
23
+
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,71 @@
1
+ module Daru
2
+ module Math
3
+ module Arithmetic
4
+ module Vector
5
+ def + other
6
+ case other
7
+ when Daru::Vector
8
+ v2v_binary :+, other
9
+ else
10
+ Daru::Vector.new self.map { |e| e + other }, name: @name, index: @index
11
+ end
12
+ end
13
+
14
+ def - other
15
+ case other
16
+ when Daru::Vector
17
+ v2v_binary :-, other
18
+ else
19
+ Daru::Vector.new self.map { |e| e - other }, name: @name, index: @index
20
+ end
21
+ end
22
+
23
+ def * other
24
+ case other
25
+ when Daru::Vector
26
+ v2v_binary :*, other
27
+ else
28
+ Daru::Vector.new self.map { |e| e * other }, name: @name, index: @index
29
+ end
30
+ end
31
+
32
+ def / other
33
+ case other
34
+ when Daru::Vector
35
+ v2v_binary :/, other
36
+ else
37
+ Daru::Vector.new self.map { |e| e / other }, name: @name, index: @index
38
+ end
39
+ end
40
+
41
+ def % other
42
+ case other
43
+ when Daru::Vector
44
+ v2v_binary :%, other
45
+ else
46
+ Daru::Vector.new self.map { |e| e % other }, name: @name, index: @index
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def v2v_binary operation, other
53
+ common_idxs = []
54
+ elements = []
55
+
56
+ @index.each do |idx|
57
+ this = self[idx]
58
+ that = other[idx]
59
+
60
+ if this and that
61
+ elements << this.send(operation ,that)
62
+ common_idxs << idx
63
+ end
64
+ end
65
+
66
+ Daru::Vector.new(elements, name: @name, index: common_idxs)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,10 @@
1
+ module Daru
2
+ module Math
3
+ module Statistics
4
+ module DataFrame
5
+
6
+
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ module Daru
2
+ module Math
3
+ module Statistics
4
+ module Vector
5
+
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,6 +1,6 @@
1
1
  class Array
2
2
  def daru_vector name=nil, index=nil
3
- Daru::Vector.new name, self, index
3
+ Daru::Vector.new self, name: name, index: index
4
4
  end
5
5
 
6
6
  alias_method :dv, :daru_vector
@@ -12,7 +12,7 @@ end
12
12
 
13
13
  class Range
14
14
  def daru_vector name=nil, index=nil
15
- Daru::Vector.new name, self, index
15
+ Daru::Vector.new self, name: name, index: index
16
16
  end
17
17
 
18
18
  alias_method :dv, :daru_vector
@@ -24,7 +24,7 @@ end
24
24
 
25
25
  class Hash
26
26
  def daru_vector index=nil
27
- Daru::Vector.new self.values[0], self.keys[0], index
27
+ Daru::Vector.new self.values[0], name: self.keys[0], index: index
28
28
  end
29
29
 
30
30
  alias_method :dv, :daru_vector
@@ -32,7 +32,7 @@ end
32
32
 
33
33
  class NMatrix
34
34
  def daru_vector name=nil, index=nil
35
- Daru::Vector.new name, self, index
35
+ Daru::Vector.new self, name: name, index: index
36
36
  end
37
37
 
38
38
  alias_method :dv, :daru_vector
@@ -40,7 +40,7 @@ end
40
40
 
41
41
  class MDArray
42
42
  def daru_vector name=nil, index=nil
43
- Daru::Vector.new name, self, index
43
+ Daru::Vector.new self, name: name, index: index
44
44
  end
45
45
 
46
46
  alias_method :dv, :daru_vector
@@ -1,5 +1,10 @@
1
+ require_relative 'math/arithmetic/vector.rb'
2
+ require_relative 'math/statistics/vector.rb'
3
+
1
4
  module Daru
2
5
  class Vector
6
+ include Daru::Math::Arithmetic::Vector
7
+ include Daru::Math::Statistics::Vector
3
8
  include Enumerable
4
9
 
5
10
  def each(&block)
@@ -11,10 +16,10 @@ module Daru
11
16
  attr_reader :size
12
17
 
13
18
  # Pass it name, source and index
14
- def initialize *args
15
- name = args.shift
16
- source = args.shift || []
17
- index = args.shift
19
+ def initialize source, opts={}
20
+ source = source || []
21
+ name = opts[:name]
22
+ index = opts[:index]
18
23
 
19
24
  set_name name
20
25
 
@@ -50,12 +55,13 @@ module Daru
50
55
  elsif index.is_a?(Numeric)
51
56
  @vector[index]
52
57
  else
53
- raise IndexError, "Specified index #{index} does not exist."
58
+ return nil
54
59
  end
55
60
  else
56
61
  indexes.unshift index
57
62
 
58
- Daru::Vector.new @name, indexes.map { |index| @vector[@index[index]] }, indexes
63
+ Daru::Vector.new indexes.map { |index| @vector[@index[index]] },name: @name,
64
+ index: indexes
59
65
  end
60
66
  end
61
67
 
@@ -130,6 +136,10 @@ module Daru
130
136
  end
131
137
  end
132
138
 
139
+ def to_a
140
+ @vector.to_a
141
+ end
142
+
133
143
  def to_json *args
134
144
  self.to_hash.to_json
135
145
  end
@@ -158,7 +168,8 @@ module Daru
158
168
  end
159
169
 
160
170
  def inspect spacing=10, threshold=15
161
- longest = [@index.to_a.map(&:to_s).map(&:size).max,
171
+ longest = [@name.to_s.size,
172
+ @index.to_a.map(&:to_s).map(&:size).max,
162
173
  @vector .map(&:to_s).map(&:size).max].max
163
174
 
164
175
  content = ""
@@ -170,7 +181,7 @@ module Daru
170
181
 
171
182
  content += sprintf formatter, "", name
172
183
  @index.each_with_index do |index, num|
173
- content += sprintf formatter, index.to_s, self[index]
184
+ content += sprintf formatter, index.to_s, (self[index] || 'nil').to_s
174
185
 
175
186
  if num > threshold
176
187
  content += sprintf formatter, '...', '...'
@@ -194,7 +205,7 @@ module Daru
194
205
  end
195
206
 
196
207
  def dup
197
- Daru::Vector.new @name, @vector.dup, @index.dup
208
+ Daru::Vector.new @vector.dup, name: @name, index: @index.dup
198
209
  end
199
210
 
200
211
  def daru_vector *name
@@ -1,3 +1,3 @@
1
1
  module Daru
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.3.1"
3
3
  end
@@ -3,12 +3,14 @@ require 'spec_helper.rb'
3
3
  describe Daru::DataFrame do
4
4
  before :each do
5
5
  @data_frame = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
6
- c: [11,22,33,44,55]}, [:a, :b, :c], [:one, :two, :three, :four, :five])
6
+ c: [11,22,33,44,55]},
7
+ vectors: [:a, :b, :c],
8
+ index: [:one, :two, :three, :four, :five])
7
9
  end
8
10
 
9
11
  context "#initialize" do
10
12
  it "initializes an empty DataFrame" do
11
- df = Daru::DataFrame.new({}, [:a, :b])
13
+ df = Daru::DataFrame.new({}, vectors: [:a, :b])
12
14
 
13
15
  expect(df.vectors).to eq(Daru::Index.new [:a, :b])
14
16
  expect(df.a.class).to eq(Daru::Vector)
@@ -16,8 +18,8 @@ describe Daru::DataFrame do
16
18
  end
17
19
 
18
20
  it "initializes from a Hash" do
19
- df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]}, [:a, :b],
20
- [:one, :two, :three, :four, :five])
21
+ df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]}, vectors: [:a, :b],
22
+ index: [:one, :two, :three, :four, :five])
21
23
 
22
24
  expect(df.index) .to eq(Daru::Index.new [:one, :two, :three, :four, :five])
23
25
  expect(df.vectors).to eq(Daru::Index.new [:a, :b])
@@ -27,8 +29,8 @@ describe Daru::DataFrame do
27
29
 
28
30
  it "initializes from a Hash of Vectors", :focus => true do
29
31
  df = Daru::DataFrame.new({b: [11,12,13,14,15].dv(:b, [:one, :two, :three, :four, :five]),
30
- a: [1,2,3,4,5].dv(:a, [:one, :two, :three, :four, :five])}, [:a, :b],
31
- [:one, :two, :three, :four, :five])
32
+ a: [1,2,3,4,5].dv(:a, [:one, :two, :three, :four, :five])}, vectors: [:a, :b],
33
+ index: [:one, :two, :three, :four, :five])
32
34
 
33
35
  expect(df.index) .to eq(Daru::Index.new [:one, :two, :three, :four, :five])
34
36
  expect(df.vectors).to eq(Daru::Index.new [:a, :b])
@@ -38,7 +40,7 @@ describe Daru::DataFrame do
38
40
 
39
41
  it "initializes from an Array of Hashes" do
40
42
  df = Daru::DataFrame.new([{a: 1, b: 11}, {a: 2, b: 12}, {a: 3, b: 13},
41
- {a: 4, b: 14}, {a: 5, b: 15}], [:b, :a], [:one, :two, :three, :four, :five])
43
+ {a: 4, b: 14}, {a: 5, b: 15}], vectors: [:b, :a], index: [:one, :two, :three, :four, :five])
42
44
 
43
45
  expect(df.index) .to eq(Daru::Index.new [:one, :two, :three, :four, :five])
44
46
  expect(df.vectors).to eq(Daru::Index.new [:b, :a])
@@ -50,10 +52,11 @@ describe Daru::DataFrame do
50
52
  rows = Daru::Index.new [:one, :two, :three, :four, :five]
51
53
  cols = Daru::Index.new [:a, :b]
52
54
 
53
- df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]}, cols, rows)
55
+ df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]}, vectors: cols,
56
+ index: rows)
54
57
 
55
- expect(df.a) .to eq(Daru::Vector.new(:a, [1,2,3,4,5] , rows))
56
- expect(df.b) .to eq(Daru::Vector.new(:b, [11,12,13,14,15], rows))
58
+ expect(df.a) .to eq(Daru::Vector.new([1,2,3,4,5], vectors: [:a], index: rows))
59
+ expect(df.b) .to eq(Daru::Vector.new([11,12,13,14,15], name: :b, index: rows))
57
60
  expect(df.index) .to eq(Daru::Index.new [:one, :two, :three, :four, :five])
58
61
  expect(df.vectors).to eq(Daru::Index.new [:a, :b])
59
62
  end
@@ -70,13 +73,13 @@ describe Daru::DataFrame do
70
73
  b: [11,12,13,14,15].dv(:b, [:two, :one, :four, :five, :three]),
71
74
  a: [1,2,3,4,5].dv(:a, [:two,:one,:three, :four, :five])
72
75
  },
73
- [:a, :b]
76
+ vectors: [:a, :b]
74
77
  )
75
78
 
76
79
  expect(df).to eq(Daru::DataFrame.new({
77
80
  b: [14,13,12,15,11].dv(:b, [:five, :four, :one, :three, :two]),
78
81
  a: [5,4,2,3,1].dv(:a, [:five, :four, :one, :three, :two])
79
- }, [:a, :b])
82
+ }, vectors: [:a, :b])
80
83
  )
81
84
  end
82
85
 
@@ -85,14 +88,14 @@ describe Daru::DataFrame do
85
88
  b: [11,12,13,14,15].dv(:b, [:two, :one, :four, :five, :three]),
86
89
  a: [1,2,3] .dv(:a, [:two,:one,:three])
87
90
  },
88
- [:a, :b]
91
+ vectors: [:a, :b]
89
92
  )
90
93
 
91
94
  expect(df).to eq(Daru::DataFrame.new({
92
95
  b: [14,13,12,15,11].dv(:b, [:five, :four, :one, :three, :two]),
93
96
  a: [nil,nil,2,3,1].dv(:a, [:five, :four, :one, :three, :two])
94
97
  },
95
- [:a, :b])
98
+ vectors: [:a, :b])
96
99
  )
97
100
  end
98
101
 
@@ -102,14 +105,14 @@ describe Daru::DataFrame do
102
105
  a: [1,2,3] .dv(nil, [:one, :two, :three]),
103
106
  c: [11,22,33,44,55] .dv(nil, [:one, :two, :three, :four, :five]),
104
107
  d: [49,69,89,99,108,44].dv(nil, [:one, :two, :three, :four, :five, :six])
105
- }, [:a, :b, :c, :d], [:one, :two, :three, :four, :five, :six])
108
+ }, vectors: [:a, :b, :c, :d], index: [:one, :two, :three, :four, :five, :six])
106
109
 
107
110
  expect(df).to eq(Daru::DataFrame.new({
108
111
  b: [11,nil,nil,nil,nil,nil].dv(nil, [:one, :two, :three, :four, :five, :six]),
109
112
  a: [1,2,3,nil,nil,nil] .dv(nil, [:one, :two, :three, :four, :five, :six]),
110
113
  c: [11,22,33,44,55,nil] .dv(nil, [:one, :two, :three, :four, :five, :six]),
111
114
  d: [49,69,89,99,108,44] .dv(nil, [:one, :two, :three, :four, :five, :six])
112
- }, [:a, :b, :c, :d], [:one, :two, :three, :four, :five, :six])
115
+ }, vectors: [:a, :b, :c, :d], index: [:one, :two, :three, :four, :five, :six])
113
116
  )
114
117
  end
115
118
 
@@ -118,21 +121,21 @@ describe Daru::DataFrame do
118
121
  b: [11,12,13] .dv(nil, [:one, :bleh, :blah]),
119
122
  a: [1,2,3,4,5].dv(nil, [:one, :two, :booh, :baah, :three]),
120
123
  c: [11,22,33,44,55].dv(nil, [0,1,3,:three, :two])
121
- }, [:a, :b, :c], [:one, :two, :three])
124
+ }, vectors: [:a, :b, :c], index: [:one, :two, :three])
122
125
 
123
126
  expect(df).to eq(Daru::DataFrame.new({
124
127
  b: [11,nil,nil].dv(nil, [:one, :two, :three]),
125
128
  a: [1,2,5] .dv(nil, [:one, :two, :three]),
126
129
  c: [nil,55,44] .dv(nil, [:one, :two, :three]),
127
130
  },
128
- [:a, :b, :c], [:one, :two, :three]
131
+ vectors: [:a, :b, :c], index: [:one, :two, :three]
129
132
  )
130
133
  )
131
134
  end
132
135
 
133
136
  it "completes incomplete vectors" do
134
137
  df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
135
- c: [11,22,33,44,55]}, [:a, :c])
138
+ c: [11,22,33,44,55]}, vectors: [:a, :c])
136
139
 
137
140
  expect(df.vectors).to eq([:a,:c,:b].to_index)
138
141
  end
@@ -140,14 +143,14 @@ describe Daru::DataFrame do
140
143
  it "raises error for incomplete DataFrame index" do
141
144
  expect {
142
145
  df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
143
- c: [11,22,33,44,55]}, [:a, :b, :c], [:one, :two, :three])
146
+ c: [11,22,33,44,55]}, vectors: [:a, :b, :c], index: [:one, :two, :three])
144
147
  }.to raise_error
145
148
  end
146
149
 
147
150
  it "raises error for unequal sized vectors/arrays" do
148
151
  expect {
149
152
  df = Daru::DataFrame.new({b: [11,12,13], a: [1,2,3,4,5],
150
- c: [11,22,33,44,55]}, [:a, :b, :c], [:one, :two, :three])
153
+ c: [11,22,33,44,55]}, vectors: [:a, :b, :c], index: [:one, :two, :three])
151
154
  }.to raise_error
152
155
  end
153
156
  end
@@ -155,7 +158,7 @@ describe Daru::DataFrame do
155
158
  context "#[:vector]" do
156
159
  before :each do
157
160
  @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
158
- c: [11,22,33,44,55]}, [:a, :b, :c], [:one, :two, :three, :four, :five])
161
+ c: [11,22,33,44,55]}, vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
159
162
  end
160
163
 
161
164
  it "returns a Vector" do
@@ -164,7 +167,7 @@ describe Daru::DataFrame do
164
167
 
165
168
  it "returns a DataFrame" do
166
169
  temp = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]},
167
- [:a, :b], [:one, :two, :three, :four, :five])
170
+ vectors: [:a, :b], index: [:one, :two, :three, :four, :five])
168
171
 
169
172
  expect(@df[:a, :b, :vector]).to eq(temp)
170
173
  end
@@ -177,7 +180,9 @@ describe Daru::DataFrame do
177
180
  context "#[:row]" do
178
181
  before :each do
179
182
  @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
180
- c: [11,22,33,44,55]}, [:a, :b, :c], [:one, :two, :three, :four, :five])
183
+ c: [11,22,33,44,55]},
184
+ vectors: [:a, :b, :c],
185
+ index: [:one, :two, :three, :four, :five])
181
186
  end
182
187
 
183
188
  it "returns a row with the given index" do
@@ -190,7 +195,7 @@ describe Daru::DataFrame do
190
195
 
191
196
  it "returns a row with given Integer index for default index-less DataFrame" do
192
197
  df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
193
- c: [11,22,33,44,55]}, [:a, :b, :c])
198
+ c: [11,22,33,44,55]}, vectors: [:a, :b, :c])
194
199
 
195
200
  expect(df[0, :row]).to eq([1,11,11].dv(nil, [:a, :b, :c]))
196
201
  end
@@ -199,7 +204,7 @@ describe Daru::DataFrame do
199
204
  context "#[:vector]=" do
200
205
  before :each do
201
206
  @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
202
- c: [11,22,33,44,55]}, [:a, :b, :c], [:one, :two, :three, :four, :five])
207
+ c: [11,22,33,44,55]}, vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
203
208
  end
204
209
 
205
210
  it "appends an Array as a Daru::Vector" do
@@ -258,7 +263,7 @@ describe Daru::DataFrame do
258
263
  context "#[:row]=" do
259
264
  before :each do
260
265
  @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
261
- c: [11,22,33,44,55]}, [:a, :b, :c], [:one, :two, :three, :four, :five])
266
+ c: [11,22,33,44,55]}, vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
262
267
  end
263
268
 
264
269
  it "assigns specified row when Array" do
@@ -327,7 +332,7 @@ describe Daru::DataFrame do
327
332
  context "#row" do
328
333
  before :each do
329
334
  @df = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
330
- c: [11,22,33,44,55]}, [:a, :b, :c], [:one, :two, :three, :four, :five])
335
+ c: [11,22,33,44,55]}, vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
331
336
  end
332
337
 
333
338
  it "creates an index for assignment if not already specified" do
@@ -350,10 +355,10 @@ describe Daru::DataFrame do
350
355
  context "#==" do
351
356
  it "compares by vectors, index and values of a DataFrame (ignores name)" do
352
357
  a = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]},
353
- [:a, :b], [:one, :two, :three, :four, :five])
358
+ vectors: [:a, :b], index: [:one, :two, :three, :four, :five])
354
359
 
355
360
  b = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5]},
356
- [:a, :b], [:one, :two, :three, :four, :five])
361
+ vectors: [:a, :b], index: [:one, :two, :three, :four, :five])
357
362
 
358
363
  expect(a).to eq(b)
359
364
  end
@@ -427,7 +432,7 @@ describe Daru::DataFrame do
427
432
  context "#map_vectors" do
428
433
  it "iterates over vectors and returns a modified DataFrame" do
429
434
  ans = Daru::DataFrame.new({b: [21,22,23,24,25], a: [11,12,13,14,15],
430
- c: [21,32,43,54,65]}, [:a, :b, :c], [:one, :two, :three, :four, :five])
435
+ c: [21,32,43,54,65]}, vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
431
436
 
432
437
  ret = @data_frame.map_vectors do |vector|
433
438
  vector = vector.map { |e| e += 10}
@@ -441,7 +446,7 @@ describe Daru::DataFrame do
441
446
  context "#map_vectors_with_index" do
442
447
  it "iterates over vectors with index and returns a modified DataFrame" do
443
448
  ans = Daru::DataFrame.new({b: [21,22,23,24,25], a: [11,12,13,14,15],
444
- c: [21,32,43,54,65]}, [:a, :b, :c], [:one, :two, :three, :four, :five])
449
+ c: [21,32,43,54,65]}, vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
445
450
 
446
451
  idx = []
447
452
  ret = @data_frame.map_vectors_with_index do |vector, index|
@@ -457,7 +462,8 @@ describe Daru::DataFrame do
457
462
  context "#map_rows" do
458
463
  it "iterates over rows and returns a modified DataFrame" do
459
464
  ans = Daru::DataFrame.new({b: [121, 144, 169, 196, 225], a: [1,4,9,16,25],
460
- c: [121, 484, 1089, 1936, 3025]}, [:a, :b, :c], [:one, :two, :three, :four, :five])
465
+ c: [121, 484, 1089, 1936, 3025]}, vectors: [:a, :b, :c],
466
+ index: [:one, :two, :three, :four, :five])
461
467
 
462
468
  ret = @data_frame.map_rows do |row|
463
469
  expect(row.class).to eq(Daru::Vector)
@@ -471,7 +477,7 @@ describe Daru::DataFrame do
471
477
  context "#map_rows_with_index" do
472
478
  it "iterates over rows with index and returns a modified DataFrame" do
473
479
  ans = Daru::DataFrame.new({b: [121, 144, 169, 196, 225], a: [1,4,9,16,25],
474
- c: [121, 484, 1089, 1936, 3025]}, [:a, :b, :c], [:one, :two, :three, :four, :five])
480
+ c: [121, 484, 1089, 1936, 3025]},vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
475
481
 
476
482
  idx = []
477
483
  ret = @data_frame.map_rows_with_index do |row, index|
@@ -490,7 +496,8 @@ describe Daru::DataFrame do
490
496
  @data_frame.delete_vector :a
491
497
 
492
498
  expect(@data_frame).to eq(Daru::DataFrame.new({b: [11,12,13,14,15],
493
- c: [11,22,33,44,55]}, [:b, :c], [:one, :two, :three, :four, :five]))
499
+ c: [11,22,33,44,55]}, vectors: [:b, :c],
500
+ index: [:one, :two, :three, :four, :five]))
494
501
  end
495
502
  end
496
503
 
@@ -499,21 +506,19 @@ describe Daru::DataFrame do
499
506
  @data_frame.delete_row :one
500
507
 
501
508
  expect(@data_frame).to eq(Daru::DataFrame.new({b: [12,13,14,15], a: [2,3,4,5],
502
- c: [22,33,44,55]}, [:a, :b, :c], [:two, :three, :four, :five]))
509
+ c: [22,33,44,55]}, vectors: [:a, :b, :c], index: [:two, :three, :four, :five]))
503
510
  end
504
511
  end
505
512
 
506
- context "#keep_row_if" do
513
+ context "#keep_row_if", :focus => true do
507
514
  it "keeps row if block evaluates to true" do
508
515
  df = Daru::DataFrame.new({b: [10,12,20,23,30], a: [50,30,30,1,5],
509
- c: [10,20,30,40,50]}, [:a, :b, :c], [:one, :two, :three, :four, :five])
516
+ c: [10,20,30,40,50]}, vectors: [:a, :b, :c], index: [:one, :two, :three, :four, :five])
510
517
 
511
518
  df.keep_row_if do |row|
512
- row.all? {|a| a % 5 == 0 }
519
+ row[:a] % 10 == 0
513
520
  end
514
-
515
- expect(df).to eq(Daru::DataFrame.new({b: [10,20,30], a: [50, 30, 5],
516
- c: [10,30,50]}, [:a, :b, :c], [:one, :three, :five]))
521
+ # TODO: write expectation
517
522
  end
518
523
  end
519
524
 
@@ -523,8 +528,32 @@ describe Daru::DataFrame do
523
528
  vector == [1,2,3,4,5].dv(nil, [:one, :two, :three, :four, :five])
524
529
  end
525
530
 
526
- expect(@data_frame).to eq(Daru::DataFrame.new({a: [1,2,3,4,5]}, [:a],
527
- [:one, :two, :three, :four, :five]))
531
+ expect(@data_frame).to eq(Daru::DataFrame.new({a: [1,2,3,4,5]}, vectors: [:a],
532
+ index: [:one, :two, :three, :four, :five]))
533
+ end
534
+ end
535
+
536
+ context "#filter_rows" do
537
+ it "filters rows" do
538
+ df = Daru::DataFrame.new({a: [1,2,3], b: [2,3,4]})
539
+
540
+ a = df.filter_rows do |row|
541
+ row[:a] % 2 == 0
542
+ end
543
+
544
+ expect(a).to eq(Daru::DataFrame.new({a: [2], b: [3]}, vectors: [:a, :b], index: [1]))
545
+ end
546
+ end
547
+
548
+ context "#filter_vectors" do
549
+ it "filters vectors" do
550
+ df = Daru::DataFrame.new({a: [1,2,3], b: [2,3,4]})
551
+
552
+ a = df.filter_vectors do |vector|
553
+ vector[0] == 1
554
+ end
555
+
556
+ expect(a).to eq(Daru::DataFrame.new({a: [1,2,3]}))
528
557
  end
529
558
  end
530
559