我正在处理数据集,这些数据集为我提供拖拉机覆盖路径的 GPS 坐标(纬度和经度)(.csv 格式)。我想将字段和路径与数据分开(引用下图)。
示例数据集:https://drive.google.com/open?id=1rVNbkuJuPmcGUzQI9NhKwYJPgcEeypq3
Plot of my Data
Plot Explained
这是读取 csv 并绘制它的代码,
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
path = r"data_stackoverflow.csv" #importing Data
df = pd.read_csv(path) #Read .csv to a pandas dataframe
latitude = df.Latitude.tolist() #convert the column Latitude to list, latitude
longitude = df.Longitude.tolist() #convert the column Longitude to list, longitude
coordinates=list(zip(latitude, longitude))
arr = np.array(coordinates) #numpy array of all points
x=arr[:,[0]]
y=arr[:,[1]]
plt.title("GPS Data Visualized")
plt.xlabel("Latitude")
plt.ylabel("Longitude")
plt.plot(x,y)
plt.scatter(x,y)
我的问题
如何将路径与字段分开?是否有任何特定的算法可以这样做?
我尝试在数据集上实现 DBSCAN,但结果并不总是准确的。
我的结果应该是什么
我想要一个数据框作为结果,它必须只给我字段数据点。
我的结果图应该看起来像这样(仅限字段),
Sample Result
我认为我们可以将属于字段路径的点视为 outliers .
演示:
from sklearn.ensemble import IsolationForest
out = IsolationForest(n_estimators=200, contamination="auto", behaviour="new")
df["x"] = out.fit_predict(df[["Latitude", "Longitude"]])
mask = df["x"] == 1
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, sharey=True, figsize=(10, 10))
ax1.plot(df["Longitude"], df["Latitude"], linewidth=1)
ax2.plot(df.loc[mask, "Longitude"], df.loc[mask, "Latitude"], linewidth=1)
我是一名优秀的程序员,十分优秀!