daru_lite 0.2.4 → 0.3.1
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/lib/daru_lite/dataframe.rb +11 -2
- data/lib/daru_lite/version.rb +1 -1
- data/spec/dataframe_spec.rb +21 -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: 5fd692ae66f7d3b631fc1f2424f823ab3f9484bb8d7803db6ea1405b00bea456
|
|
4
|
+
data.tar.gz: 959220244151eddba5fd98abde252d54be976e80cc7e179d8cb3f61a90e3c38d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b4f13fe9ed18e21835c405d40d7241c5d4aea0fb391121c85a504243ac3d755a3b1c1b93f9a78befad060b59e070e234965aff233c3d68d2cac99de9f3280151
|
|
7
|
+
data.tar.gz: d084ec8cc01cb06577e686e8abbfe834d9477071342d025a9a8b3033dd43d82d39ec1d1b5d1561fcdf4508f27e3070ea5713604ffe2cb08e419f773792a34d2d
|
data/lib/daru_lite/dataframe.rb
CHANGED
|
@@ -85,21 +85,30 @@ module DaruLite
|
|
|
85
85
|
raise 'Three vectors should be equal size' if
|
|
86
86
|
rows.size != columns.size || rows.size != values.size
|
|
87
87
|
|
|
88
|
+
row_index = rows.uniq.to_a
|
|
88
89
|
data = Hash.new do |h, col|
|
|
89
|
-
h[col] =
|
|
90
|
+
h[col] = row_index.map { |r| [r, nil] }.to_h
|
|
90
91
|
end
|
|
92
|
+
validate_no_duplicate_pairs(rows, columns)
|
|
91
93
|
columns.zip(rows, values).each { |c, r, v| data[c][r] = v }
|
|
92
94
|
|
|
93
95
|
# FIXME: in fact, WITHOUT this line you'll obtain more "right"
|
|
94
96
|
# data: with vectors having "rows" as an index...
|
|
95
97
|
data = data.transform_values(&:values)
|
|
96
|
-
data[:_id] =
|
|
98
|
+
data[:_id] = row_index
|
|
97
99
|
|
|
98
100
|
DataFrame.new(data)
|
|
99
101
|
end
|
|
100
102
|
|
|
101
103
|
private
|
|
102
104
|
|
|
105
|
+
def validate_no_duplicate_pairs(rows, columns)
|
|
106
|
+
seen = Set.new
|
|
107
|
+
columns.to_a.zip(rows.to_a).each do |pair|
|
|
108
|
+
raise IndexError, "Duplicate (column, row) pair: #{pair.inspect}" unless seen.add?(pair)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
103
112
|
def guess_order(source)
|
|
104
113
|
case source.first
|
|
105
114
|
when Vector # assume that all are Vectors
|
data/lib/daru_lite/version.rb
CHANGED
data/spec/dataframe_spec.rb
CHANGED
|
@@ -1076,6 +1076,27 @@ describe DaruLite::DataFrame do
|
|
|
1076
1076
|
|
|
1077
1077
|
expect(df2).to eq(df)
|
|
1078
1078
|
end
|
|
1079
|
+
|
|
1080
|
+
it 'handles nil values in the rows vector' do
|
|
1081
|
+
v1 = DaruLite::Vector.new [nil, 'a', nil, 'a']
|
|
1082
|
+
v2 = DaruLite::Vector.new %w[x x y y]
|
|
1083
|
+
v3 = DaruLite::Vector.new [1, 2, 3, 4]
|
|
1084
|
+
df = DaruLite::DataFrame.crosstab_by_assignation(v1, v2, v3)
|
|
1085
|
+
|
|
1086
|
+
expect(df[:_id].to_a).to eq([nil, 'a'])
|
|
1087
|
+
expect(df['x'].to_a).to eq([1, 2])
|
|
1088
|
+
expect(df['y'].to_a).to eq([3, 4])
|
|
1089
|
+
end
|
|
1090
|
+
|
|
1091
|
+
it 'raises IndexError when given duplicate (row, column) pairs' do
|
|
1092
|
+
rows = DaruLite::Vector.new(%w[a a b])
|
|
1093
|
+
columns = DaruLite::Vector.new(%w[x x y])
|
|
1094
|
+
values = DaruLite::Vector.new([1, 2, 3])
|
|
1095
|
+
|
|
1096
|
+
expect {
|
|
1097
|
+
described_class.crosstab_by_assignation(rows, columns, values)
|
|
1098
|
+
}.to raise_error(IndexError, /Duplicate/)
|
|
1099
|
+
end
|
|
1079
1100
|
end
|
|
1080
1101
|
|
|
1081
1102
|
context '#inspect' do
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: daru_lite
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Thomas Naude-Filonnière
|
|
@@ -12,7 +12,7 @@ authors:
|
|
|
12
12
|
autorequire:
|
|
13
13
|
bindir: bin
|
|
14
14
|
cert_chain: []
|
|
15
|
-
date: 2026-04-
|
|
15
|
+
date: 2026-04-17 00:00:00.000000000 Z
|
|
16
16
|
dependencies:
|
|
17
17
|
- !ruby/object:Gem::Dependency
|
|
18
18
|
name: activerecord
|