首页 > 解决方案 > 在数据框中搜索模式

问题描述

我有一个巨大的 csv 文件,其中包含有关正在驾驶的自行车的数据。所以我得到了一个以秒为单位的时间列和一个速度列。我想检查数据中的特定模式,以总结路上发生的事情。

例如驶向红绿灯:

到目前为止我得到了这个:

import pandas as pd

df = pd.read_csv('.csv', usecols = ['time', 'speed']) 
df['accelerating'] = df['speed'].diff() > 0

我想要这样的东西:

  df_traffic_light = df.loc[df['speed'] < 15 & accelerating == False #driving torwards the traffic light; 
    & df.loc[df['speed']< 1 #getting really slow or Standing still;
    & df.loc[df['speed']  > 5 & accelerating == True #for light switched to green and starting again 

预期输出:

         time     speed  acceleration
0   5.000         14.0          false
1   7.056         12.0          false
2   10.097         8.0          false
3   12.131         1.0          false
4   14.165         0.0          false
5   16.201         0.0          false
6   18.236         2.0          true 
7   20.267         4.0          true

我用 dataframe.rolling 进行了尝试,但效果不佳。任何想法我如何解决这个问题?

标签: pythonpandasdataframe

解决方案


这个答案可能并不令人满意,但正如你描述的问题,它是不可能解决的。只要您知道某个(子)序列在现实中代表什么,就不可能将数据分割成带标签的类别,例如“驶向红绿灯”等。

除了手动调整逻辑函数、可视化数据并对其进行推理之外,我还看到了机器学习领域的 2 个选项:

  1. 监督学习:您至少需要一些标记数据,算法可以从中学习某些类别的特征。即,您将需要一些您知道它们代表什么的事件,或者通过实验(让 10 个不同的人每个生成 10 倍您想要识别的事件/类别)或通过手动评估数据的(子)序列,可视化和根据您的专业知识来判断它们。该sklearn包包含一些或多或少简单的方法来预测仍然未知的数据的类别,即决策树支持向量机

  2. 无监督学习:您只需搜索特征子序列,而无需先验地知道它们代表什么。sklearn.cluster有一些算法。然后,还取决于您和您的专业知识来查看集群的特征并给它们贴标签。

这两种方法都需要一些努力才能进入它。但我希望它为您指明正确的方向。如果在您的研究过程中出现了您无法找到答案的更具体的问题,请随时提出。


推荐阅读