需要创建单元尺寸为4km^2的网格,然后根据其中的需求为其着色

问题描述 投票:0回答:1

我的需求数据是 pandas 数据框中的 order_id、cust_lat、cust_long。 我只需要创建一个平铺热图,这样我就可以决定我需要的商店在哪里。我对 python 和 SQL 很熟悉,并且可以使用 Looker + Bigquery。如何快速做到这一点?

如果我可以创建另一个包含商店的层,并且人们可以有权删除或添加商店,我也希望它。

python sql google-bigquery looker-studio looker
1个回答
0
投票

我能想到的最快路线是使用

geopandas

首先,您要将纬度和经度浮点数转换为

POINT

    SELECT
        ST_GEOGPOINT(cust_long, cust_lat) AS location,
        order_id,
      FROM
        some_dataset.orders

现在您可以使用 BigQuery 的 Python 客户端库

Client.query.to_geodataframe
方法将其拉入 GeoPandas GeoDataFrame 中。

从这里您可以在地图上绘制数据的热图

替代方案

如果数据量非常大,这可能会很棘手。在这种情况下,您必须预先对数据进行分类并以另一种方式绘制网格。这是一种选择:

1 - 将数据装箱

我们将把繁重的工作推到 BigQuery 层。让云计算的大块做它最擅长的事!

我们需要

通过网格单元格获取订单计数的代码将如下所示:

    SELECT
        RANGE_BUCKET(
          cust_lat,
          GENERATE_ARRAY(start_km_lat, end_km_lat, 2)
        ) AS lat_cell,
        RANGE_BUCKET(
          cust_long,
          GENERATE_ARRAY(start_km_lng, end_km_lng, 2)
        ) AS long_cell,
        COUNT(order_id) AS n_orders,
      FROM
        some_dataset.orders
  GROUP BY
        1, 2

这将为您提供一组单元格位置和订单计数。

2 - 创建热图

既然您熟悉 Python,一个简单的选择可能是使用 Seaborn 的 heatmap 函数

这将类似于以下内容(这里我假设您已将 BigQuery 中的数据加载到名为

df
的数据框中):

pivoted_data = df.pivot(index=lat_cell, columns=long_cell, values=n_orders)

sns.heatmap(pivoted_data)
© www.soinside.com 2019 - 2024. All rights reserved.