rover-df 1.0.0 → 1.1.0
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 +8 -0
- data/README.md +1 -1
- data/lib/rover/data_frame.rb +18 -7
- data/lib/rover/vector.rb +17 -7
- 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: fda55b893da90eb87f53722b328d5150649ce9d91d1d49be1a9523a11229ab30
|
|
4
|
+
data.tar.gz: 1b18963c432f5489a1f89cf88d0cd509d4ec6a28d4b0bb2e5c400d66f7d2921e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0d69590856829d59616750b3912579f9cf78b1ae33b9a9448cf72fa26f45596225847f6800b3c4a2bddb8d9390a280618de98457c76cc7be0f236f8844f4d4bd
|
|
7
|
+
data.tar.gz: af77b30aac473131c11994fafa9784580a33bf69da2422baad580a193bb3ea7a627b40430ab8295bb6b6330d30bfc11fda8bda6874379b9573794dc1ed38b4c9
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Simple, powerful data frames for Ruby
|
|
4
4
|
|
|
5
|
-
:mountain: Designed for data exploration and machine learning, and powered by [
|
|
5
|
+
:mountain: Designed for data exploration and machine learning, and powered by [numo-narray-alt](https://github.com/yoshoku/numo-narray-alt)
|
|
6
6
|
|
|
7
7
|
:evergreen_tree: Uses [Vega](https://github.com/ankane/vega) for visualization
|
|
8
8
|
|
data/lib/rover/data_frame.rb
CHANGED
|
@@ -27,7 +27,7 @@ module Rover
|
|
|
27
27
|
end
|
|
28
28
|
elsif data.is_a?(Array)
|
|
29
29
|
vectors = {}
|
|
30
|
-
raise ArgumentError, "Array elements must be hashes" unless data.all?
|
|
30
|
+
raise ArgumentError, "Array elements must be hashes" unless data.all?(Hash)
|
|
31
31
|
keys = data.flat_map(&:keys).uniq
|
|
32
32
|
keys.each do |k|
|
|
33
33
|
vectors[k] = []
|
|
@@ -65,13 +65,19 @@ module Rover
|
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
def [](where)
|
|
68
|
-
|
|
68
|
+
# TODO use path for all vectors in 2.0
|
|
69
|
+
if (where.is_a?(Vector) && (where.type == :bool || Vector::INTEGER_TYPES.include?(where.type))) || where.is_a?(Numeric) || where.is_a?(Range) || (where.is_a?(Array) && where.all?(Integer))
|
|
69
70
|
new_vectors = {}
|
|
70
71
|
@vectors.each do |k, v|
|
|
71
72
|
new_vectors[k] = v[where]
|
|
72
73
|
end
|
|
73
74
|
DataFrame.new(new_vectors)
|
|
74
75
|
elsif where.is_a?(Array)
|
|
76
|
+
# TODO raise error in 2.0
|
|
77
|
+
unless where.all? { |v| v.is_a?(String) || v.is_a?(Symbol) }
|
|
78
|
+
warn "[rover] Unsupported selector"
|
|
79
|
+
end
|
|
80
|
+
|
|
75
81
|
# multiple columns
|
|
76
82
|
df = DataFrame.new
|
|
77
83
|
where.each do |k|
|
|
@@ -80,6 +86,11 @@ module Rover
|
|
|
80
86
|
end
|
|
81
87
|
df
|
|
82
88
|
else
|
|
89
|
+
# TODO raise error in 2.0
|
|
90
|
+
unless where.is_a?(String) || where.is_a?(Symbol)
|
|
91
|
+
warn "[rover] Unsupported selector"
|
|
92
|
+
end
|
|
93
|
+
|
|
83
94
|
# single column
|
|
84
95
|
@vectors[where.to_s]
|
|
85
96
|
end
|
|
@@ -269,7 +280,7 @@ module Rover
|
|
|
269
280
|
when :bool
|
|
270
281
|
:boolean
|
|
271
282
|
when :object
|
|
272
|
-
if @vectors[name].all?
|
|
283
|
+
if @vectors[name].all?(String)
|
|
273
284
|
:string
|
|
274
285
|
else
|
|
275
286
|
raise "Unknown type"
|
|
@@ -313,10 +324,10 @@ module Rover
|
|
|
313
324
|
|
|
314
325
|
@vectors.each do |k, v|
|
|
315
326
|
v = summarize ? v.first(5).to_a + ["..."] + v.last(5).to_a : v.to_a
|
|
316
|
-
width = ([k] + v).map
|
|
327
|
+
width = ([k] + v).map { |v2| v2.to_s.size }.max
|
|
317
328
|
width = 3 if width < 3
|
|
318
329
|
|
|
319
|
-
if lines.empty? || lines[-2].
|
|
330
|
+
if lines.empty? || lines[-2].sum { |l| l.size + spaces } + width > 120
|
|
320
331
|
line_start = lines.size
|
|
321
332
|
lines << []
|
|
322
333
|
v.size.times do |i|
|
|
@@ -382,10 +393,10 @@ module Rover
|
|
|
382
393
|
|
|
383
394
|
size = self.size
|
|
384
395
|
vectors.each do |k, v|
|
|
385
|
-
@vectors[k] = Vector.new(v.to_a + (other[k] ? other[k].to_a :
|
|
396
|
+
@vectors[k] = Vector.new(v.to_a + (other[k] ? other[k].to_a : Array.new(other.size)))
|
|
386
397
|
end
|
|
387
398
|
(other.vector_names - vector_names).each do |k|
|
|
388
|
-
@vectors[k] = Vector.new(
|
|
399
|
+
@vectors[k] = Vector.new(Array.new(size) + other[k].to_a)
|
|
389
400
|
end
|
|
390
401
|
self
|
|
391
402
|
end
|
data/lib/rover/vector.rb
CHANGED
|
@@ -23,6 +23,9 @@ module Rover
|
|
|
23
23
|
|
|
24
24
|
NOT_SET = Object.new
|
|
25
25
|
|
|
26
|
+
# private
|
|
27
|
+
INTEGER_TYPES = [:int8, :int16, :int32, :int64, :uint8, :uint16, :uint32, :uint64]
|
|
28
|
+
|
|
26
29
|
def initialize(data, type: nil)
|
|
27
30
|
@data = cast_data(data, type: type)
|
|
28
31
|
raise ArgumentError, "Bad size: #{@data.shape}" unless @data.ndim == 1
|
|
@@ -87,7 +90,14 @@ module Rover
|
|
|
87
90
|
|
|
88
91
|
def [](v)
|
|
89
92
|
if v.is_a?(Vector)
|
|
90
|
-
|
|
93
|
+
case v.type
|
|
94
|
+
when :bool
|
|
95
|
+
Vector.new(v.to_numo.mask(@data))
|
|
96
|
+
when *INTEGER_TYPES
|
|
97
|
+
Vector.new(@data[v.to_numo])
|
|
98
|
+
else
|
|
99
|
+
raise ArgumentError, "Unsupported selector"
|
|
100
|
+
end
|
|
91
101
|
elsif v.is_a?(Numeric)
|
|
92
102
|
@data[v]
|
|
93
103
|
else
|
|
@@ -305,12 +315,12 @@ module Rover
|
|
|
305
315
|
@data.cast_to(Numo::DFloat).var
|
|
306
316
|
end
|
|
307
317
|
|
|
308
|
-
def all?(
|
|
309
|
-
to_a.all?(
|
|
318
|
+
def all?(...)
|
|
319
|
+
to_a.all?(...)
|
|
310
320
|
end
|
|
311
321
|
|
|
312
|
-
def any?(
|
|
313
|
-
to_a.any?(
|
|
322
|
+
def any?(...)
|
|
323
|
+
to_a.any?(...)
|
|
314
324
|
end
|
|
315
325
|
|
|
316
326
|
def empty?
|
|
@@ -374,7 +384,7 @@ module Rover
|
|
|
374
384
|
end
|
|
375
385
|
|
|
376
386
|
def one_hot(drop: false, prefix: nil)
|
|
377
|
-
raise ArgumentError, "All elements must be strings" unless all?
|
|
387
|
+
raise ArgumentError, "All elements must be strings" unless all?(String)
|
|
378
388
|
|
|
379
389
|
new_vectors = {}
|
|
380
390
|
# maybe sort values first
|
|
@@ -459,7 +469,7 @@ module Rover
|
|
|
459
469
|
data = numo_type.cast(data)
|
|
460
470
|
else
|
|
461
471
|
data =
|
|
462
|
-
if data.all?
|
|
472
|
+
if data.all?(Integer)
|
|
463
473
|
Numo::Int64.cast(data)
|
|
464
474
|
elsif data.all? { |v| v.is_a?(Numeric) || v.nil? }
|
|
465
475
|
Numo::DFloat.cast(data.map { |v| v || Float::NAN })
|
data/lib/rover/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rover-df
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrew Kane
|
|
@@ -55,7 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
55
55
|
- !ruby/object:Gem::Version
|
|
56
56
|
version: '0'
|
|
57
57
|
requirements: []
|
|
58
|
-
rubygems_version: 4.0.
|
|
58
|
+
rubygems_version: 4.0.14
|
|
59
59
|
specification_version: 4
|
|
60
60
|
summary: Simple, powerful data frames for Ruby
|
|
61
61
|
test_files: []
|