import pandas as pd
import numpy as np
from scipy.spatial import KDTree

# 从Excel文件读取经纬度数据
dp = pd.read_excel('D:\pythonProject3\会员信息\附件二:会员信息数据.xlsx')
x = np.array(dp['商品GPS纬度'])
y = np.array(dp['商品GPS经度'])

# 构建二维坐标数组
points = np.column_stack((x, y))

# 创建KDTree对象
kdtree = KDTree(points)

# 设置搜索半径并计算密度
r = 0.1  # 调整r的值以控制密度的计算范围
density = kdtree.query_ball_point(points, r=r)
density_list = [len(d) for d in density]

# 保存结果到DataFrame并输出到Excel
df_density = pd.DataFrame({'Density': density_list})
df_density.to_excel('D:\pythonProject3\商品信息\商品密度.xlsx', index=False)
print('密度计算完成,结果已保存至Excel文件。')

这段代码演示了如何使用Python计算散点数据的密度并将结果保存到Excel文件。

代码解析:

  1. 首先,代码从Excel文件读取商品的GPS纬度和经度数据,存储在NumPy数组xy中。
  2. 然后,将xy数组合并为一个二维数组points,每一行表示一个点的坐标。
  3. 接着,使用scipy.spatial.KDTree类创建一个KD树对象kdtree,利用KD树可以快速查找最近邻点。
  4. 使用kdtreequery_ball_point方法计算每个点的密度。该方法返回与每个点在给定半径r范围内的所有点的索引。
  5. 通过统计每个点在半径r内的邻居数量,计算出每个点的密度,并将结果存储在density_list列表中。
  6. 最后,创建一个DataFrame对象df_density,将密度列表转换为DataFrame,并将结果保存到Excel文件中。

注意事项:

  • 请根据实际情况修改代码中的文件路径和文件名。
  • 需要安装pandasnumpyscipy库才能运行这段代码。
  • 调整搜索半径r的值可以控制密度的计算范围,r越大,密度计算结果越平滑。

原文地址: https://www.cveoy.top/t/topic/fzNe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录