charty 0.2.1 → 0.2.7
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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +56 -23
- data/.github/workflows/nmatrix.yml +67 -0
- data/.github/workflows/pycall.yml +86 -0
- data/Dockerfile.dev +9 -1
- data/Gemfile +18 -0
- data/README.md +177 -9
- data/Rakefile +4 -5
- data/charty.gemspec +10 -5
- data/examples/palette.rb +1 -1
- data/examples/sample_images/hist_gruff.png +0 -0
- data/images/penguins_body_mass_g_flipper_length_mm_scatter_plot.png +0 -0
- data/images/penguins_body_mass_g_flipper_length_mm_species_scatter_plot.png +0 -0
- data/images/penguins_body_mass_g_flipper_length_mm_species_sex_scatter_plot.png +0 -0
- data/images/penguins_species_body_mass_g_bar_plot_h.png +0 -0
- data/images/penguins_species_body_mass_g_bar_plot_v.png +0 -0
- data/images/penguins_species_body_mass_g_box_plot_h.png +0 -0
- data/images/penguins_species_body_mass_g_box_plot_v.png +0 -0
- data/images/penguins_species_body_mass_g_sex_bar_plot_v.png +0 -0
- data/images/penguins_species_body_mass_g_sex_box_plot_v.png +0 -0
- data/lib/charty.rb +9 -2
- data/lib/charty/backends.rb +1 -0
- data/lib/charty/backends/bokeh.rb +2 -2
- data/lib/charty/backends/google_charts.rb +1 -1
- data/lib/charty/backends/gruff.rb +14 -3
- data/lib/charty/backends/plotly.rb +731 -32
- data/lib/charty/backends/plotly_helpers/html_renderer.rb +203 -0
- data/lib/charty/backends/plotly_helpers/notebook_renderer.rb +86 -0
- data/lib/charty/backends/plotly_helpers/plotly_renderer.rb +121 -0
- data/lib/charty/backends/pyplot.rb +515 -67
- data/lib/charty/backends/rubyplot.rb +1 -1
- data/lib/charty/backends/unicode_plot.rb +79 -0
- data/lib/charty/cache_dir.rb +27 -0
- data/lib/charty/dash_pattern_generator.rb +57 -0
- data/lib/charty/index.rb +213 -0
- data/lib/charty/iruby_helper.rb +18 -0
- data/lib/charty/linspace.rb +1 -1
- data/lib/charty/plot_methods.rb +283 -8
- data/lib/charty/plotter.rb +2 -2
- data/lib/charty/plotters.rb +11 -0
- data/lib/charty/plotters/abstract_plotter.rb +188 -18
- data/lib/charty/plotters/bar_plotter.rb +189 -7
- data/lib/charty/plotters/box_plotter.rb +64 -11
- data/lib/charty/plotters/categorical_plotter.rb +272 -40
- data/lib/charty/plotters/count_plotter.rb +7 -0
- data/lib/charty/plotters/distribution_plotter.rb +143 -0
- data/lib/charty/plotters/estimation_support.rb +84 -0
- data/lib/charty/plotters/histogram_plotter.rb +182 -0
- data/lib/charty/plotters/line_plotter.rb +300 -0
- data/lib/charty/plotters/random_support.rb +25 -0
- data/lib/charty/plotters/relational_plotter.rb +635 -0
- data/lib/charty/plotters/scatter_plotter.rb +80 -0
- data/lib/charty/plotters/vector_plotter.rb +6 -0
- data/lib/charty/statistics.rb +96 -2
- data/lib/charty/table.rb +160 -15
- data/lib/charty/table_adapters.rb +2 -0
- data/lib/charty/table_adapters/active_record_adapter.rb +17 -9
- data/lib/charty/table_adapters/base_adapter.rb +166 -0
- data/lib/charty/table_adapters/daru_adapter.rb +39 -3
- data/lib/charty/table_adapters/datasets_adapter.rb +13 -2
- data/lib/charty/table_adapters/hash_adapter.rb +141 -16
- data/lib/charty/table_adapters/narray_adapter.rb +25 -6
- data/lib/charty/table_adapters/nmatrix_adapter.rb +15 -5
- data/lib/charty/table_adapters/pandas_adapter.rb +163 -0
- data/lib/charty/util.rb +28 -0
- data/lib/charty/vector.rb +69 -0
- data/lib/charty/vector_adapters.rb +187 -0
- data/lib/charty/vector_adapters/array_adapter.rb +101 -0
- data/lib/charty/vector_adapters/daru_adapter.rb +163 -0
- data/lib/charty/vector_adapters/narray_adapter.rb +182 -0
- data/lib/charty/vector_adapters/nmatrix_adapter.rb +37 -0
- data/lib/charty/vector_adapters/numpy_adapter.rb +168 -0
- data/lib/charty/vector_adapters/pandas_adapter.rb +199 -0
- data/lib/charty/version.rb +1 -1
- metadata +105 -24
- data/lib/charty/palette.rb +0 -235
@@ -0,0 +1,168 @@
|
|
1
|
+
module Charty
|
2
|
+
module VectorAdapters
|
3
|
+
class NumpyAdapter < BaseAdapter
|
4
|
+
VectorAdapters.register(:numpy, self)
|
5
|
+
|
6
|
+
def self.supported?(data)
|
7
|
+
return false unless defined?(Numpy::NDArray)
|
8
|
+
case data
|
9
|
+
when Numpy::NDArray
|
10
|
+
true
|
11
|
+
else
|
12
|
+
false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(data)
|
17
|
+
@data = check_data(data)
|
18
|
+
self.index = index || RangeIndex.new(0 ... length)
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_reader :data
|
22
|
+
|
23
|
+
def_delegator :data, :size, :length
|
24
|
+
|
25
|
+
def compare_data_equality(other)
|
26
|
+
case other
|
27
|
+
when NumpyAdapter, PandasSeriesAdapter
|
28
|
+
Numpy.all(data == other.data)
|
29
|
+
when BaseAdapter
|
30
|
+
Numpy.all(data == other.data.to_a)
|
31
|
+
else
|
32
|
+
false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
include NameSupport
|
37
|
+
include IndexSupport
|
38
|
+
|
39
|
+
def where(mask)
|
40
|
+
mask = check_mask_vector(mask)
|
41
|
+
case mask.data
|
42
|
+
when Numpy::NDArray,
|
43
|
+
->(x) { defined?(Pandas::Series) && x.is_a?(Pandas::Series) }
|
44
|
+
mask_data = Numpy.asarray(mask.data, dtype: :bool)
|
45
|
+
masked_data = data[mask_data]
|
46
|
+
masked_index = mask_data.nonzero()[0].to_a.map {|i| index[i] }
|
47
|
+
else
|
48
|
+
masked_data, masked_index = where_in_array(mask)
|
49
|
+
masked_data = Numpy.asarray(masked_data, dtype: data.dtype)
|
50
|
+
end
|
51
|
+
Charty::Vector.new(masked_data, index: masked_index, name: name)
|
52
|
+
end
|
53
|
+
|
54
|
+
def each
|
55
|
+
return enum_for(__method__) unless block_given?
|
56
|
+
|
57
|
+
i, n = 0, data.size
|
58
|
+
while i < n
|
59
|
+
yield data[i]
|
60
|
+
i += 1
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def empty?
|
65
|
+
data.size == 0
|
66
|
+
end
|
67
|
+
|
68
|
+
def boolean?
|
69
|
+
builtins = PyCall.builtins
|
70
|
+
case
|
71
|
+
when builtins.issubclass(data.dtype.type, Numpy.bool_)
|
72
|
+
true
|
73
|
+
when builtins.issubclass(data.dtype.type, Numpy.object_)
|
74
|
+
i, n = 0, data.size
|
75
|
+
while i < n
|
76
|
+
case data[i]
|
77
|
+
when nil, true, false
|
78
|
+
# do nothing
|
79
|
+
else
|
80
|
+
return false
|
81
|
+
end
|
82
|
+
i += 1
|
83
|
+
end
|
84
|
+
true
|
85
|
+
else
|
86
|
+
false
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def numeric?
|
91
|
+
# TODO: Handle object array
|
92
|
+
PyCall.builtins.issubclass(data.dtype.type, PyCall.tuple([Numpy.number, Numpy.bool_]))
|
93
|
+
end
|
94
|
+
|
95
|
+
def categorical?
|
96
|
+
false
|
97
|
+
end
|
98
|
+
|
99
|
+
def categories
|
100
|
+
nil
|
101
|
+
end
|
102
|
+
|
103
|
+
def unique_values
|
104
|
+
Numpy.unique(data).to_a
|
105
|
+
end
|
106
|
+
|
107
|
+
def group_by(grouper)
|
108
|
+
case grouper
|
109
|
+
when Numpy::NDArray,
|
110
|
+
->(x) { defined?(Pandas::Series) && x.is_a?(Pandas::Series) }
|
111
|
+
# Nothing todo
|
112
|
+
when Charty::Vector
|
113
|
+
case grouper.data
|
114
|
+
when Numpy::NDArray
|
115
|
+
grouper = grouper.data
|
116
|
+
else
|
117
|
+
grouper = Numpy.asarray(grouper.to_a)
|
118
|
+
end
|
119
|
+
else
|
120
|
+
grouper = Numpy.asarray(Array.try_convert(grouper))
|
121
|
+
end
|
122
|
+
|
123
|
+
group_keys = Numpy.unique(grouper).to_a
|
124
|
+
group_keys.map { |g|
|
125
|
+
[g, Charty::Vector.new(data[grouper == g])]
|
126
|
+
}.to_h
|
127
|
+
end
|
128
|
+
|
129
|
+
def drop_na
|
130
|
+
where_is_na = if numeric?
|
131
|
+
Numpy.isnan(data)
|
132
|
+
else
|
133
|
+
(data == nil)
|
134
|
+
end
|
135
|
+
Charty::Vector.new(data[Numpy.logical_not(where_is_na)])
|
136
|
+
end
|
137
|
+
|
138
|
+
def eq(val)
|
139
|
+
Charty::Vector.new((data == val),
|
140
|
+
index: index,
|
141
|
+
name: name)
|
142
|
+
end
|
143
|
+
|
144
|
+
def notnull
|
145
|
+
case
|
146
|
+
when PyCall.builtins.issubclass(data.dtype.type, Numpy.object_)
|
147
|
+
i, n = 0, length
|
148
|
+
notnull_data = Numpy::NDArray.new(n, dtype: :bool)
|
149
|
+
while i < n
|
150
|
+
notnull_data[i] = ! Util.missing?(data[i])
|
151
|
+
i += 1
|
152
|
+
end
|
153
|
+
else
|
154
|
+
notnull_data = Numpy.isnan(data)
|
155
|
+
end
|
156
|
+
Charty::Vector.new(notnull_data, index: index, name: name)
|
157
|
+
end
|
158
|
+
|
159
|
+
def mean
|
160
|
+
Numpy.mean(data)
|
161
|
+
end
|
162
|
+
|
163
|
+
def stdev(population: false)
|
164
|
+
Numpy.std(data, ddof: population ? 0 : 1)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
@@ -0,0 +1,199 @@
|
|
1
|
+
module Charty
|
2
|
+
module VectorAdapters
|
3
|
+
class PandasSeriesAdapter < BaseAdapter
|
4
|
+
VectorAdapters.register(:pandas_series, self)
|
5
|
+
|
6
|
+
def self.supported?(data)
|
7
|
+
return false unless defined?(Pandas::Series)
|
8
|
+
case data
|
9
|
+
when Pandas::Series
|
10
|
+
true
|
11
|
+
else
|
12
|
+
false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(data)
|
17
|
+
@data = check_data(data)
|
18
|
+
end
|
19
|
+
|
20
|
+
attr_reader :data
|
21
|
+
|
22
|
+
def_delegator :data, :size, :length
|
23
|
+
|
24
|
+
def index
|
25
|
+
PandasIndex.new(data.index)
|
26
|
+
end
|
27
|
+
|
28
|
+
def index=(new_index)
|
29
|
+
case new_index
|
30
|
+
when PandasIndex
|
31
|
+
data.index = new_index.values
|
32
|
+
when Index
|
33
|
+
data.index = new_index.to_a
|
34
|
+
else
|
35
|
+
data.index = new_index
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def_delegators :data, :name, :name=
|
40
|
+
|
41
|
+
def compare_data_equality(other)
|
42
|
+
case other
|
43
|
+
when PandasSeriesAdapter
|
44
|
+
return data.equals(other.data)
|
45
|
+
when NumpyAdapter
|
46
|
+
other = other.data
|
47
|
+
when NArrayAdapter
|
48
|
+
case other.data
|
49
|
+
when Numo::Bit
|
50
|
+
other = other.data.to_a
|
51
|
+
other.map! {|x| [false, true][x] }
|
52
|
+
else
|
53
|
+
other = other.data.to_a
|
54
|
+
end
|
55
|
+
when BaseAdapter
|
56
|
+
other = other.data.to_a
|
57
|
+
else
|
58
|
+
return false
|
59
|
+
end
|
60
|
+
|
61
|
+
data.equals(Pandas::Series.new(other, index: data.index))
|
62
|
+
end
|
63
|
+
|
64
|
+
def [](key)
|
65
|
+
case key
|
66
|
+
when Charty::Vector
|
67
|
+
where(key)
|
68
|
+
else
|
69
|
+
data[key]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def_delegators :data, :[]=, :to_a
|
74
|
+
|
75
|
+
def each
|
76
|
+
return enum_for(__method__) unless block_given?
|
77
|
+
|
78
|
+
i, n = 0, data.size
|
79
|
+
while i < n
|
80
|
+
yield data.iloc[i]
|
81
|
+
i += 1
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def empty?
|
86
|
+
data.size == 0
|
87
|
+
end
|
88
|
+
|
89
|
+
def values_at(*indices)
|
90
|
+
data.take(indices).to_a
|
91
|
+
end
|
92
|
+
|
93
|
+
def where(mask)
|
94
|
+
mask = check_mask_vector(mask)
|
95
|
+
case mask.data
|
96
|
+
when Numpy::NDArray,
|
97
|
+
->(x) { defined?(Pandas::Series) && x.is_a?(Pandas::Series) }
|
98
|
+
mask_data = Numpy.asarray(mask.data, dtype: :bool)
|
99
|
+
masked_data = data[mask_data]
|
100
|
+
masked_index = mask_data.nonzero()[0].to_a.map {|i| index[i] }
|
101
|
+
else
|
102
|
+
masked_data, masked_index = where_in_array(mask)
|
103
|
+
masked_data = Pandas::Series.new(masked_data, dtype: data.dtype)
|
104
|
+
end
|
105
|
+
Charty::Vector.new(masked_data, index: masked_index, name: name)
|
106
|
+
end
|
107
|
+
|
108
|
+
def where_in_array(mask)
|
109
|
+
mask = check_mask_vector(mask)
|
110
|
+
masked_data = []
|
111
|
+
masked_index = []
|
112
|
+
mask.each_with_index do |f, i|
|
113
|
+
case f
|
114
|
+
when true, 1
|
115
|
+
masked_data << data.iloc[i]
|
116
|
+
masked_index << index[i]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
return masked_data, masked_index
|
120
|
+
end
|
121
|
+
|
122
|
+
def boolean?
|
123
|
+
case
|
124
|
+
when Pandas.api.types.is_bool_dtype(data.dtype)
|
125
|
+
true
|
126
|
+
when Pandas.api.types.is_object_dtype(data.dtype)
|
127
|
+
data.isin([nil, false, true]).all()
|
128
|
+
else
|
129
|
+
false
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def numeric?
|
134
|
+
Pandas.api.types.is_numeric_dtype(data.dtype)
|
135
|
+
end
|
136
|
+
|
137
|
+
def categorical?
|
138
|
+
Pandas.api.types.is_categorical_dtype(data.dtype)
|
139
|
+
end
|
140
|
+
|
141
|
+
def categories
|
142
|
+
data.cat.categories.to_a if categorical?
|
143
|
+
end
|
144
|
+
|
145
|
+
def unique_values
|
146
|
+
data.unique.to_a
|
147
|
+
end
|
148
|
+
|
149
|
+
def group_by(grouper)
|
150
|
+
case grouper
|
151
|
+
when Pandas::Series
|
152
|
+
group_keys = grouper.unique.to_a
|
153
|
+
groups = data.groupby(grouper)
|
154
|
+
group_keys.map {|g|
|
155
|
+
[g, Charty::Vector.new(groups.get_group(g))]
|
156
|
+
}.to_h
|
157
|
+
when Charty::Vector
|
158
|
+
case grouper.adapter
|
159
|
+
when self.class
|
160
|
+
group_by(grouper.data)
|
161
|
+
else
|
162
|
+
grouper = Pandas::Series.new(grouper.to_a)
|
163
|
+
group_by(grouper)
|
164
|
+
end
|
165
|
+
else
|
166
|
+
grouper = Pandas::Series.new(Array(grouper))
|
167
|
+
group_by(grouper)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def drop_na
|
172
|
+
Charty::Vector.new(data.dropna)
|
173
|
+
end
|
174
|
+
|
175
|
+
def eq(val)
|
176
|
+
Charty::Vector.new((data == val),
|
177
|
+
index: index,
|
178
|
+
name: name)
|
179
|
+
end
|
180
|
+
|
181
|
+
def notnull
|
182
|
+
Charty::Vector.new(data.notnull, index: index, name: name)
|
183
|
+
end
|
184
|
+
|
185
|
+
def mean
|
186
|
+
data.mean()
|
187
|
+
end
|
188
|
+
|
189
|
+
def stdev(population: false)
|
190
|
+
data.std(ddof: population ? 0 : 1)
|
191
|
+
end
|
192
|
+
|
193
|
+
def percentile(q)
|
194
|
+
q = q.map {|x| x / 100.0 }
|
195
|
+
data.quantile(q)
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
data/lib/charty/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: charty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- youchan
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2021-06-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: red-colors
|
@@ -18,36 +18,78 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 0.3.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version:
|
28
|
+
version: 0.3.0
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
|
-
name:
|
30
|
+
name: red-datasets
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
33
|
- - ">="
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
36
|
-
type: :
|
35
|
+
version: 0.1.2
|
36
|
+
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version:
|
42
|
+
version: 0.1.2
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
|
-
name:
|
44
|
+
name: red-palette
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 0.5.0
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 0.5.0
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: matplotlib
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 1.2.0
|
64
|
+
type: :runtime
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 1.2.0
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: pandas
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.3.5
|
78
|
+
type: :runtime
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 0.3.5
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: playwright-ruby-client
|
45
87
|
requirement: !ruby/object:Gem::Requirement
|
46
88
|
requirements:
|
47
89
|
- - ">="
|
48
90
|
- !ruby/object:Gem::Version
|
49
91
|
version: '0'
|
50
|
-
type: :
|
92
|
+
type: :runtime
|
51
93
|
prerelease: false
|
52
94
|
version_requirements: !ruby/object:Gem::Requirement
|
53
95
|
requirements:
|
@@ -55,21 +97,21 @@ dependencies:
|
|
55
97
|
- !ruby/object:Gem::Version
|
56
98
|
version: '0'
|
57
99
|
- !ruby/object:Gem::Dependency
|
58
|
-
name:
|
100
|
+
name: bundler
|
59
101
|
requirement: !ruby/object:Gem::Requirement
|
60
102
|
requirements:
|
61
103
|
- - ">="
|
62
104
|
- !ruby/object:Gem::Version
|
63
|
-
version: '
|
105
|
+
version: '1.16'
|
64
106
|
type: :development
|
65
107
|
prerelease: false
|
66
108
|
version_requirements: !ruby/object:Gem::Requirement
|
67
109
|
requirements:
|
68
110
|
- - ">="
|
69
111
|
- !ruby/object:Gem::Version
|
70
|
-
version: '
|
112
|
+
version: '1.16'
|
71
113
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
114
|
+
name: rake
|
73
115
|
requirement: !ruby/object:Gem::Requirement
|
74
116
|
requirements:
|
75
117
|
- - ">="
|
@@ -83,7 +125,7 @@ dependencies:
|
|
83
125
|
- !ruby/object:Gem::Version
|
84
126
|
version: '0'
|
85
127
|
- !ruby/object:Gem::Dependency
|
86
|
-
name:
|
128
|
+
name: test-unit
|
87
129
|
requirement: !ruby/object:Gem::Requirement
|
88
130
|
requirements:
|
89
131
|
- - ">="
|
@@ -97,21 +139,21 @@ dependencies:
|
|
97
139
|
- !ruby/object:Gem::Version
|
98
140
|
version: '0'
|
99
141
|
- !ruby/object:Gem::Dependency
|
100
|
-
name:
|
142
|
+
name: daru
|
101
143
|
requirement: !ruby/object:Gem::Requirement
|
102
144
|
requirements:
|
103
145
|
- - ">="
|
104
146
|
- !ruby/object:Gem::Version
|
105
|
-
version: 0
|
147
|
+
version: '0'
|
106
148
|
type: :development
|
107
149
|
prerelease: false
|
108
150
|
version_requirements: !ruby/object:Gem::Requirement
|
109
151
|
requirements:
|
110
152
|
- - ">="
|
111
153
|
- !ruby/object:Gem::Version
|
112
|
-
version: 0
|
154
|
+
version: '0'
|
113
155
|
- !ruby/object:Gem::Dependency
|
114
|
-
name:
|
156
|
+
name: matrix
|
115
157
|
requirement: !ruby/object:Gem::Requirement
|
116
158
|
requirements:
|
117
159
|
- - ">="
|
@@ -153,19 +195,19 @@ dependencies:
|
|
153
195
|
- !ruby/object:Gem::Version
|
154
196
|
version: '0'
|
155
197
|
- !ruby/object:Gem::Dependency
|
156
|
-
name:
|
198
|
+
name: iruby
|
157
199
|
requirement: !ruby/object:Gem::Requirement
|
158
200
|
requirements:
|
159
201
|
- - ">="
|
160
202
|
- !ruby/object:Gem::Version
|
161
|
-
version:
|
203
|
+
version: 0.7.0
|
162
204
|
type: :development
|
163
205
|
prerelease: false
|
164
206
|
version_requirements: !ruby/object:Gem::Requirement
|
165
207
|
requirements:
|
166
208
|
- - ">="
|
167
209
|
- !ruby/object:Gem::Version
|
168
|
-
version:
|
210
|
+
version: 0.7.0
|
169
211
|
description: Visualizing your data in a simple way.
|
170
212
|
email:
|
171
213
|
- youchan01@gmail.com
|
@@ -176,6 +218,8 @@ extensions: []
|
|
176
218
|
extra_rdoc_files: []
|
177
219
|
files:
|
178
220
|
- ".github/workflows/ci.yml"
|
221
|
+
- ".github/workflows/nmatrix.yml"
|
222
|
+
- ".github/workflows/pycall.yml"
|
179
223
|
- ".gitignore"
|
180
224
|
- Dockerfile.dev
|
181
225
|
- Gemfile
|
@@ -216,6 +260,7 @@ files:
|
|
216
260
|
- examples/sample_images/curve_with_function_pyplot.png
|
217
261
|
- examples/sample_images/curve_with_function_rubyplot.png
|
218
262
|
- examples/sample_images/error_bar_pyplot.png
|
263
|
+
- examples/sample_images/hist_gruff.png
|
219
264
|
- examples/sample_images/hist_pyplot.png
|
220
265
|
- examples/sample_images/scatter_bokeh.html
|
221
266
|
- examples/sample_images/scatter_gruff.png
|
@@ -226,6 +271,15 @@ files:
|
|
226
271
|
- examples/sample_pyplot.ipynb
|
227
272
|
- examples/sample_rubyplot.ipynb
|
228
273
|
- images/design_concept.png
|
274
|
+
- images/penguins_body_mass_g_flipper_length_mm_scatter_plot.png
|
275
|
+
- images/penguins_body_mass_g_flipper_length_mm_species_scatter_plot.png
|
276
|
+
- images/penguins_body_mass_g_flipper_length_mm_species_sex_scatter_plot.png
|
277
|
+
- images/penguins_species_body_mass_g_bar_plot_h.png
|
278
|
+
- images/penguins_species_body_mass_g_bar_plot_v.png
|
279
|
+
- images/penguins_species_body_mass_g_box_plot_h.png
|
280
|
+
- images/penguins_species_body_mass_g_box_plot_v.png
|
281
|
+
- images/penguins_species_body_mass_g_sex_bar_plot_v.png
|
282
|
+
- images/penguins_species_body_mass_g_sex_box_plot_v.png
|
229
283
|
- lib/charty.rb
|
230
284
|
- lib/charty/backend_methods.rb
|
231
285
|
- lib/charty/backends.rb
|
@@ -233,11 +287,18 @@ files:
|
|
233
287
|
- lib/charty/backends/google_charts.rb
|
234
288
|
- lib/charty/backends/gruff.rb
|
235
289
|
- lib/charty/backends/plotly.rb
|
290
|
+
- lib/charty/backends/plotly_helpers/html_renderer.rb
|
291
|
+
- lib/charty/backends/plotly_helpers/notebook_renderer.rb
|
292
|
+
- lib/charty/backends/plotly_helpers/plotly_renderer.rb
|
236
293
|
- lib/charty/backends/pyplot.rb
|
237
294
|
- lib/charty/backends/rubyplot.rb
|
295
|
+
- lib/charty/backends/unicode_plot.rb
|
296
|
+
- lib/charty/cache_dir.rb
|
297
|
+
- lib/charty/dash_pattern_generator.rb
|
298
|
+
- lib/charty/index.rb
|
299
|
+
- lib/charty/iruby_helper.rb
|
238
300
|
- lib/charty/layout.rb
|
239
301
|
- lib/charty/linspace.rb
|
240
|
-
- lib/charty/palette.rb
|
241
302
|
- lib/charty/plot_methods.rb
|
242
303
|
- lib/charty/plotter.rb
|
243
304
|
- lib/charty/plotters.rb
|
@@ -245,15 +306,35 @@ files:
|
|
245
306
|
- lib/charty/plotters/bar_plotter.rb
|
246
307
|
- lib/charty/plotters/box_plotter.rb
|
247
308
|
- lib/charty/plotters/categorical_plotter.rb
|
309
|
+
- lib/charty/plotters/count_plotter.rb
|
310
|
+
- lib/charty/plotters/distribution_plotter.rb
|
311
|
+
- lib/charty/plotters/estimation_support.rb
|
312
|
+
- lib/charty/plotters/histogram_plotter.rb
|
313
|
+
- lib/charty/plotters/line_plotter.rb
|
314
|
+
- lib/charty/plotters/random_support.rb
|
315
|
+
- lib/charty/plotters/relational_plotter.rb
|
316
|
+
- lib/charty/plotters/scatter_plotter.rb
|
317
|
+
- lib/charty/plotters/vector_plotter.rb
|
248
318
|
- lib/charty/statistics.rb
|
249
319
|
- lib/charty/table.rb
|
250
320
|
- lib/charty/table_adapters.rb
|
251
321
|
- lib/charty/table_adapters/active_record_adapter.rb
|
322
|
+
- lib/charty/table_adapters/base_adapter.rb
|
252
323
|
- lib/charty/table_adapters/daru_adapter.rb
|
253
324
|
- lib/charty/table_adapters/datasets_adapter.rb
|
254
325
|
- lib/charty/table_adapters/hash_adapter.rb
|
255
326
|
- lib/charty/table_adapters/narray_adapter.rb
|
256
327
|
- lib/charty/table_adapters/nmatrix_adapter.rb
|
328
|
+
- lib/charty/table_adapters/pandas_adapter.rb
|
329
|
+
- lib/charty/util.rb
|
330
|
+
- lib/charty/vector.rb
|
331
|
+
- lib/charty/vector_adapters.rb
|
332
|
+
- lib/charty/vector_adapters/array_adapter.rb
|
333
|
+
- lib/charty/vector_adapters/daru_adapter.rb
|
334
|
+
- lib/charty/vector_adapters/narray_adapter.rb
|
335
|
+
- lib/charty/vector_adapters/nmatrix_adapter.rb
|
336
|
+
- lib/charty/vector_adapters/numpy_adapter.rb
|
337
|
+
- lib/charty/vector_adapters/pandas_adapter.rb
|
257
338
|
- lib/charty/version.rb
|
258
339
|
homepage: https://github.com/red-data-tools/charty
|
259
340
|
licenses:
|
@@ -274,7 +355,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
274
355
|
- !ruby/object:Gem::Version
|
275
356
|
version: '0'
|
276
357
|
requirements: []
|
277
|
-
rubygems_version: 3.
|
358
|
+
rubygems_version: 3.2.3
|
278
359
|
signing_key:
|
279
360
|
specification_version: 4
|
280
361
|
summary: Visualizing your data in a simple way.
|