Maison  >  Article  >  développement back-end  >  Comment classer le contenu de deux tableaux Excel grâce à l'algorithme de correspondance floue Python

Comment classer le contenu de deux tableaux Excel grâce à l'algorithme de correspondance floue Python

王林
王林avant
2023-05-28 08:43:111520parcourir

    1. Description du problème

    Lors du stage, il est nécessaire de faire correspondre et classer le contenu des deux tableaux, comme Deux projets d'ingénierie différents ciblent des objets A, donc ces deux projets d'ingénierie doivent être classés dans A. Il y a beaucoup de projets d'ingénierie et d'objets de construction parmi eux, j'ai donc pensé à écrire un programme. Les regrouper automatiquement peut réduire. beaucoup de travail.

    2. Méthode d'application

    Puisque les deux tables ont des mots-clés similaires, c'est-à-dire que le contenu d'une table est le projet A et le contenu de l'autre table est le projet A . Unité A, alors je dois y faire correspondre le mot-clé "A" pour le filtrer. Dans ce problème, j'ai utilisé un algorithme de correspondance floue pour atteindre mon objectif, mais cet algorithme n'est pas la seule solution possible.

    3. Écriture de code

    Remarque : Ici, nous avons importé la bibliothèque difflib pour utiliser l'algorithme de correspondance floue ; 3.1

    Nous importons d'abord les deux tableaux Excel qui doivent être traités.

    df1=pd.read_excel(r'D:\杂货\项目.xlsx',sheet_name='Sheet1')
    df2=pd.read_excel(r'D:\杂货\项目2.xlsx',sheet_name='Sheet1')#导入两个需要处理的excel表格

    Comment classer le contenu de deux tableaux Excel grâce à lalgorithme de correspondance floue Python Le contenu et le format des deux tableaux sont à peu près comme ci-dessus. Mon exigence est de faire correspondre et classer les projets d'ingénierie liés à ces deux tableaux.

    3.2

    Ensuite, mettez les deux colonnes de données que nous voulons traiter dans une liste.

    for i in df1['XXXXXX改造']:#将这两列的数据存入list1和list2两个列表中
        list1.append(i)
    for j in df2['XXXXXX新改']:
        list2.append(j)

    3.3

    Utilisez l'algorithme de correspondance floue pour faire correspondre le contenu des données de la liste2 avec le contenu des données de la liste1 un par un.

    for n in range(len(list2)):#通过模糊匹配算法,将list2与list1中的数据一一匹配,设置近似度为42%,得到匹配结果res
        query_word=str(list2[n])
        res=difflib.get_close_matches(query_word,list1,1,cutoff=0.42)
        res = "".join(res)
        listx.append(res)

    Il convient de noter que la méthode get_close_matches(query_word,list1,n,cutoff) de la bibliothèque difflib est appelée ici, où query_word est la chaîne correspondante, list1 est le caractère à faire correspondre ; list ; n est le retour des n meilleures correspondances, je l'ai défini sur 1 ; le seuil est le degré de correspondance, qui est un nombre à virgule flottante dans [0,1], qui peut également être appelé le degré de similarité entre les deux. .Cela dépend. En fonction des besoins personnels et des problèmes spécifiques, j'ai défini le niveau de similarité à 0,42, ce qui permet de faire correspondre avec succès le contenu des deux tables que je dois faire correspondre.

    Puisque chaque résultat correspondant à res se présente sous la forme d'une liste et que nous voulons écrire les résultats dans un nouveau tableau, nous avons besoin des résultats sous forme de chaîne, nous utilisons donc res="". join La méthode (res) convertit la liste sous forme de chaîne, puis place le résultat sous forme de chaîne dans la liste listx pour faciliter l'écriture dans une nouvelle table Excel.

    3.4

    Parce que je craignais qu'il manque des résultats correspondants, j'ai fait correspondre le contenu des données de la liste1 avec le contenu des données de la liste2 un par un.

    for m in range(len(list1)):#同上,将list1与list2的数据一一匹配
        query_word=str(list1[m])
        res=difflib.get_close_matches(query_word,list2,1,cutoff=0.42)
        res="".join(res)
        listy.append(res)

    À ce moment, j'ai défini la chaîne correspondante sur la chaîne de la liste1 et la liste des chaînes à faire correspondre à la liste2. Les autres paramètres sont les mêmes, ce qui équivaut à dire que j'utilise en premier. Tableau 1 pour correspondre au formulaire 2, puis utilisez le formulaire 2 pour correspondre au formulaire 1, afin que le problème manquant puisse être mieux résolu.

    3.5

    Enfin définir les paramètres de la nouvelle table Excel

    workbook=xlwt.Workbook(encoding='utf-8')#设定好新的excel表格的参数
    worksheet=workbook.add_sheet('test_sheet')
    worksheet.write(0,0,label='XXX改造')#从第0行第0列开始输入标签为XXX改造的数据
    worksheet.write(0,1,label='XX金额')#从第0行第1列开始输入标签为XX金额的数据
    worksheet.write(0,2,label='XXX新改')
    worksheet.write(0,3,label='XX金额')
    worksheet.write(0,4,label='已XXX金额')
     
    for i in range(len(listx)):#写入运算出来的数据
        worksheet.write(i+1,0,label=listx[i])
    for j in range(len(listy)):
        worksheet.write(j+1,2,label=listy[j])
    for k in range(len(list1)):
        worksheet.write(k+1,1,label=list3[k])
    for l in range(len(list2)):
        worksheet.write(l+1,3,label=list4[l])
        worksheet.write(l+1,4,label=list5[l])
    workbook.save(r'D:\杂货\新项目6.xls')#导出excel表格

    La méthode utilisée ici pour écrire le contenu des données dans la table Excel est juste cela Plus d'introduction, les personnes ayant une certaine expérience dans la manipulation d'Excel peuvent facilement comprendre la signification du code.

    Le format final du tableau de sortie est le suivant :

    Comment classer le contenu de deux tableaux Excel grâce à lalgorithme de correspondance floue Python À travers deux correspondances, celle avec un haut degré d'appariement mutuel apparaîtra dans le tableau en conséquence, et s'il n'y a qu'un seul degré élevé de correspondance, il y aura des données à gauche mais pas de données à droite, ou il y aura des données à droite mais pas de données à gauche.

    4. Collection de codes

    import pandas as pd
    import difflib
    import xlwt#导入库
     
    df1=pd.read_excel(r'D:\杂货\项目.xlsx',sheet_name='Sheet1')
    df2=pd.read_excel(r'D:\杂货\项目2.xlsx',sheet_name='Sheet1')#导入两个需要处理的excel表格
     
    list1=[]#设置空列表,用于存储2017年一列的数据
    list2=[]#用于存储2018年一列的数据
    list3=list(df1['XX金额'])#将excel表格中的列数据列表化
    list4=list(df2['XX金额'])
    list5=list(df2['XXX金额'])
    listx=[]#用于存储匹配结果的数据
    listy=[]#同上
    for i in df1['XXXXXXXXX改造']:#将这两列的数据存入list1和list2两个列表中
        list1.append(i)
    for j in df2['XXXXXXXXXXXXX新改']:
        list2.append(j)
     
    for n in range(len(list2)):#通过模糊匹配算法,将list2与list1中的数据一一匹配,设置近似度为42%,得到匹配结果res
        query_word=str(list2[n])
        res=difflib.get_close_matches(query_word,list1,1,cutoff=0.42)
        res = "".join(res)
        listx.append(res)
     
    for m in range(len(list1)):#同上,将list1与list2的数据一一匹配
        query_word=str(list1[m])
        res=difflib.get_close_matches(query_word,list2,1,cutoff=0.42)
        res="".join(res)
        listy.append(res)
     
    workbook=xlwt.Workbook(encoding='utf-8')#设定好新的excel表格的参数
    worksheet=workbook.add_sheet('test_sheet')
    worksheet.write(0,0,label='XXXXXXXXX改造')
    worksheet.write(0,1,label='XX金额')
    worksheet.write(0,2,label='XXXXXXXXXXX新改')
    worksheet.write(0,3,label='XX金额')
    worksheet.write(0,4,label='XXX金额')
     
    for i in range(len(listx)):#写入运算出来的数据
        worksheet.write(i+1,0,label=listx[i])
    for j in range(len(listy)):
        worksheet.write(j+1,2,label=listy[j])
    for k in range(len(list1)):
        worksheet.write(k+1,1,label=list3[k])
    for l in range(len(list2)):
        worksheet.write(l+1,3,label=list4[l])
        worksheet.write(l+1,4,label=list5[l])
    workbook.save(r'D:\杂货\新项目6.xls')#导出excel表格

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer