使用 Datasets Explorer Chrome 扩展查询数据集
社区文章 发布于 2024 年 7 月 19 日
借助 HuggingFace 数据集上的新模态过滤器,我们将通过 Datasets Explorer 在浏览器中查看一些有趣的 Hugging Face 地理空间数据集并执行不同的 SQL 查询。

数据集浏览器 Chrome 扩展
通过 Hugging Face Datasets Explorer Chrome 扩展,我们可以直接在数据集上使用 SQL 编辑器。它在后台使用 DuckDB,并将不同的配置和拆分加载为视图供您查询。该扩展具有一些很棒的功能:
- 支持私有数据集 🔒
- 大型查询结果的无限滚动惰性加载 ♾️
- Command + Enter 快捷键 💻
- 完全支持 DuckDB + 扩展 🤯
- 完全由浏览器中的 DuckDB WASM 提供支持 🦆

安装并加载 DuckDB 空间扩展
DuckDB 有一个 `spatial` 扩展,您可以在此处阅读更多信息,它使我们能够执行非常强大的地理空间查询。Datasets Explorer 的美妙之处在于我们可以自动利用这些扩展。
让我们运行以下查询:
INSTALL spatial;
LOAD spatial;
案例研究 1:美国电动汽车充电站位置数据集
让我们看看这个电动汽车充电站位置数据集,可以在此处找到。

让我们查询数据 🦆
现在我们已经设置好了,可以查询我们的数据集了。让我们首先找出不同充电器的运营商。我们可以使用下面的 SQL 查询出排名前几的运营商
拥有最多站点的顶级运营商
select metadata.operator as operator, count(*) as num_locations
from default_view
group by operator
order by num_locations desc

我们可以看到 ChargePoint 拥有最多的站点,特斯拉紧随其后。此外还有许多其他特定位置的运营商。
现在,让我们在 DuckDB 中进行一些地理空间查询,以找出距离给定位置最近的 n 个充电器。
寻找距离纽约时代广场最近的 100 个充电器 🏙️⚡
这是一个非常具体的例子,但它展示了我们无需离开浏览器即可进行的分析级别。尽管元数据是字典结构,但我们可以使用 `.` 运算符来选择不同的字段。
距离时代广场最近的 100 个电动汽车充电器
SELECT
metadata.name,
metadata.operator,
lat,
lng,
ST_Distance(ST_POINT(lng, lat), ST_Point(-73.9865695115598, 40.75595717084848)) AS distance,
FROM default_view
ORDER BY distance
LIMIT 100
结果
如果我们将它们绘制在地图上,可以看到纽约市周围的各种电动汽车充电站。
案例研究 2:AirBnb 住宿提供数据集 🏠
kraina/airbnb 数据集非常有趣,因为它具有几个独特的特征。即
- 私人房间和合租房间
- 房间类型
- 两人两晚的费用(欧元)
- 城市(10 个欧洲城市之一)
- 入住人数
- 超赞房东
- 卧室数量
- 房客满意度
- 清洁评级
- dist:距离市中心距离(公里)
- metro_dist:距离最近地铁站距离(公里)
房源最集中的城市
WITH listings_with_location AS (
SELECT *, ST_Point(lng, lat) AS location
FROM all_view
),
city_centers AS (
SELECT city, ST_Point(AVG(lng), AVG(lat)) AS center
FROM listings_with_location
GROUP BY city
)
SELECT
al.city,
COUNT(*) AS listings_within_1km
FROM
listings_with_location al
JOIN
city_centers cc ON al.city = cc.city
WHERE
ST_DWithin(al.location, cc.center, 1000)
GROUP BY
al.city
ORDER BY
listings_within_1km DESC
LIMIT 5
城市 | 1公里内的房源 |
---|---|
伦敦 | 9993 |
罗马 | 9027 |
巴黎 | 6688 |
里斯本 | 5763 |
雅典 | 5280 |
吸引力指数与市中心距离 🍽️🎉
SELECT
city,
CASE
WHEN dist <= 1 THEN '0-1km'
WHEN dist <= 3 THEN '1-3km'
WHEN dist <= 5 THEN '3-5km'
ELSE '5km+'
END as distance_category,
AVG(attr_index_norm) as avg_attraction_index,
COUNT(*) as listings_count
FROM
all_view
GROUP BY
city, distance_category
ORDER BY
city, distance_category;
城市 | 距离类别 | 平均值 | 数量 |
---|---|---|---|
阿姆斯特丹 | 0-1公里 | 29.35 | 319 |
阿姆斯特丹 | 1-3公里 | 15.75 | 1010 |
阿姆斯特丹 | 3-5公里 | 6.94 | 507 |
阿姆斯特丹 | 5公里以上 | 3.44 | 244 |
价格与地铁距离的关系 💸🚆
WITH proximity_prices AS (
SELECT
city,
CASE
WHEN metro_dist <= 0.5 THEN 'very_close'
WHEN metro_dist <= 1 THEN 'close'
WHEN metro_dist <= 2 THEN 'moderate'
ELSE 'far'
END as metro_proximity,
realSum as price
FROM
all_view
)
SELECT
city,
AVG(CASE WHEN metro_proximity = 'very_close' THEN price END) as avg_price_very_close,
AVG(CASE WHEN metro_proximity = 'close' THEN price END) as avg_price_close,
AVG(CASE WHEN metro_proximity = 'moderate' THEN price END) as avg_price_moderate,
AVG(CASE WHEN metro_proximity = 'far' THEN price END) as avg_price_far,
COUNT(*) as total_listings
FROM
proximity_prices
GROUP BY
city
ORDER BY
city;
我们可以看到平均价格和地铁距离之间确实存在关系。
它是开源的 🤗
请查看它,它是开源的,并且在Chrome 网上应用店中。