示例#1
0
文件: geodata.py 项目: afonit/gpdvega
def gpd_to_values(data):
    """Replace a GeoDataFrame by a data model with values.
    For ``geopandas.GeoDataFrame`` columns values are stored as Foreign Members
    of GeoJSON feature objects. For all other types uses function
    :py:func:`altair.to_values`."""
    if isinstance(data, gpd.GeoDataFrame):
        data = alt.utils.sanitize_dataframe(data)
        values = geopandas_to_dict(data)
        return {'values': json.dumps(values)}
    else:
        return alt.to_values(data)
示例#2
0
def test_gpd_to_values_pd():
    data = pd.DataFrame(pd.np.arange(3), columns=['param'])
    assert gpdvega.gpd_to_values(data) == alt.to_values(data)
示例#3
0
def execute_query(parameters: dict):
    injected_span: object = parameters.pop("span")
    with tracer.start_active_span(
            "queryibis",
            references=[
                opentracing.child_of(
                    (tracer.extract(opentracing.Format.TEXT_MAP,
                                    injected_span)))
            ],
    ) as scope:
        scope.span.log_kv(parameters)
        name: str = parameters.pop("name")
        transforms: typing.Optional[str] = parameters.pop("transform", None)

        if name not in _expr_map:
            raise ValueError(f"{name} is not an expression known to us!")
        expr = _expr_map[name]
        sql = expr.compile()
        scope.span.log_kv({"sql:initial": sql})
        debug(
            "query:initial",
            {
                "transforms": transforms,
                "parameters": parameters,
                "sql": sql
            },
        )
        if transforms:
            # Replace all string instances of data references with value in schema
            for k, v in parameters.items():
                # All data items are added to parameters as `:<data name>`.
                # They also should  be in the `data` paramater, but you have to call
                # this with a tuple which I am not sure where to get from
                # https://github.com/vega/vega/blob/65fe7cb2485be90e16298d9dff87bf56045afb8d/packages/vega-transforms/src/Filter.js#L48
                if not k.startswith(":"):
                    continue
                k = k[1:]
                res = json.dumps(v)
                for t in transforms:
                    if t["type"] == "filter" or t["type"] == "formula":
                        t["expr"] = _patch_vegaexpr(t["expr"], k, res)
            try:
                expr = apply(expr, transforms)
            except Exception as e:
                raise ValueError(
                    f"Failed to convert {transforms} with error message message '{e}'"
                )
        with tracer.start_span("ibis:execute") as execute_span:
            sql = expr.compile()
            execute_span.log_kv({"sql": sql})
            if ENABLE_MULTIPROCESSING:
                data = execute_new_client(expr)
            else:
                data = expr.execute()
        values = altair.to_values(data)["values"]
        debug("query:result", {
            "transforms": transforms,
            "sql": sql,
            "values": values
        })
        return values