jsvd-sequel_vectorized 0.0.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.
- data/ChangeLog +11 -0
- data/README.rdoc +28 -0
- data/lib/sequel_vectorized.rb +29 -0
- data/sequel_vectorized.gemspec +25 -0
- data/spec/sequel_vectorized_spec.rb +75 -0
- metadata +74 -0
data/ChangeLog
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
== sequel_vectorized
|
2
|
+
|
3
|
+
* Allows Sequel::Dataset to be exported as an Hash of Arrays and NArrays (http://narray.rubyforge.org)
|
4
|
+
* Numeric and boolean columns are converted to NArrays. Others are kept as Arrays.
|
5
|
+
* Aims for bulk numeric data processing
|
6
|
+
|
7
|
+
== Example
|
8
|
+
|
9
|
+
TODO
|
10
|
+
|
11
|
+
== Installation
|
12
|
+
|
13
|
+
gem install jsvd-sequel_vectorized
|
14
|
+
|
15
|
+
== Features/Problems
|
16
|
+
|
17
|
+
* Conversions are currently limited to Numeric => Float, Boolean => byte
|
18
|
+
* TODO: optionally pass an Hash of :class => proc to vectorize.
|
19
|
+
* Proc will transform an instance of :class to a NArray usable type (float, byte)
|
20
|
+
|
21
|
+
== Synopsis
|
22
|
+
|
23
|
+
|
24
|
+
== Copyright
|
25
|
+
|
26
|
+
Author:: João Duarte <jsvduarte@gmail.com>
|
27
|
+
Copyright:: Copyright (c) 2008 jsvd
|
28
|
+
License::
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'narray'
|
2
|
+
|
3
|
+
class Sequel::Dataset
|
4
|
+
def vectorize
|
5
|
+
|
6
|
+
result = {}
|
7
|
+
|
8
|
+
# transform dataset to hash of arrays
|
9
|
+
map {|row| row.each{|att,value| (result[att] ||= []) << value}}
|
10
|
+
|
11
|
+
# transform numeric and boolean arrays to narrays
|
12
|
+
result.each do |k,v|
|
13
|
+
|
14
|
+
first = v.first
|
15
|
+
|
16
|
+
if first.kind_of?(Numeric) then
|
17
|
+
|
18
|
+
v[0] = first.to_f # so NArray is always of type float
|
19
|
+
result[k] = NArray.to_na v
|
20
|
+
|
21
|
+
elsif first == true || first == false then
|
22
|
+
|
23
|
+
result[k] = NArray.float(v.size)
|
24
|
+
result[k][] = v.map {|i| (i == true) ? 1 : 0 }
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
spec = Gem::Specification.new do |s|
|
2
|
+
s.name = "sequel_vectorized"
|
3
|
+
s.version = "0.0.3"
|
4
|
+
s.platform = Gem::Platform::RUBY
|
5
|
+
s.has_rdoc = false
|
6
|
+
s.summary = ""
|
7
|
+
s.description = ""
|
8
|
+
s.author = "João Duarte"
|
9
|
+
s.email = "jsvduarte@gmail.com"
|
10
|
+
#s.executables = %w( )
|
11
|
+
#s.bindir = "bin"
|
12
|
+
s.require_path = "lib"
|
13
|
+
|
14
|
+
s.add_dependency('sequel', '>=2.9.0')
|
15
|
+
s.add_dependency('narray', '>=0.5.8')
|
16
|
+
s.required_ruby_version = '>= 1.8.5'
|
17
|
+
|
18
|
+
s.files = %w(
|
19
|
+
lib/sequel_vectorized.rb
|
20
|
+
README.rdoc
|
21
|
+
spec/sequel_vectorized_spec.rb
|
22
|
+
sequel_vectorized.gemspec
|
23
|
+
ChangeLog)
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'spec'
|
2
|
+
require 'sequel'
|
3
|
+
|
4
|
+
describe Sequel::Dataset do
|
5
|
+
|
6
|
+
before :all do
|
7
|
+
|
8
|
+
@DB = Sequel::sqlite
|
9
|
+
|
10
|
+
@DB.create_table :items do
|
11
|
+
text :name, :unique => true, :null => false
|
12
|
+
boolean :active, :default => true
|
13
|
+
column :price, :float
|
14
|
+
end
|
15
|
+
|
16
|
+
@DB.create_table :events do
|
17
|
+
float :value
|
18
|
+
float :ts
|
19
|
+
end
|
20
|
+
|
21
|
+
@items = @DB[:items]
|
22
|
+
|
23
|
+
@items << {:name => 'abc', :price => 97}
|
24
|
+
@items << {:name => 'def', :price => 11, :active => false}
|
25
|
+
@items << {:name => 'ghi', :price => 18}
|
26
|
+
|
27
|
+
@events = @DB[:events]
|
28
|
+
|
29
|
+
@events << {:value => 2.2, :ts => Time.local(2008,1,1,12,30).to_f}
|
30
|
+
@events << {:value => 1.1, :ts => Time.local(2008,1,1,13,30).to_f}
|
31
|
+
@events << {:value => 3.3, :ts => Time.local(2008,1,1,14,30).to_f}
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
it "doesn't complain when including in Sequel::Dataset class" do
|
36
|
+
lambda {
|
37
|
+
require 'lib/sequel_vectorized'
|
38
|
+
}.should_not raise_error
|
39
|
+
end
|
40
|
+
|
41
|
+
it "transforms numeric columns to narray" do
|
42
|
+
|
43
|
+
ret = @events.select(:value).vectorize
|
44
|
+
ret[:value].should be_an_instance_of NArray
|
45
|
+
ret[:value].should == NArray.to_na([2.2, 1.1, 3.3])
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
it "creates narray of floats for any kind of numeric array" do
|
50
|
+
|
51
|
+
ret = @events.vectorize
|
52
|
+
ret.each {|k,v| v.should be_an_instance_of NArray }
|
53
|
+
ret.should == {
|
54
|
+
:value => NArray.to_na([2.2, 1.1, 3.3]),
|
55
|
+
:ts => NArray.to_na([1199190600.0, 1199194200.0, 1199197800.0])
|
56
|
+
}
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
it "creates narray of bytes from an array of booleans" do
|
61
|
+
|
62
|
+
ret = @items.select(:active).vectorize
|
63
|
+
ret[:active].should == NArray.to_na([1,0,1])
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
# spec an example filter
|
68
|
+
it "is possible to vectorize the result set of a filter" do
|
69
|
+
@events.filter(:value > 2).vectorize.should == {
|
70
|
+
:value => NArray.to_na([2.2, 3.3]),
|
71
|
+
:ts => NArray.to_na([Time.local(2008,1,1,12,30).to_f, Time.local(2008,1,1,14,30).to_f])
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
metadata
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jsvd-sequel_vectorized
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- "Jo\xC3\xA3o Duarte"
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-01-11 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: sequel
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.9.0
|
23
|
+
version:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: narray
|
26
|
+
version_requirement:
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: 0.5.8
|
32
|
+
version:
|
33
|
+
description: ""
|
34
|
+
email: jsvduarte@gmail.com
|
35
|
+
executables: []
|
36
|
+
|
37
|
+
extensions: []
|
38
|
+
|
39
|
+
extra_rdoc_files: []
|
40
|
+
|
41
|
+
files:
|
42
|
+
- lib/sequel_vectorized.rb
|
43
|
+
- README.rdoc
|
44
|
+
- spec/sequel_vectorized_spec.rb
|
45
|
+
- sequel_vectorized.gemspec
|
46
|
+
- ChangeLog
|
47
|
+
has_rdoc: false
|
48
|
+
homepage:
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options: []
|
51
|
+
|
52
|
+
require_paths:
|
53
|
+
- lib
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: 1.8.5
|
59
|
+
version:
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: "0"
|
65
|
+
version:
|
66
|
+
requirements: []
|
67
|
+
|
68
|
+
rubyforge_project:
|
69
|
+
rubygems_version: 1.2.0
|
70
|
+
signing_key:
|
71
|
+
specification_version: 2
|
72
|
+
summary: ""
|
73
|
+
test_files: []
|
74
|
+
|