charty 0.2.0 → 0.2.6
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 +71 -0
- 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 -4
- data/examples/Gemfile +1 -0
- data/examples/active_record.ipynb +1 -1
- data/examples/daru.ipynb +1 -1
- data/examples/iris_dataset.ipynb +1 -1
- data/examples/nmatrix.ipynb +1 -1
- data/examples/{numo-narray.ipynb → numo_narray.ipynb} +1 -1
- data/examples/palette.rb +71 -0
- data/examples/sample.png +0 -0
- data/examples/sample_images/hist_gruff.png +0 -0
- data/examples/sample_pyplot.ipynb +40 -38
- 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 +13 -1
- data/lib/charty/backend_methods.rb +8 -0
- data/lib/charty/backends.rb +26 -1
- data/lib/charty/backends/bokeh.rb +31 -31
- data/lib/charty/backends/{google_chart.rb → google_charts.rb} +75 -33
- data/lib/charty/backends/gruff.rb +14 -3
- data/lib/charty/backends/plotly.rb +774 -9
- data/lib/charty/backends/pyplot.rb +611 -34
- data/lib/charty/backends/rubyplot.rb +2 -2
- data/lib/charty/backends/unicode_plot.rb +79 -0
- data/lib/charty/dash_pattern_generator.rb +57 -0
- data/lib/charty/index.rb +213 -0
- data/lib/charty/linspace.rb +1 -1
- data/lib/charty/plot_methods.rb +254 -0
- data/lib/charty/plotter.rb +10 -10
- data/lib/charty/plotters.rb +12 -0
- data/lib/charty/plotters/abstract_plotter.rb +243 -0
- data/lib/charty/plotters/bar_plotter.rb +201 -0
- data/lib/charty/plotters/box_plotter.rb +79 -0
- data/lib/charty/plotters/categorical_plotter.rb +380 -0
- data/lib/charty/plotters/count_plotter.rb +7 -0
- data/lib/charty/plotters/estimation_support.rb +84 -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 +114 -0
- data/lib/charty/table.rb +161 -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 +41 -3
- data/lib/charty/table_adapters/datasets_adapter.rb +17 -2
- data/lib/charty/table_adapters/hash_adapter.rb +143 -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 +121 -22
- data/.travis.yml +0 -10
@@ -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.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- youchan
|
@@ -10,30 +10,72 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2021-06-17 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: red-colors
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
19
|
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
22
|
-
type: :
|
21
|
+
version: 0.3.0
|
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-palette
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 0.5.0
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.5.0
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: matplotlib
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 1.2.0
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 1.2.0
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: pandas
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 0.3.5
|
64
|
+
type: :runtime
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 0.3.5
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: playwright-ruby-client
|
31
73
|
requirement: !ruby/object:Gem::Requirement
|
32
74
|
requirements:
|
33
75
|
- - ">="
|
34
76
|
- !ruby/object:Gem::Version
|
35
77
|
version: '0'
|
36
|
-
type: :
|
78
|
+
type: :runtime
|
37
79
|
prerelease: false
|
38
80
|
version_requirements: !ruby/object:Gem::Requirement
|
39
81
|
requirements:
|
@@ -41,21 +83,21 @@ dependencies:
|
|
41
83
|
- !ruby/object:Gem::Version
|
42
84
|
version: '0'
|
43
85
|
- !ruby/object:Gem::Dependency
|
44
|
-
name:
|
86
|
+
name: bundler
|
45
87
|
requirement: !ruby/object:Gem::Requirement
|
46
88
|
requirements:
|
47
89
|
- - ">="
|
48
90
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
91
|
+
version: '1.16'
|
50
92
|
type: :development
|
51
93
|
prerelease: false
|
52
94
|
version_requirements: !ruby/object:Gem::Requirement
|
53
95
|
requirements:
|
54
96
|
- - ">="
|
55
97
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
98
|
+
version: '1.16'
|
57
99
|
- !ruby/object:Gem::Dependency
|
58
|
-
name:
|
100
|
+
name: rake
|
59
101
|
requirement: !ruby/object:Gem::Requirement
|
60
102
|
requirements:
|
61
103
|
- - ">="
|
@@ -69,7 +111,7 @@ dependencies:
|
|
69
111
|
- !ruby/object:Gem::Version
|
70
112
|
version: '0'
|
71
113
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
114
|
+
name: test-unit
|
73
115
|
requirement: !ruby/object:Gem::Requirement
|
74
116
|
requirements:
|
75
117
|
- - ">="
|
@@ -88,14 +130,14 @@ dependencies:
|
|
88
130
|
requirements:
|
89
131
|
- - ">="
|
90
132
|
- !ruby/object:Gem::Version
|
91
|
-
version: 0.
|
133
|
+
version: 0.1.2
|
92
134
|
type: :development
|
93
135
|
prerelease: false
|
94
136
|
version_requirements: !ruby/object:Gem::Requirement
|
95
137
|
requirements:
|
96
138
|
- - ">="
|
97
139
|
- !ruby/object:Gem::Version
|
98
|
-
version: 0.
|
140
|
+
version: 0.1.2
|
99
141
|
- !ruby/object:Gem::Dependency
|
100
142
|
name: daru
|
101
143
|
requirement: !ruby/object:Gem::Requirement
|
@@ -111,7 +153,7 @@ dependencies:
|
|
111
153
|
- !ruby/object:Gem::Version
|
112
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
|
- - ">="
|
@@ -125,7 +167,7 @@ dependencies:
|
|
125
167
|
- !ruby/object:Gem::Version
|
126
168
|
version: '0'
|
127
169
|
- !ruby/object:Gem::Dependency
|
128
|
-
name:
|
170
|
+
name: activerecord
|
129
171
|
requirement: !ruby/object:Gem::Requirement
|
130
172
|
requirements:
|
131
173
|
- - ">="
|
@@ -139,7 +181,7 @@ dependencies:
|
|
139
181
|
- !ruby/object:Gem::Version
|
140
182
|
version: '0'
|
141
183
|
- !ruby/object:Gem::Dependency
|
142
|
-
name:
|
184
|
+
name: sqlite3
|
143
185
|
requirement: !ruby/object:Gem::Requirement
|
144
186
|
requirements:
|
145
187
|
- - ">="
|
@@ -152,6 +194,20 @@ dependencies:
|
|
152
194
|
- - ">="
|
153
195
|
- !ruby/object:Gem::Version
|
154
196
|
version: '0'
|
197
|
+
- !ruby/object:Gem::Dependency
|
198
|
+
name: iruby
|
199
|
+
requirement: !ruby/object:Gem::Requirement
|
200
|
+
requirements:
|
201
|
+
- - ">="
|
202
|
+
- !ruby/object:Gem::Version
|
203
|
+
version: 0.7.0
|
204
|
+
type: :development
|
205
|
+
prerelease: false
|
206
|
+
version_requirements: !ruby/object:Gem::Requirement
|
207
|
+
requirements:
|
208
|
+
- - ">="
|
209
|
+
- !ruby/object:Gem::Version
|
210
|
+
version: 0.7.0
|
155
211
|
description: Visualizing your data in a simple way.
|
156
212
|
email:
|
157
213
|
- youchan01@gmail.com
|
@@ -161,8 +217,10 @@ executables: []
|
|
161
217
|
extensions: []
|
162
218
|
extra_rdoc_files: []
|
163
219
|
files:
|
220
|
+
- ".github/workflows/ci.yml"
|
221
|
+
- ".github/workflows/nmatrix.yml"
|
222
|
+
- ".github/workflows/pycall.yml"
|
164
223
|
- ".gitignore"
|
165
|
-
- ".travis.yml"
|
166
224
|
- Dockerfile.dev
|
167
225
|
- Gemfile
|
168
226
|
- LICENSE
|
@@ -177,7 +235,9 @@ files:
|
|
177
235
|
- examples/daru.ipynb
|
178
236
|
- examples/iris_dataset.ipynb
|
179
237
|
- examples/nmatrix.ipynb
|
180
|
-
- examples/
|
238
|
+
- examples/numo_narray.ipynb
|
239
|
+
- examples/palette.rb
|
240
|
+
- examples/sample.png
|
181
241
|
- examples/sample_bokeh.ipynb
|
182
242
|
- examples/sample_google_chart.ipynb
|
183
243
|
- examples/sample_gruff.ipynb
|
@@ -200,6 +260,7 @@ files:
|
|
200
260
|
- examples/sample_images/curve_with_function_pyplot.png
|
201
261
|
- examples/sample_images/curve_with_function_rubyplot.png
|
202
262
|
- examples/sample_images/error_bar_pyplot.png
|
263
|
+
- examples/sample_images/hist_gruff.png
|
203
264
|
- examples/sample_images/hist_pyplot.png
|
204
265
|
- examples/sample_images/scatter_bokeh.html
|
205
266
|
- examples/sample_images/scatter_gruff.png
|
@@ -210,25 +271,63 @@ files:
|
|
210
271
|
- examples/sample_pyplot.ipynb
|
211
272
|
- examples/sample_rubyplot.ipynb
|
212
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
|
213
283
|
- lib/charty.rb
|
284
|
+
- lib/charty/backend_methods.rb
|
214
285
|
- lib/charty/backends.rb
|
215
286
|
- lib/charty/backends/bokeh.rb
|
216
|
-
- lib/charty/backends/
|
287
|
+
- lib/charty/backends/google_charts.rb
|
217
288
|
- lib/charty/backends/gruff.rb
|
218
289
|
- lib/charty/backends/plotly.rb
|
219
290
|
- lib/charty/backends/pyplot.rb
|
220
291
|
- lib/charty/backends/rubyplot.rb
|
292
|
+
- lib/charty/backends/unicode_plot.rb
|
293
|
+
- lib/charty/dash_pattern_generator.rb
|
294
|
+
- lib/charty/index.rb
|
221
295
|
- lib/charty/layout.rb
|
222
296
|
- lib/charty/linspace.rb
|
297
|
+
- lib/charty/plot_methods.rb
|
223
298
|
- lib/charty/plotter.rb
|
299
|
+
- lib/charty/plotters.rb
|
300
|
+
- lib/charty/plotters/abstract_plotter.rb
|
301
|
+
- lib/charty/plotters/bar_plotter.rb
|
302
|
+
- lib/charty/plotters/box_plotter.rb
|
303
|
+
- lib/charty/plotters/categorical_plotter.rb
|
304
|
+
- lib/charty/plotters/count_plotter.rb
|
305
|
+
- lib/charty/plotters/estimation_support.rb
|
306
|
+
- lib/charty/plotters/line_plotter.rb
|
307
|
+
- lib/charty/plotters/random_support.rb
|
308
|
+
- lib/charty/plotters/relational_plotter.rb
|
309
|
+
- lib/charty/plotters/scatter_plotter.rb
|
310
|
+
- lib/charty/plotters/vector_plotter.rb
|
311
|
+
- lib/charty/statistics.rb
|
224
312
|
- lib/charty/table.rb
|
225
313
|
- lib/charty/table_adapters.rb
|
226
314
|
- lib/charty/table_adapters/active_record_adapter.rb
|
315
|
+
- lib/charty/table_adapters/base_adapter.rb
|
227
316
|
- lib/charty/table_adapters/daru_adapter.rb
|
228
317
|
- lib/charty/table_adapters/datasets_adapter.rb
|
229
318
|
- lib/charty/table_adapters/hash_adapter.rb
|
230
319
|
- lib/charty/table_adapters/narray_adapter.rb
|
231
320
|
- lib/charty/table_adapters/nmatrix_adapter.rb
|
321
|
+
- lib/charty/table_adapters/pandas_adapter.rb
|
322
|
+
- lib/charty/util.rb
|
323
|
+
- lib/charty/vector.rb
|
324
|
+
- lib/charty/vector_adapters.rb
|
325
|
+
- lib/charty/vector_adapters/array_adapter.rb
|
326
|
+
- lib/charty/vector_adapters/daru_adapter.rb
|
327
|
+
- lib/charty/vector_adapters/narray_adapter.rb
|
328
|
+
- lib/charty/vector_adapters/nmatrix_adapter.rb
|
329
|
+
- lib/charty/vector_adapters/numpy_adapter.rb
|
330
|
+
- lib/charty/vector_adapters/pandas_adapter.rb
|
232
331
|
- lib/charty/version.rb
|
233
332
|
homepage: https://github.com/red-data-tools/charty
|
234
333
|
licenses:
|
@@ -249,7 +348,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
249
348
|
- !ruby/object:Gem::Version
|
250
349
|
version: '0'
|
251
350
|
requirements: []
|
252
|
-
rubygems_version: 3.
|
351
|
+
rubygems_version: 3.2.3
|
253
352
|
signing_key:
|
254
353
|
specification_version: 4
|
255
354
|
summary: Visualizing your data in a simple way.
|