mikon 0.1.0.rc1

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.
@@ -0,0 +1,3 @@
1
+ module Mikon
2
+ VERSION = "0.1.0.rc1"
3
+ end
data/mikon.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mikon/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mikon"
8
+ spec.version = Mikon::VERSION
9
+ spec.authors = ["Naoki Nishida"]
10
+ spec.email = ["domitry@gmail.com"]
11
+ spec.summary = %q{DataFrame library for Ruby}
12
+ spec.description = %q{DataFrame works with NMatrix, Statsample, and Nyaplot}
13
+ spec.homepage = "http://github.com/domitry/mikon"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency "nmatrix", "~> 0.1.0.rc5"
22
+ spec.add_runtime_dependency "formatador", "~> 0.2.5"
23
+ spec.add_runtime_dependency "nyaplot", "~> 0.1.1"
24
+ spec.add_development_dependency "bundler", "~> 1.5"
25
+ spec.add_development_dependency "rake"
26
+ end
File without changes
@@ -0,0 +1,200 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mikon::DataFrame do
4
+ before(:each) do
5
+ @df = Mikon::DataFrame.new([{a: 1, b: 5}, {a: 2, b: 2}, {a: 3, b: 4}])
6
+ end
7
+
8
+ context ".new" do
9
+ {
10
+ hash_in_array: [{a: 1, b: 2}, {a: 2, b: 3}, {a: 3, b: 4}],
11
+ darray_in_array: [[1, 2, 3], [2, 3, 4]].map{|column| Mikon::DArray.new(column)},
12
+ row_in_array: [1, 2, 3].map{|val| Mikon::Row.new([:a, :b], [val, val+1], [0, 1])},
13
+ array_in_array: [[1, 2, 3], [2, 3, 4]],
14
+ array_in_hash: {a: [1,2,3], b: [2,3,4]}
15
+ }.each do |name, input|
16
+ it "should accept " + name.to_s + " input" do
17
+ df = Mikon::DataFrame.new(input, labels: [:a, :b])
18
+ expect(df[:a].to_a).to eq([1, 2, 3])
19
+ end
20
+
21
+ it "should be able to be specified its indices" do
22
+ df = Mikon::DataFrame.new(input, index: [:a, :b, :c])
23
+ expect(df.index).to eq([:a, :b, :c])
24
+ end
25
+
26
+ it "should be able to be specified its labels" do
27
+ df = Mikon::DataFrame.new(input, labels: [:foo, :bar])
28
+ expect(df.labels).to eq([:foo, :bar])
29
+ end
30
+
31
+ it "should assign unique id to each dataframe" do
32
+ df1, df2 = [0, 1].map{Mikon::DataFrame.new(input, labels: [:a, :b])}
33
+ expect(df1.name == df2.name).to eq(false)
34
+ end
35
+ end
36
+ end
37
+
38
+ context ".from_csv" do
39
+ it "should accept csv file" do
40
+ path = File.expand_path("../../data/test.csv", __FILE__)
41
+ df = Mikon::DataFrame.from_csv(path)
42
+ expect(df[:a].to_a).to eq([1, 3])
43
+ end
44
+
45
+ it "should accept tsv file" do
46
+ path = File.expand_path("../../data/test.tsv", __FILE__)
47
+ df = Mikon::DataFrame.from_csv(path, col_sep: "\t")
48
+ expect(df[:a].to_a).to eq([1, 3])
49
+ end
50
+
51
+ it "should accept no-header csv" do
52
+ path = File.expand_path("../../data/no_header.csv", __FILE__)
53
+ df = Mikon::DataFrame.from_csv(path, headers: [:a, :b])
54
+ expect(df[:a].to_a).to eq([1, 3])
55
+ end
56
+ end
57
+
58
+ context "#head" do
59
+ it "should be return a partial dataframe" do
60
+ expect(@df.head(2).class).to eq(Mikon::DataFrame)
61
+ expect(@df.head(2)[:a].to_a).to eq([1, 2])
62
+ end
63
+
64
+ it "should keep index number" do
65
+ expect(@df.head(2).index).to eq([0, 1])
66
+ end
67
+ end
68
+
69
+ context "#tail" do
70
+ it "should be return a partial dataframe" do
71
+ expect(@df.tail(2).class).to eq(Mikon::DataFrame)
72
+ expect(@df.tail(2)[:a].to_a).to eq([2, 3])
73
+ end
74
+
75
+ it "should keep index number" do
76
+ expect(@df.tail(2).index).to eq([1, 2])
77
+ end
78
+ end
79
+
80
+ context "#length" do
81
+ it "should return the length of each column" do
82
+ @df.labels.each do |label|
83
+ expect(@df.length).to eq(@df[label].length)
84
+ end
85
+ end
86
+ end
87
+
88
+ context "#[]" do
89
+ it "should return an instance of Mikon::Series if Symbol is passed" do
90
+ expect(@df[:a].to_a).to eq([1,2,3])
91
+ end
92
+
93
+ it "should return partial dataframe if Array of Numerics is passed" do
94
+ expect(@df[0..1][:a].to_a).to eq([1,2])
95
+ end
96
+ end
97
+
98
+ context "#to_html" do
99
+ it "should return a valid html" do
100
+ html = @df.to_html
101
+ expect(html.count("<")).to eq(html.count(">"))
102
+ end
103
+ end
104
+
105
+ context "#to_json" do
106
+ it "should return a valid json" do
107
+ json = @df.to_json
108
+ expect(json.count("{")).to eq(json.count("}"))
109
+ expect(json.count("[")).to eq(json.count("]"))
110
+ end
111
+ end
112
+
113
+ context "#select" do
114
+ it "should return Enumurator if block is not passed" do
115
+ expect(@df.select.class).to eq(Enumerator)
116
+ end
117
+
118
+ it "should return partial dataframe" do
119
+ df = @df.select{ a < 2}
120
+ expect(df.class).to eq(Mikon::DataFrame)
121
+ expect(df.length).to eq(1)
122
+ expect(df[:a].to_a).to eq([1])
123
+ end
124
+ end
125
+
126
+ context "#map" do
127
+ it "should return Enumurator if block is not passed" do
128
+ expect(@df.map.class).to eq(Enumerator)
129
+ end
130
+
131
+ it "should return an instance of Mikon::Series" do
132
+ series = @df.map{a*2}.name(:c)
133
+ expect(series.class).to eq(Mikon::Series)
134
+ expect(series.to_a).to eq([2, 4, 6])
135
+ expect(series.name).to eq(:c)
136
+ end
137
+ end
138
+
139
+ context "#all?" do
140
+ it "should accept Mikon::Row DSL" do
141
+ expect(@df.all?{a<=3 && b<0}).to eq(false)
142
+ end
143
+ end
144
+
145
+ context "#any?" do
146
+ it "should accept Mikon::Row DSL" do
147
+ expect(@df.any?{b<3}).to eq(true)
148
+ end
149
+ end
150
+
151
+ context "#sort_by" do
152
+ it "should accept Mikon::Row DSL" do
153
+ expect(@df.sort_by{b}.index).to eq([1, 2, 0])
154
+ end
155
+ end
156
+
157
+ context "#sort" do
158
+ it "should decide which column to sort with by the first argument" do
159
+ # b: [5, 2, 4]
160
+ expect(@df.sort(:b).index).to eq([1, 2, 0])
161
+ end
162
+ it "shoudl decide if do ascending sort by the second argument" do
163
+ expect(@df.sort(:b, false).index).to eq([1, 2, 0].reverse)
164
+ end
165
+ end
166
+
167
+ context "#insert_column" do
168
+ it "should use Mikon::Row DSL when block is passed" do
169
+ @df.insert_column(:c){a*2}
170
+ expect(@df[:c].to_a).to eq([2, 4, 6])
171
+ end
172
+
173
+ it "should accept Array as a second argument" do
174
+ @df.insert_column(:c, [2, 4, 6])
175
+ expect(@df[:c].to_a).to eq([2, 4, 6])
176
+ end
177
+
178
+ it "should accept Series as a second argument" do
179
+ @df.insert_column((@df[:a]*2).name(:c))
180
+ expect(@df[:c].to_a).to eq([2, 4, 6])
181
+ end
182
+ end
183
+
184
+ context "row" do
185
+ it "should return row whose index is specified one" do
186
+ row = @df.row(1)
187
+ expect(row.class).to eq(Mikon::Row)
188
+ expect(row.index).to eq(1)
189
+ expect(row.labels).to eq([:a, :b])
190
+ end
191
+ end
192
+
193
+ context "#each_row" do
194
+ it "should be iterate row as Mikon::Row" do
195
+ check = []
196
+ @df.each_row{|row| check.push(row.is_a?(Mikon::Row))}
197
+ expect(check.all?{|val| val}).to eq(true)
198
+ end
199
+ end
200
+ end
File without changes
@@ -0,0 +1,2 @@
1
+ 1,2
2
+ 3,4
@@ -0,0 +1,3 @@
1
+ a,b
2
+ 1,2
3
+ 3,4
@@ -0,0 +1,3 @@
1
+ a b
2
+ 1 2
3
+ 3 4
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'mikon'
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mikon
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0.rc1
5
+ platform: ruby
6
+ authors:
7
+ - Naoki Nishida
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nmatrix
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.0.rc5
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.0.rc5
27
+ - !ruby/object:Gem::Dependency
28
+ name: formatador
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.5
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.5
41
+ - !ruby/object:Gem::Dependency
42
+ name: nyaplot
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.1.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.1.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.5'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.5'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: DataFrame works with NMatrix, Statsample, and Nyaplot
84
+ email:
85
+ - domitry@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - Gemfile
92
+ - LICENSE.txt
93
+ - README.md
94
+ - Rakefile
95
+ - example/Mikon_Manipuration.ipynb
96
+ - example/Mikon_stats.ipynb
97
+ - example/Plotting.ipynb
98
+ - lib/mikon.rb
99
+ - lib/mikon/core/array.rb
100
+ - lib/mikon/core/dataframe.rb
101
+ - lib/mikon/core/index.rb
102
+ - lib/mikon/core/series.rb
103
+ - lib/mikon/pivot.rb
104
+ - lib/mikon/plot.rb
105
+ - lib/mikon/stats.rb
106
+ - lib/mikon/version.rb
107
+ - mikon.gemspec
108
+ - spec/core/array_spec.rb
109
+ - spec/core/dataframe_spec.rb
110
+ - spec/core/series_spec.rb
111
+ - spec/data/no_header.csv
112
+ - spec/data/test.csv
113
+ - spec/data/test.tsv
114
+ - spec/spec_helper.rb
115
+ homepage: http://github.com/domitry/mikon
116
+ licenses:
117
+ - MIT
118
+ metadata: {}
119
+ post_install_message:
120
+ rdoc_options: []
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">"
131
+ - !ruby/object:Gem::Version
132
+ version: 1.3.1
133
+ requirements: []
134
+ rubyforge_project:
135
+ rubygems_version: 2.2.2
136
+ signing_key:
137
+ specification_version: 4
138
+ summary: DataFrame library for Ruby
139
+ test_files:
140
+ - spec/core/array_spec.rb
141
+ - spec/core/dataframe_spec.rb
142
+ - spec/core/series_spec.rb
143
+ - spec/data/no_header.csv
144
+ - spec/data/test.csv
145
+ - spec/data/test.tsv
146
+ - spec/spec_helper.rb
147
+ has_rdoc: