qg11a / qg11a.github.io

0 stars 0 forks source link

桂林市各卫生院与养老院距离可视化 #2

Open qg11a opened 1 month ago

qg11a commented 1 month ago

写在前面

昨天收到朋友消息,她们科室给了一个关于可视化的任务,需要根据表中给出的各卫生院与养老院的坐标经纬度来计算出各机构之间的距离,并以图的形式进行可视化。

导入相关库

针对这个问题,尝试使用python的三个库pandas、folium以及haversine库。pandas 库用于数据处理和读取 Excel 文件,folium 库用于生成交互式地图,haversine 库用于计算两点之间的距离。

读取数据

她给了两个表,output_gd.xlsx表中是桂林市各卫生院的经纬度,output1_gd.xlsx表中是桂林市各养老院的经纬度。首先需要导入数据,使用 pandas 的 read_excel 函数从给定路径读取包含卫生院和养老院信息的 Excel 文件。

创建地图

实例化一个 folium.Map 对象,取一个合适的经纬度坐标设置为桂林市的中心点,并设置初始缩放级别为 12。 分别遍历卫生院数据框 hospitals_df和养老院数据框 elderly_cares_df,为每个地点创建一个 folium.Marker 对象,将其添加到地图上。每个标记点都包含一个弹出窗口,显示卫生院与养老院的名称和地址,红色图标表示卫生院,蓝色图标表示养老院。

计算距离

定义距离计算函数

使用 haversine 库定义一个名为 calculate_distance 的函数,该函数接受两个地点的经度和纬度作为参数,并返回它们之间的距离(单位为公里)

计算并绘制卫生院和养老院之间的距离

使用嵌套循环遍历所有卫生院和养老院的组合,对于每一对地点,使用 calculate_distance 函数计算它们之间的距离。这里只计算了距离小于5公里的机构,所以如果两个地点之间的距离小于5公里,则使用 folium.PolyLine 创建一条灰色线,将其添加到地图上,并设置线的透明度和宽度,为每条线设置一个弹出窗口,当用户点击线时会显示两点之间的距离。

保存地图到 HTML 文件

使用 map.save 函数将生成的地图保存为 HTML 文件,并保存在指定的路径。

查看

可以在浏览器中打开生成的](url) HTML 文件来查看地图。地图上的红色和蓝色标记分别代表卫生院和养老院的位置,灰色线表示两者之间的距离(如果小于5公里)。点击标记或线条的弹出窗口可以查看具体的地点信息或距离。

childclm commented 1 month ago

大佬,这个pandas读取execl速度太慢了啊,有什么办法不