旅行社网站策划,跨境电商怎么做视频教程,长沙企业建,国家企业信用系统查询系统文章目录 基本介绍1. 可视化分析使用Python的matplotlib和Basemap库#xff1a; 2. 统计检验使用Python的scipy库进行Kolmogorov-Smirnov检验#xff1a; 3. 空间分析技术使用Python的geopandas和sklearn库进行核密度估计#xff1a; 调用函数1. 可视化分析函数2. 统计检验函… 文章目录 基本介绍1. 可视化分析使用Python的matplotlib和Basemap库 2. 统计检验使用Python的scipy库进行Kolmogorov-Smirnov检验 3. 空间分析技术使用Python的geopandas和sklearn库进行核密度估计 调用函数1. 可视化分析函数2. 统计检验函数3. 空间分析技术函数 基本介绍
1. 可视化分析
通过绘制数据的分布图可以直观地观察数据是否在空间上均匀分布。
使用Python的matplotlib和Basemap库
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap# 假设数据格式为 [(lat1, lon1), (lat2, lon2), ...]
data [(34.05, -118.25), (40.71, -74.01), (37.77, -122.42), (47.61, -122.33)]# 创建地图
m Basemap(projectionmerc, llcrnrlat-80, urcrnrlat80, llcrnrlon-180, urcrnrlon180, resolutionc)
m.drawcoastlines()
m.drawcountries()
m.drawstates()# 绘制数据点
lats [lat for lat, lon in data]
lons [lon for lat, lon in data]
x, y m(lons, lats)
m.scatter(x, y, 10, markero, colorred)plt.show()2. 统计检验
可以使用统计方法来检验数据的空间分布是否均匀。
使用Python的scipy库进行Kolmogorov-Smirnov检验
from scipy.stats import ks_2samp
import numpy as np# 假设数据格式为 [(lat1, lon1), (lat2, lon2), ...]
data [(34.05, -118.25), (40.71, -74.01), (37.77, -122.42), (47.61, -122.33)]# 提取纬度和经度
lats [lat for lat, lon in data]
lons [lon for lat, lon in data]# 生成均匀分布的随机数据
uniform_lats np.random.uniform(min(lats), max(lats), len(lats))
uniform_lons np.random.uniform(min(lons), max(lons), len(lons))# 进行Kolmogorov-Smirnov检验
ks_lat ks_2samp(lats, uniform_lats)
ks_lon ks_2samp(lons, uniform_lons)print(纬度的KS检验结果, ks_lat)
print(经度的KS检验结果, ks_lon)3. 空间分析技术
可以使用空间分析技术如核密度估计Kernel Density Estimation, KDE来评估数据的分布。
使用Python的geopandas和sklearn库进行核密度估计
import geopandas as gpd
from shapely.geometry import Point
from sklearn.neighbors import KernelDensity
import numpy as np# 假设数据格式为 [(lat1, lon1), (lat2, lon2), ...]
data [(34.05, -118.25), (40.71, -74.01), (37.77, -122.42), (47.61, -122.33)]# 创建GeoDataFrame
geometry [Point(lon, lat) for lat, lon in data]
gdf gpd.GeoDataFrame(geometrygeometry)# 提取坐标
coords np.vstack([gdf.geometry.x, gdf.geometry.y]).T# 进行核密度估计
kde KernelDensity(bandwidth0.05, metriceuclidean)
kde.fit(coords)# 生成网格点
xmin, ymin, xmax, ymax gdf.total_bounds
xx, yy np.meshgrid(np.linspace(xmin, xmax, 100), np.linspace(ymin, ymax, 100))
grid_points np.vstack([xx.ravel(), yy.ravel()]).T# 计算密度
log_density kde.score_samples(grid_points)
density np.exp(log_density).reshape(xx.shape)# 绘制密度图
plt.imshow(density, extent(xmin, xmax, ymin, ymax), originlower, cmapviridis)
plt.colorbar()
plt.scatter(coords[:, 0], coords[:, 1], cred, s10)
plt.show()调用函数
1. 可视化分析函数
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemapdef plot_spatial_distribution(data):绘制数据的空间分布图:param data: 包含经纬度坐标的数据列表格式为 [(lat1, lon1), (lat2, lon2), ...]# 创建地图m Basemap(projectionmerc, llcrnrlat-80, urcrnrlat80, llcrnrlon-180, urcrnrlon180, resolutionc)m.drawcoastlines()m.drawcountries()m.drawstates()# 绘制数据点lats [lat for lat, lon in data]lons [lon for lat, lon in data]x, y m(lons, lats)m.scatter(x, y, 10, markero, colorred)plt.show()# 示例调用
data [(34.05, -118.25), (40.71, -74.01), (37.77, -122.42), (47.61, -122.33)]
plot_spatial_distribution(data)2. 统计检验函数
from scipy.stats import ks_2samp
import numpy as npdef perform_ks_test(data):对数据进行Kolmogorov-Smirnov检验判断其空间分布是否均匀:param data: 包含经纬度坐标的数据列表格式为 [(lat1, lon1), (lat2, lon2), ...]:return: 纬度和经度的KS检验结果# 提取纬度和经度lats [lat for lat, lon in data]lons [lon for lat, lon in data]# 生成均匀分布的随机数据uniform_lats np.random.uniform(min(lats), max(lats), len(lats))uniform_lons np.random.uniform(min(lons), max(lons), len(lons))# 进行Kolmogorov-Smirnov检验ks_lat ks_2samp(lats, uniform_lats)ks_lon ks_2samp(lons, uniform_lons)return ks_lat, ks_lon# 示例调用
data [(34.05, -118.25), (40.71, -74.01), (37.77, -122.42), (47.61, -122.33)]
ks_lat, ks_lon perform_ks_test(data)
print(纬度的KS检验结果, ks_lat)
print(经度的KS检验结果, ks_lon)3. 空间分析技术函数
import geopandas as gpd
from shapely.geometry import Point
from sklearn.neighbors import KernelDensity
import numpy as np
import matplotlib.pyplot as pltdef perform_kde(data):对数据进行核密度估计评估其空间分布:param data: 包含经纬度坐标的数据列表格式为 [(lat1, lon1), (lat2, lon2), ...]# 创建GeoDataFramegeometry [Point(lon, lat) for lat, lon in data]gdf gpd.GeoDataFrame(geometrygeometry)# 提取坐标coords np.vstack([gdf.geometry.x, gdf.geometry.y]).T# 进行核密度估计kde KernelDensity(bandwidth0.05, metriceuclidean)kde.fit(coords)# 生成网格点xmin, ymin, xmax, ymax gdf.total_boundsxx, yy np.meshgrid(np.linspace(xmin, xmax, 100), np.linspace(ymin, ymax, 100))grid_points np.vstack([xx.ravel(), yy.ravel()]).T# 计算密度log_density kde.score_samples(grid_points)density np.exp(log_density).reshape(xx.shape)# 绘制密度图plt.imshow(density, extent(xmin, xmax, ymin, ymax), originlower, cmapviridis)plt.colorbar()plt.scatter(coords[:, 0], coords[:, 1], cred, s10)plt.show()# 示例调用
data [(34.05, -118.25), (40.71, -74.01), (37.77, -122.42), (47.61, -122.33)]
perform_kde(data)–
*本文思路可行性有待讨论目前仅供参考请酌情使用