聚类Clustering方法定位船舶站点

news/2024/11/19 20:17:09/

背景

现有船舶的航线中采样的数据库,采样的总时长为3个月,仅采样航速静止(小于1节)的数据,关键有效数据主要有经纬度/实时吃水量。

思路

基于站点附近轮船有停靠且航行速度慢,故取样点多的基础认识,计划使用聚类方法定位LNG站点位置,并基于船舶吃水量的变化判断站点的属性:进口/出口/停泊。

Step 1: 数据预处理

基于原始数据文件中的关键数据,分别对应经度(long)、纬度(lati)、吃水量(draft)。数据中相邻若干行两两之间若基于经纬度计算得到的距离小于5千米,则将这些数据视为同一个坐标点,位置信息存在取样误差,位置信息(经度、维度)取均值得到;若相邻行计算距离大于5km,则两个数据视为不同的有效坐标点。至此,位置信息处理完毕,后续基于吃水量变化情况判断船只行为。如果吃水量变大,则船只货物增多,标记为1,表示进站;反之如果吃水量减小,则船只货物减少,标记为-1,表示出站;若吃水量不变,则船只货物不变,标记为0,即船只正常航行或停泊。本段具体代码如下所示,

for i in range(len(df)):  cur_pt = [df.loc[i, attr] for attr in attr_list]# 5000m / 5kmif haversine_distance(cur_pt,temp_pt) < 5: # not include into data, the position of adjacent line (in df) is so close, that regard it as the same positionavg_pt[0] += cur_pt[0]avg_pt[1] += cur_pt[1]if cur_pt[2] != 0: # draft != 0 draft_valid.append(cur_pt[2])temp_pt = cur_ptcount += 1else: # include into dataif count != 0:data['long'].append(avg_pt[0] / count)data['lati'].append(avg_pt[1] / count)if len(draft_valid)>0:dif = draft_valid[-1]-draft_valid[0]if(dif>1): data['behavior'].append(1) # more carriage, 1 elif(dif<-1):data['behavior'].append(-1) # less carriage, -1else:data['behavior'].append(0) # carriage unchanged else:data['behavior'].append(0)count = 0avg_pt = [0,0]temp_pt = cur_ptdraft_valid = []

可视化结果如下所示,

 

Step 2: 聚类算法

在得到航迹中不同坐标的行为之后,计划采用聚类方法计算LNG站点位置。下面简要介绍各个算法的细节以及参数设置。

算法1:DBSCAN

DBSCAN定义的簇可以是任意形状,每个簇由一组彼此接近的核心样本组成。簇之外是一组与核心样本接近的非核心样本。定义核心样本的方式是数据集中一个样本的eps距离范围内,存在min_samples 个其他样本。任何不是核心样本并且和任意一个核心样本距离都大于eps 的样本将被视为异常值。min_samples取值越高或eps取值越低都表示形成簇的密度越高。

times = []
for i in range(10): # Simulate for 10 times, and calculate the average run time  start_time = time.time()# Model Training clustering_dbscan = DBSCAN(eps=0.05, min_samples=3).fit(coord) run_time = time.time() - start_time # Unit: s times.append(run_time)
dic = results_process(clustering_dbscan, data, "DBSCAN", results_folder)
print("\nDBSCAN, which costs {:.4f} seconds (in average) for model fitting.".format(sum(times)/len(times)))
print("Amount of Stations / Central Points in clustering = ", len(set(clustering_dbscan.labels_)) - (1 if -1 in clustering_dbscan.labels_ else 0))
print("In detail,")
print("\tAmount of LNG import stations = ", len(dic["import"]))
print("\tAmount of LNG export stations = ", len(dic["export"]))
print("\tAmount of mooring stations = ", len(dic["mooring"]))

算法2:OPTICS

OPTICS算法是DBSCAN算法的推广,基本思路一致,主要变化是将eps从取值放宽至某个范围。因为OPTICS的eps为一个范围,所以计算拟合数据的时间远超DBSCAN算法。

算法3:AGNES

AGNES属于层次聚类方法,采用自底向上的策略,最初将每个对象作为一个簇,然后簇根据准则逐步合并,两个簇间的距离由两个簇中距离最短的数据点的相似度确定,合并过程不断反复进行直到所有对象满足簇数目n_clusters。结合本例实际,n_clusters设为650,探索不同数目的LNG站点分布,并兼顾模型性能。

聚类定位LNG站点的实验结果如下所示, 包含DBSCAN、OPTICS、AGNES三种聚类算法拟合数据效率、LNG站点的各项统计数据

基于AGNES聚类算法得到的LNG站点的可视化结果和json存档文件(部分)如下所示,

 

 后续工作

后续可以基于现有库定位站点的所属国家或地区。


http://www.ppmy.cn/news/491248.html

相关文章

Tomcat及项目部署

一、Tomcat是什么&#xff1f; Tomcat 是基于 Java 实现的⼀个开源免费, 也是被⼴泛使⽤的 HTTP 服务器。 二、下载安装 官⽅⽹站&#xff1a;https://tomcat.apache.org/ 选择其中的 zip 压缩包, 下载后解压缩即可. 解压缩的⽬录最好不要带 "中⽂" 或者 特殊符号…

Window 7 查看电脑网卡是千兆还是百兆

右键点击计算机–>管理–>设备管理器–>点击“网络适配器”左侧的三角形&#xff0c;会列出所有网卡&#xff0c;如果网卡名字中有Gigabit、GBE&#xff0c;10/100/1000M、RTL8196等字样&#xff0c;说明是千兆网卡。否则就是百兆网卡。

win7网络计算机和设备,Win7电脑修改网卡配置连接千兆网络的方法是什么?

目前有很多的电脑都是使用realtek网卡的&#xff0c;当时奇怪的是网卡连接到h3或者d-link千兆交换机的时候&#xff0c;那么网速就会变得非常缓慢&#xff0c;网速直接下降到100兆或者10兆&#xff0c;想要实现千兆的连接就需要重启计算机才可以。想要直接连接千兆网速&#xf…

8153网卡linux驱动,绿联Type-c千兆网卡RTL8153驱动

绿联Type-c千兆网卡RTL8153驱动是专门给苹果笔记本电脑和台式准备的一个网卡设备&#xff0c;提供给大家驱动安装&#xff0c;这个网卡是支持千兆的&#xff0c;非常强大&#xff01; 用户评价 果然还是有线的靠谱 用来链ns 之前wifi总是断线 现在网速基本是之前的3倍 主要是上…

CMD查看电脑网卡是否支持千兆

问题表象&#xff1a;家里宽带升级200M&#xff0c;但是用笔记本直连网络测速后速度仍然是100M的宽带 问题原因&#xff1a;笔记本的有线网卡只支持100M宽带&#xff08;wifi支持速度较高&#xff09; 解决方法&#xff1a;将千兆口连接一个千兆路由器&#xff0c;进行路由器…

设置本计算机win7的网络参数,win7系统看电脑网卡是千兆还是百兆的设置教程

win7系统使用久了&#xff0c;好多网友反馈说win7系统看电脑网卡是千兆还是百兆的问题&#xff0c;非常不方便。有什么办法可以永久解决win7系统看电脑网卡是千兆还是百兆的问题&#xff0c;面对win7系统看电脑网卡是千兆还是百兆的图文步骤非常简单&#xff0c;只需要1、首先在…

【小技巧】如何查看自己电脑网卡是否是千兆网卡

最近有很多小伙伴问我如何查看自己电脑是否支持千兆&#xff0c;这里我教大家一个简单方法。 第一步&#xff1a;打开网络和信息中心&#xff0c;找到自己的物理网卡&#xff0c;然后双击打开&#xff1b; 第二步&#xff1a;在打开的以太网状态对话框中单击“属性”按钮&…

开源智能相机- Xilinx Zynq-7000高清图像处理模块

Zynq-7000图像处理模块设计资料保存&#xff1a;开源智能相机- Xilinx Zynq-7000高清图像处理模块 一、产品概述 Z-turn Board是一款以Xilinx Zynq-7010/7020全可编程系统级芯片的嵌入式开发板。ARM处理器和FPGA架构紧密集成。拥有双核ARM Cortex-A9 MPCore的高性能&a…