Skip to content

Commit 2899f1d

Browse files
authored
Merge pull request #5 from JuliaAI/show
Add fancy `show` for UnivariateFinite
2 parents 74e8d42 + 67532fe commit 2899f1d

File tree

6 files changed

+35
-15
lines changed

6 files changed

+35
-15
lines changed

Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Missings = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
1010
OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
1111
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
1212
ScientificTypesBase = "30f210dd-8aff-4c5f-94ba-8e64358c1161"
13+
UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228"
1314

1415
[compat]
1516
CategoricalArrays = "0.9, 0.10"

README.md

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,28 @@ this package is the class pool of a `CategoricalArray`:
3232
```julia
3333
using CategoricalDistributions
3434
using CategoricalArrays
35+
import Distributions
3536
julia> data = rand(["yes", "no", "maybe"], 10) |> categorical
3637
10-element CategoricalArray{String,1,UInt32}:
37-
"maybe"
38-
"maybe"
3938
"no"
4039
"yes"
41-
"maybe"
4240
"no"
41+
"maybe"
42+
"maybe"
4343
"no"
44+
"maybe"
4445
"no"
4546
"no"
46-
"yes"
47+
"maybe"
48+
49+
julia> d = Distributions.fit(UnivariateFinite, data)
50+
UnivariateFinite{Multiclass{3}}
51+
┌ ┐
52+
maybe ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.4
53+
no ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5
54+
yes ┤■■■■■■■ 0.1
55+
└ ┘
4756

48-
julia> d = fit(UnivariateFinite, data)
49-
UnivariateFinite{Multiclass{3}}(maybe=>0.3, no=>0.5, yes=>0.2)
5057

5158
julia> pdf(d, "no")
5259
0.5

src/CategoricalDistributions.jl

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,14 @@
11
module CategoricalDistributions
22

3-
export UnivariateFinite, UnivariateFiniteArray
4-
5-
# re-eported from Distributions:
6-
export pdf, logpdf, support, mode
7-
83
import Distributions
9-
import ScientificTypesBase
4+
import ScientificTypesBase: Finite, Multiclass, OrderedFactor
105
using OrderedCollections
116
using CategoricalArrays
127
import Missings
138
using Random
9+
using UnicodePlots
1410

1511
const Dist = Distributions
16-
const STB = ScientificTypesBase
1712

1813
import Distributions: pdf, logpdf, support, mode
1914

@@ -22,4 +17,12 @@ include("types.jl")
2217
include("methods.jl")
2318
include("arrays.jl")
2419

20+
export UnivariateFinite, UnivariateFiniteArray
21+
22+
# re-eport from Distributions:
23+
export pdf, logpdf, support, mode
24+
25+
# re-export from ScientificTypesBase:
26+
export Multiclass, OrderedFactor
27+
2528
end

src/methods.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,15 @@ function Base.show(stream::IO, d::UnivariateFinite)
7979
print(stream, "UnivariateFinite{$(d.scitype)}($arg_str)")
8080
end
8181

82+
function Base.show(io::IO, mime::MIME"text/plain",
83+
d::UnivariateFinite{S}) where S
84+
s = support(d)
85+
x = string.(CategoricalArrays.DataAPI.unwrap.(s))
86+
y = pdf.(d, s)
87+
plt = barplot(x, y, title="UnivariateFinite{$S}")
88+
show(io, mime, plt)
89+
end
90+
8291
show_prefix(u::UnivariateFiniteArray{S,V,R,P,1}) where {S,V,R,P} =
8392
"$(length(u))-element"
8493
show_prefix(u::UnivariateFiniteArray) = join(size(u),'x')

src/types.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ same size as the array.
131131

132132
# extend Ditributions type hiearchy to account for non-euclidean
133133
# supports:
134-
abstract type Categorical{S<:STB.Finite} <: Dist.ValueSupport end
134+
abstract type Categorical{S<:Finite} <: Dist.ValueSupport end
135135

136136
# not exported:
137137
const _UnivariateFinite_{S} =

src/utilities.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
function scitype(c::CategoricalValue)
66
nc = length(levels(c.pool))
7-
return ifelse(c.pool.ordered, STB.OrderedFactor{nc}, STB.Multiclass{nc})
7+
return ifelse(c.pool.ordered, OrderedFactor{nc}, Multiclass{nc})
88
end
99

1010

0 commit comments

Comments
 (0)