rover-df 0.3.1 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -0
- data/README.md +60 -2
- data/lib/rover/data_frame.rb +11 -0
- data/lib/rover/vector.rb +80 -6
- data/lib/rover/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c77203874c704a18978e6a2483a1718c65fc96c47ef4dbe178a23bcd8ea6ce32
|
4
|
+
data.tar.gz: 24f04572c8197898387037c6800f487066ad4e56a35ef31df1877b6aef442fcd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 383e162cd6f62d1d409b869081f4ba97025dd297567a01d300672451a0883f90464f1396b348b6991d1b99a383d4d328f33f8c7cd560e810c96e0ed2f231b688
|
7
|
+
data.tar.gz: 45bb86dfc58172021e7fdef8677f74bbb32075bfe15022e6c0cfe2ddbae0be9b0d1909f5ff42a7792a7863d54bb53afeb309610d22ae0fc02f93f9026c2ab782
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
## 0.3.4 (2022-07-12)
|
2
|
+
|
3
|
+
- Added `cbrt`, `erf`, `erfc`, and `hypot` methods to vectors
|
4
|
+
- Added `frexp` and `ldexp` methods to vectors
|
5
|
+
- Added `base` argument to `log` method
|
6
|
+
|
7
|
+
## 0.3.3 (2022-07-11)
|
8
|
+
|
9
|
+
- Added `ln`, `log`, `log10`, and `log2` methods to vectors
|
10
|
+
- Added `exp` and `exp2` methods to vectors
|
11
|
+
- Added `sin`, `cos`, `tan`, `asin`, `acos`, and `atan` methods to vectors
|
12
|
+
- Added `sinh`, `cosh`, `tanh`, `asinh`, `acosh`, and `atanh` methods to vectors
|
13
|
+
- Added `round`, `ceil`, and `floor` methods to vectors
|
14
|
+
- Added `empty?` method to vectors
|
15
|
+
- Added `rename` method to data frames
|
16
|
+
|
17
|
+
## 0.3.2 (2022-07-10)
|
18
|
+
|
19
|
+
- Added `sqrt` method to vectors
|
20
|
+
- Improved numeric operations between scalars and vectors
|
21
|
+
- Improved performance of `tally`
|
22
|
+
|
1
23
|
## 0.3.1 (2022-05-18)
|
2
24
|
|
3
25
|
- Added `to!` to vectors
|
data/README.md
CHANGED
@@ -191,6 +191,62 @@ df[:a] * 5
|
|
191
191
|
df[:a] / 5
|
192
192
|
df[:a] % 5
|
193
193
|
df[:a] ** 2
|
194
|
+
df[:a].sqrt
|
195
|
+
df[:a].cbrt
|
196
|
+
df[:a].abs
|
197
|
+
```
|
198
|
+
|
199
|
+
Rounding
|
200
|
+
|
201
|
+
```ruby
|
202
|
+
df[:a].round
|
203
|
+
df[:a].ceil
|
204
|
+
df[:a].floor
|
205
|
+
```
|
206
|
+
|
207
|
+
Logarithm
|
208
|
+
|
209
|
+
```ruby
|
210
|
+
df[:a].ln # or log
|
211
|
+
df[:a].log(5)
|
212
|
+
df[:a].log10
|
213
|
+
df[:a].log2
|
214
|
+
```
|
215
|
+
|
216
|
+
Exponentiation
|
217
|
+
|
218
|
+
```ruby
|
219
|
+
df[:a].exp
|
220
|
+
df[:a].exp2
|
221
|
+
```
|
222
|
+
|
223
|
+
Trigonometric functions
|
224
|
+
|
225
|
+
```ruby
|
226
|
+
df[:a].sin
|
227
|
+
df[:a].cos
|
228
|
+
df[:a].tan
|
229
|
+
df[:a].asin
|
230
|
+
df[:a].acos
|
231
|
+
df[:a].atan
|
232
|
+
```
|
233
|
+
|
234
|
+
Hyperbolic functions
|
235
|
+
|
236
|
+
```ruby
|
237
|
+
df[:a].sinh
|
238
|
+
df[:a].cosh
|
239
|
+
df[:a].tanh
|
240
|
+
df[:a].asinh
|
241
|
+
df[:a].acosh
|
242
|
+
df[:a].atanh
|
243
|
+
```
|
244
|
+
|
245
|
+
Error function
|
246
|
+
|
247
|
+
```ruby
|
248
|
+
df[:a].erf
|
249
|
+
df[:a].erfc
|
194
250
|
```
|
195
251
|
|
196
252
|
Summary statistics
|
@@ -323,9 +379,11 @@ df.delete(:a)
|
|
323
379
|
df.except!(:a, :b)
|
324
380
|
```
|
325
381
|
|
326
|
-
Rename
|
382
|
+
Rename columns
|
327
383
|
|
328
384
|
```ruby
|
385
|
+
df.rename(a: :new_a, b: :new_b)
|
386
|
+
# or
|
329
387
|
df[:new_a] = df.delete(:a)
|
330
388
|
```
|
331
389
|
|
@@ -456,7 +514,7 @@ df[:a].type
|
|
456
514
|
Change the type of a column
|
457
515
|
|
458
516
|
```ruby
|
459
|
-
df[:a]
|
517
|
+
df[:a].to!(:int32)
|
460
518
|
```
|
461
519
|
|
462
520
|
## History
|
data/lib/rover/data_frame.rb
CHANGED
@@ -136,6 +136,17 @@ module Rover
|
|
136
136
|
alias_method :names, :keys
|
137
137
|
alias_method :vector_names, :keys
|
138
138
|
|
139
|
+
def rename(mapping)
|
140
|
+
mapping.each_key do |k|
|
141
|
+
check_column(k)
|
142
|
+
end
|
143
|
+
# use transform_keys! to preserve order
|
144
|
+
@vectors.transform_keys! do |k|
|
145
|
+
mapping[k] || k
|
146
|
+
end
|
147
|
+
self
|
148
|
+
end
|
149
|
+
|
139
150
|
def delete(key)
|
140
151
|
@vectors.delete(key)
|
141
152
|
end
|
data/lib/rover/vector.rb
CHANGED
@@ -21,6 +21,8 @@ module Rover
|
|
21
21
|
uint: Numo::UInt64
|
22
22
|
}
|
23
23
|
|
24
|
+
NOT_SET = Object.new
|
25
|
+
|
24
26
|
def initialize(data, type: nil)
|
25
27
|
@data = cast_data(data, type: type)
|
26
28
|
raise ArgumentError, "Bad size: #{@data.shape}" unless @data.ndim == 1
|
@@ -87,6 +89,7 @@ module Rover
|
|
87
89
|
if v.is_a?(Vector)
|
88
90
|
Vector.new(v.to_numo.mask(@data))
|
89
91
|
else
|
92
|
+
# TODO return vector unless v is an integer in 0.4.0
|
90
93
|
@data[v]
|
91
94
|
end
|
92
95
|
end
|
@@ -184,13 +187,9 @@ module Rover
|
|
184
187
|
Vector.new(@data.to_a.reject(&block))
|
185
188
|
end
|
186
189
|
|
190
|
+
# use Ruby tally for performance
|
187
191
|
def tally
|
188
|
-
|
189
|
-
@data.each do |v|
|
190
|
-
result[v] += 1
|
191
|
-
end
|
192
|
-
result.default = nil
|
193
|
-
result
|
192
|
+
@data.to_a.tally
|
194
193
|
end
|
195
194
|
|
196
195
|
def sort
|
@@ -201,6 +200,67 @@ module Rover
|
|
201
200
|
Vector.new(@data.abs)
|
202
201
|
end
|
203
202
|
|
203
|
+
def round(ndigits = 0)
|
204
|
+
if ndigits == 0
|
205
|
+
Vector.new(@data.round)
|
206
|
+
else
|
207
|
+
# TODO pass type
|
208
|
+
Vector.new(@data.to_a.map { |v| v.round(ndigits) })
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
def ceil(ndigits = 0)
|
213
|
+
if ndigits == 0
|
214
|
+
Vector.new(@data.ceil)
|
215
|
+
else
|
216
|
+
# TODO pass type
|
217
|
+
Vector.new(@data.to_a.map { |v| v.ceil(ndigits) })
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
def floor(ndigits = 0)
|
222
|
+
if ndigits == 0
|
223
|
+
Vector.new(@data.floor)
|
224
|
+
else
|
225
|
+
# TODO pass type
|
226
|
+
Vector.new(@data.to_a.map { |v| v.floor(ndigits) })
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
[:sqrt, :cbrt, :sin, :cos, :tan, :asin, :acos, :atan, :sinh, :cosh, :tanh, :asinh, :acosh, :atanh, :log2, :log10, :exp, :exp2, :erf, :erfc].each do |m|
|
231
|
+
define_method(m) do
|
232
|
+
Vector.new(Numo::NMath.send(m, @data))
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
def log(base = NOT_SET)
|
237
|
+
if base == NOT_SET
|
238
|
+
Vector.new(Numo::NMath.log(@data))
|
239
|
+
else
|
240
|
+
type = self.type == :float32 ? :float32 : :float64
|
241
|
+
Vector.new(@data.to_a.map { |v| Math.log(v, base) }, type: type)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def ln
|
246
|
+
log
|
247
|
+
end
|
248
|
+
|
249
|
+
def hypot(y)
|
250
|
+
y = y.to_numo if y.is_a?(Rover::Vector)
|
251
|
+
Vector.new(Numo::NMath.hypot(@data, y))
|
252
|
+
end
|
253
|
+
|
254
|
+
def frexp
|
255
|
+
fraction, exponent = Numo::NMath.frexp(@data)
|
256
|
+
[Vector.new(fraction), Vector.new(exponent)]
|
257
|
+
end
|
258
|
+
|
259
|
+
def ldexp(exponent)
|
260
|
+
exponent = exponent.to_numo if exponent.is_a?(Rover::Vector)
|
261
|
+
Vector.new(Numo::NMath.ldexp(@data, exponent))
|
262
|
+
end
|
263
|
+
|
204
264
|
def each(&block)
|
205
265
|
@data.each(&block)
|
206
266
|
end
|
@@ -255,10 +315,15 @@ module Rover
|
|
255
315
|
to_a.any?(&block)
|
256
316
|
end
|
257
317
|
|
318
|
+
def empty?
|
319
|
+
size == 0
|
320
|
+
end
|
321
|
+
|
258
322
|
def zip(other, &block)
|
259
323
|
to_a.zip(other.to_a, &block)
|
260
324
|
end
|
261
325
|
|
326
|
+
# TODO return element instead of vector if no argument in 0.4.0
|
262
327
|
def first(n = 1)
|
263
328
|
if n >= size
|
264
329
|
Vector.new(@data)
|
@@ -267,6 +332,7 @@ module Rover
|
|
267
332
|
end
|
268
333
|
end
|
269
334
|
|
335
|
+
# TODO return element instead of vector if no argument in 0.4.0
|
270
336
|
def last(n = 1)
|
271
337
|
if n >= size
|
272
338
|
Vector.new(@data)
|
@@ -350,6 +416,14 @@ module Rover
|
|
350
416
|
super
|
351
417
|
end
|
352
418
|
|
419
|
+
def coerce(other)
|
420
|
+
if other.is_a?(Numeric)
|
421
|
+
[Vector.new([other]), self]
|
422
|
+
else
|
423
|
+
raise TypeError, "#{self.class} can't be coerced into #{other.class}"
|
424
|
+
end
|
425
|
+
end
|
426
|
+
|
353
427
|
def cast_data(data, type: nil)
|
354
428
|
numo_type = numo_type(type) if type
|
355
429
|
|
data/lib/rover/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rover-df
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: numo-narray
|