rover-df 0.3.0 → 0.3.3
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/CHANGELOG.md +22 -0
- data/README.md +51 -2
- data/lib/rover/data_frame.rb +11 -0
- data/lib/rover/vector.rb +60 -8
- data/lib/rover/version.rb +1 -1
- data/lib/rover.rb +6 -0
- 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: 7a1b47800b1d7e9b84e7a1976f2cfbc551e9dee6a9a0ec39b3759b6564e4e278
|
|
4
|
+
data.tar.gz: a41f8ed9bdeabc01a0fc83bdb98487a375bfa6f6d1d2fd4041db7cc38f803482
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7b2e10547e204ff592757373bc93c7d8dfd004802a87e10ca886c47771c29aa717fe19ef11e20c9b830765c64c6ef65db5d0bfead0d1b064c680938a1cca8184
|
|
7
|
+
data.tar.gz: ce25fac82709a912e78c871f356e681ad8f85a599db1eeea58d5654ddf3928554d70a7434e92beb4352c81b69307dce77062baedd8669f2584bda54f1e40ee42
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
## 0.3.3 (2022-07-11)
|
|
2
|
+
|
|
3
|
+
- Added `ln`, `log`, `log10`, and `log2` methods to vectors
|
|
4
|
+
- Added `exp` and `exp2` methods to vectors
|
|
5
|
+
- Added `sin`, `cos`, `tan`, `asin`, `acos`, and `atan` methods to vectors
|
|
6
|
+
- Added `sinh`, `cosh`, `tanh`, `asinh`, `acosh`, and `atanh` methods to vectors
|
|
7
|
+
- Added `round`, `ceil`, and `floor` methods to vectors
|
|
8
|
+
- Added `empty?` method to vectors
|
|
9
|
+
- Added `rename` method to data frames
|
|
10
|
+
|
|
11
|
+
## 0.3.2 (2022-07-10)
|
|
12
|
+
|
|
13
|
+
- Added `sqrt` method to vectors
|
|
14
|
+
- Improved numeric operations between scalars and vectors
|
|
15
|
+
- Improved performance of `tally`
|
|
16
|
+
|
|
17
|
+
## 0.3.1 (2022-05-18)
|
|
18
|
+
|
|
19
|
+
- Added `to!` to vectors
|
|
20
|
+
- Fixed error with `nil` and `:float64` type
|
|
21
|
+
- Fixed `:header_converters` option with `read_csv` and `parse_csv`
|
|
22
|
+
|
|
1
23
|
## 0.3.0 (2022-04-03)
|
|
2
24
|
|
|
3
25
|
- Added `deep_dup` method to data frames
|
data/README.md
CHANGED
|
@@ -191,6 +191,53 @@ 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].abs
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Rounding
|
|
199
|
+
|
|
200
|
+
```ruby
|
|
201
|
+
df[:a].round
|
|
202
|
+
df[:a].ceil
|
|
203
|
+
df[:a].floor
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Logarithm
|
|
207
|
+
|
|
208
|
+
```ruby
|
|
209
|
+
df[:a].ln # or log
|
|
210
|
+
df[:a].log10
|
|
211
|
+
df[:a].log2
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Exponentiation
|
|
215
|
+
|
|
216
|
+
```ruby
|
|
217
|
+
df[:a].exp
|
|
218
|
+
df[:a].exp2
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Trigonometric functions
|
|
222
|
+
|
|
223
|
+
```ruby
|
|
224
|
+
df[:a].sin
|
|
225
|
+
df[:a].cos
|
|
226
|
+
df[:a].tan
|
|
227
|
+
df[:a].asin
|
|
228
|
+
df[:a].acos
|
|
229
|
+
df[:a].atan
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Hyperbolic functions
|
|
233
|
+
|
|
234
|
+
```ruby
|
|
235
|
+
df[:a].sinh
|
|
236
|
+
df[:a].cosh
|
|
237
|
+
df[:a].tanh
|
|
238
|
+
df[:a].asinh
|
|
239
|
+
df[:a].acosh
|
|
240
|
+
df[:a].atanh
|
|
194
241
|
```
|
|
195
242
|
|
|
196
243
|
Summary statistics
|
|
@@ -323,9 +370,11 @@ df.delete(:a)
|
|
|
323
370
|
df.except!(:a, :b)
|
|
324
371
|
```
|
|
325
372
|
|
|
326
|
-
Rename
|
|
373
|
+
Rename columns
|
|
327
374
|
|
|
328
375
|
```ruby
|
|
376
|
+
df.rename(a: :new_a, b: :new_b)
|
|
377
|
+
# or
|
|
329
378
|
df[:new_a] = df.delete(:a)
|
|
330
379
|
```
|
|
331
380
|
|
|
@@ -456,7 +505,7 @@ df[:a].type
|
|
|
456
505
|
Change the type of a column
|
|
457
506
|
|
|
458
507
|
```ruby
|
|
459
|
-
df[:a]
|
|
508
|
+
df[:a].to!(:int32)
|
|
460
509
|
```
|
|
461
510
|
|
|
462
511
|
## 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
|
@@ -31,7 +31,12 @@ module Rover
|
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def to(type)
|
|
34
|
-
|
|
34
|
+
dup.to!(type)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def to!(type)
|
|
38
|
+
@data = cast_data(@data, type: type)
|
|
39
|
+
self
|
|
35
40
|
end
|
|
36
41
|
|
|
37
42
|
def to_numo
|
|
@@ -179,13 +184,9 @@ module Rover
|
|
|
179
184
|
Vector.new(@data.to_a.reject(&block))
|
|
180
185
|
end
|
|
181
186
|
|
|
187
|
+
# use Ruby tally for performance
|
|
182
188
|
def tally
|
|
183
|
-
|
|
184
|
-
@data.each do |v|
|
|
185
|
-
result[v] += 1
|
|
186
|
-
end
|
|
187
|
-
result.default = nil
|
|
188
|
-
result
|
|
189
|
+
@data.to_a.tally
|
|
189
190
|
end
|
|
190
191
|
|
|
191
192
|
def sort
|
|
@@ -196,6 +197,43 @@ module Rover
|
|
|
196
197
|
Vector.new(@data.abs)
|
|
197
198
|
end
|
|
198
199
|
|
|
200
|
+
def round(ndigits = 0)
|
|
201
|
+
if ndigits == 0
|
|
202
|
+
Vector.new(@data.round)
|
|
203
|
+
else
|
|
204
|
+
map { |v| v.round(ndigits) }
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def ceil(ndigits = 0)
|
|
209
|
+
if ndigits == 0
|
|
210
|
+
Vector.new(@data.ceil)
|
|
211
|
+
else
|
|
212
|
+
map { |v| v.ceil(ndigits) }
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def floor(ndigits = 0)
|
|
217
|
+
if ndigits == 0
|
|
218
|
+
Vector.new(@data.floor)
|
|
219
|
+
else
|
|
220
|
+
map { |v| v.floor(ndigits) }
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
[:sqrt, :sin, :cos, :tan, :asin, :acos, :atan, :sinh, :cosh, :tanh, :asinh, :acosh, :atanh, :log, :log2, :log10, :exp, :exp2].each do |m|
|
|
225
|
+
define_method(m) do
|
|
226
|
+
data =
|
|
227
|
+
if @data.is_a?(Numo::SFloat)
|
|
228
|
+
Numo::SFloat::Math.send(m, @data)
|
|
229
|
+
else
|
|
230
|
+
Numo::DFloat::Math.send(m, @data)
|
|
231
|
+
end
|
|
232
|
+
Vector.new(data)
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
alias_method :ln, :log
|
|
236
|
+
|
|
199
237
|
def each(&block)
|
|
200
238
|
@data.each(&block)
|
|
201
239
|
end
|
|
@@ -250,10 +288,15 @@ module Rover
|
|
|
250
288
|
to_a.any?(&block)
|
|
251
289
|
end
|
|
252
290
|
|
|
291
|
+
def empty?
|
|
292
|
+
size == 0
|
|
293
|
+
end
|
|
294
|
+
|
|
253
295
|
def zip(other, &block)
|
|
254
296
|
to_a.zip(other.to_a, &block)
|
|
255
297
|
end
|
|
256
298
|
|
|
299
|
+
# TODO return element instead of vector if no argument in 0.4.0
|
|
257
300
|
def first(n = 1)
|
|
258
301
|
if n >= size
|
|
259
302
|
Vector.new(@data)
|
|
@@ -262,6 +305,7 @@ module Rover
|
|
|
262
305
|
end
|
|
263
306
|
end
|
|
264
307
|
|
|
308
|
+
# TODO return element instead of vector if no argument in 0.4.0
|
|
265
309
|
def last(n = 1)
|
|
266
310
|
if n >= size
|
|
267
311
|
Vector.new(@data)
|
|
@@ -345,6 +389,14 @@ module Rover
|
|
|
345
389
|
super
|
|
346
390
|
end
|
|
347
391
|
|
|
392
|
+
def coerce(other)
|
|
393
|
+
if other.is_a?(Numeric)
|
|
394
|
+
[Vector.new([other]), self]
|
|
395
|
+
else
|
|
396
|
+
raise TypeError, "#{self.class} can't be coerced into #{other.class}"
|
|
397
|
+
end
|
|
398
|
+
end
|
|
399
|
+
|
|
348
400
|
def cast_data(data, type: nil)
|
|
349
401
|
numo_type = numo_type(type) if type
|
|
350
402
|
|
|
@@ -371,7 +423,7 @@ module Rover
|
|
|
371
423
|
data = data.to_a
|
|
372
424
|
|
|
373
425
|
if type
|
|
374
|
-
data = data.map { |v| v || Float::NAN } if [:float, :float32].include?(type)
|
|
426
|
+
data = data.map { |v| v || Float::NAN } if [:float, :float32, :float64].include?(type)
|
|
375
427
|
data = numo_type.cast(data)
|
|
376
428
|
else
|
|
377
429
|
data =
|
data/lib/rover/version.rb
CHANGED
data/lib/rover.rb
CHANGED
|
@@ -55,6 +55,12 @@ module Rover
|
|
|
55
55
|
table_headers << nil
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
|
+
# TODO handle date converters
|
|
59
|
+
table_headers = table_headers.map! { |v| v.nil? ? nil : v.to_s }
|
|
60
|
+
|
|
61
|
+
if csv_options[:header_converters]
|
|
62
|
+
table_headers = CSV.parse(CSV.generate_line(table_headers), headers: true, header_converters: csv_options[:header_converters]).headers
|
|
63
|
+
end
|
|
58
64
|
|
|
59
65
|
data = {}
|
|
60
66
|
keys = table_headers.map { |k| [k, true] }.to_h
|
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.3
|
|
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-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: numo-narray
|