charty 0.2.3 → 0.2.8
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/Gemfile +18 -0
- data/README.md +172 -4
- data/Rakefile +4 -5
- data/charty.gemspec +10 -6
- 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 +8 -1
- 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 +87 -0
- data/lib/charty/backends/plotly_helpers/plotly_renderer.rb +121 -0
- data/lib/charty/backends/pyplot.rb +514 -66
- data/lib/charty/backends/rubyplot.rb +1 -1
- 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 +186 -16
- 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 +186 -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 +92 -25
@@ -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.8
|
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-22 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: red-colors
|
@@ -18,50 +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
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: red-datasets
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 0.1.2
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.1.2
|
29
43
|
- !ruby/object:Gem::Dependency
|
30
44
|
name: red-palette
|
31
45
|
requirement: !ruby/object:Gem::Requirement
|
32
46
|
requirements:
|
33
47
|
- - ">="
|
34
48
|
- !ruby/object:Gem::Version
|
35
|
-
version: 0.
|
49
|
+
version: 0.5.0
|
36
50
|
type: :runtime
|
37
51
|
prerelease: false
|
38
52
|
version_requirements: !ruby/object:Gem::Requirement
|
39
53
|
requirements:
|
40
54
|
- - ">="
|
41
55
|
- !ruby/object:Gem::Version
|
42
|
-
version: 0.
|
56
|
+
version: 0.5.0
|
43
57
|
- !ruby/object:Gem::Dependency
|
44
|
-
name:
|
58
|
+
name: matplotlib
|
45
59
|
requirement: !ruby/object:Gem::Requirement
|
46
60
|
requirements:
|
47
61
|
- - ">="
|
48
62
|
- !ruby/object:Gem::Version
|
49
|
-
version:
|
50
|
-
type: :
|
63
|
+
version: 1.2.0
|
64
|
+
type: :runtime
|
51
65
|
prerelease: false
|
52
66
|
version_requirements: !ruby/object:Gem::Requirement
|
53
67
|
requirements:
|
54
68
|
- - ">="
|
55
69
|
- !ruby/object:Gem::Version
|
56
|
-
version:
|
70
|
+
version: 1.2.0
|
57
71
|
- !ruby/object:Gem::Dependency
|
58
|
-
name:
|
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
|
59
87
|
requirement: !ruby/object:Gem::Requirement
|
60
88
|
requirements:
|
61
89
|
- - ">="
|
62
90
|
- !ruby/object:Gem::Version
|
63
91
|
version: '0'
|
64
|
-
type: :
|
92
|
+
type: :runtime
|
65
93
|
prerelease: false
|
66
94
|
version_requirements: !ruby/object:Gem::Requirement
|
67
95
|
requirements:
|
@@ -69,21 +97,21 @@ dependencies:
|
|
69
97
|
- !ruby/object:Gem::Version
|
70
98
|
version: '0'
|
71
99
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
100
|
+
name: bundler
|
73
101
|
requirement: !ruby/object:Gem::Requirement
|
74
102
|
requirements:
|
75
103
|
- - ">="
|
76
104
|
- !ruby/object:Gem::Version
|
77
|
-
version: '
|
105
|
+
version: '1.16'
|
78
106
|
type: :development
|
79
107
|
prerelease: false
|
80
108
|
version_requirements: !ruby/object:Gem::Requirement
|
81
109
|
requirements:
|
82
110
|
- - ">="
|
83
111
|
- !ruby/object:Gem::Version
|
84
|
-
version: '
|
112
|
+
version: '1.16'
|
85
113
|
- !ruby/object:Gem::Dependency
|
86
|
-
name:
|
114
|
+
name: rake
|
87
115
|
requirement: !ruby/object:Gem::Requirement
|
88
116
|
requirements:
|
89
117
|
- - ">="
|
@@ -97,7 +125,7 @@ dependencies:
|
|
97
125
|
- !ruby/object:Gem::Version
|
98
126
|
version: '0'
|
99
127
|
- !ruby/object:Gem::Dependency
|
100
|
-
name:
|
128
|
+
name: test-unit
|
101
129
|
requirement: !ruby/object:Gem::Requirement
|
102
130
|
requirements:
|
103
131
|
- - ">="
|
@@ -111,21 +139,21 @@ dependencies:
|
|
111
139
|
- !ruby/object:Gem::Version
|
112
140
|
version: '0'
|
113
141
|
- !ruby/object:Gem::Dependency
|
114
|
-
name:
|
142
|
+
name: daru
|
115
143
|
requirement: !ruby/object:Gem::Requirement
|
116
144
|
requirements:
|
117
145
|
- - ">="
|
118
146
|
- !ruby/object:Gem::Version
|
119
|
-
version: 0
|
147
|
+
version: '0'
|
120
148
|
type: :development
|
121
149
|
prerelease: false
|
122
150
|
version_requirements: !ruby/object:Gem::Requirement
|
123
151
|
requirements:
|
124
152
|
- - ">="
|
125
153
|
- !ruby/object:Gem::Version
|
126
|
-
version: 0
|
154
|
+
version: '0'
|
127
155
|
- !ruby/object:Gem::Dependency
|
128
|
-
name:
|
156
|
+
name: matrix
|
129
157
|
requirement: !ruby/object:Gem::Requirement
|
130
158
|
requirements:
|
131
159
|
- - ">="
|
@@ -167,19 +195,19 @@ dependencies:
|
|
167
195
|
- !ruby/object:Gem::Version
|
168
196
|
version: '0'
|
169
197
|
- !ruby/object:Gem::Dependency
|
170
|
-
name:
|
198
|
+
name: iruby
|
171
199
|
requirement: !ruby/object:Gem::Requirement
|
172
200
|
requirements:
|
173
201
|
- - ">="
|
174
202
|
- !ruby/object:Gem::Version
|
175
|
-
version:
|
203
|
+
version: 0.7.0
|
176
204
|
type: :development
|
177
205
|
prerelease: false
|
178
206
|
version_requirements: !ruby/object:Gem::Requirement
|
179
207
|
requirements:
|
180
208
|
- - ">="
|
181
209
|
- !ruby/object:Gem::Version
|
182
|
-
version:
|
210
|
+
version: 0.7.0
|
183
211
|
description: Visualizing your data in a simple way.
|
184
212
|
email:
|
185
213
|
- youchan01@gmail.com
|
@@ -190,6 +218,8 @@ extensions: []
|
|
190
218
|
extra_rdoc_files: []
|
191
219
|
files:
|
192
220
|
- ".github/workflows/ci.yml"
|
221
|
+
- ".github/workflows/nmatrix.yml"
|
222
|
+
- ".github/workflows/pycall.yml"
|
193
223
|
- ".gitignore"
|
194
224
|
- Dockerfile.dev
|
195
225
|
- Gemfile
|
@@ -230,6 +260,7 @@ files:
|
|
230
260
|
- examples/sample_images/curve_with_function_pyplot.png
|
231
261
|
- examples/sample_images/curve_with_function_rubyplot.png
|
232
262
|
- examples/sample_images/error_bar_pyplot.png
|
263
|
+
- examples/sample_images/hist_gruff.png
|
233
264
|
- examples/sample_images/hist_pyplot.png
|
234
265
|
- examples/sample_images/scatter_bokeh.html
|
235
266
|
- examples/sample_images/scatter_gruff.png
|
@@ -240,6 +271,15 @@ files:
|
|
240
271
|
- examples/sample_pyplot.ipynb
|
241
272
|
- examples/sample_rubyplot.ipynb
|
242
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
|
243
283
|
- lib/charty.rb
|
244
284
|
- lib/charty/backend_methods.rb
|
245
285
|
- lib/charty/backends.rb
|
@@ -247,9 +287,16 @@ files:
|
|
247
287
|
- lib/charty/backends/google_charts.rb
|
248
288
|
- lib/charty/backends/gruff.rb
|
249
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
|
250
293
|
- lib/charty/backends/pyplot.rb
|
251
294
|
- lib/charty/backends/rubyplot.rb
|
252
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
|
253
300
|
- lib/charty/layout.rb
|
254
301
|
- lib/charty/linspace.rb
|
255
302
|
- lib/charty/plot_methods.rb
|
@@ -259,15 +306,35 @@ files:
|
|
259
306
|
- lib/charty/plotters/bar_plotter.rb
|
260
307
|
- lib/charty/plotters/box_plotter.rb
|
261
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
|
262
318
|
- lib/charty/statistics.rb
|
263
319
|
- lib/charty/table.rb
|
264
320
|
- lib/charty/table_adapters.rb
|
265
321
|
- lib/charty/table_adapters/active_record_adapter.rb
|
322
|
+
- lib/charty/table_adapters/base_adapter.rb
|
266
323
|
- lib/charty/table_adapters/daru_adapter.rb
|
267
324
|
- lib/charty/table_adapters/datasets_adapter.rb
|
268
325
|
- lib/charty/table_adapters/hash_adapter.rb
|
269
326
|
- lib/charty/table_adapters/narray_adapter.rb
|
270
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
|
271
338
|
- lib/charty/version.rb
|
272
339
|
homepage: https://github.com/red-data-tools/charty
|
273
340
|
licenses:
|
@@ -288,7 +355,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
288
355
|
- !ruby/object:Gem::Version
|
289
356
|
version: '0'
|
290
357
|
requirements: []
|
291
|
-
rubygems_version: 3.
|
358
|
+
rubygems_version: 3.2.3
|
292
359
|
signing_key:
|
293
360
|
specification_version: 4
|
294
361
|
summary: Visualizing your data in a simple way.
|