jsvd-sequel_vectorized 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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
+