daru 0.0.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.build.sh +14 -0
- data/.travis.yml +26 -4
- data/CONTRIBUTING.md +31 -0
- data/Gemfile +1 -2
- data/{History.txt → History.md} +110 -44
- data/README.md +21 -288
- data/Rakefile +1 -0
- data/daru.gemspec +12 -8
- data/lib/daru.rb +36 -1
- data/lib/daru/accessors/array_wrapper.rb +8 -3
- data/lib/daru/accessors/gsl_wrapper.rb +113 -0
- data/lib/daru/accessors/nmatrix_wrapper.rb +6 -17
- data/lib/daru/core/group_by.rb +0 -1
- data/lib/daru/dataframe.rb +1192 -83
- data/lib/daru/extensions/rserve.rb +21 -0
- data/lib/daru/index.rb +14 -0
- data/lib/daru/io/io.rb +170 -8
- data/lib/daru/maths/arithmetic/dataframe.rb +4 -3
- data/lib/daru/maths/arithmetic/vector.rb +4 -4
- data/lib/daru/maths/statistics/dataframe.rb +48 -27
- data/lib/daru/maths/statistics/vector.rb +215 -33
- data/lib/daru/monkeys.rb +53 -7
- data/lib/daru/multi_index.rb +21 -4
- data/lib/daru/plotting/dataframe.rb +83 -25
- data/lib/daru/plotting/vector.rb +9 -10
- data/lib/daru/vector.rb +596 -61
- data/lib/daru/version.rb +3 -0
- data/spec/accessors/wrappers_spec.rb +51 -0
- data/spec/core/group_by_spec.rb +0 -2
- data/spec/daru_spec.rb +58 -0
- data/spec/dataframe_spec.rb +768 -73
- data/spec/extensions/rserve_spec.rb +52 -0
- data/spec/fixtures/bank2.dat +200 -0
- data/spec/fixtures/repeated_fields.csv +7 -0
- data/spec/fixtures/scientific_notation.csv +4 -0
- data/spec/fixtures/test_xls.xls +0 -0
- data/spec/io/io_spec.rb +161 -24
- data/spec/math/arithmetic/dataframe_spec.rb +26 -7
- data/spec/math/arithmetic/vector_spec.rb +8 -0
- data/spec/math/statistics/dataframe_spec.rb +16 -1
- data/spec/math/statistics/vector_spec.rb +215 -47
- data/spec/spec_helper.rb +21 -2
- data/spec/vector_spec.rb +368 -12
- metadata +99 -16
- data/lib/version.rb +0 -3
- data/notebooks/grouping_splitting_pivots.ipynb +0 -529
- data/notebooks/intro_with_music_data_.ipynb +0 -303
@@ -0,0 +1,52 @@
|
|
1
|
+
begin
|
2
|
+
require "rserve"
|
3
|
+
require 'daru/extensions/rserve'
|
4
|
+
|
5
|
+
describe "Daru rserve extension" do
|
6
|
+
before do
|
7
|
+
@r = Rserve::Connection.new
|
8
|
+
end
|
9
|
+
|
10
|
+
after do
|
11
|
+
@r.close
|
12
|
+
end
|
13
|
+
|
14
|
+
describe Daru::Vector do
|
15
|
+
context "#to_REXP" do
|
16
|
+
it "converts to and from R data" do
|
17
|
+
a = Daru::Vector.new(100.times.map { |i| rand > 0.9 ? nil : i + rand })
|
18
|
+
rexp = a.to_REXP
|
19
|
+
expect(rexp.is_a?(Rserve::REXP::Double)).to eq(true)
|
20
|
+
expect(rexp.to_ruby).to eq(a.to_a)
|
21
|
+
|
22
|
+
@r.assign 'a', rexp
|
23
|
+
expect(@r.eval('a').to_ruby).to eq(a.to_a)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe Daru::DataFrame do
|
29
|
+
context "#to_REXP" do
|
30
|
+
it "converts to and from R data" do
|
31
|
+
a = Daru::Vector.new(100.times.map { |i| rand > 0.9 ? nil : i + rand })
|
32
|
+
b = Daru::Vector.new(100.times.map { |i| rand > 0.9 ? nil : i + rand })
|
33
|
+
c = Daru::Vector.new(100.times.map { |i| rand > 0.9 ? nil : i + rand })
|
34
|
+
ds = Daru::DataFrame.new({ :a => a, :b => b, :c => c })
|
35
|
+
rexp = ds.to_REXP
|
36
|
+
expect(rexp.is_a? Rserve::REXP::GenericVector).to eq(true)
|
37
|
+
|
38
|
+
ret = rexp.to_ruby
|
39
|
+
expect(ret['a']).to eq(a.to_a)
|
40
|
+
@r.assign 'df', rexp
|
41
|
+
out_df = @r.eval('df').to_ruby
|
42
|
+
|
43
|
+
expect(out_df.attributes['class']).to eq('data.frame')
|
44
|
+
expect(out_df.attributes['names']).to eq(%w(a b c))
|
45
|
+
expect(out_df['a']).to eq(a.to_a)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
rescue LoadError => e
|
51
|
+
puts "Requires rserve extension"
|
52
|
+
end
|
@@ -0,0 +1,200 @@
|
|
1
|
+
214.80000 131.00000 131.10000 9.00000 9.70000 141.00000
|
2
|
+
214.60000 129.70000 129.70000 8.10000 9.50000 141.70000
|
3
|
+
214.80000 129.70000 129.70000 8.70000 9.60000 142.20000
|
4
|
+
214.80000 129.70000 129.60000 7.50000 10.40000 142.00000
|
5
|
+
215.00000 129.60000 129.70000 10.40000 7.70000 141.80000
|
6
|
+
215.70000 130.80000 130.50000 9.00000 10.10000 141.40000
|
7
|
+
215.50000 129.50000 129.70000 7.90000 9.60000 141.60000
|
8
|
+
214.50000 129.60000 129.20000 7.20000 10.70000 141.70000
|
9
|
+
214.90000 129.40000 129.70000 8.20000 11.00000 141.90000
|
10
|
+
215.20000 130.40000 130.30000 9.20000 10.00000 140.70000
|
11
|
+
215.30000 130.40000 130.30000 7.90000 11.70000 141.80000
|
12
|
+
215.10000 129.50000 129.60000 7.70000 10.50000 142.20000
|
13
|
+
215.20000 130.80000 129.60000 7.90000 10.80000 141.40000
|
14
|
+
214.70000 129.70000 129.70000 7.70000 10.90000 141.70000
|
15
|
+
215.10000 129.90000 129.70000 7.70000 10.80000 141.80000
|
16
|
+
214.50000 129.80000 129.80000 9.30000 8.50000 141.60000
|
17
|
+
214.60000 129.90000 130.10000 8.20000 9.80000 141.70000
|
18
|
+
215.00000 129.90000 129.70000 9.00000 9.00000 141.90000
|
19
|
+
215.20000 129.60000 129.60000 7.40000 11.50000 141.50000
|
20
|
+
214.70000 130.20000 129.90000 8.60000 10.00000 141.90000
|
21
|
+
215.00000 129.90000 129.30000 8.40000 10.00000 141.40000
|
22
|
+
215.60000 130.50000 130.00000 8.10000 10.30000 141.60000
|
23
|
+
215.30000 130.60000 130.00000 8.40000 10.80000 141.50000
|
24
|
+
215.70000 130.20000 130.00000 8.70000 10.00000 141.60000
|
25
|
+
215.10000 129.70000 129.90000 7.40000 10.80000 141.10000
|
26
|
+
215.30000 130.40000 130.40000 8.00000 11.00000 142.30000
|
27
|
+
215.50000 130.20000 130.10000 8.90000 9.80000 142.40000
|
28
|
+
215.10000 130.30000 130.30000 9.80000 9.50000 141.90000
|
29
|
+
215.10000 130.00000 130.00000 7.40000 10.50000 141.80000
|
30
|
+
214.80000 129.70000 129.30000 8.30000 9.00000 142.00000
|
31
|
+
215.20000 130.10000 129.80000 7.90000 10.70000 141.80000
|
32
|
+
214.80000 129.70000 129.70000 8.60000 9.10000 142.30000
|
33
|
+
215.00000 130.00000 129.60000 7.70000 10.50000 140.70000
|
34
|
+
215.60000 130.40000 130.10000 8.40000 10.30000 141.00000
|
35
|
+
215.90000 130.40000 130.00000 8.90000 10.60000 141.40000
|
36
|
+
214.60000 130.20000 130.20000 9.40000 9.70000 141.80000
|
37
|
+
215.50000 130.30000 130.00000 8.40000 9.70000 141.80000
|
38
|
+
215.30000 129.90000 129.40000 7.90000 10.00000 142.00000
|
39
|
+
215.30000 130.30000 130.10000 8.50000 9.30000 142.10000
|
40
|
+
213.90000 130.30000 129.00000 8.10000 9.70000 141.30000
|
41
|
+
214.40000 129.80000 129.20000 8.90000 9.40000 142.30000
|
42
|
+
214.80000 130.10000 129.60000 8.80000 9.90000 140.90000
|
43
|
+
214.90000 129.60000 129.40000 9.30000 9.00000 141.70000
|
44
|
+
214.90000 130.40000 129.70000 9.00000 9.80000 140.90000
|
45
|
+
214.80000 129.40000 129.10000 8.20000 10.20000 141.00000
|
46
|
+
214.30000 129.50000 129.40000 8.30000 10.20000 141.80000
|
47
|
+
214.80000 129.90000 129.70000 8.30000 10.20000 141.50000
|
48
|
+
214.80000 129.90000 129.70000 7.30000 10.90000 142.00000
|
49
|
+
214.60000 129.70000 129.80000 7.90000 10.30000 141.10000
|
50
|
+
214.50000 129.00000 129.60000 7.80000 9.80000 142.00000
|
51
|
+
214.60000 129.80000 129.40000 7.20000 10.00000 141.30000
|
52
|
+
215.30000 130.60000 130.00000 9.50000 9.70000 141.10000
|
53
|
+
214.50000 130.10000 130.00000 7.80000 10.90000 140.90000
|
54
|
+
215.40000 130.20000 130.20000 7.60000 10.90000 141.60000
|
55
|
+
214.50000 129.40000 129.50000 7.90000 10.00000 141.40000
|
56
|
+
215.20000 129.70000 129.40000 9.20000 9.40000 142.00000
|
57
|
+
215.70000 130.00000 129.40000 9.20000 10.40000 141.20000
|
58
|
+
215.00000 129.60000 129.40000 8.80000 9.00000 141.10000
|
59
|
+
215.10000 130.10000 129.90000 7.90000 11.00000 141.30000
|
60
|
+
215.10000 130.00000 129.80000 8.20000 10.30000 141.40000
|
61
|
+
215.10000 129.60000 129.30000 8.30000 9.90000 141.60000
|
62
|
+
215.30000 129.70000 129.40000 7.50000 10.50000 141.50000
|
63
|
+
215.40000 129.80000 129.40000 8.00000 10.60000 141.50000
|
64
|
+
214.50000 130.00000 129.50000 8.00000 10.80000 141.40000
|
65
|
+
215.00000 130.00000 129.80000 8.60000 10.60000 141.50000
|
66
|
+
215.20000 130.60000 130.00000 8.80000 10.60000 140.80000
|
67
|
+
214.60000 129.50000 129.20000 7.70000 10.30000 141.30000
|
68
|
+
214.80000 129.70000 129.30000 9.10000 9.50000 141.50000
|
69
|
+
215.10000 129.60000 129.80000 8.60000 9.80000 141.80000
|
70
|
+
214.90000 130.20000 130.20000 8.00000 11.20000 139.60000
|
71
|
+
213.80000 129.80000 129.50000 8.40000 11.10000 140.90000
|
72
|
+
215.20000 129.90000 129.50000 8.20000 10.30000 141.40000
|
73
|
+
215.00000 129.60000 130.20000 8.70000 10.00000 141.20000
|
74
|
+
214.40000 129.90000 129.60000 7.50000 10.50000 141.80000
|
75
|
+
215.20000 129.90000 129.70000 7.20000 10.60000 142.10000
|
76
|
+
214.10000 129.60000 129.30000 7.60000 10.70000 141.70000
|
77
|
+
214.90000 129.90000 130.10000 8.80000 10.00000 141.20000
|
78
|
+
214.60000 129.80000 129.40000 7.40000 10.60000 141.00000
|
79
|
+
215.20000 130.50000 129.80000 7.90000 10.90000 140.90000
|
80
|
+
214.60000 129.90000 129.40000 7.90000 10.00000 141.80000
|
81
|
+
215.10000 129.70000 129.70000 8.60000 10.30000 140.60000
|
82
|
+
214.90000 129.80000 129.60000 7.50000 10.30000 141.00000
|
83
|
+
215.20000 129.70000 129.10000 9.00000 9.70000 141.90000
|
84
|
+
215.20000 130.10000 129.90000 7.90000 10.80000 141.30000
|
85
|
+
215.40000 130.70000 130.20000 9.00000 11.10000 141.20000
|
86
|
+
215.10000 129.90000 129.60000 8.90000 10.20000 141.50000
|
87
|
+
215.20000 129.90000 129.70000 8.70000 9.50000 141.60000
|
88
|
+
215.00000 129.60000 129.20000 8.40000 10.20000 142.10000
|
89
|
+
214.90000 130.30000 129.90000 7.40000 11.20000 141.50000
|
90
|
+
215.00000 129.90000 129.70000 8.00000 10.50000 142.00000
|
91
|
+
214.70000 129.70000 129.30000 8.60000 9.60000 141.60000
|
92
|
+
215.40000 130.00000 129.90000 8.50000 9.70000 141.40000
|
93
|
+
214.90000 129.40000 129.50000 8.20000 9.90000 141.50000
|
94
|
+
214.50000 129.50000 129.30000 7.40000 10.70000 141.50000
|
95
|
+
214.70000 129.60000 129.50000 8.30000 10.00000 142.00000
|
96
|
+
215.60000 129.90000 129.90000 9.00000 9.50000 141.70000
|
97
|
+
215.00000 130.40000 130.30000 9.10000 10.20000 141.10000
|
98
|
+
214.40000 129.70000 129.50000 8.00000 10.30000 141.20000
|
99
|
+
215.10000 130.00000 129.80000 9.10000 10.20000 141.50000
|
100
|
+
214.70000 130.00000 129.40000 7.80000 10.00000 141.20000
|
101
|
+
214.40000 130.10000 130.30000 9.70000 11.70000 139.80000
|
102
|
+
214.90000 130.50000 130.20000 11.00000 11.50000 139.50000
|
103
|
+
214.90000 130.30000 130.10000 8.70000 11.70000 140.20000
|
104
|
+
215.00000 130.40000 130.60000 9.90000 10.90000 140.30000
|
105
|
+
214.70000 130.20000 130.30000 11.80000 10.90000 139.70000
|
106
|
+
215.00000 130.20000 130.20000 10.60000 10.70000 139.90000
|
107
|
+
215.30000 130.30000 130.10000 9.30000 12.10000 140.20000
|
108
|
+
214.80000 130.10000 130.40000 9.80000 11.50000 139.90000
|
109
|
+
215.00000 130.20000 129.90000 10.00000 11.90000 139.40000
|
110
|
+
215.20000 130.60000 130.80000 10.40000 11.20000 140.30000
|
111
|
+
215.20000 130.40000 130.30000 8.00000 11.50000 139.20000
|
112
|
+
215.10000 130.50000 130.30000 10.60000 11.50000 140.10000
|
113
|
+
215.40000 130.70000 131.10000 9.70000 11.80000 140.60000
|
114
|
+
214.90000 130.40000 129.90000 11.40000 11.00000 139.90000
|
115
|
+
215.10000 130.30000 130.00000 10.60000 10.80000 139.70000
|
116
|
+
215.50000 130.40000 130.00000 8.20000 11.20000 139.20000
|
117
|
+
214.70000 130.60000 130.10000 11.80000 10.50000 139.80000
|
118
|
+
214.70000 130.40000 130.10000 12.10000 10.40000 139.90000
|
119
|
+
214.80000 130.50000 130.20000 11.00000 11.00000 140.00000
|
120
|
+
214.40000 130.20000 129.90000 10.10000 12.00000 139.20000
|
121
|
+
214.80000 130.30000 130.40000 10.10000 12.10000 139.60000
|
122
|
+
215.10000 130.60000 130.30000 12.30000 10.20000 139.60000
|
123
|
+
215.30000 130.80000 131.10000 11.60000 10.60000 140.20000
|
124
|
+
215.10000 130.70000 130.40000 10.50000 11.20000 139.70000
|
125
|
+
214.70000 130.50000 130.50000 9.90000 10.30000 140.10000
|
126
|
+
214.90000 130.00000 130.30000 10.20000 11.40000 139.60000
|
127
|
+
215.00000 130.40000 130.40000 9.40000 11.60000 140.20000
|
128
|
+
215.50000 130.70000 130.30000 10.20000 11.80000 140.00000
|
129
|
+
215.10000 130.20000 130.20000 10.10000 11.30000 140.30000
|
130
|
+
214.50000 130.20000 130.60000 9.80000 12.10000 139.90000
|
131
|
+
214.30000 130.20000 130.00000 10.70000 10.50000 139.80000
|
132
|
+
214.50000 130.20000 129.80000 12.30000 11.20000 139.20000
|
133
|
+
214.90000 130.50000 130.20000 10.60000 11.50000 139.90000
|
134
|
+
214.60000 130.20000 130.40000 10.50000 11.80000 139.70000
|
135
|
+
214.20000 130.00000 130.20000 11.00000 11.20000 139.50000
|
136
|
+
214.80000 130.10000 130.10000 11.90000 11.10000 139.50000
|
137
|
+
214.60000 129.80000 130.20000 10.70000 11.10000 139.40000
|
138
|
+
214.90000 130.70000 130.30000 9.30000 11.20000 138.30000
|
139
|
+
214.60000 130.40000 130.40000 11.30000 10.80000 139.80000
|
140
|
+
214.50000 130.50000 130.20000 11.80000 10.20000 139.60000
|
141
|
+
214.80000 130.20000 130.30000 10.00000 11.90000 139.30000
|
142
|
+
214.70000 130.00000 129.40000 10.20000 11.00000 139.20000
|
143
|
+
214.60000 130.20000 130.40000 11.20000 10.70000 139.90000
|
144
|
+
215.00000 130.50000 130.40000 10.60000 11.10000 139.90000
|
145
|
+
214.50000 129.80000 129.80000 11.40000 10.00000 139.30000
|
146
|
+
214.90000 130.60000 130.40000 11.90000 10.50000 139.80000
|
147
|
+
215.00000 130.50000 130.40000 11.40000 10.70000 139.90000
|
148
|
+
215.30000 130.60000 130.30000 9.30000 11.30000 138.10000
|
149
|
+
214.70000 130.20000 130.10000 10.70000 11.00000 139.40000
|
150
|
+
214.90000 129.90000 130.00000 9.90000 12.30000 139.40000
|
151
|
+
214.90000 130.30000 129.90000 11.90000 10.60000 139.80000
|
152
|
+
214.60000 129.90000 129.70000 11.90000 10.10000 139.00000
|
153
|
+
214.60000 129.70000 129.30000 10.40000 11.00000 139.30000
|
154
|
+
214.50000 130.10000 130.10000 12.10000 10.30000 139.40000
|
155
|
+
214.50000 130.30000 130.00000 11.00000 11.50000 139.50000
|
156
|
+
215.10000 130.00000 130.30000 11.60000 10.50000 139.70000
|
157
|
+
214.20000 129.70000 129.60000 10.30000 11.40000 139.50000
|
158
|
+
214.40000 130.10000 130.00000 11.30000 10.70000 139.20000
|
159
|
+
214.80000 130.40000 130.60000 12.50000 10.00000 139.30000
|
160
|
+
214.60000 130.60000 130.10000 8.10000 12.10000 137.90000
|
161
|
+
215.60000 130.10000 129.70000 7.40000 12.20000 138.40000
|
162
|
+
214.90000 130.50000 130.10000 9.90000 10.20000 138.10000
|
163
|
+
214.60000 130.10000 130.00000 11.50000 10.60000 139.50000
|
164
|
+
214.70000 130.10000 130.20000 11.60000 10.90000 139.10000
|
165
|
+
214.30000 130.30000 130.00000 11.40000 10.50000 139.80000
|
166
|
+
215.10000 130.30000 130.60000 10.30000 12.00000 139.70000
|
167
|
+
216.30000 130.70000 130.40000 10.00000 10.10000 138.80000
|
168
|
+
215.60000 130.40000 130.10000 9.60000 11.20000 138.60000
|
169
|
+
214.80000 129.90000 129.80000 9.60000 12.00000 139.60000
|
170
|
+
214.90000 130.00000 129.90000 11.40000 10.90000 139.70000
|
171
|
+
213.90000 130.70000 130.50000 8.70000 11.50000 137.80000
|
172
|
+
214.20000 130.60000 130.40000 12.00000 10.20000 139.60000
|
173
|
+
214.80000 130.50000 130.30000 11.80000 10.50000 139.40000
|
174
|
+
214.80000 129.60000 130.00000 10.40000 11.60000 139.20000
|
175
|
+
214.80000 130.10000 130.00000 11.40000 10.50000 139.60000
|
176
|
+
214.90000 130.40000 130.20000 11.90000 10.70000 139.00000
|
177
|
+
214.30000 130.10000 130.10000 11.60000 10.50000 139.70000
|
178
|
+
214.50000 130.40000 130.00000 9.90000 12.00000 139.60000
|
179
|
+
214.80000 130.50000 130.30000 10.20000 12.10000 139.10000
|
180
|
+
214.50000 130.20000 130.40000 8.20000 11.80000 137.80000
|
181
|
+
215.00000 130.40000 130.10000 11.40000 10.70000 139.10000
|
182
|
+
214.80000 130.60000 130.60000 8.00000 11.40000 138.70000
|
183
|
+
215.00000 130.50000 130.10000 11.00000 11.40000 139.30000
|
184
|
+
214.60000 130.50000 130.40000 10.10000 11.40000 139.30000
|
185
|
+
214.70000 130.20000 130.10000 10.70000 11.10000 139.50000
|
186
|
+
214.70000 130.40000 130.00000 11.50000 10.70000 139.40000
|
187
|
+
214.50000 130.40000 130.00000 8.00000 12.20000 138.50000
|
188
|
+
214.80000 130.00000 129.70000 11.40000 10.60000 139.20000
|
189
|
+
214.80000 129.90000 130.20000 9.60000 11.90000 139.40000
|
190
|
+
214.60000 130.30000 130.20000 12.70000 9.10000 139.20000
|
191
|
+
215.10000 130.20000 129.80000 10.20000 12.00000 139.40000
|
192
|
+
215.40000 130.50000 130.60000 8.80000 11.00000 138.60000
|
193
|
+
214.70000 130.30000 130.20000 10.80000 11.10000 139.20000
|
194
|
+
215.00000 130.50000 130.30000 9.60000 11.00000 138.50000
|
195
|
+
214.90000 130.30000 130.50000 11.60000 10.60000 139.80000
|
196
|
+
215.00000 130.40000 130.30000 9.90000 12.10000 139.60000
|
197
|
+
215.10000 130.30000 129.90000 10.30000 11.50000 139.70000
|
198
|
+
214.80000 130.30000 130.40000 10.60000 11.10000 140.00000
|
199
|
+
214.70000 130.70000 130.80000 11.20000 11.20000 139.40000
|
200
|
+
214.30000 129.90000 129.90000 10.20000 11.50000 139.60000
|
Binary file
|
data/spec/io/io_spec.rb
CHANGED
@@ -1,40 +1,177 @@
|
|
1
1
|
require 'spec_helper.rb'
|
2
2
|
|
3
|
-
describe Daru::
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
describe Daru::IO do
|
4
|
+
describe Daru::DataFrame do
|
5
|
+
context ".from_csv" do
|
6
|
+
it "loads from a CSV file" do
|
7
|
+
df = Daru::DataFrame.from_csv('spec/fixtures/matrix_test.csv',
|
8
|
+
col_sep: ' ', headers: true)
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
expect(df.vectors).to eq([:image_resolution, :mls, :true_transform].to_index)
|
11
|
+
expect(df.vector[:image_resolution].first).to eq(6.55779)
|
12
|
+
expect(df.vector[:true_transform].first).to eq("-0.2362347,0.6308649,0.7390552,0,0.6523478,-0.4607318,0.6018043,0,0.7201635,0.6242881,-0.3027024,4262.65,0,0,0,1")
|
13
|
+
end
|
14
|
+
|
15
|
+
it "works properly for repeated headers", focus: true do
|
16
|
+
df = Daru::DataFrame.from_csv('spec/fixtures/repeated_fields.csv')
|
17
|
+
expect(df.vectors.to_a).to eq([:a1, :age_1, :age_2, :city, :id, :name_1, :name_2])
|
18
|
+
|
19
|
+
age = Daru::Vector.new([3, 4, 5, 6, nil, 8])
|
20
|
+
expect(df[:age_2]).to eq(age)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "accepts scientific notation as float" do
|
24
|
+
ds = Daru::DataFrame.from_csv('spec/fixtures/scientific_notation.csv')
|
25
|
+
expect(ds.vectors.to_a).to eq([:x, :y])
|
26
|
+
y = [9.629587310436753e+127, 1.9341543147883677e+129, 3.88485279048245e+130]
|
27
|
+
y.zip(ds[:y]).each do |y_expected, y_ds|
|
28
|
+
expect(y_ds).to be_within(0.001).of(y_expected)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "#write_csv" do
|
34
|
+
it "writes DataFrame to a CSV file" do
|
35
|
+
df = Daru::DataFrame.new({
|
36
|
+
a: [1,2,3,4,5],
|
37
|
+
b: [11,22,33,44,55],
|
38
|
+
c: ['a', 'g', 4, 5,'addadf'],
|
39
|
+
d: [nil, 23, 4,'a','ff']})
|
40
|
+
t = Tempfile.new('data.csv')
|
41
|
+
df.write_csv t.path
|
42
|
+
|
43
|
+
expect(Daru::DataFrame.from_csv(t.path)).to eq(df)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context ".from_excel" do
|
48
|
+
before do
|
49
|
+
id = Daru::Vector.new([1, 2, 3, 4, 5, 6])
|
50
|
+
name = Daru::Vector.new(%w(Alex Claude Peter Franz George Fernand))
|
51
|
+
age = Daru::Vector.new( [20, 23, 25, nil, 5.5, nil])
|
52
|
+
city = Daru::Vector.new(['New York', 'London', 'London', 'Paris', 'Tome', nil])
|
53
|
+
a1 = Daru::Vector.new(['a,b', 'b,c', 'a', nil, 'a,b,c', nil])
|
54
|
+
@expected = Daru::DataFrame.new({
|
55
|
+
:id => id, :name => name, :age => age, :city => city, :a1 => a1
|
56
|
+
}, order: [:id, :name, :age, :city, :a1])
|
57
|
+
end
|
58
|
+
|
59
|
+
it "loads DataFrame from an Excel Spreadsheet" do
|
60
|
+
df = Daru::DataFrame.from_excel 'spec/fixtures/test_xls.xls'
|
61
|
+
|
62
|
+
expect(df.nrows).to eq(6)
|
63
|
+
expect(df.vectors.to_a).to eq([:id, :name, :age, :city, :a1])
|
64
|
+
expect(df[:age][5]).to eq(nil)
|
65
|
+
expect(@expected).to eq(df)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context "#write_excel" do
|
70
|
+
before do
|
71
|
+
a = Daru::Vector.new(100.times.map { rand(100) })
|
72
|
+
b = Daru::Vector.new((['b'] * 100))
|
73
|
+
@expected = Daru::DataFrame.new({ :b => b, :a => a })
|
74
|
+
|
75
|
+
tempfile = Tempfile.new('test_write.xls')
|
76
|
+
|
77
|
+
@expected.write_excel tempfile.path
|
78
|
+
@df = Daru::DataFrame.from_excel tempfile.path
|
79
|
+
end
|
80
|
+
|
81
|
+
it "correctly writes DataFrame to an Excel Spreadsheet" do
|
82
|
+
expect(@expected).to eq(@df)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context ".from_sql" do
|
87
|
+
it "loads data from an SQL database" do
|
88
|
+
# TODO: write these tests
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "#write_sql" do
|
93
|
+
it "writes the DataFrame to an SQL database" do
|
94
|
+
# TODO: write these tests
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context ".from_plaintext" do
|
99
|
+
it "reads data from plain text files" do
|
100
|
+
df = Daru::DataFrame.from_plaintext 'spec/fixtures/bank2.dat', [:v1,:v2,:v3,:v4,:v5,:v6]
|
101
|
+
|
102
|
+
expect(df.vectors.to_a).to eq([:v1,:v2,:v3,:v4,:v5,:v6])
|
103
|
+
end
|
12
104
|
end
|
13
|
-
end
|
14
105
|
|
15
|
-
|
16
|
-
|
17
|
-
|
106
|
+
context "JSON" do
|
107
|
+
it "loads parsed JSON" do
|
108
|
+
require 'json'
|
18
109
|
|
19
|
-
|
20
|
-
|
110
|
+
json = File.read 'spec/fixtures/countries.json'
|
111
|
+
df = Daru::DataFrame.new JSON.parse(json)
|
21
112
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
113
|
+
expect(df.vectors).to eq([
|
114
|
+
:name, :nativeName, :tld, :cca2, :ccn3, :cca3, :currency, :callingCode,
|
115
|
+
:capital, :altSpellings, :relevance, :region, :subregion, :language,
|
116
|
+
:languageCodes, :translations, :latlng, :demonym, :borders, :area].to_index)
|
26
117
|
|
27
|
-
|
118
|
+
expect(df.row[0][:name]).to eq("Afghanistan")
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
context "Marshalling" do
|
123
|
+
it "" do
|
124
|
+
vector = Daru::Vector.new (0..100).collect { |_n| rand(100) }
|
125
|
+
dataframe = Daru::Vector.new({a: vector, b: vector, c: vector})
|
126
|
+
expect(Marshal.load(Marshal.dump(dataframe))).to eq(dataframe)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context "#save" do
|
131
|
+
before do
|
132
|
+
@data_frame = Daru::DataFrame.new({b: [11,12,13,14,15], a: [1,2,3,4,5],
|
133
|
+
c: [11,22,33,44,55]},
|
134
|
+
order: [:a, :b, :c],
|
135
|
+
index: [:one, :two, :three, :four, :five])
|
136
|
+
end
|
137
|
+
|
138
|
+
it "saves df to a file" do
|
139
|
+
outfile = Tempfile.new('dataframe.df')
|
140
|
+
@data_frame.save(outfile.path)
|
141
|
+
a = Daru::IO.load(outfile.path)
|
142
|
+
expect(a).to eq(@data_frame)
|
143
|
+
end
|
28
144
|
end
|
29
145
|
end
|
30
146
|
|
31
|
-
|
32
|
-
|
147
|
+
describe Daru::Vector do
|
148
|
+
context "Marshalling" do
|
149
|
+
it "" do
|
150
|
+
vector = Daru::Vector.new (0..100).collect { |_n| rand(100) }
|
151
|
+
expect(Marshal.load(Marshal.dump(vector))).to eq(vector)
|
152
|
+
end
|
153
|
+
end
|
33
154
|
|
155
|
+
context "#save" do
|
156
|
+
ALL_DTYPES.each do |dtype|
|
157
|
+
it "saves to a file and returns the same Vector of type #{dtype}" do
|
158
|
+
vector = Daru::Vector.new(
|
159
|
+
[5, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 1, 2, 3, 4, 11, -99, -99],
|
160
|
+
dtype: dtype)
|
161
|
+
outfile = Tempfile.new('vector.vec')
|
162
|
+
vector.save(outfile.path)
|
163
|
+
expect(Daru::IO.load(outfile.path)).to eq(vector)
|
164
|
+
end
|
165
|
+
end
|
34
166
|
end
|
35
167
|
end
|
36
168
|
|
37
|
-
|
38
|
-
|
169
|
+
describe Daru::Index do
|
170
|
+
context "Marshalling" do
|
171
|
+
it "" do
|
172
|
+
i = Daru::Index.new([:a, :b, :c, :d, :e], [8,6,4,3,5])
|
173
|
+
expect(Marshal.load(Marshal.dump(i))).to eq(i)
|
174
|
+
end
|
175
|
+
end
|
39
176
|
end
|
40
|
-
end
|
177
|
+
end
|