我的需求数据是 pandas 数据框中的 order_id、cust_lat、cust_long。 我只需要创建一个平铺热图,这样我就可以决定我需要的商店在哪里。我对 python 和 SQL 很熟悉,并且可以使用 Looker + Bigquery。如何快速做到这一点?
如果我可以创建另一个包含商店的层,并且人们可以有权删除或添加商店,我也希望它。
我能想到的最快路线是使用
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 中。
如果数据量非常大,这可能会很棘手。在这种情况下,您必须预先对数据进行分类并以另一种方式绘制网格。这是一种选择:
我们将把繁重的工作推到 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
这将为您提供一组单元格位置和订单计数。
既然您熟悉 Python,一个简单的选择可能是使用 Seaborn 的 heatmap 函数。
这将类似于以下内容(这里我假设您已将 BigQuery 中的数据加载到名为
df
的数据框中):
pivoted_data = df.pivot(index=lat_cell, columns=long_cell, values=n_orders)
sns.heatmap(pivoted_data)