Python 퍼지 매칭 알고리즘을 통해 두 Excel 테이블의 내용을 분류하는 방법

王林
풀어 주다: 2023-05-28 08:43:11
앞으로
1521명이 탐색했습니다.

    1. 문제 설명

    인턴십 동안 두 테이블의 내용을 일치시키고 분류해야 합니다. 예를 들어 두 개의 서로 다른 엔지니어링 프로젝트가 두 개체 A를 모두 대상으로 한다면 이 두 엔지니어링 프로젝트는 다음과 같아야 합니다. A로 분류되고, 토목공사나 공사물이 꽤 많아서 자동으로 분류해주는 프로그램을 작성하면 작업량을 많이 줄일 수 있겠다는 생각이 들었습니다.

    2. 활용법

    두 테이블의 키워드가 비슷하기 때문에, 즉 한 테이블의 내용은 프로젝트 A이고, 다른 테이블의 내용은 유닛 A이므로 "A"를 바꿔야 합니다. 이 키워드가 일치하면 필터링할 수 있습니다. 이 문제에서는 목표를 달성하기 위해 퍼지 매칭 알고리즘을 사용했지만 이 알고리즘이 유일한 해결책은 아닙니다.

    3. 코드 작성

    참고: 여기서는 퍼지 일치 알고리즘을 사용하기 위한 difflib 라이브러리를 가져왔습니다. xlwt 라이브러리는 Excel 테이블을 내보내기 위한 것입니다.

    3.1

    먼저 처리해야 할 두 개의 Excel 테이블을 가져옵니다.

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

    Python 퍼지 매칭 알고리즘을 통해 두 Excel 테이블의 내용을 분류하는 방법

    두 테이블의 내용과 형식은 대략 위와 같습니다. 내 요구 사항은 이 두 테이블과 관련된 엔지니어링 프로젝트를 일치시키고 분류하는 것입니다.

    3.2

    처리하려는 두 개의 데이터 열을 목록에 넣으세요.

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

    3.3

    퍼지 일치 알고리즘을 사용하여 list2의 데이터 내용을 list1의 데이터 내용과 하나씩 일치시킵니다.

    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)
    로그인 후 복사

    여기에서 difflib 라이브러리의 get_close_matches(query_word,list1,n,cutoff) 메서드가 호출됩니다. 여기서 query_word는 일치하는 문자열이고, list1은 일치할 문자열 목록입니다. n은 이전 Topn입니다. 가장 잘 일치하는 반환값을 1로 설정했습니다. 컷오프는 일치 정도이며, 이는 [0,1]의 부동 소수점 숫자이며 둘 사이의 유사 정도라고도 할 수 있습니다. 이는 개인적인 필요와 특정 문제에 따라 다릅니다. 설정에서 유사성을 0.42로 설정하면 성공적으로 일치시키는 데 필요한 두 테이블의 내용이 일치할 수 있습니다.

    res와 일치하는 모든 결과는 목록 형식이고 결과를 새 테이블에 쓰고 싶기 때문에 문자열 형식의 결과가 필요하므로 res="".join(res ) 목록을 조인하는 방법 문자열 형식으로 변환한 다음 문자열 형식의 결과를 listx 목록에 넣어 새 Excel 테이블에 쉽게 쓸 수 있습니다.

    3.4

    일치하는 결과가 누락될까봐 걱정되어서 list1의 데이터 내용과 list2의 데이터 내용을 하나씩 대조해보았습니다.

    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)
    로그인 후 복사

    이때 일치하는 문자열을 list1의 문자열로 설정하고, 일치할 문자열 목록을 list2로 설정했는데, 다른 매개변수는 동일하며, 이는 먼저 테이블 2를 일치시키기 위해 테이블 ​​1을 사용한다는 것과 같습니다. , 그런 다음 표 2를 사용하여 표 1과 일치시키면 누락된 문제를 더 잘 해결할 수 있습니다.

    3.5

    새 엑셀 테이블의 매개변수를 최종 설정합니다

    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表格
    로그인 후 복사

    여기서 엑셀 테이블에 데이터 내용을 쓰는 방법은 자세히 소개하지 않겠습니다. 엑셀을 좀 다루어본 사람이라면 쉽게 이해할 수 있을 것입니다. 코드.

    최종 출력 테이블 형식은 다음과 같습니다.

    Python 퍼지 매칭 알고리즘을 통해 두 Excel 테이블의 내용을 분류하는 방법

    두 번의 매칭 과정을 통해 상호 매칭도가 높은 항목이 해당 테이블에 나타나고, 일치도가 높은 항목이 하나만 테이블에 나타납니다. 왼쪽에는 데이터 오른쪽에 데이터가 없거나, 오른쪽에는 데이터가 있고 왼쪽에는 데이터가 없습니다.

    4. 코드 수집

    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表格
    로그인 후 복사

    위 내용은 Python 퍼지 매칭 알고리즘을 통해 두 Excel 테이블의 내용을 분류하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:yisu.com
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿