daru_plotly 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/examples/wine.csv ADDED
@@ -0,0 +1 @@
1
+ type,fixed acidity,volatile acidity,citric acid,residual sugar,chlorides,free sulfur dioxide,total sulfur dioxide,density,pH,sulphates,alcohol,quality
@@ -0,0 +1,20 @@
1
+ require 'initializer/category'
2
+ require 'initializer/dataframe'
3
+ require 'initializer/vector'
4
+ require 'daru'
5
+
6
+ module Daru::Plotly::Initializer
7
+ [:plot, :generate_data].each do |method_name|
8
+ define_method method_name do |data, opts|
9
+ if data.is_a? Daru::DataFrame
10
+ Daru::Plotly::Initializer::DataFrame.send(method_name ,data, opts)
11
+ elsif data.is_a? Daru::Vector
12
+ Daru::Plotly::Initializer::Vector.send(method_name, data, opts)
13
+ else
14
+ raise ArgumentError, 'first argument should be Daru::DataFrame or Daru::Vector.'
15
+ end
16
+ end
17
+ end
18
+
19
+ module_function :plot, :generate_data
20
+ end
@@ -0,0 +1,11 @@
1
+ require 'rbplotly'
2
+
3
+ module Daru
4
+ module Plotting
5
+ module Category
6
+ module PlotlyLibrary
7
+ include ::Plotly
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,58 @@
1
+ require 'rbplotly'
2
+ require 'daru'
3
+
4
+ module Daru::Plotly
5
+ module Initializer
6
+ module DataFrame
7
+ def self.plot(df, opts={})
8
+ raise ArgumentError, "first argument should be Daru::DataFrame, not #{df.class}." unless df.is_a?(Daru::DataFrame)
9
+ data = opts[:data] || generate_data(df, opts)
10
+ layout = { width: (opts[:width] || 1000), height: (opts[:height] || 500) }.merge(opts[:layout] || {})
11
+
12
+ plot = Plotly::Plot.new(data: data, layout: layout)
13
+ yield plot if block_given?
14
+ plot
15
+ end
16
+
17
+ def self.extract_type(plot_type)
18
+ supported_types = [:scatter, :bar, :pie, :heatmap]
19
+
20
+ case plot_type
21
+ when *supported_types
22
+ plot_type
23
+ when :histogram
24
+ raise ArgumentError, 'You can plot histogram only with Daru::Vector, not Daru::DataFrame.'
25
+ when nil
26
+ :scatter
27
+ else
28
+ raise ArgumentError, "Type must be included in #{supported_types}"
29
+ end
30
+ end
31
+
32
+ def self.generate_data(df, opts)
33
+ case type = extract_type(opts[:type])
34
+ when :pie
35
+ labels = df[opts[:labels] || :labels].to_a
36
+ values = df[opts[:values] || :values].to_a
37
+ [{ labels: labels, values: values, type: :pie }.merge(opts[:opts] || {})]
38
+ when :heatmap
39
+ [{
40
+ z: df.data.map { |vector| vector.to_a }.transpose,
41
+ x: df.vectors.to_a,
42
+ y: df.index.to_a,
43
+ type: type
44
+ }]
45
+ else
46
+ x = df[opts[:x] || :x].to_a
47
+ mode = (Array(opts[:mode]) || [:markers]).map(&:to_s).join('+')
48
+ Array(opts[:y] || :y).map do |vector_name|
49
+ vector = df[vector_name]
50
+ {
51
+ x: x, y: vector.to_a, type: type, mode: mode, name: vector_name
52
+ }.merge(opts[:opts] || {})
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,44 @@
1
+ require 'rbplotly'
2
+ require 'daru'
3
+
4
+ module Daru::Plotly
5
+ module Initializer
6
+ module Vector
7
+ def self.plot(vector, opts={})
8
+ raise ArgumentError, "first argument should be Daru::Vector, not #{vector.class}." unless vector.is_a?(Daru::Vector)
9
+ data = generate_data(vector, opts)
10
+ layout = { width: (opts[:width] || 1000), height: (opts[:height] || 500) }.merge(opts[:layout] || {})
11
+
12
+ plot = Plotly::Plot.new(data: data, layout: layout)
13
+ yield plot if block_given?
14
+ plot
15
+ end
16
+
17
+ def self.extract_type(plot_type)
18
+ supported_types = [:scatter, :bar, :histogram, :pie]
19
+
20
+ case plot_type
21
+ when *supported_types
22
+ plot_type
23
+ when nil
24
+ :scatter
25
+ else
26
+ raise ArgumentError, "Type must be included in #{supported_types}."
27
+ end
28
+ end
29
+
30
+ def self.generate_data(vector, opts)
31
+ type = extract_type opts[:type]
32
+
33
+ case type
34
+ when :histogram
35
+ [{ x: vector.to_a, type: :histogram }.merge(opts[:opts] || {})]
36
+ when :scatter, :bar
37
+ [{ x: vector.index.to_a, y: vector.to_a, type: type, mode: (opts[:mode]&.join('+')&.to_sym || :markers) }.merge(opts[:opts] || {})]
38
+ when :pie
39
+ [{ labels: vector.index.to_a, values: vector.to_a, type: :pie }.merge(opts[:opts] || {})]
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
data/lib/version.rb ADDED
@@ -0,0 +1,5 @@
1
+ module Daru
2
+ module Plotly
3
+ VERSION = '0.1.0'.freeze
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,203 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: daru_plotly
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Yusuke Sangenya
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-05-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: daru
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rbplotly
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.12'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.12'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rbczmq
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: iruby
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: spreadsheet
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: nyaplot
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: gruff
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: Plot Daru's DataFrame with plotly.
154
+ email:
155
+ - longinus.eva@gmail.com
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - ".gitignore"
161
+ - ".rspec"
162
+ - ".travis.yml"
163
+ - CODE_OF_CONDUCT.md
164
+ - Dockerfile
165
+ - Gemfile
166
+ - README.md
167
+ - Rakefile
168
+ - bin/console
169
+ - bin/setup
170
+ - daru_plotly.gemspec
171
+ - examples/001.csv
172
+ - examples/O_TUKIBETSU_NENREI.csv
173
+ - examples/plots.ipynb
174
+ - examples/wine.csv
175
+ - lib/daru_plotly.rb
176
+ - lib/initializer/category.rb
177
+ - lib/initializer/dataframe.rb
178
+ - lib/initializer/vector.rb
179
+ - lib/version.rb
180
+ homepage: https://github.com/genya0407/daru_plotly
181
+ licenses: []
182
+ metadata: {}
183
+ post_install_message:
184
+ rdoc_options: []
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ requirements: []
198
+ rubyforge_project:
199
+ rubygems_version: 2.5.2
200
+ signing_key:
201
+ specification_version: 4
202
+ summary: Plot Daru's DataFrame with plotly.
203
+ test_files: []