Python 数据分析:根据相似性对价值流进行分组

Python 数据分析:根据相似性对价值流进行分组,python,stream,analytics,production,Python,Stream,Analytics,Production,我的同事和我(都是机械工程师)喜欢学习python并解决新的有趣问题 我们的问题:我们想分析我们的组件(>50000)的价值流,并根据其价值流的相似性对它们进行分组 举一个例子——假设我们有三种材料A、B和C,数据如下: A=[6103845210561112200194825633,45] B=[103894621028503] C=[103894621028503112200,45194825633] 每个数组代表一个价值流,每个元素代表价值流中的一台机器。例如,一台机器必须运行5台以上才能

我的同事和我(都是机械工程师)喜欢学习python并解决新的有趣问题

我们的问题:我们想分析我们的组件(>50000)的价值流,并根据其价值流的相似性对它们进行分组

举一个例子——假设我们有三种材料A、B和C,数据如下:

A=[6103845210561112200194825633,45]

B=[103894621028503]

C=[103894621028503112200,45194825633]

每个数组代表一个价值流,每个元素代表价值流中的一台机器。例如,一台机器必须运行5台以上才能生产。“610384”是价值流中第一台机器的编号。正如您所看到的,A和B与C相似,因为B是C的100%子流,但A包含3台相同的机器,但顺序不同

约束条件:

  • 数字没有任何意义->无法根据大小或任何内容进行比较

  • 数组也有不同的长度和元素

  • 数组可以包含子数组,也可以是不同的顺序,等等。一切都是可能的(我们正在展示数据集)

  • 我们可以从上到下对4个级别进行评级:工艺、过程描述、过程描述细节、机器编号->意思是:机器编号10389和462根本不相等,但这两台机器都用于“钻孔”。因此,第2级(流程描述)是相等的。所以,我们可以用这个来给他们打分,不是100%或0%相等,但在这台机器上可能会给他们30%的相似性(不是整个价值流!)

4级示例:手动钻孔(1)->钻孔(2)->90度钻孔(3)->机器编号462(4)

问题:

  • 我们应该如何评价每个价值流?考虑到不同的长度等

  • 我们如何以有用的方式对给定的评分进行聚类

  • 我们是否应该使用合适的算法?我们需要自己定义规则吗?如果是的话,你能推荐一些阅读材料吗

    我们的目标:将类似的价值流分组,这样我们就可以看到我们的价值流高速公路,看看机器是否应该移动


    PS:这是Reddit r/analytics调整后的重新发布,这可能是部分解决方案

    我在评级中使用了以下缩写:

    md-手动钻孔 ,d-钻孔 ,30、45或60-一定程度的钻孔

    1) 机器10389等级:“md-d-90-10389”#手动钻孔+钻孔+90度

    2) 机器462等级:“md-d-45-462”#手动钻孔+钻孔+45度

    import fuzzywuzzy
    from fuzzywuzzy import process
    matches = fuzzywuzzy.process.extract('md-d-90-10389',['md-d-45-462'],scorer=fuzzywuzzy.fuzz.token_sort_ratio)
    print(matches[0][1], '%')
    
    输出: 33%

    有很多方法可以做到这一点,比如余弦相似性或Jaccard相似性。 我们可以先试试这个

    如果相似性大于80%,那么我们只保留两台机器中的一台。 e、 g:让我们只取两个值流A和C。如果521056和10389的相似性为80%,那么我们可以丢弃其他值流,仅用于简化目的。 让我们保持10389

    A=[61038410389112200194825633,45]——将521056替换为10389

    C=[103894621028503112200,45194825633]


    然后我们可以检查A和C之间的余弦相似性,以评估价值流的接近程度。

    谢谢您的帮助。但是,你的答案是不是犯了一个错误,即数字相似的机器的评级比数字不同的机器更接近?举个例子:A=md-d-90-999999B=md-d-90-10389 C=tt-x-50-10388,由于机器编号的高度相似性,B到C可能更相似(什么都没说)。但是B和C的评级应该非常不相似,因为这两种技术完全不同。一种解决方案是在评级比较阶段排除机器名。首先将它们的实际名称存储在字典中以进行引用,然后删除机器名称以进行匹配操作。A=md-d-90,B=md-d-90,C=tt-x-50,在这种情况下,B和C将完全不同。注释中的上述解决方案解决了您的问题吗?