red_amber 0.2.2 → 0.2.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/.rubocop.yml +12 -0
- data/CHANGELOG.md +114 -31
- data/Gemfile +4 -2
- data/README.md +41 -25
- data/benchmark/basic.yml +79 -0
- data/benchmark/combine.yml +63 -0
- data/benchmark/drop_nil.yml +15 -3
- data/benchmark/group.yml +33 -0
- data/benchmark/reshape.yml +27 -0
- data/benchmark/{csv_load_penguins.yml → rover/csv_load_penguins.yml} +3 -3
- data/benchmark/rover/flights.yml +23 -0
- data/benchmark/rover/penguins.yml +23 -0
- data/benchmark/rover/planes.yml +23 -0
- data/benchmark/rover/weather.yml +23 -0
- data/doc/DataFrame.md +332 -53
- data/doc/Vector.md +3 -0
- data/doc/image/dataframe/join.png +0 -0
- data/doc/image/dataframe/set_and_bind.png +0 -0
- data/doc/image/dataframe_model.png +0 -0
- data/lib/red_amber/data_frame.rb +6 -5
- data/lib/red_amber/data_frame_combinable.rb +283 -0
- data/lib/red_amber/data_frame_displayable.rb +2 -0
- data/lib/red_amber/data_frame_selectable.rb +9 -9
- data/lib/red_amber/data_frame_variable_operation.rb +4 -4
- data/lib/red_amber/group.rb +99 -18
- data/lib/red_amber/helper.rb +1 -13
- data/lib/red_amber/vector.rb +7 -0
- data/lib/red_amber/vector_functions.rb +0 -8
- data/lib/red_amber/vector_updatable.rb +60 -65
- data/lib/red_amber/version.rb +1 -1
- data/lib/red_amber.rb +1 -0
- data/red_amber.gemspec +1 -1
- metadata +21 -10
@@ -4,41 +4,47 @@
|
|
4
4
|
# reference: https://arrow.apache.org/docs/cpp/compute.html
|
5
5
|
|
6
6
|
module RedAmber
|
7
|
-
# mix-
|
7
|
+
# mix-in for class Vector
|
8
8
|
# Functions to make up some data (especially missing) for new data.
|
9
9
|
module VectorUpdatable
|
10
10
|
# Replace data
|
11
|
-
# @param
|
12
|
-
# @param replacer [Array, Vector, Arrow::Array] new data to replace for.
|
11
|
+
# @param specifier [Array, Vector, Arrow::Array] index or booleans.
|
12
|
+
# @param replacer [Scalar, Array, Vector, Arrow::Array] new data to replace for.
|
13
13
|
# @return [Vector] Replaced new Vector.
|
14
|
-
# If
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
args
|
20
|
-
when Range
|
21
|
-
normalize_element(args)
|
22
|
-
else
|
23
|
-
Array(args)
|
24
|
-
end
|
25
|
-
replacer = Array(replacer)
|
26
|
-
return self if args.empty? || args[0].nil?
|
14
|
+
# If specifier has no true, return self.
|
15
|
+
#
|
16
|
+
def replace(specifier, replacer)
|
17
|
+
vector = parse_to_vector(Array(specifier))
|
18
|
+
return self if vector.empty? || empty?
|
27
19
|
|
28
|
-
vector = parse_to_vector(args)
|
29
|
-
replacer = nil if replacer.empty?
|
30
20
|
booleans =
|
31
21
|
if vector.boolean?
|
32
|
-
return self unless vector.any
|
33
|
-
|
34
22
|
vector
|
35
23
|
elsif vector.numeric?
|
36
|
-
replacer.sort_by! { |x| args[replacer.index(x)] } if replacer # rubocop:disable Style/SafeNavigation
|
37
24
|
Vector.new(indices).is_in(vector)
|
38
25
|
else
|
39
|
-
raise VectorArgumentError, "Invalid data type #{
|
26
|
+
raise VectorArgumentError, "Invalid data type #{specifier}"
|
27
|
+
end
|
28
|
+
return self if booleans.sum.zero?
|
29
|
+
|
30
|
+
replacer_array =
|
31
|
+
case replacer
|
32
|
+
in []
|
33
|
+
return self
|
34
|
+
in nil | [nil]
|
35
|
+
return replace_to_nil(booleans.data)
|
36
|
+
in Arrow::Array
|
37
|
+
# nop
|
38
|
+
in Vector
|
39
|
+
replacer.data
|
40
|
+
in Array
|
41
|
+
Arrow::Array.new(replacer)
|
42
|
+
else # Broadcast scalar to Array
|
43
|
+
Arrow::Array.new(Array(replacer) * booleans.to_a.count(true))
|
40
44
|
end
|
41
|
-
|
45
|
+
raise VectorArgumentError, 'Replacements size unmatch' if booleans.sum != replacer_array.length
|
46
|
+
|
47
|
+
replace_with(booleans.data, replacer_array)
|
42
48
|
end
|
43
49
|
|
44
50
|
# (related functions)
|
@@ -76,52 +82,41 @@ module RedAmber
|
|
76
82
|
|
77
83
|
private
|
78
84
|
|
79
|
-
#
|
80
|
-
# Replace items selected with a boolean mask
|
85
|
+
# Replace elements selected with a boolean mask
|
81
86
|
#
|
82
|
-
#
|
83
|
-
#
|
84
|
-
#
|
85
|
-
#
|
86
|
-
#
|
87
|
-
# or
|
88
|
-
#
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
else
|
99
|
-
raise VectorTypeError, 'Not a valid type'
|
100
|
-
end
|
101
|
-
raise VectorArgumentError, 'Booleans size unmatch' if specifier.length != size
|
102
|
-
raise VectorArgumentError, 'Booleans not have any `true`' unless specifier.any?
|
103
|
-
|
104
|
-
r = Array(replacer) # scalar to [scalar]
|
105
|
-
r = [nil] if r.empty?
|
106
|
-
|
107
|
-
replacer =
|
108
|
-
if r.size == 1
|
109
|
-
case replacer
|
110
|
-
when Arrow::Array then replacer
|
111
|
-
when Vector then replacer.data
|
112
|
-
else
|
113
|
-
Arrow::Array.new(r * specifier.to_a.count(true)) # broadcast
|
114
|
-
end
|
115
|
-
else
|
116
|
-
Arrow::Array.new(r)
|
117
|
-
end
|
118
|
-
replacer = data.class.new(replacer) if replacer.uniq == [nil]
|
87
|
+
# @param boolean_mask [Arrow::BooleanArray] Boolean mask which indicates the position to be replaced.
|
88
|
+
# - Position with true will be replaced.
|
89
|
+
# - Position with nil will be nil.
|
90
|
+
#
|
91
|
+
# @param replacer [Arrow::Array] Values after replaced
|
92
|
+
# (either scalar or array). If Array is given, original values are replaced by
|
93
|
+
# each element of the array at the corresponding position of mask element.
|
94
|
+
# - `replacer.size` must be equal to `mask.count(true)`.
|
95
|
+
# - Types of self and replacer must be same
|
96
|
+
#
|
97
|
+
# @return [Vector] Replaced vector.
|
98
|
+
# Type of returned Vector is upcasted if needed.
|
99
|
+
#
|
100
|
+
def replace_with(boolean_mask, replacer)
|
101
|
+
raise VectorArgumentError, 'Booleans size unmatch' if boolean_mask.length != size
|
102
|
+
raise VectorArgumentError, 'Booleans not have any `true`' unless boolean_mask.any?
|
119
103
|
|
120
|
-
|
104
|
+
values = replacer.class.new(data) # Upcast
|
121
105
|
|
122
|
-
|
106
|
+
datum = find(:replace_with_mask).execute([values, boolean_mask, replacer])
|
107
|
+
Vector.new(datum.value)
|
108
|
+
end
|
123
109
|
|
124
|
-
|
110
|
+
# Replace elements selected with a boolean mask by nil
|
111
|
+
#
|
112
|
+
# @param boolean_mask [Arrow::BooleanArray] Boolean mask which indicates the position to be replaced.
|
113
|
+
# - Position with true will be replaced by nil
|
114
|
+
# - Position with nil will remain as nil.
|
115
|
+
# @return [Vector] Replaced vector.
|
116
|
+
#
|
117
|
+
def replace_to_nil(boolean_mask)
|
118
|
+
nil_array = data.class.new([nil] * size) # Casted nil Array
|
119
|
+
datum = find(:if_else).execute([boolean_mask, nil_array, data])
|
125
120
|
Vector.new(datum.value)
|
126
121
|
end
|
127
122
|
end
|
data/lib/red_amber/version.rb
CHANGED
data/lib/red_amber.rb
CHANGED
data/red_amber.gemspec
CHANGED
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
31
31
|
spec.require_paths = ['lib']
|
32
32
|
|
33
|
-
spec.add_dependency 'red-arrow', '
|
33
|
+
spec.add_dependency 'red-arrow', '~> 10.0.0'
|
34
34
|
|
35
35
|
# Development dependency has gone to the Gemfile (rubygems/bundler#7237)
|
36
36
|
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: red_amber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hirokazu SUZUKI (heronshoes)
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: red-arrow
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 10.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 10.0.0
|
27
27
|
description: RedAmber is a simple dataframe library inspired by Rover-df and powered
|
28
28
|
by Red Arrow.
|
29
29
|
email:
|
@@ -40,8 +40,16 @@ files:
|
|
40
40
|
- LICENSE
|
41
41
|
- README.md
|
42
42
|
- Rakefile
|
43
|
-
- benchmark/
|
43
|
+
- benchmark/basic.yml
|
44
|
+
- benchmark/combine.yml
|
44
45
|
- benchmark/drop_nil.yml
|
46
|
+
- benchmark/group.yml
|
47
|
+
- benchmark/reshape.yml
|
48
|
+
- benchmark/rover/csv_load_penguins.yml
|
49
|
+
- benchmark/rover/flights.yml
|
50
|
+
- benchmark/rover/penguins.yml
|
51
|
+
- benchmark/rover/planes.yml
|
52
|
+
- benchmark/rover/weather.yml
|
45
53
|
- doc/CODE_OF_CONDUCT.md
|
46
54
|
- doc/DataFrame.md
|
47
55
|
- doc/Vector.md
|
@@ -50,12 +58,14 @@ files:
|
|
50
58
|
- doc/image/dataframe/assign.png
|
51
59
|
- doc/image/dataframe/assign_operation.png
|
52
60
|
- doc/image/dataframe/drop.png
|
61
|
+
- doc/image/dataframe/join.png
|
53
62
|
- doc/image/dataframe/pick.png
|
54
63
|
- doc/image/dataframe/pick_operation.png
|
55
64
|
- doc/image/dataframe/remove.png
|
56
65
|
- doc/image/dataframe/rename.png
|
57
66
|
- doc/image/dataframe/rename_operation.png
|
58
67
|
- doc/image/dataframe/reshaping_DataFrames.png
|
68
|
+
- doc/image/dataframe/set_and_bind.png
|
59
69
|
- doc/image/dataframe/slice.png
|
60
70
|
- doc/image/dataframe/slice_operation.png
|
61
71
|
- doc/image/dataframe_model.png
|
@@ -76,6 +86,7 @@ files:
|
|
76
86
|
- lib/red-amber.rb
|
77
87
|
- lib/red_amber.rb
|
78
88
|
- lib/red_amber/data_frame.rb
|
89
|
+
- lib/red_amber/data_frame_combinable.rb
|
79
90
|
- lib/red_amber/data_frame_displayable.rb
|
80
91
|
- lib/red_amber/data_frame_indexable.rb
|
81
92
|
- lib/red_amber/data_frame_loadsave.rb
|
@@ -99,7 +110,7 @@ metadata:
|
|
99
110
|
source_code_uri: https://github.com/heronshoes/red_amber
|
100
111
|
changelog_uri: https://github.com/heronshoes/red_amber/blob/main/CHANGELOG.md
|
101
112
|
rubygems_mfa_required: 'true'
|
102
|
-
post_install_message:
|
113
|
+
post_install_message:
|
103
114
|
rdoc_options: []
|
104
115
|
require_paths:
|
105
116
|
- lib
|
@@ -115,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
126
|
version: '0'
|
116
127
|
requirements: []
|
117
128
|
rubygems_version: 3.3.7
|
118
|
-
signing_key:
|
129
|
+
signing_key:
|
119
130
|
specification_version: 4
|
120
131
|
summary: Simple dataframe library for Ruby
|
121
132
|
test_files: []
|