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 ADDED
@@ -0,0 +1,11 @@
1
+ == 0.0.3 / 2009-01-28
2
+
3
+ * No longer has module Sequel::Plugins::Vectorized
4
+
5
+ == 0.0.2 / 2009-01-28
6
+
7
+ * Bit more plugin-ish.
8
+
9
+ == 0.0.1 / 2009-01-28
10
+
11
+ * initial release
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
+