使用streamlit和chatgpt制作数据交互地图
点击Streamlit立即体验在线地图,如果碰到 app “休眠”的情况可以多点击“唤醒”。
最近 ChatGPT 大受欢迎。通过将网页地址内容发给 ChatGPT,它能生成建筑、景观或室内项目的项目特点,可以帮我们快速了解项目的情况。
例如,我们向 ChatGPT-4 咨询了谷德网站上的一个建筑项目——M 园区,上海 / AIM 恺慕建筑设计的相关内容:
ChatGPT 尝试调用网页浏览插件,但不久后返回了一个错误信息:
这是因为谷德网站做了反爬措施,不能直接浏览到信息。
所以,我们使用 ChatGPT-4 中的插件WebPilot来获取信息:
不过这样也存在一些不便,我们一次只能获取一个网站上项目的内容,太慢了。
所以我通过调用 Openai 的 API 接口实现了批量总结,使用的是 ChatGPT3.5-Turbo 版本(新版本的 API 太贵了所以才使用的 3.5),我们看看同样的项目返回的项目特点有什么差别:
这两个模型都指出了 M 园区的特点,那就是南北的“反差”和“融合”,完全符合我们的需求。
不仅如此,我还通过 ChatGPT 将项目的名称、设计公司、关键词、景观设计团队、设计师/设计团队、设计时间/开始时间、完成年份、占地面积(平方米)、建筑面积(平方米)、城市、项目地址、封面总结成 json 格式的文件。
M 园区的详细情况(下图):
对比原网页页尾内容(下图),可以看到除了业主单位出错之外,其他内容都是正确的。
仔细看可以发现设计时间/开始年份:2015 年并不在上图中,而是在正文里(下图),ChatGPT 从“2015 年我们受邀设计一个公司总部:M 园区。”提炼出了设计时间。
如果你有过在网页上采集数据的经验就应该能发现,ChatGPT 帮我们解决了一个非常重要的难题:从非结构数据中获取结构化内容。
意思是,在采集网页数据时,我们不需要像往常一样,发现网页中的规律、或者用正则匹配来获取数据,比如标题一般在<h1>
标签中,而是将内容发送给 ChatGPT 去提取数据。
获取项目的定位点
因为要制作地图,我们得将获取到的地址转为坐标点,这部分使用百度或者高德的地理编码服务。
我用的是百度的地理编码服务,文档地址为:https://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
我们回头看上文提到的项目:M 园区。文中给的地址是:项目地点:中国上海
,没有在文字中提到场地,只有一张场地位置示意图:
我们的 ChatGPT3.5 模型不能提取足够详细的地址,所以在地理编码服务的时候,位置被标记到了错误的地点。
这是非常头疼的事情,可能需要大量的人工校正,所以如果获取的项目地址不够详细,那么坐标点则不准确。
制作地图
为了能找到一个免费制作地图的方法,我花了很多时间去查资料。
Google Maps API和Mapbox使用人最多,但是收费,并且前者国内不支持访问。ArcGIS也提供地图发布服务,当然也是收费的。
在国内,百度地图 API、高德(AMap)地图 API通常采用“免费+收费”的模式,这意味着他们提供了基础的免费服务,但对于超出免费额度的使用或高级功能可能会收取费用。
因为我熟悉 Python,Python 中有 leafmap 和 folium 两个流行的开源库,可以制作地图,但是光有地图还不能,我还得做成网页分析出来。
于是,我找到了streamlit包,利用 Python 脚本,就可以创建一个交互式网页,并且网页可以免费托管在 streamlit cloud 中,不需要自己花服务器的钱。
Streamlit 是一个强大的工具,它允许 Python 开发者快速构建网页应用,特别适合那些熟悉 Python 但不太了解网页编程语言的用户。
我将这个地图的储存库发布在了 Github:
以下是项目的截图,点击小标题可以跳转到网页:
(1) 🏠 导航页
这是项目的主页,提供了项目说明。
(2)💻 地图页面
更多说明可以访问仓库查看。
如果你觉得本文有用,麻烦点一个免费的赞。
写在最后
数据更新时间为 2023 年 8 月。
本项目数据收集于网络,方便自用,仅供交流学习!如有侵权,请联系删除!