数据集中的Python模式识别

时间:2017-12-22 03:22:21

标签: python

我在pandas dataframe中有一些测试结果。它们是'通过'(1)或'失败'(0),如下图所示。我有兴趣检测图案,例如线条(以黄色突出显示),圆圈等。

我知道我可以定义一些规则来连续计算具有相同列数/行数的数量,并且意识到它可能并不像我想象的那么简单。此外,我想检查是否有任何类似的工作,所以我不必重新发明轮子。任何建议将不胜感激。谢谢!

enter image description here

2 个答案:

答案 0 :(得分:1)

如果您的数据矩阵为1 = pass,0 =失败,则可以很容易地将其转换为二进制图像(白色= 1,黑色= 0)。这将开放使用图像处理中的一些技术来进行数据搜索,因为您正在寻找表示一定长度1的运行的形状(线和圆)。

您可以使用Python OpenCV库及其实现的一些技术,例如Hough变换以查找线条,以及轮廓检测以查找由1的运行形成的形状。例如,可以在此链接中找到指向轮廓检测教程的链接:https://docs.opencv.org/3.1.0/d4/d73/tutorial_py_contours_begin.html。旧版OpenCV的另一个例子是https://docs.opencv.org/2.4/doc/tutorials/imgproc/shapedescriptors/find_contours/find_contours.html。还有许多其他可搜索的资源可以帮助您开始在二进制图像中进行直线和轮廓检测。

通过这种方式,您可以搜索数据集矩阵,转换为二进制图像,以查找满足某些条件的数据集(例如,由长度大于某个阈值的行形成的行数/形状数)。 p>

答案 1 :(得分:0)

可以找到是否有任何模式 例如,对于一条直线,使长度为固定,如果元素= 1,则为右循环,然后查找下一个5个元素是否为1,然后在列[:]之间找到直线并打破循环 如果它是一个圆形做一个for循环并检查元素是否为1并搜索该行中的下一个元素以及所有元素如何形成一个圆

0110 1001 0110 打印圆圈被发现并打破 设计你如何使用模式并右转为循环来相应地找到它 例如

for each in column:
    if each==1:
        index=column.find(each)
        if column[index+1]==1:
            if column[index+1]==1:

重复它你想要的长度