Python and anaconda
实验三数据预处理和轨迹聚类参考地址:
https://www.hifleet.com/wp/communities/data/hangyundashujujishukechengshiyanzhinanshujuyuchulijiguijijuleichixugengxinzhong#post-2212
https://www.hifleet.com/wp/communities/data/hangyundashujujishukechengshiyanzhinanshujuyuchulijiguijijuleichixugengxinzhong#post-2025
相关anaconda以及python环境配置
https://blog.csdn.net/hold_time/article/details/144631254?spm=1001.2014.3001.5501
1.Python环境配置
1.1下载anaconda,Pycharm
1.2Pycharm虚拟环境创建
到这里anaconda环境已经创建好了,并且能够在终端环境下进行conda。可以看到的是已经pycharm终端已经为anaconda环境了,python解释器也是默认到该虚拟环境下的python.exe解释器
1.3 conda基本操作
1.3.1 信息查看
conda info -e
1.3.2 下载源修改为清华源
修改镜像源为下图所示,不然下载速度很慢:
这个可以查看conda的镜像源
conda config --show channels
给conda添加国内镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/condaconda config --add channels forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
1.3.3 虚拟环境创建,开启,关闭
在base的conda虚拟环境中可以创建虚拟conda环境
conda create -n yolov11
这边也可以修改为指定位置创建
注意win11默认生成的虚拟环境在C:\Users\Admin.conda\envs下
如果想要创建虚拟环境再指定的文件位置,使用以下命令,比如我想在D盘中的.conda/envs路径下创建虚拟环境
conda create --prefix=D:/.conda/envs/yolov11 python=3.9
或者
conda create --p D:/.conda/envs/yolov11 python=3.9
激活conda环境
conda activate D:/.conda/envs/yolov11
移除conda 环境
conda remove --p D:/.conda/envs/yolov11 --all
这是时候环境名就是这个路径D:/.conda/envs/yolov11
虚拟环境开启与关系
conda activate anaconda_env_foryolov11
虚拟环境关闭
conda deactivate
虚拟环境移除
移除conda 环境
conda remove yolov11
2.数据预处理
AIS数据,584,463行,涉及1000个不同航次下的298条船的轨迹数据,,除了表提供的动态字段,还包含voyage_id和length,
分别是航次编号和船舶长度
通过QGIS显示去噪前显示,通过QGIS进行Point to path,依照这个船舶的id,voyage_id进行连接成线,如下图所示
再Clean.py下面增加以下代码
if __name__ == "__main__":
sample_ais_path="sample_ais_15.csv"
sample_ais=pd.read_csv(sample_ais_path,usecols=["mmsi","updatetime","lon","lat","course","speed","length","voyage_id"])
#print(sample_ais)
sample_ais["updatetime"]=pd.to_datetime(sample_ais["updatetime"])#把ais中的updatetime列读取过来的数据转换成datatime格式
preprocess_lst=[]#预处理为空
for name,group in sample_ais.groupby("voyage_id"):#按照船舶的id进行分组排序
#其中name是组的值,也就是voyage_id,group是书每组的数据帧
group = group.reset_index(drop=True)
#移除重复行
group = group.drop_duplicates(subset=["lon","lat","course","speed"],keep="last").reset_index(drop=True)
#速度speed明显异常的数据超过30标记为nan
group.loc[group[group["speed"] > 30].index, "speed"] = np.nan
# group["speed"] = group.groupby("voyage_id")["speed"].transform(lambda x: x.fillna(method="ffill"))
group["speed"] = group.groupby("voyage_id")["speed"].transform(lambda x: x.ffill())
preprocess_lst.append(group)
preprocess_ais=pd.concat(preprocess_lst).reset_index(drop=True)
preprocess_ais.to_csv('preprocess_ais.csv', index=False)
处理后为584,139行
2.1 轨迹分段
分段前
分段后
2.2 去噪
去噪后
2.3 压缩
3.聚类
聚类族
"voyage_id" ||'_'||"label"
regexp_substr("group",'_([a-z]+)')
效果如图所示