Source code for holoviews.element.stats
import param
import numpy as np
from ..core.dimension import Dimension, process_dimensions
from ..core.element import Element
from ..core.util import get_param_values
from .chart import Chart, Scatter
[docs]class StatisticsElement(Chart):
"""
StatisticsElement provides a baseclass for Element types that
compute statistics based on the input data. The baseclass
overrides standard Dataset methods emulating the existence
of the value dimensions.
"""
__abstract = True
def __init__(self, data, kdims=None, vdims=None, **params):
if isinstance(data, Element):
params.update(get_param_values(data))
kdims = kdims or data.dimensions()[:len(self.kdims)]
data = tuple(data.dimension_values(d) for d in kdims)
params.update(dict(kdims=kdims, vdims=[], _validate_vdims=False))
super(StatisticsElement, self).__init__(data, **params)
if not vdims:
self.vdims = [Dimension('Density')]
elif len(vdims) > 1:
raise ValueError("%s expects at most one vdim." %
type(self).__name__)
else:
self.vdims = process_dimensions(None, vdims)['vdims']
def range(self, dim, data_range=True):
iskdim = self.get_dimension(dim) not in self.vdims
return super(StatisticsElement, self).range(dim, data_range=iskdim)
[docs] def dimension_values(self, dim, expanded=True, flat=True):
"""
Returns the values along a particular dimension. If unique
values are requested will return only unique values.
"""
dim = self.get_dimension(dim, strict=True)
if dim in self.vdims:
return np.full(len(self), np.NaN)
return self.interface.values(self, dim, expanded, flat)
[docs] def get_dimension_type(self, dim):
"""
Returns the specified Dimension type if specified or
if the dimension_values types are consistent otherwise
None is returned.
"""
dim = self.get_dimension(dim)
if dim is None:
return None
elif dim.type is not None:
return dim.type
elif dim in self.vdims:
return np.float64
return self.interface.dimension_type(self, dim)
[docs] def dframe(self, dimensions=None):
"""
Returns the data in the form of a DataFrame. Supplying a list
of dimensions filters the dataframe. If the data is already
a DataFrame a copy is returned.
"""
if dimensions:
dimensions = [self.get_dimension(d, strict=True) for d in dimensions]
else:
dimensions = dimensions.kdims
dim = [dim.name for dim in dims if dim in dimensions.kdims]
return self.interface.dframe(self, dimensions)
def columns(self, dimensions=None):
if dimensions is None:
dimensions = self.kdims
else:
dimensions = [self.get_dimension(d, strict=True) for d in dimensions]
return OrderedDict([(d.name, self.dimension_values(d))
for d in dimensions if d in self.kdims])
[docs]class Bivariate(StatisticsElement):
"""
Bivariate elements are containers for two dimensional data,
which is to be visualized as a kernel density estimate. The
data should be supplied in a tabular format of x- and y-columns.
"""
kdims = param.List(default=[Dimension('x'), Dimension('y')],
bounds=(2, 2))
vdims = param.List(default=[Dimension('Density')], bounds=(0,1))
group = param.String(default="Bivariate", constant=True)
[docs]class Distribution(StatisticsElement):
"""
Distribution elements provides a representation for a
one-dimensional distribution which can be visualized as a kernel
density estimate. The data should be supplied in a tabular format
and will use the first column.
"""
kdims = param.List(default=[Dimension('Value')], bounds=(1, 1))
group = param.String(default='Distribution', constant=True)
vdims = param.List(default=[Dimension('Density')], bounds=(0, 1))
# Ensure Interface does not add an index
_auto_indexable_1d = False