Skip to content

Integrations

ipyvizzu.integrations

A module for integrations.

ipyvizzu.integrations.fugue

A module for Fugue integration.

Example

Users should not instantiate this module directly. As long as you installed fugue and ipyvizzu, the extension is auto-registered.

from fugue import fsql

fsql('''
SELECT a, SUM(b) AS b FROM spark.table
GROUP BY a ORDER BY b

OUTPUT USING vizzu:bar(x="a", y="b", title="title")
''').run(spark_session)

_Visualize

Bases: Outputter

A Fugue outputter extension (majorly for Fugue SQL)

Parameters:

Name Type Description Default
func str

A function name of Config

required
category str

Can be preset or timeline

required
Source code in src/ipyvizzu/integrations/fugue.py
class _Visualize(Outputter):
    """
    A Fugue outputter extension (majorly for Fugue SQL)

    Args:
        func:
            A function name of [Config][ipyvizzu.animation.Config]
        category:
            Can be preset or timeline
    """

    def __init__(self, func: str, category: str) -> None:
        super().__init__()
        self._category = category
        self._func = getattr(Config, func)

    def process(self, dfs: DataFrames) -> None:
        assert_or_throw(len(dfs) == 1, FugueWorkflowError("not single input"))
        df = dfs[0].as_pandas()  # pylint: disable=invalid-name
        if self._category == "timeline":
            self._process_timeline(df)
        else:
            self._process_preset(df)

    def _process_preset(self, df: pd.DataFrame) -> None:  # pylint: disable=invalid-name
        data = Data()
        data.add_df(df)
        chart = Chart(display=DisplayTarget.END)
        chart.animate(data)
        chart.animate(self._func(dict(self.params)))

    def _process_timeline(
        self, df: pd.DataFrame  # pylint: disable=invalid-name
    ) -> None:
        _p = dict(self.params)
        _pc = dict(_p.pop("config", {}))
        title = _pc.pop("title", "%s")
        key = _p.pop("by")
        conf = dict(_TIMELINE_DEFAULT_CONF)
        conf.update(_p)

        data = Data()
        chart = Chart(display=DisplayTarget.END)
        keys = df[key].unique()
        keys.sort()
        idx = pd.DataFrame({"_idx": range(len(keys)), key: keys})
        df = df.sort_values(key).merge(idx)
        data.add_df(df)
        chart.animate(data)

        for i, key in enumerate(keys):
            _p2 = dict(_pc)
            _p2["title"] = (title % key) if "%s" in title else title
            chart.animate(Data.filter(f"record._idx == {i}"), self._func(_p2), **conf)