polars-df 0.3.0-arm64-darwin → 0.3.1-arm64-darwin
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/Cargo.lock +1 -1
- data/LICENSE-THIRD-PARTY.txt +54 -54
- data/README.md +40 -2
- data/lib/polars/3.0/polars.bundle +0 -0
- data/lib/polars/3.1/polars.bundle +0 -0
- data/lib/polars/3.2/polars.bundle +0 -0
- data/lib/polars/data_frame.rb +26 -5
- data/lib/polars/data_types.rb +4 -0
- data/lib/polars/group_by.rb +11 -0
- data/lib/polars/plot.rb +109 -0
- data/lib/polars/series.rb +41 -3
- data/lib/polars/version.rb +1 -1
- data/lib/polars.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73bfc5278ee5dfe829af3c38f8a1dabd55cbeafebcccd03bed68df6735cd70bd
|
4
|
+
data.tar.gz: 8cccd40eae4f3413f9f62ccce4d2ddf9668f61a74be81adaf8de3115ae630793
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c69152b898468136f642746604041bce87747ba7ee6119f825b6a7166aee5f9696861985a8092fd6d79fd5a3b49c7828571ceccc8d7c96b9262fed75670949bd
|
7
|
+
data.tar.gz: d6614b5f214c09b7fa09fd72392a5892f1b007df10779c241c8bd41e33452ed144c26916a2b29c2c18e3ae6ea58b90145f1e047b6cc4a0fc03a2046bf1a4b50b
|
data/CHANGELOG.md
CHANGED
data/Cargo.lock
CHANGED
data/LICENSE-THIRD-PARTY.txt
CHANGED
@@ -1630,33 +1630,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
|
1630
1630
|
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
1631
1631
|
DEALINGS IN THE SOFTWARE.
|
1632
1632
|
|
1633
|
-
================================================================================
|
1634
|
-
array-init-cursor LICENSE-MIT
|
1635
|
-
================================================================================
|
1636
|
-
|
1637
|
-
MIT License
|
1638
|
-
|
1639
|
-
Copyright (c) 2021 The Planus Project Developers
|
1640
|
-
|
1641
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
1642
|
-
of this software and associated documentation files (the "Software"), to deal
|
1643
|
-
in the Software without restriction, including without limitation the rights
|
1644
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
1645
|
-
copies of the Software, and to permit persons to whom the Software is
|
1646
|
-
furnished to do so, subject to the following conditions:
|
1647
|
-
|
1648
|
-
The above copyright notice and this permission notice shall be included in all
|
1649
|
-
copies or substantial portions of the Software.
|
1650
|
-
|
1651
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
1652
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
1653
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
1654
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
1655
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
1656
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
1657
|
-
SOFTWARE.
|
1658
|
-
|
1659
|
-
|
1660
1633
|
================================================================================
|
1661
1634
|
array-init-cursor LICENSE-APACHE
|
1662
1635
|
================================================================================
|
@@ -1839,6 +1812,33 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
1839
1812
|
END OF TERMS AND CONDITIONS
|
1840
1813
|
|
1841
1814
|
|
1815
|
+
================================================================================
|
1816
|
+
array-init-cursor LICENSE-MIT
|
1817
|
+
================================================================================
|
1818
|
+
|
1819
|
+
MIT License
|
1820
|
+
|
1821
|
+
Copyright (c) 2021 The Planus Project Developers
|
1822
|
+
|
1823
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
1824
|
+
of this software and associated documentation files (the "Software"), to deal
|
1825
|
+
in the Software without restriction, including without limitation the rights
|
1826
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
1827
|
+
copies of the Software, and to permit persons to whom the Software is
|
1828
|
+
furnished to do so, subject to the following conditions:
|
1829
|
+
|
1830
|
+
The above copyright notice and this permission notice shall be included in all
|
1831
|
+
copies or substantial portions of the Software.
|
1832
|
+
|
1833
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
1834
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
1835
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
1836
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
1837
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
1838
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
1839
|
+
SOFTWARE.
|
1840
|
+
|
1841
|
+
|
1842
1842
|
================================================================================
|
1843
1843
|
arrow-format LICENSE
|
1844
1844
|
================================================================================
|
@@ -27534,33 +27534,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
|
27534
27534
|
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
27535
27535
|
DEALINGS IN THE SOFTWARE.
|
27536
27536
|
|
27537
|
-
================================================================================
|
27538
|
-
planus LICENSE-MIT
|
27539
|
-
================================================================================
|
27540
|
-
|
27541
|
-
MIT License
|
27542
|
-
|
27543
|
-
Copyright (c) 2021 The Planus Project Developers
|
27544
|
-
|
27545
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
27546
|
-
of this software and associated documentation files (the "Software"), to deal
|
27547
|
-
in the Software without restriction, including without limitation the rights
|
27548
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
27549
|
-
copies of the Software, and to permit persons to whom the Software is
|
27550
|
-
furnished to do so, subject to the following conditions:
|
27551
|
-
|
27552
|
-
The above copyright notice and this permission notice shall be included in all
|
27553
|
-
copies or substantial portions of the Software.
|
27554
|
-
|
27555
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
27556
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
27557
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
27558
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
27559
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
27560
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
27561
|
-
SOFTWARE.
|
27562
|
-
|
27563
|
-
|
27564
27537
|
================================================================================
|
27565
27538
|
planus LICENSE-APACHE
|
27566
27539
|
================================================================================
|
@@ -27743,6 +27716,33 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
27743
27716
|
END OF TERMS AND CONDITIONS
|
27744
27717
|
|
27745
27718
|
|
27719
|
+
================================================================================
|
27720
|
+
planus LICENSE-MIT
|
27721
|
+
================================================================================
|
27722
|
+
|
27723
|
+
MIT License
|
27724
|
+
|
27725
|
+
Copyright (c) 2021 The Planus Project Developers
|
27726
|
+
|
27727
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
27728
|
+
of this software and associated documentation files (the "Software"), to deal
|
27729
|
+
in the Software without restriction, including without limitation the rights
|
27730
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
27731
|
+
copies of the Software, and to permit persons to whom the Software is
|
27732
|
+
furnished to do so, subject to the following conditions:
|
27733
|
+
|
27734
|
+
The above copyright notice and this permission notice shall be included in all
|
27735
|
+
copies or substantial portions of the Software.
|
27736
|
+
|
27737
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
27738
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
27739
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
27740
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
27741
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
27742
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
27743
|
+
SOFTWARE.
|
27744
|
+
|
27745
|
+
|
27746
27746
|
================================================================================
|
27747
27747
|
polars LICENSE
|
27748
27748
|
================================================================================
|
data/README.md
CHANGED
@@ -282,10 +282,10 @@ df.to_dummies
|
|
282
282
|
|
283
283
|
## Conversion
|
284
284
|
|
285
|
-
Array of
|
285
|
+
Array of hashes
|
286
286
|
|
287
287
|
```ruby
|
288
|
-
df.rows
|
288
|
+
df.rows(named: true)
|
289
289
|
```
|
290
290
|
|
291
291
|
Hash of series
|
@@ -308,6 +308,12 @@ Parquet
|
|
308
308
|
df.write_parquet("file.parquet")
|
309
309
|
```
|
310
310
|
|
311
|
+
Numo array
|
312
|
+
|
313
|
+
```ruby
|
314
|
+
df.to_numo
|
315
|
+
```
|
316
|
+
|
311
317
|
## Types
|
312
318
|
|
313
319
|
You can specify column types when creating a data frame
|
@@ -343,6 +349,38 @@ Cast a column
|
|
343
349
|
df["a"].cast(Polars::Int32)
|
344
350
|
```
|
345
351
|
|
352
|
+
## Visualization
|
353
|
+
|
354
|
+
Add [Vega](https://github.com/ankane/vega-ruby) to your application’s Gemfile:
|
355
|
+
|
356
|
+
```ruby
|
357
|
+
gem "vega"
|
358
|
+
```
|
359
|
+
|
360
|
+
And use:
|
361
|
+
|
362
|
+
```ruby
|
363
|
+
df.plot("a", "b")
|
364
|
+
```
|
365
|
+
|
366
|
+
Specify the chart type (`line`, `pie`, `column`, `bar`, `area`, or `scatter`)
|
367
|
+
|
368
|
+
```ruby
|
369
|
+
df.plot("a", "b", type: "pie")
|
370
|
+
```
|
371
|
+
|
372
|
+
Group data
|
373
|
+
|
374
|
+
```ruby
|
375
|
+
df.groupby("c").plot("a", "b")
|
376
|
+
```
|
377
|
+
|
378
|
+
Stacked columns or bars
|
379
|
+
|
380
|
+
```ruby
|
381
|
+
df.groupby("c").plot("a", "b", stacked: true)
|
382
|
+
```
|
383
|
+
|
346
384
|
## History
|
347
385
|
|
348
386
|
View the [changelog](CHANGELOG.md)
|
Binary file
|
Binary file
|
Binary file
|
data/lib/polars/data_frame.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module Polars
|
2
2
|
# Two-dimensional data structure representing data as a table with rows and columns.
|
3
3
|
class DataFrame
|
4
|
+
include Plot
|
5
|
+
|
4
6
|
# @private
|
5
7
|
attr_accessor :_df
|
6
8
|
|
@@ -604,10 +606,10 @@ module Polars
|
|
604
606
|
return Slice.new(self).apply(item)
|
605
607
|
end
|
606
608
|
|
607
|
-
if
|
609
|
+
if item.is_a?(Array) && item.all? { |v| Utils.strlike?(v) }
|
608
610
|
# select multiple columns
|
609
611
|
# df[["foo", "bar"]]
|
610
|
-
return _from_rbdf(_df.select(item))
|
612
|
+
return _from_rbdf(_df.select(item.map(&:to_s)))
|
611
613
|
end
|
612
614
|
|
613
615
|
if Utils.is_int_sequence(item)
|
@@ -689,7 +691,8 @@ module Polars
|
|
689
691
|
# @example
|
690
692
|
# df = Polars::DataFrame.new({"foo" => [1, 2, 3], "bar" => [4, 5, 6]})
|
691
693
|
# df.to_hashes
|
692
|
-
#
|
694
|
+
# # =>
|
695
|
+
# # [{"foo"=>1, "bar"=>4}, {"foo"=>2, "bar"=>5}, {"foo"=>3, "bar"=>6}]
|
693
696
|
def to_hashes
|
694
697
|
rbdf = _df
|
695
698
|
names = columns
|
@@ -699,8 +702,26 @@ module Polars
|
|
699
702
|
end
|
700
703
|
end
|
701
704
|
|
702
|
-
#
|
703
|
-
#
|
705
|
+
# Convert DataFrame to a 2D Numo array.
|
706
|
+
#
|
707
|
+
# This operation clones data.
|
708
|
+
#
|
709
|
+
# @return [Numo::NArray]
|
710
|
+
#
|
711
|
+
# @example
|
712
|
+
# df = Polars::DataFrame.new(
|
713
|
+
# {"foo" => [1, 2, 3], "bar" => [6, 7, 8], "ham" => ["a", "b", "c"]}
|
714
|
+
# )
|
715
|
+
# df.to_numo.class
|
716
|
+
# # => Numo::RObject
|
717
|
+
def to_numo
|
718
|
+
out = _df.to_numo
|
719
|
+
if out.nil?
|
720
|
+
Numo::NArray.vstack(width.times.map { |i| to_series(i).to_numo }).transpose
|
721
|
+
else
|
722
|
+
out
|
723
|
+
end
|
724
|
+
end
|
704
725
|
|
705
726
|
# no to_pandas
|
706
727
|
|
data/lib/polars/data_types.rb
CHANGED
@@ -84,6 +84,8 @@ module Polars
|
|
84
84
|
|
85
85
|
# Calendar date and time type.
|
86
86
|
class Datetime < TemporalType
|
87
|
+
attr_reader :tu
|
88
|
+
|
87
89
|
def initialize(time_unit = "us", time_zone = nil)
|
88
90
|
@tu = time_unit || "us"
|
89
91
|
@time_zone = time_zone
|
@@ -92,6 +94,8 @@ module Polars
|
|
92
94
|
|
93
95
|
# Time duration/delta type.
|
94
96
|
class Duration < TemporalType
|
97
|
+
attr_reader :tu
|
98
|
+
|
95
99
|
def initialize(time_unit = "us")
|
96
100
|
@tu = time_unit
|
97
101
|
end
|
data/lib/polars/group_by.rb
CHANGED
@@ -571,5 +571,16 @@ module Polars
|
|
571
571
|
def agg_list
|
572
572
|
agg(Polars.all.list)
|
573
573
|
end
|
574
|
+
|
575
|
+
# Plot data.
|
576
|
+
#
|
577
|
+
# @return [Vega::LiteChart]
|
578
|
+
def plot(*args, **options)
|
579
|
+
raise ArgumentError, "Multiple groups not supported" if by.is_a?(Array) && by.size > 1
|
580
|
+
# same message as Ruby
|
581
|
+
raise ArgumentError, "unknown keyword: :group" if options.key?(:group)
|
582
|
+
|
583
|
+
Utils.wrap_df(_df).plot(*args, **options, group: by)
|
584
|
+
end
|
574
585
|
end
|
575
586
|
end
|
data/lib/polars/plot.rb
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
module Polars
|
2
|
+
module Plot
|
3
|
+
# Plot data.
|
4
|
+
#
|
5
|
+
# @return [Vega::LiteChart]
|
6
|
+
def plot(x = nil, y = nil, type: nil, group: nil, stacked: nil)
|
7
|
+
require "vega"
|
8
|
+
|
9
|
+
raise ArgumentError, "Must specify columns" if columns.size != 2 && (!x || !y)
|
10
|
+
x ||= columns[0]
|
11
|
+
y ||= columns[1]
|
12
|
+
type ||= begin
|
13
|
+
if self[x].numeric? && self[y].numeric?
|
14
|
+
"scatter"
|
15
|
+
elsif self[x].utf8? && self[y].numeric?
|
16
|
+
"column"
|
17
|
+
elsif (self[x].dtype == Date || self[x].dtype.is_a?(Datetime)) && self[y].numeric?
|
18
|
+
"line"
|
19
|
+
else
|
20
|
+
raise "Cannot determine type. Use the type option."
|
21
|
+
end
|
22
|
+
end
|
23
|
+
df = self[(group.nil? ? [x, y] : [x, y, group]).map(&:to_s).uniq]
|
24
|
+
data = df.rows(named: true)
|
25
|
+
|
26
|
+
case type
|
27
|
+
when "line", "area"
|
28
|
+
x_type =
|
29
|
+
if df[x].numeric?
|
30
|
+
"quantitative"
|
31
|
+
elsif df[x].datelike?
|
32
|
+
"temporal"
|
33
|
+
else
|
34
|
+
"nominal"
|
35
|
+
end
|
36
|
+
|
37
|
+
scale = x_type == "temporal" ? {type: "utc"} : {}
|
38
|
+
encoding = {
|
39
|
+
x: {field: x, type: x_type, scale: scale},
|
40
|
+
y: {field: y, type: "quantitative"}
|
41
|
+
}
|
42
|
+
encoding[:color] = {field: group} if group
|
43
|
+
|
44
|
+
Vega.lite
|
45
|
+
.data(data)
|
46
|
+
.mark(type: type, tooltip: true, interpolate: "cardinal", point: {size: 60})
|
47
|
+
.encoding(encoding)
|
48
|
+
.config(axis: {labelFontSize: 12})
|
49
|
+
when "pie"
|
50
|
+
raise ArgumentError, "Cannot use group option with pie chart" unless group.nil?
|
51
|
+
|
52
|
+
Vega.lite
|
53
|
+
.data(data)
|
54
|
+
.mark(type: "arc", tooltip: true)
|
55
|
+
.encoding(
|
56
|
+
color: {field: x, type: "nominal", sort: "none", axis: {title: nil}, legend: {labelFontSize: 12}},
|
57
|
+
theta: {field: y, type: "quantitative"}
|
58
|
+
)
|
59
|
+
.view(stroke: nil)
|
60
|
+
when "column"
|
61
|
+
encoding = {
|
62
|
+
x: {field: x, type: "nominal", sort: "none", axis: {labelAngle: 0}},
|
63
|
+
y: {field: y, type: "quantitative"}
|
64
|
+
}
|
65
|
+
if group
|
66
|
+
encoding[:color] = {field: group}
|
67
|
+
encoding[:xOffset] = {field: group} unless stacked
|
68
|
+
end
|
69
|
+
|
70
|
+
Vega.lite
|
71
|
+
.data(data)
|
72
|
+
.mark(type: "bar", tooltip: true)
|
73
|
+
.encoding(encoding)
|
74
|
+
.config(axis: {labelFontSize: 12})
|
75
|
+
when "bar"
|
76
|
+
encoding = {
|
77
|
+
# TODO determine label angle
|
78
|
+
y: {field: x, type: "nominal", sort: "none", axis: {labelAngle: 0}},
|
79
|
+
x: {field: y, type: "quantitative"}
|
80
|
+
}
|
81
|
+
if group
|
82
|
+
encoding[:color] = {field: group}
|
83
|
+
encoding[:yOffset] = {field: group} unless stacked
|
84
|
+
end
|
85
|
+
|
86
|
+
Vega.lite
|
87
|
+
.data(data)
|
88
|
+
.mark(type: "bar", tooltip: true)
|
89
|
+
.encoding(encoding)
|
90
|
+
.config(axis: {labelFontSize: 12})
|
91
|
+
when "scatter"
|
92
|
+
encoding = {
|
93
|
+
x: {field: x, type: "quantitative", scale: {zero: false}},
|
94
|
+
y: {field: y, type: "quantitative", scale: {zero: false}},
|
95
|
+
size: {value: 60}
|
96
|
+
}
|
97
|
+
encoding[:color] = {field: group} if group
|
98
|
+
|
99
|
+
Vega.lite
|
100
|
+
.data(data)
|
101
|
+
.mark(type: "circle", tooltip: true)
|
102
|
+
.encoding(encoding)
|
103
|
+
.config(axis: {labelFontSize: 12})
|
104
|
+
else
|
105
|
+
raise ArgumentError, "Invalid type: #{type}"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
data/lib/polars/series.rb
CHANGED
@@ -1776,8 +1776,9 @@ module Polars
|
|
1776
1776
|
# s.is_datelike
|
1777
1777
|
# # => true
|
1778
1778
|
def is_datelike
|
1779
|
-
[Date,
|
1779
|
+
[Date, Time].include?(dtype) || dtype.is_a?(Datetime) || dtype.is_a?(Duration)
|
1780
1780
|
end
|
1781
|
+
alias_method :datelike?, :is_datelike
|
1781
1782
|
|
1782
1783
|
# Check if this Series has floating point numbers.
|
1783
1784
|
#
|
@@ -1823,8 +1824,45 @@ module Polars
|
|
1823
1824
|
# def view
|
1824
1825
|
# end
|
1825
1826
|
|
1826
|
-
#
|
1827
|
-
#
|
1827
|
+
# Convert this Series to a Numo array. This operation clones data but is completely safe.
|
1828
|
+
#
|
1829
|
+
# @return [Numo::NArray]
|
1830
|
+
#
|
1831
|
+
# @example
|
1832
|
+
# s = Polars::Series.new("a", [1, 2, 3])
|
1833
|
+
# s.to_numo
|
1834
|
+
# # =>
|
1835
|
+
# # Numo::Int64#shape=[3]
|
1836
|
+
# # [1, 2, 3]
|
1837
|
+
def to_numo
|
1838
|
+
if !has_validity
|
1839
|
+
if is_datelike
|
1840
|
+
Numo::RObject.cast(to_a)
|
1841
|
+
elsif is_numeric
|
1842
|
+
# TODO make more efficient
|
1843
|
+
{
|
1844
|
+
UInt8 => Numo::UInt8,
|
1845
|
+
UInt16 => Numo::UInt16,
|
1846
|
+
UInt32 => Numo::UInt32,
|
1847
|
+
UInt64 => Numo::UInt64,
|
1848
|
+
Int8 => Numo::Int8,
|
1849
|
+
Int16 => Numo::Int16,
|
1850
|
+
Int32 => Numo::Int32,
|
1851
|
+
Int64 => Numo::Int64,
|
1852
|
+
Float32 => Numo::SFloat,
|
1853
|
+
Float64 => Numo::DFloat
|
1854
|
+
}.fetch(dtype).cast(to_a)
|
1855
|
+
elsif is_boolean
|
1856
|
+
Numo::Bit.cast(to_a)
|
1857
|
+
else
|
1858
|
+
_s.to_numo
|
1859
|
+
end
|
1860
|
+
elsif is_datelike
|
1861
|
+
Numo::RObject.cast(to_a)
|
1862
|
+
else
|
1863
|
+
_s.to_numo
|
1864
|
+
end
|
1865
|
+
end
|
1828
1866
|
|
1829
1867
|
# Set masked values.
|
1830
1868
|
#
|
data/lib/polars/version.rb
CHANGED
data/lib/polars.rb
CHANGED
@@ -15,6 +15,7 @@ require_relative "polars/batched_csv_reader"
|
|
15
15
|
require_relative "polars/cat_expr"
|
16
16
|
require_relative "polars/cat_name_space"
|
17
17
|
require_relative "polars/convert"
|
18
|
+
require_relative "polars/plot"
|
18
19
|
require_relative "polars/data_frame"
|
19
20
|
require_relative "polars/data_types"
|
20
21
|
require_relative "polars/date_time_expr"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polars-df
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: arm64-darwin
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-02-
|
11
|
+
date: 2023-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email: andrew@ankane.org
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- lib/polars/list_expr.rb
|
50
50
|
- lib/polars/list_name_space.rb
|
51
51
|
- lib/polars/meta_expr.rb
|
52
|
+
- lib/polars/plot.rb
|
52
53
|
- lib/polars/rolling_group_by.rb
|
53
54
|
- lib/polars/series.rb
|
54
55
|
- lib/polars/slice.rb
|