采用 K-Means 聚类算法分析 GPS 轨迹

简介: 本文基于K-Means 聚类算法分析 GPS 轨迹,并给出数据集和详细代码

数据集来源Geolife

加载数据

importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspdimportosfrommatplotlib.colorsimportrgb2hexfromshapely.geometryimportMultiPointfromgeopy.distanceimportgreat_circlefromsklearn.clusterimportKMeansfromsklearn.clusterimportDBSCANuserdata='../Lab-work/Geolife Trajectories 1.3/Data/001/Trajectory/'filelist=os.listdir(userdata)
names= ['lat','lng','zero','alt','days','date','time']
df_list= [pd.read_csv(userdata+f,header=6,names=names,index_col=False) forfinfilelist]  
df=pd.concat(df_list, ignore_index=True)
print(df.head(10))
plt.plot(df.lat, df.lng)
         lat         lng  zero  alt          days        date      time
0  39.984198  116.319322     0  492  39744.245208  2008-10-23  05:53:06
1  39.984224  116.319402     0  492  39744.245266  2008-10-23  05:53:11
2  39.984211  116.319389     0  492  39744.245324  2008-10-23  05:53:16
3  39.984217  116.319422     0  491  39744.245382  2008-10-23  05:53:21
4  39.984710  116.319865     0  320  39744.245405  2008-10-23  05:53:23
5  39.984674  116.319810     0  325  39744.245463  2008-10-23  05:53:28
6  39.984623  116.319773     0  326  39744.245521  2008-10-23  05:53:33
7  39.984606  116.319732     0  327  39744.245579  2008-10-23  05:53:38
8  39.984555  116.319728     0  324  39744.245637  2008-10-23  05:53:43
9  39.984579  116.319769     0  309  39744.245694  2008-10-23  05:53:48
[<matplotlib.lines.Line2D at 0x17efc43eac8>]

39eBMn.png

K-Means

coords=df[['lat','lng']].valuesn_clusters=100cls=KMeans(n_clusters).fit(coords)
colors=tuple([(np.random.random(),np.random.random(), np.random.random()) foriinrange(n_clusters)])
colors= [rgb2hex(x) forxincolors]
fori, colorinenumerate(colors):
members=cls.labels_==iplt.scatter(coords[members, 0], coords[members, 1], s=60, c=color, alpha=0.5)
plt.show()

39mlYF.png

获取 K-Means 聚类结果

cluster_labels=cls.labels_num_clusters=len(set(cluster_labels) -set([-1]))
print('Clustered '+str(len(df_min)) +' points to '+str(num_clusters) +' clusters')
clusters=pd.Series([coords[cluster_labels==n] forninrange(num_clusters)])
print(clusters)
Clustered 9045 points to 100 clusters
0     [[40.014459, 116.305603], [40.014363, 116.3056...
1     [[39.975246000000006, 116.358976], [39.975244,...
2     [[40.001312, 116.193358], [40.001351, 116.1932...
3     [[39.984559000000004, 116.326696], [39.984669,...
4     [[39.964969, 116.434923], [39.964886, 116.4350...
                            ...                        
95    [[40.004549, 116.260581], [40.004515999999995,...
96    [[39.97964, 116.323856], [39.979701, 116.32396...
97    [[40.0009, 116.23948500000002], [40.000831, 11...
98    [[39.962336, 116.32817800000001], [39.96223300...
99    [[39.9663, 116.353677], [39.966291999999996, 1...
Length: 100, dtype: object

获取每个群集的中心点

defget_centermost_point(cluster):
centroid= (MultiPoint(cluster).centroid.x, MultiPoint(cluster).centroid.y)
centermost_point=min(cluster, key=lambdapoint: great_circle(point, centroid).m)
returntuple(centermost_point)
centermost_points=clusters.map(get_centermost_point)
lats, lons=zip(*centermost_points)
rep_points=pd.DataFrame({'lon':lons, 'lat':lats})
print(rep_points)
           lon        lat
0   116.306558  40.013751
1   116.353295  39.975357
2   116.190167  40.004290
3   116.326944  39.986492
4   116.438241  39.961273
..         ...        ...
95  116.256309  40.004774
96  116.326462  39.978752
97  116.232672  39.998630
98  116.328847  39.958271
99  116.358655  39.966451
[100 rows x 2 columns]

描绘中心点

fig, ax=plt.subplots(figsize=[10, 6])
rs_scatter=ax.scatter(rep_points['lon'][0], rep_points['lat'][0], c='#99cc99', edgecolor='None', alpha=0.7, s=450)
ax.scatter(rep_points['lon'][1], rep_points['lat'][1], c='#99cc99', edgecolor='None', alpha=0.7, s=250)
ax.scatter(rep_points['lon'][2], rep_points['lat'][2], c='#99cc99', edgecolor='None', alpha=0.7, s=250)
ax.scatter(rep_points['lon'][3], rep_points['lat'][3], c='#99cc99', edgecolor='None', alpha=0.7, s=150)
df_scatter=ax.scatter(df_min['lng'], df_min['lat'], c='k', alpha=0.9, s=3)
ax.set_title('Full GPS trace vs. DBSCAN clusters')
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
ax.legend([df_scatter, rs_scatter], ['GPS points', 'Cluster centers'], loc='upper right')
labels= ['cluster{0}'.format(i) foriinrange(1, num_clusters+1)]
forlabel, x, yinzip(labels, rep_points['lon'], rep_points['lat']):
plt.annotate(                                                
label,
xy= (x, y), xytext= (-25, -30),
textcoords='offset points', ha='right', va='bottom',
bbox=dict(boxstyle='round,pad=0.5', fc='white', alpha=0.5),
arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0'))
plt.show()

39n7CD.png

目录
打赏
0
0
0
0
2
分享
相关文章
别急着上算法,咱先把数据整明白:大数据分析的5个基本步骤,你都搞对了吗?
别急着上算法,咱先把数据整明白:大数据分析的5个基本步骤,你都搞对了吗?
116 4
员工行为监控软件中的 Go 语言哈希表算法:理论、实现与分析
当代企业管理体系中,员工行为监控软件已逐步成为维护企业信息安全、提升工作效能的关键工具。这类软件能够实时记录员工操作行为,为企业管理者提供数据驱动的决策依据。其核心支撑技术在于数据结构与算法的精妙运用。本文聚焦于 Go 语言中的哈希表算法,深入探究其在员工行为监控软件中的应用逻辑与实现机制。
103 14
境内深度合成服务算法备案通过名单分析报告
本报告基于《境内深度合成服务算法备案通过名单》,分析了2023年6月至2025年3月公布的10批备案数据,涵盖属地分布、行业应用及产品形式等多个维度。报告显示,深度合成算法主要集中于经济发达地区,如北京、广东、上海等地,涉及教育、医疗、金融、娱乐等多行业。未来趋势显示技术将向多模态融合、行业定制化和安全合规方向发展。建议企业加强技术研发、拓展应用场景、关注政策动态,以在深度合成领域抢占先机。此分析旨在为企业提供参考,助力把握技术发展机遇。
境内深度合成服务算法备案通过名单分析报告
从公布的前十一批其他算法备案通过名单分析
2025年3月12日,国家网信办发布算法备案信息,深度合成算法通过395款,其他算法45款。前10次备案中,深度合成算法累计3234款,其他类别647款。个性化推送类占比49%,涵盖电商、资讯、视频推荐;检索过滤类占31.53%,用于搜索优化和内容安全;调度决策类占9.12%,集中在物流配送等;排序精选类占8.81%,生成合成类占1.55%。应用领域包括电商、社交媒体、物流、金融、医疗等,互联网科技企业主导,技术向垂直行业渗透,内容安全和多模态技术成新增长点。未来大模型检索和多模态生成或成重点。
从公布的前十一批其他算法备案通过名单分析
从第十批算法备案通过名单中分析算法的属地占比、行业及应用情况
2025年3月12日,国家网信办公布第十批深度合成算法通过名单,共395款。主要分布在广东、北京、上海、浙江等地,占比超80%,涵盖智能对话、图像生成、文本生成等多行业。典型应用包括医疗、教育、金融等领域,如觅健医疗内容生成算法、匠邦AI智能生成合成算法等。服务角色以面向用户为主,技术趋势为多模态融合与垂直领域专业化。
从第九批深度合成备案通过公示名单分析算法备案属地、行业及应用领域占比
2024年12月20日,中央网信办公布第九批深度合成算法名单。分析显示,教育、智能对话、医疗健康和图像生成为核心应用领域。文本生成占比最高(57.56%),涵盖智能客服、法律咨询等;图像/视频生成次之(27.32%),应用于广告设计、影视制作等。北京、广东、浙江等地技术集中度高,多模态融合成未来重点。垂直行业如医疗、教育、金融加速引入AI,提升效率与用户体验。
基于WOA鲸鱼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB 2022a/2024b实现,采用WOA优化的BiLSTM算法进行序列预测。核心代码包含完整中文注释与操作视频,展示从参数优化到模型训练、预测的全流程。BiLSTM通过前向与后向LSTM结合,有效捕捉序列前后文信息,解决传统RNN梯度消失问题。WOA优化超参数(如学习率、隐藏层神经元数),提升模型性能,避免局部最优解。附有运行效果图预览,最终输出预测值与实际值对比,RMSE评估精度。适合研究时序数据分析与深度学习优化的开发者参考。
基于PSO粒子群优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB2022a/2024b开发,结合粒子群优化(PSO)算法与双向长短期记忆网络(BiLSTM),用于优化序列预测任务中的模型参数。核心代码包含详细中文注释及操作视频,涵盖遗传算法优化过程、BiLSTM网络构建、训练及预测分析。通过PSO优化BiLSTM的超参数(如学习率、隐藏层神经元数等),显著提升模型捕捉长期依赖关系和上下文信息的能力,适用于气象、交通流量等场景。附有运行效果图预览,展示适应度值、RMSE变化及预测结果对比,验证方法有效性。
基于遗传算法的256QAM星座图的最优概率整形matlab仿真,对比优化前后整形星座图和误码率
本内容展示了基于GA(遗传算法)优化的256QAM概率星座整形(PCS)技术的研究与实现。通过Matlab仿真,分析了优化前后星座图和误码率(BER)的变化。256QAM采用非均匀概率分布(Maxwell-Boltzman分布)降低外圈星座点出现频率,减小平均功率并增加最小欧氏距离,从而提升传输性能。GA算法以BER为适应度函数,搜索最优整形参数v,显著降低误码率。核心程序实现了GA优化过程,包括种群初始化、选择、交叉、变异等步骤,并绘制了优化曲线。此研究有助于提高频谱效率和传输灵活性,适用于不同信道环境。
41 10

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问