AIS数据聚类并展示到地图上的python代码
时间: 2023-06-10 10:08:12 浏览: 153
以下是使用Python和一些常用库来进行AIS数据聚类并展示到地图上的示例代码:
```python
import pandas as pd
import folium
from folium.plugins import MarkerCluster
# 读取AIS数据
ais_data = pd.read_csv('ais_data.csv')
# 聚类
marker_cluster = MarkerCluster().add_to(map)
for data in ais_data:
# 将经纬度坐标转换为float类型
lat = float(data['latitude'])
lon = float(data['longitude'])
# 将船只名称作为标记
tooltip = data['ship_name']
# 创建标记
folium.Marker([lat, lon], tooltip=tooltip).add_to(marker_cluster)
# 创建地图并展示
map = folium.Map(location=[30, 120], zoom_start=5)
map.save('ais_map.html')
```
这个代码示例使用了Pandas库来读取AIS数据,然后使用Folium库来创建地图和标记。最后,通过保存HTML文件来展示聚类后的AIS数据地图。
相关问题
AIS数据聚类并展示到世界地图上的python代码
以下是一个简单的Python代码示例,可以使用KMeans算法对AIS数据进行聚类,并将结果可视化到世界地图上:
```python
import pandas as pd
import numpy as np
import folium
from sklearn.cluster import KMeans
# 读取AIS数据(例如从CSV文件中读取)
ais_data = pd.read_csv('ais_data.csv')
# 准备数据 - 提取需要聚类的数据列
X = ais_data[['latitude', 'longitude']].values
# 使用KMeans算法进行聚类
kmeans = KMeans(n_clusters=5).fit(X)
# 将聚类结果添加到原始数据帧中
ais_data['cluster'] = kmeans.labels_
# 创建地图并添加标记
world_map = folium.Map(location=[0, 0], zoom_start=2)
colors = ['red', 'green', 'blue', 'purple', 'orange']
for i, row in ais_data.iterrows():
folium.CircleMarker(
location=[row['latitude'], row['longitude']],
radius=5,
color=colors[row['cluster']],
fill=True,
fill_color=colors[row['cluster']]
).add_to(world_map)
# 显示地图
world_map
```
在上面的代码中,我们首先使用Pandas从CSV文件中读取AIS数据。然后,我们从数据中提取需要聚类的列,并使用`sklearn`库中的KMeans算法进行聚类。
接下来,我们将聚类结果添加回到原始数据帧中,并使用`folium`库创建一个世界地图。最后,我们遍历每个数据点,并根据其所属的聚类将其添加到地图中。
注意,这只是一个简单的示例,实际上,您需要对数据进行更多的预处理和清理,以及对KMeans算法进行更多的调整和优化。
AIS数据集轨迹聚类代码
以下是一个基于Python的AIS数据集轨迹聚类代码示例:
```python
import pandas as pd
from sklearn.cluster import DBSCAN
from geopy.distance import great_circle
from shapely.geometry import MultiPoint
# 读取AIS数据集
ais_data = pd.read_csv('ais_data.csv')
# 将经纬度数据转换为点
coords = ais_data[['latitude', 'longitude']].values
points = [tuple(x) for x in coords]
# 计算聚类半径
kms_per_radian = 6371.0088
epsilon = 0.5 / kms_per_radian
# 使用DBSCAN算法进行聚类
db = DBSCAN(eps=epsilon, min_samples=3, algorithm='ball_tree', metric='haversine').fit(np.radians(points))
cluster_labels = db.labels_
# 将聚类结果添加到数据集中
ais_data['cluster'] = cluster_labels
# 获取每个簇的中心点
cluster_centers = pd.DataFrame(columns=['latitude', 'longitude'])
for cluster in set(cluster_labels):
if cluster == -1:
continue
# 获取簇中所有点的经纬度坐标
cluster_points = coords[cluster_labels == cluster]
# 计算这些点的中心点
centermost_point = MultiPoint(cluster_points).centroid
# 添加中心点到cluster_centers
cluster_centers.loc[cluster] = [centermost_point.x, centermost_point.y]
# 将聚类结果写入文件
ais_data.to_csv('ais_data_clustered.csv', index=False)
cluster_centers.to_csv('ais_data_cluster_centers.csv', index=False)
```
这个代码使用了DBSCAN算法对AIS数据集中的轨迹进行聚类,并将聚类结果写入文件。聚类半径通过计算每个点之间的距离来确定,聚类结果使用簇的中心点表示。
阅读全文