Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
5eb55b1
Added Coerce transform
Apr 5, 2022
7d4fc92
Fixed the tests for Coerce transform
Apr 5, 2022
e3be036
Fixed a style issue
Apr 5, 2022
a75ac7b
Updated Coerce transform
Apr 5, 2022
106c92e
Added a missing dependency for tests
Apr 5, 2022
93fa98e
Revised Coerce transform
Apr 6, 2022
81d6c4a
Added a new constructor for Coerce struct
Apr 6, 2022
654cc04
Added missing parameters to Coerce transform & Tidied up Coerce trans…
Apr 6, 2022
bd6ee77
Revised Coerce transform
Apr 7, 2022
5d82ca6
Update src/transforms/coerce.jl
ceferisbarov Apr 8, 2022
4d4b732
Update src/transforms/coerce.jl
ceferisbarov Apr 8, 2022
083bfb9
Update src/transforms/coerce.jl
ceferisbarov Apr 8, 2022
567bf3a
Updated docstring od Coerce transform
Apr 8, 2022
0355178
Update src/transforms/coerce.jl
ceferisbarov Apr 8, 2022
6b6e430
Update test/runtests.jl
ceferisbarov Apr 8, 2022
dc0a308
Updated tests for Coerce transform
Apr 8, 2022
362798d
Merge branch 'coerce' of https://github.com/ceferisbarov/TableTransfo…
Apr 8, 2022
967eda0
Removed an unnecessary dependency from test/runtests.jl
Apr 8, 2022
a194745
Updated the reverse function for Coerce transform
Apr 8, 2022
8a7f82d
Update test/transforms.jl
ceferisbarov Apr 9, 2022
1f949c9
Update src/transforms/coerce.jl
ceferisbarov Apr 9, 2022
530828f
Refactored the revert function of Coerce transform
Apr 9, 2022
16afabf
Update src/transforms/coerce.jl
ceferisbarov Apr 9, 2022
a572062
Update src/transforms/coerce.jl
ceferisbarov Apr 9, 2022
92b8f21
Update src/transforms/coerce.jl
ceferisbarov Apr 9, 2022
bf913d7
Update src/transforms/coerce.jl
ceferisbarov Apr 9, 2022
be90b87
Fixed a typo
Apr 9, 2022
b005beb
Fixed a typo
Apr 9, 2022
eae03d4
Added categorical tests for Coerce transform
Apr 9, 2022
147bb14
Added a missing dependency
Apr 9, 2022
7a9eeb5
Update test/runtests.jl
juliohm Apr 10, 2022
6c9457f
Refactored the reverse function of Coerce transform
Apr 10, 2022
b3d4387
Merge branch 'coerce' of https://github.com/ceferisbarov/TableTransfo…
Apr 10, 2022
580dd2e
Update test/transforms.jl
juliohm Apr 11, 2022
41fec8b
Update test/transforms.jl
juliohm Apr 11, 2022
b98ff15
Update test/transforms.jl
juliohm Apr 11, 2022
1fd2523
Update test/transforms.jl
juliohm Apr 11, 2022
8252563
Update src/transforms/coerce.jl
juliohm Apr 11, 2022
537c335
Added Coerce to README
Apr 12, 2022
7a2d1ab
Update README.md
juliohm Apr 12, 2022
c735b9b
Merge branch 'master' into coerce
ceferisbarov Apr 12, 2022
d99e7e8
Removed a space
Apr 12, 2022
f196d3a
Update README.md
juliohm Apr 13, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/TableTransforms.jl
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ export
DropMissing,
Rename,
Identity,
Coerce,
Center,
Scale,
MinMax,
Expand Down
1 change: 1 addition & 0 deletions src/transforms.jl
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ include("transforms/select.jl")
include("transforms/filter.jl")
include("transforms/rename.jl")
include("transforms/identity.jl")
include("transforms/coerce.jl")
include("transforms/center.jl")
include("transforms/scale.jl")
include("transforms/zscore.jl")
Expand Down
34 changes: 34 additions & 0 deletions src/transforms/coerce.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# ------------------------------------------------------------------
# Licensed under the MIT License. See LICENSE in the project root.
# ------------------------------------------------------------------

"""
Coerce(pairs, tight=false, verbosity=1)
Return a copy of the table, ensuring that the element scitypes of the columns match the new specification.
Valid specifications (more to be added):
(1) one or more column_name=>Scitype pairs
"""
struct Coerce{P, T, V} <: Transform
pairs::P
tight::T
verbosity::V
end

Coerce(pair...; tight=false, verbosity=1) = Coerce(pair, tight, verbosity)

isrevertible(::Type{<:Coerce}) = true

function apply(transform::Coerce, table)
newtable = ScientificTypes.coerce(table, transform.pairs...; tight=transform.tight, verbosity=transform.verbosity)

scitypes = [ScientificTypes.elscitype(x) for x in Tables.columns(table)]
colnames = Tables.columnnames(table)
pairs = [Pair(i, j) for (i, j) in zip(colnames, scitypes)]

return newtable, pairs
end

revert(transform::Coerce, newtable, cache) = ScientificTypes.coerce(newtable, cache...)
1 change: 1 addition & 0 deletions test/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
ReferenceTests = "324d217c-45ce-50fc-942e-d289b448e8cf"
ScientificTypes = "321657f4-b219-11e9-178b-2701a2544e81"
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
Expand Down
3 changes: 3 additions & 0 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ using LinearAlgebra
using Statistics
using Test, Random, Plots
using ReferenceTests, ImageIO
# WARNING: replacing the following line with `using ScientificTypes` will
# cause a conflicting import and break the tests
import ScientificTypes: Count, elscitype

# set default configurations for plots
gr(ms=2, mc=:black, aspectratio=:equal,
Expand Down
16 changes: 16 additions & 0 deletions test/transforms.jl
Original file line number Diff line number Diff line change
Expand Up @@ -685,6 +685,22 @@
@test t == tₒ
end

@testset "Coerce" begin
x1 = [1.0, 2.0, 3.0, 4.0, 5.0]
x2 = [1.0, 2.0, 3.0, 4.0, 5.0]
x3 = [5.0, 5.0, 5.0, 5.0, 5.0]
t = TypedTables.Table(;x1, x2, x3)

# apply test
n, c = apply(Coerce(:x1=>Count, :x2=>Count), t)
@test elscitype(n.x1) == Count && elscitype(n.x2) == Count

# revert test
n, c = apply(Coerce(:x1=>Count, :x2=>Count), t)
tₒ = revert(Coerce(:x1=>Count, :x2=>Count), n, c)
@test t == tₒ
end

@testset "Center" begin
# using rng for reproducible results
x = rand(rng, Normal(2, 1), 4000)
Expand Down